diff --git a/README.md b/README.md index e31cbdf..66fc6ec 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ -

-Download from GitHub -GH Discussions -Telegram chat RU -

- # Statusmap panel for Grafana -![Statusmap sample panel](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/flant-statusmap-panel.png) +[![Download from GitHub](https://img.shields.io/github/tag-date/flant/grafana-statusmap.svg?logo=github&label=latest)](https://github.com/flant/grafana-statusmap/releases/latest) +[![GH Discussions](https://img.shields.io/badge/GitHub-discussions-brightgreen)](https://github.com/flant/grafana-statusmap/discussions) +[![Telegram chat RU](https://img.shields.io/badge/@statusmap_ru-RU-informational.svg?logo=telegram)](https://t.me/statusmap_ru) -![Statusmap sample panel with dark theme](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/flant-statusmap-panel-dark.png) +Panel to show discrete statuses of multiple targets over time. + +![Statusmap sample panel](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/flant-statusmap-panel.png) + +![Statusmap sample panel with dark theme](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/flant-statusmap-panel-dark.png) ## Features @@ -27,21 +27,28 @@ - Prometheus - InfluxDB - Mysql -* Tested with Grafana: - - 7.0, 7.1, 7.2, 7.3 - - 6.6, 6.7 +* Supported Grafana versions: + - 6.7+ are the most priority (6.7, 7.0-7.4) + - also works in 5.4.3 and 6.0+ ## Installation -Plugin can be installed with GF_INSTALL_PLUGINS="flant-statusmap-panel" or you can use Git and clone this repo: +The preferred way of installation is Grafana configuration, e.g. with environment variable GF_INSTALL_PLUGINS="flant-statusmap-panel". + +Also, you can download a released .zip file from [Releases](https://github.com/flant/grafana-statusmap/releases) page and uncompress it into Grafana's plugin directory (/var/lib/grafana/plugins/flant-statusmap-panel). + + +``` +curl -sLO +unzip flant-statusmap-panel-v0.4.0.zip -d /var/lib/grafana/plugins/flant-statusmap-panel +``` + +For 5.x and 6.x versions of Grafana you can clone this repo: ``` git clone git@github.com:flant/grafana-statusmap.git /var/lib/grafana/plugins/flant-statusmap-panel ``` -Alternatively, you can download [ZIP archive](https://github.com/flant/grafana-statusmap/archive/master.zip) -of this repo and unpack it into /var/lib/grafana/plugins directory. - ## Motivation @@ -134,17 +141,17 @@ ORDER BY $__timeGroup(date_insert,$__interval) First of all, an individual query for each possible status' value should be created. Each query should also have similar legend for grouping: -![Query setup](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/queries-example.png) +![Query setup](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/queries-example.png) Then, color mapping for status' values should be defined in __Discrete__ color mode: -![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/color-mapping.png) +![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/color-mapping.png) Use can use presets to define a trafic light colors or 8 colors from [solarized](https://ethanschoonover.com/solarized/) palette: -![Color mapping empty](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/color-preset-01.png) +![Color mapping empty](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/color-preset-01.png) -![Color mapping trafic lights](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/color-preset-02.png) +![Color mapping trafic lights](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/color-preset-02.png) _Note: __Spectrum__ and __Opacity__ color modes function the same way they do in [Heatmap](https://grafana.com/plugins/heatmap) plugin._ @@ -154,30 +161,30 @@ _Note: __Spectrum__ and __Opacity__ color modes function the same way they do in #### Bucket -![Bucket options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/options-bucket.png) +![Bucket options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/options-bucket.png) __Multiple values__ checkbox specifies how they should be displayed: * If it's off, multiple values for one bucket are treated as error; * If it's on, color for such bucket would be determined by the value having least index in color mapping. -![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/multiple-values-error.png) +![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/multiple-values-error.png) __Display nulls__ can be treated as empty buckets or displayed with the color of `0` value. -![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/null-as-empty.png) +![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/null-as-empty.png) __Min width__ and __spacing__ are used to specify minimal bucket width and spacing between buckets. __Rounding__ may be used to round edges. -![Min width, spacing, rounding 1](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/min-width-spacing-rounding-01.png) +![Min width, spacing, rounding 1](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/min-width-spacing-rounding-01.png) -![Min width, spacing, rounding 2](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/min-width-spacing-rounding-02.png) +![Min width, spacing, rounding 2](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/min-width-spacing-rounding-02.png) __Values index__ set to positive number to display only values from specified timeseries. #### Display -![Display options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/options-display.png) +![Display options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/options-display.png) __Show legend__ checkbox toggles legend at the bottom of the panel. @@ -185,7 +192,7 @@ __Rows sort__ can be used to sort labels on Y axis. Metrics — sort y labels a #### Pagination -![Pagination controls](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/pagination-graph.png) +![Pagination controls](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/pagination-graph.png) __Enable pagination__ toggles pagination controls on graph. @@ -193,7 +200,7 @@ __Rows per page__ a number of rows to display on graph. #### Tooltip -![Tooltip in frozen state](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/tooltip-frozen.png) +![Tooltip in frozen state](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/tooltip-frozen.png) __Show tooltip__ toggles tooltip display on mouse over buckets. @@ -205,7 +212,7 @@ __Items__ is a list of definitions to display URLs in tooltip. Each URL has a template, icon, label and formating options: lowercase and date format for variables. -![Tooltip items editor](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/tooltip-editor.png) +![Tooltip items editor](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/tooltip-editor.png) ## Development diff --git a/dist/README.md b/dist/README.md index e31cbdf..66fc6ec 100644 --- a/dist/README.md +++ b/dist/README.md @@ -1,14 +1,14 @@ -

-Download from GitHub -GH Discussions -Telegram chat RU -

- # Statusmap panel for Grafana -![Statusmap sample panel](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/flant-statusmap-panel.png) +[![Download from GitHub](https://img.shields.io/github/tag-date/flant/grafana-statusmap.svg?logo=github&label=latest)](https://github.com/flant/grafana-statusmap/releases/latest) +[![GH Discussions](https://img.shields.io/badge/GitHub-discussions-brightgreen)](https://github.com/flant/grafana-statusmap/discussions) +[![Telegram chat RU](https://img.shields.io/badge/@statusmap_ru-RU-informational.svg?logo=telegram)](https://t.me/statusmap_ru) -![Statusmap sample panel with dark theme](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/flant-statusmap-panel-dark.png) +Panel to show discrete statuses of multiple targets over time. + +![Statusmap sample panel](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/flant-statusmap-panel.png) + +![Statusmap sample panel with dark theme](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/flant-statusmap-panel-dark.png) ## Features @@ -27,21 +27,28 @@ - Prometheus - InfluxDB - Mysql -* Tested with Grafana: - - 7.0, 7.1, 7.2, 7.3 - - 6.6, 6.7 +* Supported Grafana versions: + - 6.7+ are the most priority (6.7, 7.0-7.4) + - also works in 5.4.3 and 6.0+ ## Installation -Plugin can be installed with GF_INSTALL_PLUGINS="flant-statusmap-panel" or you can use Git and clone this repo: +The preferred way of installation is Grafana configuration, e.g. with environment variable GF_INSTALL_PLUGINS="flant-statusmap-panel". + +Also, you can download a released .zip file from [Releases](https://github.com/flant/grafana-statusmap/releases) page and uncompress it into Grafana's plugin directory (/var/lib/grafana/plugins/flant-statusmap-panel). + + +``` +curl -sLO +unzip flant-statusmap-panel-v0.4.0.zip -d /var/lib/grafana/plugins/flant-statusmap-panel +``` + +For 5.x and 6.x versions of Grafana you can clone this repo: ``` git clone git@github.com:flant/grafana-statusmap.git /var/lib/grafana/plugins/flant-statusmap-panel ``` -Alternatively, you can download [ZIP archive](https://github.com/flant/grafana-statusmap/archive/master.zip) -of this repo and unpack it into /var/lib/grafana/plugins directory. - ## Motivation @@ -134,17 +141,17 @@ ORDER BY $__timeGroup(date_insert,$__interval) First of all, an individual query for each possible status' value should be created. Each query should also have similar legend for grouping: -![Query setup](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/queries-example.png) +![Query setup](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/queries-example.png) Then, color mapping for status' values should be defined in __Discrete__ color mode: -![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/color-mapping.png) +![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/color-mapping.png) Use can use presets to define a trafic light colors or 8 colors from [solarized](https://ethanschoonover.com/solarized/) palette: -![Color mapping empty](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/color-preset-01.png) +![Color mapping empty](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/color-preset-01.png) -![Color mapping trafic lights](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/color-preset-02.png) +![Color mapping trafic lights](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/color-preset-02.png) _Note: __Spectrum__ and __Opacity__ color modes function the same way they do in [Heatmap](https://grafana.com/plugins/heatmap) plugin._ @@ -154,30 +161,30 @@ _Note: __Spectrum__ and __Opacity__ color modes function the same way they do in #### Bucket -![Bucket options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/options-bucket.png) +![Bucket options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/options-bucket.png) __Multiple values__ checkbox specifies how they should be displayed: * If it's off, multiple values for one bucket are treated as error; * If it's on, color for such bucket would be determined by the value having least index in color mapping. -![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/multiple-values-error.png) +![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/multiple-values-error.png) __Display nulls__ can be treated as empty buckets or displayed with the color of `0` value. -![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/null-as-empty.png) +![Color mapping](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/null-as-empty.png) __Min width__ and __spacing__ are used to specify minimal bucket width and spacing between buckets. __Rounding__ may be used to round edges. -![Min width, spacing, rounding 1](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/min-width-spacing-rounding-01.png) +![Min width, spacing, rounding 1](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/min-width-spacing-rounding-01.png) -![Min width, spacing, rounding 2](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/min-width-spacing-rounding-02.png) +![Min width, spacing, rounding 2](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/min-width-spacing-rounding-02.png) __Values index__ set to positive number to display only values from specified timeseries. #### Display -![Display options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/options-display.png) +![Display options](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/options-display.png) __Show legend__ checkbox toggles legend at the bottom of the panel. @@ -185,7 +192,7 @@ __Rows sort__ can be used to sort labels on Y axis. Metrics — sort y labels a #### Pagination -![Pagination controls](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/pagination-graph.png) +![Pagination controls](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/pagination-graph.png) __Enable pagination__ toggles pagination controls on graph. @@ -193,7 +200,7 @@ __Rows per page__ a number of rows to display on graph. #### Tooltip -![Tooltip in frozen state](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/tooltip-frozen.png) +![Tooltip in frozen state](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/tooltip-frozen.png) __Show tooltip__ toggles tooltip display on mouse over buckets. @@ -205,7 +212,7 @@ __Items__ is a list of definitions to display URLs in tooltip. Each URL has a template, icon, label and formating options: lowercase and date format for variables. -![Tooltip items editor](https://raw.githubusercontent.com/flant/grafana-statusmap/master/src/img/tooltip-editor.png) +![Tooltip items editor](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/tooltip-editor.png) ## Development diff --git a/dist/dark.js.map b/dist/dark.js.map new file mode 100644 index 0000000..b037367 --- /dev/null +++ b/dist/dark.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s"],"mappings":"sCACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,IAIjBlC,EAAoBA,EAAoBmC,EAAI,I","file":"dark.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 12);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/libs/d3-scale-chromatic/categorical/Accent.js b/dist/libs/d3-scale-chromatic/categorical/Accent.js deleted file mode 100644 index 07ab707..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Accent.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Dark2.js b/dist/libs/d3-scale-chromatic/categorical/Dark2.js deleted file mode 100644 index 13fc291..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Dark2.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Paired.js b/dist/libs/d3-scale-chromatic/categorical/Paired.js deleted file mode 100644 index 30094a0..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Paired.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Pastel1.js b/dist/libs/d3-scale-chromatic/categorical/Pastel1.js deleted file mode 100644 index 4b0e093..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Pastel1.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Pastel2.js b/dist/libs/d3-scale-chromatic/categorical/Pastel2.js deleted file mode 100644 index 520a5a3..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Pastel2.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Set1.js b/dist/libs/d3-scale-chromatic/categorical/Set1.js deleted file mode 100644 index 8c34c1b..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Set1.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Set2.js b/dist/libs/d3-scale-chromatic/categorical/Set2.js deleted file mode 100644 index e6bad53..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Set2.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"); diff --git a/dist/libs/d3-scale-chromatic/categorical/Set3.js b/dist/libs/d3-scale-chromatic/categorical/Set3.js deleted file mode 100644 index 8eeeb04..0000000 --- a/dist/libs/d3-scale-chromatic/categorical/Set3.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"); diff --git a/dist/libs/d3-scale-chromatic/colors.js b/dist/libs/d3-scale-chromatic/colors.js deleted file mode 100644 index aeedad5..0000000 --- a/dist/libs/d3-scale-chromatic/colors.js +++ /dev/null @@ -1,5 +0,0 @@ -export default function(specifier) { - 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; -} diff --git a/dist/libs/d3-scale-chromatic/diverging/BrBG.js b/dist/libs/d3-scale-chromatic/diverging/BrBG.js deleted file mode 100644 index 5e27ee6..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/BrBG.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "d8b365f5f5f55ab4ac", - "a6611adfc27d80cdc1018571", - "a6611adfc27df5f5f580cdc1018571", - "8c510ad8b365f6e8c3c7eae55ab4ac01665e", - "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e", - "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e", - "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e", - "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30", - "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js b/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js deleted file mode 100644 index 2857b2b..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "91cf60ffffbffc8d59", - "1a9641a6d96afdae61d7191c", - "1a9641a6d96affffbffdae61d7191c", - "1a985091cf60d9ef8bfee08bfc8d59d73027", - "1a985091cf60d9ef8bffffbffee08bfc8d59d73027", - "1a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027", - "1a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027", - "0068371a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027a50026", - "0068371a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027a50026" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/PRGn.js b/dist/libs/d3-scale-chromatic/diverging/PRGn.js deleted file mode 100644 index 3be94f3..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/PRGn.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "af8dc3f7f7f77fbf7b", - "7b3294c2a5cfa6dba0008837", - "7b3294c2a5cff7f7f7a6dba0008837", - "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837", - "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837", - "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837", - "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837", - "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b", - "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/PiYG.js b/dist/libs/d3-scale-chromatic/diverging/PiYG.js deleted file mode 100644 index 1d57c4f..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/PiYG.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e9a3c9f7f7f7a1d76a", - "d01c8bf1b6dab8e1864dac26", - "d01c8bf1b6daf7f7f7b8e1864dac26", - "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221", - "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221", - "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221", - "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221", - "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419", - "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/PuOr.js b/dist/libs/d3-scale-chromatic/diverging/PuOr.js deleted file mode 100644 index 924f5cb..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/PuOr.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "998ec3f7f7f7f1a340", - "5e3c99b2abd2fdb863e66101", - "5e3c99b2abd2f7f7f7fdb863e66101", - "542788998ec3d8daebfee0b6f1a340b35806", - "542788998ec3d8daebf7f7f7fee0b6f1a340b35806", - "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806", - "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806", - "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08", - "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/RdBu.js b/dist/libs/d3-scale-chromatic/diverging/RdBu.js deleted file mode 100644 index f9ba196..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/RdBu.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ef8a62f7f7f767a9cf", - "ca0020f4a58292c5de0571b0", - "ca0020f4a582f7f7f792c5de0571b0", - "b2182bef8a62fddbc7d1e5f067a9cf2166ac", - "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac", - "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac", - "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac", - "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061", - "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/RdGy.js b/dist/libs/d3-scale-chromatic/diverging/RdGy.js deleted file mode 100644 index 9d1a4a1..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/RdGy.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ef8a62ffffff999999", - "ca0020f4a582bababa404040", - "ca0020f4a582ffffffbababa404040", - "b2182bef8a62fddbc7e0e0e09999994d4d4d", - "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d", - "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d", - "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d", - "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a", - "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js b/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js deleted file mode 100644 index ef93e9d..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fc8d59ffffbf91bfdb", - "d7191cfdae61abd9e92c7bb6", - "d7191cfdae61ffffbfabd9e92c7bb6", - "d73027fc8d59fee090e0f3f891bfdb4575b4", - "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4", - "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4", - "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4", - "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695", - "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js b/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js deleted file mode 100644 index 2e3964d..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fc8d59ffffbf91cf60", - "d7191cfdae61a6d96a1a9641", - "d7191cfdae61ffffbfa6d96a1a9641", - "d73027fc8d59fee08bd9ef8b91cf601a9850", - "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850", - "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850", - "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850", - "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837", - "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/diverging/Spectral.js b/dist/libs/d3-scale-chromatic/diverging/Spectral.js deleted file mode 100644 index 0133e0a..0000000 --- a/dist/libs/d3-scale-chromatic/diverging/Spectral.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fc8d59ffffbf99d594", - "d7191cfdae61abdda42b83ba", - "d7191cfdae61ffffbfabdda42b83ba", - "d53e4ffc8d59fee08be6f59899d5943288bd", - "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd", - "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd", - "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd", - "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2", - "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/index.js b/dist/libs/d3-scale-chromatic/index.js deleted file mode 100644 index e752dc4..0000000 --- a/dist/libs/d3-scale-chromatic/index.js +++ /dev/null @@ -1,36 +0,0 @@ -export {default as schemeAccent} from "./categorical/Accent"; -export {default as schemeDark2} from "./categorical/Dark2"; -export {default as schemePaired} from "./categorical/Paired"; -export {default as schemePastel1} from "./categorical/Pastel1"; -export {default as schemePastel2} from "./categorical/Pastel2"; -export {default as schemeSet1} from "./categorical/Set1"; -export {default as schemeSet2} from "./categorical/Set2"; -export {default as schemeSet3} from "./categorical/Set3"; -export {default as interpolateBrBG, scheme as schemeBrBG} from "./diverging/BrBG"; -export {default as interpolatePRGn, scheme as schemePRGn} from "./diverging/PRGn"; -export {default as interpolatePiYG, scheme as schemePiYG} from "./diverging/PiYG"; -export {default as interpolatePuOr, scheme as schemePuOr} from "./diverging/PuOr"; -export {default as interpolateRdBu, scheme as schemeRdBu} from "./diverging/RdBu"; -export {default as interpolateRdGy, scheme as schemeRdGy} from "./diverging/RdGy"; -export {default as interpolateRdYlBu, scheme as schemeRdYlBu} from "./diverging/RdYlBu"; -export {default as interpolateRdYlGn, scheme as schemeRdYlGn} from "./diverging/RdYlGn"; -export {default as interpolateGnYlRd, scheme as schemeGnYlRd} from "./diverging/GnYlRd"; -export {default as interpolateSpectral, scheme as schemeSpectral} from "./diverging/Spectral"; -export {default as interpolateBuGn, scheme as schemeBuGn} from "./sequential-multi/BuGn"; -export {default as interpolateBuPu, scheme as schemeBuPu} from "./sequential-multi/BuPu"; -export {default as interpolateGnBu, scheme as schemeGnBu} from "./sequential-multi/GnBu"; -export {default as interpolateOrRd, scheme as schemeOrRd} from "./sequential-multi/OrRd"; -export {default as interpolatePuBuGn, scheme as schemePuBuGn} from "./sequential-multi/PuBuGn"; -export {default as interpolatePuBu, scheme as schemePuBu} from "./sequential-multi/PuBu"; -export {default as interpolatePuRd, scheme as schemePuRd} from "./sequential-multi/PuRd"; -export {default as interpolateRdPu, scheme as schemeRdPu} from "./sequential-multi/RdPu"; -export {default as interpolateYlGnBu, scheme as schemeYlGnBu} from "./sequential-multi/YlGnBu"; -export {default as interpolateYlGn, scheme as schemeYlGn} from "./sequential-multi/YlGn"; -export {default as interpolateYlOrBr, scheme as schemeYlOrBr} from "./sequential-multi/YlOrBr"; -export {default as interpolateYlOrRd, scheme as schemeYlOrRd} from "./sequential-multi/YlOrRd"; -export {default as interpolateBlues, scheme as schemeBlues} from "./sequential-single/Blues"; -export {default as interpolateGreens, scheme as schemeGreens} from "./sequential-single/Greens"; -export {default as interpolateGreys, scheme as schemeGreys} from "./sequential-single/Greys"; -export {default as interpolatePurples, scheme as schemePurples} from "./sequential-single/Purples"; -export {default as interpolateReds, scheme as schemeReds} from "./sequential-single/Reds"; -export {default as interpolateOranges, scheme as schemeOranges} from "./sequential-single/Oranges"; diff --git a/dist/libs/d3-scale-chromatic/ramp.js b/dist/libs/d3-scale-chromatic/ramp.js deleted file mode 100644 index f138a9b..0000000 --- a/dist/libs/d3-scale-chromatic/ramp.js +++ /dev/null @@ -1,5 +0,0 @@ -import d3 from 'd3'; - -export default function(scheme) { - return d3.interpolateRgbBasis(scheme[scheme.length - 1]); -} diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js b/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js deleted file mode 100644 index e7dade7..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e5f5f999d8c92ca25f", - "edf8fbb2e2e266c2a4238b45", - "edf8fbb2e2e266c2a42ca25f006d2c", - "edf8fbccece699d8c966c2a42ca25f006d2c", - "edf8fbccece699d8c966c2a441ae76238b45005824", - "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824", - "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js b/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js deleted file mode 100644 index 8aa9232..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e0ecf49ebcda8856a7", - "edf8fbb3cde38c96c688419d", - "edf8fbb3cde38c96c68856a7810f7c", - "edf8fbbfd3e69ebcda8c96c68856a7810f7c", - "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b", - "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b", - "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js b/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js deleted file mode 100644 index c8dae65..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e0f3dba8ddb543a2ca", - "f0f9e8bae4bc7bccc42b8cbe", - "f0f9e8bae4bc7bccc443a2ca0868ac", - "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac", - "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e", - "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e", - "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js b/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js deleted file mode 100644 index 3f96f7d..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fee8c8fdbb84e34a33", - "fef0d9fdcc8afc8d59d7301f", - "fef0d9fdcc8afc8d59e34a33b30000", - "fef0d9fdd49efdbb84fc8d59e34a33b30000", - "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000", - "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000", - "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js b/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js deleted file mode 100644 index c279e48..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ece7f2a6bddb2b8cbe", - "f1eef6bdc9e174a9cf0570b0", - "f1eef6bdc9e174a9cf2b8cbe045a8d", - "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d", - "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b", - "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b", - "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js b/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js deleted file mode 100644 index f6d8fe0..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ece2f0a6bddb1c9099", - "f6eff7bdc9e167a9cf02818a", - "f6eff7bdc9e167a9cf1c9099016c59", - "f6eff7d0d1e6a6bddb67a9cf1c9099016c59", - "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450", - "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450", - "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js b/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js deleted file mode 100644 index fe762d2..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e7e1efc994c7dd1c77", - "f1eef6d7b5d8df65b0ce1256", - "f1eef6d7b5d8df65b0dd1c77980043", - "f1eef6d4b9dac994c7df65b0dd1c77980043", - "f1eef6d4b9dac994c7df65b0e7298ace125691003f", - "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f", - "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js b/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js deleted file mode 100644 index 748939c..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fde0ddfa9fb5c51b8a", - "feebe2fbb4b9f768a1ae017e", - "feebe2fbb4b9f768a1c51b8a7a0177", - "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177", - "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177", - "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177", - "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js b/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js deleted file mode 100644 index aaacd6c..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "f7fcb9addd8e31a354", - "ffffccc2e69978c679238443", - "ffffccc2e69978c67931a354006837", - "ffffccd9f0a3addd8e78c67931a354006837", - "ffffccd9f0a3addd8e78c67941ab5d238443005a32", - "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32", - "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js b/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js deleted file mode 100644 index eb009ef..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "edf8b17fcdbb2c7fb8", - "ffffcca1dab441b6c4225ea8", - "ffffcca1dab441b6c42c7fb8253494", - "ffffccc7e9b47fcdbb41b6c42c7fb8253494", - "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84", - "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84", - "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js b/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js deleted file mode 100644 index 2fc1aa1..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fff7bcfec44fd95f0e", - "ffffd4fed98efe9929cc4c02", - "ffffd4fed98efe9929d95f0e993404", - "ffffd4fee391fec44ffe9929d95f0e993404", - "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04", - "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04", - "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js b/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js deleted file mode 100644 index d34cca6..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ffeda0feb24cf03b20", - "ffffb2fecc5cfd8d3ce31a1c", - "ffffb2fecc5cfd8d3cf03b20bd0026", - "ffffb2fed976feb24cfd8d3cf03b20bd0026", - "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026", - "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026", - "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Blues.js b/dist/libs/d3-scale-chromatic/sequential-single/Blues.js deleted file mode 100644 index cb36bf7..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-single/Blues.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "deebf79ecae13182bd", - "eff3ffbdd7e76baed62171b5", - "eff3ffbdd7e76baed63182bd08519c", - "eff3ffc6dbef9ecae16baed63182bd08519c", - "eff3ffc6dbef9ecae16baed64292c62171b5084594", - "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594", - "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Greens.js b/dist/libs/d3-scale-chromatic/sequential-single/Greens.js deleted file mode 100644 index 074f5bf..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-single/Greens.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e5f5e0a1d99b31a354", - "edf8e9bae4b374c476238b45", - "edf8e9bae4b374c47631a354006d2c", - "edf8e9c7e9c0a1d99b74c47631a354006d2c", - "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32", - "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32", - "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Greys.js b/dist/libs/d3-scale-chromatic/sequential-single/Greys.js deleted file mode 100644 index ae5a0b4..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-single/Greys.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "f0f0f0bdbdbd636363", - "f7f7f7cccccc969696525252", - "f7f7f7cccccc969696636363252525", - "f7f7f7d9d9d9bdbdbd969696636363252525", - "f7f7f7d9d9d9bdbdbd969696737373525252252525", - "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525", - "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js b/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js deleted file mode 100644 index a4babe1..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fee6cefdae6be6550d", - "feeddefdbe85fd8d3cd94701", - "feeddefdbe85fd8d3ce6550da63603", - "feeddefdd0a2fdae6bfd8d3ce6550da63603", - "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04", - "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04", - "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Purples.js b/dist/libs/d3-scale-chromatic/sequential-single/Purples.js deleted file mode 100644 index d9810e1..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-single/Purples.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "efedf5bcbddc756bb1", - "f2f0f7cbc9e29e9ac86a51a3", - "f2f0f7cbc9e29e9ac8756bb154278f", - "f2f0f7dadaebbcbddc9e9ac8756bb154278f", - "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486", - "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486", - "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d" -).map(colors); - -export default ramp(scheme); diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Reds.js b/dist/libs/d3-scale-chromatic/sequential-single/Reds.js deleted file mode 100644 index 447084c..0000000 --- a/dist/libs/d3-scale-chromatic/sequential-single/Reds.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fee0d2fc9272de2d26", - "fee5d9fcae91fb6a4acb181d", - "fee5d9fcae91fb6a4ade2d26a50f15", - "fee5d9fcbba1fc9272fb6a4ade2d26a50f15", - "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d", - "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d", - "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d" -).map(colors); - -export default ramp(scheme); diff --git a/dist/light.js.map b/dist/light.js.map new file mode 100644 index 0000000..370d087 --- /dev/null +++ b/dist/light.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s"],"mappings":"sCACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,IAIjBlC,EAAoBA,EAAoBmC,EAAI,I","file":"light.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/module.js.map b/dist/module.js.map index 9efa318..b8acd2a 100644 --- a/dist/module.js.map +++ b/dist/module.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"lodash\"","webpack:///external \"d3\"","webpack:///external \"jquery\"","webpack:///external \"app/core/utils/kbn\"","webpack:///external \"app/core/core\"","webpack:///external \"app/plugins/sdk\"","webpack:///external \"app/core/core_module\"","webpack:///external \"moment\"","webpack:///external \"app/core/utils/ticks\"","webpack:///../node_modules/tslib/tslib.es6.js","webpack:///../node_modules/d3-scale-chromatic/src/colors.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/define.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/color.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/basis.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/constant.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/color.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/rgb.js","webpack:///../node_modules/d3-scale-chromatic/src/ramp.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/basisClosed.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/math.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/cubehelix.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/cubehelix.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack:///./d3/d3-scale-chromatic.ts","webpack:///./libs/grafana/events/events.ts","webpack:///./libs/grafana/events/panelEvents.ts","webpack:///./color_legend.ts","webpack:///./options_editor.ts","webpack:///./tooltip_editor.ts","webpack:///./panel_config_migration.ts","webpack:///./statusmap_data.ts","webpack:///./tooltip.ts","webpack:///./annotations.ts","webpack:///./rendering.ts","webpack:///./libs/polygrafill/funcs.ts","webpack:///./color_mode_discrete.ts","webpack:///./module.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__1__","__WEBPACK_EXTERNAL_MODULE__2__","__WEBPACK_EXTERNAL_MODULE__3__","__WEBPACK_EXTERNAL_MODULE__4__","__WEBPACK_EXTERNAL_MODULE__6__","__WEBPACK_EXTERNAL_MODULE__7__","__WEBPACK_EXTERNAL_MODULE__8__","__WEBPACK_EXTERNAL_MODULE__10__","extendStatics","b","setPrototypeOf","__proto__","Array","__assign","assign","arguments","length","apply","this","__values","iterator","next","done","TypeError","specifier","colors","slice","constructor","factory","extend","parent","definition","Color","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","format","trim","toLowerCase","exec","parseInt","rgbn","Rgb","rgba","hsla","NaN","g","a","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","isNaN","Math","max","min","round","toString","h","Hsl","hslConvert","hsl2rgb","m1","m2","basis","t1","v0","v1","v2","v3","t2","t3","define","copy","channels","displayable","formatHsl","brighter","k","pow","darker","x","linear","gamma","y","nogamma","exponential","constant","color","start","end","rgbGamma","rgbSpline","spline","rgbBasis","values","floor","scheme","concat","map","ramp","radians","PI","degrees","A","B","C","D","E","ED","EB","BC_DA","cubehelixConvert","Cubehelix","bl","sqrt","atan2","hue","cubehelixGamma","cubehelix","cosh","cos","sinh","sin","cubehelixLong","warm","cool","ts","abs","pi_1_3","pi_2_3","range","magma","inferno","plasma","GnYlRdScheme","GnYlRd","d3ScaleChromatic","interpolateGnYlRd","graphHover","graphHoverClear","fallbackToStringEvents","refresh","dataError","dataReceived","dataSnapshotLoad","editModeInitialized","drawLegendValues","elem","colorScale","rangeFrom","rangeTo","maxValue","minValue","legendWidth","legendElem","find","legend","childNodes","legendValueScale","domain","ticks","tickStepSize","ticksNum","current","isValueCloseTo","push","sortBy","uniq","buildLegendTicks","xAxis","tickValues","tickSize","colorRect","posY","getSvgElemHeight","posX","getSvgElemX","append","attr","select","remove","clearLegend","empty","getColorScale","colorScheme","colorInterpolator","colorScaleInverted","invert","user","lightTheme","svgElem","baseVal","height","val","valueTo","step","directive","restrict","template","link","scope","attrs","ctrl","panel","render","outerWidth","colorSchemes","legendHeight","valuesRange","selectAll","data","enter","LEGEND_STEP_WIDTH","drawSimpleColorLegend","colorOptions","options","exponent","cardColor","style","drawSimpleOpacityLegend","events","on","show","bucketMatrix","noDatapoints","rangeStep","widthFactor","drawColorLegend","opacityScale","legendOpacityScale","getOpacityScale","drawOpacityLegend","discreteExtraSeries","thresholds","tooltips","tr","valuesNumber","graphWidthAttr","graphWidth","textWidth","text","each","thisWidth","getBBox","width","itemWidth","getDiscreteColor","thresholdValues","thresholdTooltips","tooltip","tickFormat","valueOf","v","undefined","drawDiscreteLegendValues","drawDiscreteColorLegend","$scope","editor","panelCtrl","unitFormats","getUnitFormats","setUnitFormat","subItem","unitFormat","onAddThreshold","defaultColor","onRemoveThreshold","index","splice","onRemoveThresholds","onAddThreeLights","onAddSolarized","optionsEditorCtrl","templateUrl","controller","emptyTooltipItem","urlText","urlTemplate","urlIcon","urlToLowerCase","valueDateFormat","onAddUrl","items","onRemoveUrl","onRemoveUrls","getFAIconClasses","getValueDateFormats","tooltipEditorCtrl","TooltipEditorCtrl","migratePanelConfig","has","statusmap","ConfigVersion","labelFormat","minBucketWidthToShowWeekends","showCrosshair","showWeekends","yAxis","cards","cardSpacing","cardVSpacing","cardHSpacing","freezeOnClick","usingUrl","hasRealItems","urls","url","base_url","label","showItems","item","icon_fa","forcelowercase","replace","valueVar","useExtraSeries","extraSeries","migrate_V0_V1","id","columns","multipleValues","noColorDefined","yLabel","pLabels","xid","from","to","relFrom","relTo","mostRecent","belong","put","isEmpty","buckets","targets","rangeMs","intervalMs","xBucketSize","yid","Bucket","hasData","target","defaultPageSize","pageSize","currentPage","BucketMatrix","enable","me","rowLabel","setEnable","setCurrent","num","setDefaultPageSize","setPageSize","pages","ceil","totalRows","pageStartRow","pageEndRow","last","hasNext","hasPrev","switchToNext","switchToPrev","dashboard","panelElem","mouseOverBucket","originalFillColor","onMouseOver","onMouseLeave","e","add","move","destroy","onMouseMove","removeFrozen","tooltipFrozen","showFrozen","pos","displayTooltip","moveRelative","panelRelY","frozen","cardEl","bucket","timestamp","tooltipClose","tooltipHtml","formatDate","statuses","statusTitle","seriesFilterIndex","convertValueToTooltips","convertValuesToTooltips","join","JSON","parse","stringify","scopedVars","retrieveTimeVar","dateFormat","templateSrv","truncate","showCustomContent","customContent","useMax","dataWarnings","title","badValues","getNotColoredValues","html","stopPropagation","node","tooltipWidth","clientWidth","tooltipHeight","clientHeight","left","pageX","top","pageY","window","innerWidth","pageYOffset","innerHeight","panelX","offset","panelY","panelWidth","panelHeight","tooltipLeft","tooltipTop","mouseOverAnnotationTick","tooltipBase","annoId","anno","annotations","annoTime","time","annoText","annoTags","tags","backColor","borderColor","chartWidth","chartHeight","chartTop","chartBottom","yAxisWidth","xAxisHeight","cardRound","cardWidth","cardHeight","xGridSize","yGridSize","dataRangeWidingFactor","$heatmap","annotationTooltip","yOffset","selection","active","x1","x2","padding","right","bottom","margin","onRender","tickValueFormatter","onGraphHover","onGraphHoverClear","onMouseDown","onMouseClick","clearCrosshair","event","drawSharedCrosshair","renderingCompleted","setElementHeight","row","isString","usingPagination","css","getYAxisWidth","axisText","nodes","maxTextWidth","getXAxisHeight","axisLinePosition","parseFloat","addXAxis","xScale","timeRange","timeFormat","grafanaTimeFormatter","secPerTick","grafanaTimeFormat","getTimezone","tickPadding","heatmap","getYScale","getYAxisScale","addYAxis","bucketMatrixPager","yAxisSort","sort","localeCompare","ignorePunctuation","numeric","yAxisScale","yScale","tickSizeInner","wideYAxisRange","tickInterval","y_min","y_max","y_widing","decimals","scaledDecimals","valueFormats","addStatusmapCanvas","heatmap_elem","insert","addStatusmap","setOpacityScale","getCardX","getCardWidth","getCardY","getCardHeight","getCardColor","getCardOpacity","highlightCard","resetCardHighLight","_renderAnnotations","emit","renderComplete","highlightColor","strokeColor","current_card","cx","w","cutted_width","ys","getBucketColorSingle","getBucketColor","nullPointMode","getCardStrokeWidth","getEventOffset","elemOffset","clientX","clientY","mouseUpHandler","onMouseUp","document","one","unbind","selectionRange","timeFrom","timeTo","timeSrv","setTime","utc","clearSelection","limitSelection","offsetX","drawSelection","emitGraphHoverEvent","drawCrosshair","getEventPos","y1","offsetY","posX1","posX2","selectionX","selectionWidth","position","graphTooltip","annoData","source","hasAppEventCompatibleEmitter","emitter","emitterProto","getPrototypeOf","receiveEvents","eventId","removeAllListeners","j","getNotMatchedValues","notMatched","getMatchedThreshold","threshold","getThreshold","isAllValuesNulls","updateCardsValuesHasColorInfoSingle","updateCardsValuesHasColorInfo","roundIntervalCeil","interval","colorModes","opacityScales","dark","light","$injector","annotationsSrv","pageSizeViewer","panelDefaults","datasource","cardMinWidth","minWidth","maxWidth","showExtraInfo","extraInfo","usingSplitLabel","delimiter","labelTemplate","highlightCards","interval_to_ms","intervalToMs","defaultsDeep","BucketMatrixPager","pager","graph","ColorModeDiscrete","tip","onDataReceived","onDataError","onInitEditMode","postRefresh","onRenderComplete","onCardColorChange","__","changeDefaultPaginationSize","onChangePageSize","onPrevPage","onNextPage","getChartWidth","wndWidth","$","panelWidthFactor","gridPos","updateTimeRange","ret","calculateInterval","minCardWidth","minSpacing","maxCardsCount","lowLimitMs","intervalOverride","secondsToHms","issueQueries","annotationsPromise","getAnnotations","datasourcePromises","then","issueQueriesWithInterval","origInterval","res","dataList","newBucketMatrix","convertDataToBuckets","result","loading","addEditorTab","newColor","rendering","timeRangeForUrl","mostRecentBucket","targetIndex","targetPartials","queryResult","split","targetKeys","keys","targetTimestampRanges","targetTimestamps","si","datapoints","datapoint","idx","tsTo","tsFrom","minFrom","targetEmptyBuckets","lastTs","topBucket","bucketFrom","Number","MAX_VALUE","MIN_SAFE_INTEGER","dataIndex","dp","bucketsLen"],"mappings":"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","file":"module.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 13);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","module.exports = __WEBPACK_EXTERNAL_MODULE__2__;","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","module.exports = __WEBPACK_EXTERNAL_MODULE__4__;","module.exports = __WEBPACK_EXTERNAL_MODULE__6__;","module.exports = __WEBPACK_EXTERNAL_MODULE__7__;","module.exports = __WEBPACK_EXTERNAL_MODULE__8__;","module.exports = __WEBPACK_EXTERNAL_MODULE__10__;","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export default function(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","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + \")\";\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + \")\";\n}\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import * as d3 from 'd3';\nimport * as d3ScaleChromaticOrig from 'd3-scale-chromatic';\n\nlet GnYlRdScheme = new Array(3)\n .concat(\n '91cf60ffffbffc8d59',\n '1a9641a6d96afdae61d7191c',\n '1a9641a6d96affffbffdae61d7191c',\n '1a985091cf60d9ef8bfee08bfc8d59d73027',\n '1a985091cf60d9ef8bffffbffee08bfc8d59d73027',\n '1a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027',\n '1a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027',\n '0068371a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027a50026',\n '0068371a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027a50026'\n )\n .map(function(specifier) {\n var n = (specifier.length / 6) | 0,\n colors = new Array(n),\n i = 0;\n while (i < n) {\n colors[i] = '#' + specifier.slice(i * 6, ++i * 6);\n }\n return colors;\n });\n\nlet GnYlRd = d3.interpolateRgbBasis(GnYlRdScheme[GnYlRdScheme.length - 1]);\n\nlet d3ScaleChromatic = {\n ...d3ScaleChromaticOrig,\n interpolateGnYlRd: GnYlRd,\n};\n\nexport { d3ScaleChromatic };\n","import { AppEvent } from './appEvents';\n\nexport interface GraphHoverPayload {\n pos: any;\n panel: {\n id: number;\n };\n}\n\nexport var graphHover: AppEvent | string = { name: 'graph-hover' };\nexport var graphHoverClear: AppEvent | string = { name: 'graph-hover-clear' };\n\nexport function fallbackToStringEvents() {\n graphHover = 'graph-hover';\n graphHoverClear = 'graph-hover-clear';\n}\n","import { AppEvent } from './appEvents';\n\nexport interface DataQueryError {\n data?: {\n message?: string;\n error?: string;\n };\n message?: string;\n status?: string;\n statusText?: string;\n refId?: string;\n cancelled?: boolean;\n}\n\nexport var refresh: AppEvent | string = { name: 'refresh' };\nexport var render: AppEvent | string = { name: 'render' };\nexport var dataError: AppEvent | string = { name: 'data-error' };\nexport var dataReceived: AppEvent | string = { name: 'data-received' };\nexport var dataSnapshotLoad: AppEvent | string = { name: 'data-snapshot-load' };\nexport var editModeInitialized: AppEvent | string = { name: 'init-edit-mode' };\n\nexport function fallbackToStringEvents() {\n refresh = 'refresh';\n render = 'render';\n dataError = 'data-error';\n dataReceived = 'data-received';\n dataSnapshotLoad = 'data-snapshot-load';\n editModeInitialized = 'init-edit-mode';\n}\n","import _ from 'lodash';\nimport $ from 'jquery';\nimport * as d3 from 'd3';\nimport { d3ScaleChromatic } from './d3/d3-scale-chromatic';\nimport { contextSrv } from 'grafana/app/core/core';\nimport { tickStep } from 'grafana/app/core/utils/ticks';\nimport coreModule from 'grafana/app/core/core_module';\n\nimport { StatusHeatmapCtrl } from './module';\nimport { PanelEvents } from './libs/grafana/events/index';\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: any, elem, attrs) {\n let ctrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n\n ctrl.events.on(PanelEvents.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: StatusHeatmapCtrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n ctrl.events.on(PanelEvents.render, function() {\n render();\n });\n\n function render() {\n clearLegend(elem);\n if (!ctrl.panel.legend.show) {\n return;\n }\n if (ctrl.bucketMatrix) {\n let rangeFrom = ctrl.bucketMatrix.minValue;\n let rangeTo = ctrl.bucketMatrix.maxValue;\n let maxValue = panel.color.max != null ? panel.color.max : rangeTo;\n let minValue = panel.color.min != null ? panel.color.min : rangeFrom;\n\n if (ctrl.bucketMatrix.noDatapoints) {\n if (panel.color.max != null) {\n rangeTo = maxValue = 100;\n } else {\n rangeTo = 100;\n }\n if (panel.color.min != null) {\n rangeFrom = minValue = 0;\n } else {\n rangeFrom = 0;\n }\n }\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.discreteExtraSeries);\n }\n }\n }\n },\n };\n});\n\nfunction drawColorLegend(elem, colorScheme, rangeFrom: number, rangeTo: number, maxValue: number, minValue: number) {\n let legendElem = $(elem).find('svg');\n let legend: any = 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\n .selectAll('.status-heatmap-color-legend-rect')\n .data(valuesRange)\n .enter()\n .append('rect')\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr('x', d => (d - rangeFrom) * 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\n .selectAll('.status-heatmap-opacity-legend-rect')\n .data(valuesRange)\n .enter()\n .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, discreteExtraSeries) {\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)\n .parent()\n .parent()\n .parent()\n .find('.statusmap-panel');\n const graphWidthAttr = $heatmap.find('svg').attr('width');\n let graphWidth = parseInt(graphWidthAttr, 10);\n\n // calculate max width of tooltip and use it as width for each item\n let textWidth: number[] = [];\n legend\n .selectAll('.hidden-texts')\n .data(tooltips)\n .enter()\n .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([graphWidth - 30, (_.max(textWidth)! + 3) * valuesNumber])!);\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\n .selectAll('.status-heatmap-color-legend-rect')\n .data(valuesRange)\n .enter()\n .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 => discreteExtraSeries.getDiscreteColor(d));\n\n drawDiscreteLegendValues(elem, colorOptions, legendWidth);\n}\n\nfunction drawLegendValues(\n elem,\n colorScale,\n rangeFrom: number,\n rangeTo: number,\n maxValue: number,\n minValue: number,\n legendWidth: number\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 legendValueScale = d3\n .scaleLinear()\n .domain([rangeFrom, rangeTo])\n .range([0, legendWidth]);\n\n let ticks = buildLegendTicks(rangeFrom, rangeTo, maxValue, minValue);\n let xAxis = d3\n .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))\n .append('g')\n .attr('class', 'axis')\n .attr('transform', 'translate(' + posX + ',' + posY + ')')\n .call(xAxis);\n\n legend\n .select('.axis')\n .select('.domain')\n .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 let legendValueScale = d3\n .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\n .axisBottom(legendValueScale)\n .tickValues(d3.range(0, valuesNumber, 1)) //thresholdValues)\n .tickSize(2)\n .tickFormat(t => {\n let i = Math.floor(t.valueOf());\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))\n .append('g')\n .attr('class', 'axis')\n .attr('transform', 'translate(' + posX + ',' + posY + ')')\n .call(xAxis);\n\n legend\n .select('.axis')\n .select('.domain')\n .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\n .selectAll('.status-heatmap-color-legend-rect')\n .data(valuesRange)\n .enter()\n .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\n .scaleLinear()\n .domain([0, legendWidth])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3\n .scalePow()\n .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\n .selectAll('.status-heatmap-opacity-legend-rect')\n .data(valuesRange)\n .enter()\n .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\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 =\n colorScheme.invert === 'always' || (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\n .scaleLinear()\n .domain([minValue, maxValue])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3\n .scalePow()\n .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 + rangeFrom;\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(current);\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","import kbn from 'grafana/app/core/utils/kbn';\nimport { StatusHeatmapCtrl } from './module';\n\nexport class StatusHeatmapOptionsEditorCtrl {\n panel: any;\n panelCtrl: StatusHeatmapCtrl;\n unitFormats: any;\n\n /** @ngInject */\n constructor($scope: any) {\n $scope.editor = this;\n this.panelCtrl = $scope.ctrl as StatusHeatmapCtrl;\n this.panel = this.panelCtrl.panel;\n\n this.unitFormats = kbn.getUnitFormats();\n }\n\n setUnitFormat(subItem) {\n this.panel.data.unitFormat = subItem.value;\n this.panelCtrl.render();\n }\n\n render() {\n this.panelCtrl.render();\n }\n\n onAddThreshold() {\n this.panel.color.thresholds.push({ color: this.panel.defaultColor });\n this.render();\n }\n\n onRemoveThreshold(index: number) {\n this.panel.color.thresholds.splice(index, 1);\n this.render();\n }\n\n onRemoveThresholds() {\n this.panel.color.thresholds = [];\n this.render();\n }\n\n onAddThreeLights() {\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 onAddSolarized() {\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\n/** @ngInject */\nexport function optionsEditorCtrl() {\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","import { StatusHeatmapCtrl } from './module';\n\nlet emptyTooltipItem = {\n urlText: '',\n urlTemplate: '',\n urlIcon: 'external-link',\n urlToLowerCase: true,\n valueDateFormat: '',\n};\n\nexport class TooltipEditorCtrl {\n panel: any;\n panelCtrl: StatusHeatmapCtrl;\n\n /** @ngInject */\n constructor($scope: any) {\n $scope.editor = this;\n this.panelCtrl = $scope.ctrl as StatusHeatmapCtrl;\n this.panel = this.panelCtrl.panel;\n }\n\n render() {\n this.panelCtrl.render();\n }\n\n onAddUrl() {\n this.panel.tooltip.items.push(Object.assign({}, emptyTooltipItem));\n this.render();\n }\n\n onRemoveUrl(index: number) {\n this.panel.tooltip.items.splice(index, 1);\n this.render();\n }\n\n onRemoveUrls() {\n this.panel.tooltip.items = [];\n this.render();\n }\n\n getFAIconClasses() {\n return ['external-link', 'plus', 'anchor', 'ban', 'globe', 'gear', 'cloud', 'download', 'cloud-download'];\n }\n\n getValueDateFormats() {\n return ['YYYY/MM/DD/HH_mm_ss', 'YYYYMMDDHHmmss', 'YYYY-MM-DD-HH-mm-ss'];\n }\n}\n\nexport function tooltipEditorCtrl() {\n 'use strict';\n return {\n restrict: 'E',\n scope: true,\n templateUrl: 'public/plugins/flant-statusmap-panel/partials/tooltip_editor.html',\n controller: TooltipEditorCtrl,\n };\n}\n","import _ from 'lodash';\n\nfunction migrate_V0_V1(panel: any) {\n // Remove unused fields.\n if (_.has(panel, 'xAxis.labelFormat')) {\n delete panel.xAxis.labelFormat;\n }\n if (_.has(panel, 'xAxis.minBucketWidthToShowWeekends')) {\n delete panel.xAxis.minBucketWidthToShowWeekends;\n }\n if (_.has(panel, 'xAxis.showCrosshair')) {\n delete panel.xAxis.showCrosshair;\n }\n if (_.has(panel, 'xAxis.showWeekends')) {\n delete panel.xAxis.showWeekends;\n }\n if (_.has(panel, 'yAxis.showCrosshair')) {\n delete panel.yAxis.showCrosshair;\n }\n if (_.has(panel, 'data.unitFormat')) {\n delete panel.data;\n }\n\n // Migrate cardSpacing value. Seems rare (update from version 0.0.2).\n if (_.has(panel, 'cards.cardSpacing')) {\n if (!_.has(panel, 'cards.cardVSpacing')) {\n if (panel.cards.cardSpacing) {\n panel.cards.cardVSpacing = panel.cards.cardSpacing;\n panel.cards.cardHSpacing = panel.cards.cardSpacing;\n }\n }\n delete panel.cards.cardSpacing;\n }\n\n // Migrate initial config for urls in tooltip (pull/86).\n // 'usingUrl' was used to show tooltip with urls on click or not.\n if (_.has(panel, 'usingUrl')) {\n if (!_.has(panel, 'tooltip.freezeOnClick')) {\n panel.tooltip.freezeOnClick = panel.usingUrl;\n }\n delete panel.usingUrl;\n }\n\n // 'urls' array is now tooltip.items array. Also items are changed.\n if (_.has(panel, 'urls')) {\n if (!_.has(panel, 'tooltip.items')) {\n panel.tooltip.items = [];\n let hasRealItems = true;\n if (panel.urls.length === 0) {\n hasRealItems = false;\n }\n if (panel.urls.length === 1) {\n let url = panel.urls[0];\n if (url.base_url === '' && url.label === '') {\n hasRealItems = false;\n }\n }\n if (hasRealItems) {\n panel.tooltip.showItems = true;\n for (let url of panel.urls) {\n let item = {\n urlTemplate: _.toString(url.base_url),\n urlText: _.toString(url.label),\n urlIcon: _.toString(url.icon_fa),\n urlToLowerCase: url.forcelowercase,\n valueDateFormat: '',\n };\n // replace $vars with new ${__vars} if url template is not empty\n if (item.urlTemplate !== '') {\n // $time was a graph time with prepended &\n item.urlTemplate = _.replace(url.base_url, /\\$time/g, '&${__url_time_range}');\n // $series_label was a y axis label\n item.urlTemplate = _.replace(item.urlTemplate, /\\$series_label/, '${__y_label}');\n // $series_extra was a value from bucket. This value has format options and index.\n let valueVar = '__value';\n if (url.useExtraSeries === true) {\n // index?\n if (url.extraSeries.index > -1) {\n valueVar += '_' + url.extraSeries.index;\n }\n\n let format = _.toString(url.extraSeries.format);\n if (format === 'YYYY/MM/DD/HH_mm_ss') {\n valueVar += '_date';\n item.valueDateFormat = format;\n }\n }\n\n item.urlTemplate = _.replace(item.urlTemplate, /\\$series_extra/, `\\${${valueVar}}`);\n }\n panel.tooltip.items.push(item);\n }\n }\n }\n delete panel.urls;\n }\n\n // create statusmap metadata\n panel.statusmap = {\n ConfigVersion: 'v1',\n };\n}\n\nexport function migratePanelConfig(panel: any) {\n if (_.has(panel, 'statusmap')) {\n if (panel.statusmap.ConfigVersion === 'v1') {\n return;\n }\n } else {\n migrate_V0_V1(panel);\n }\n return;\n}\n","// A holder of a group of values\nclass Bucket {\n // uniq id\n id = 0;\n // Array of values in this bucket\n values: any[] = [];\n columns: any[] = []; // From pr/86\n // a bucket has multiple values\n multipleValues = false;\n // a bucket has values that has no mapped color\n noColorDefined = false;\n // y label\n y = '';\n yLabel = '';\n pLabels: string[] = [];\n\n // This value can be used to calculate a x coordinate on a graph\n x = 0;\n xid = 0;\n // a time range of this bucket\n from = 0;\n to = 0;\n // to and from relative to real \"from\"\n relFrom = 0;\n relTo = 0;\n\n mostRecent = false;\n\n // Saved minimum and maximum of values in this bucket\n minValue = 0;\n maxValue = 0;\n // A value if multiple values is not allowed\n value = 0;\n\n constructor() {}\n\n belong(ts: number): boolean {\n return ts >= this.from && ts <= this.to;\n }\n\n put(value: any) {\n this.values.push(value);\n }\n\n done() {\n // calculate min, max, value\n }\n\n isEmpty(): boolean {\n return this.values.length === 0;\n }\n}\n\nclass BucketMatrix {\n // buckets for each y label\n buckets: { [yLabel: string]: Bucket[] } = {};\n maxValue = 0;\n minValue = 0;\n multipleValues = false;\n noColorDefined = false;\n // a flag that indicate that buckets has stub values\n noDatapoints = false;\n\n // An array of row labels\n targets: string[] = [];\n pLabels: { [target: string]: string[] } = {};\n rangeMs = 0;\n intervalMs = 0;\n\n xBucketSize = 0; // TODO remove: a transition from CardsData\n\n constructor() {}\n\n get(yid: string, xid: number): Bucket {\n if (yid in this.buckets) {\n if (xid in this.buckets[yid]) {\n return this.buckets[yid][xid];\n }\n }\n return new Bucket();\n }\n\n hasData(): boolean {\n let hasData = false;\n if (this.targets.length > 0) {\n this.targets.map((target: string) => {\n if (this.buckets[target].length > 0) {\n hasData = true;\n }\n });\n }\n return hasData;\n }\n}\n\nexport var pagerChanged: any = { name: 'statusmap-pager-changed' };\n\nclass BucketMatrixPager {\n bucketMatrix: BucketMatrix;\n enable: boolean;\n defaultPageSize = -1;\n pageSize = -1;\n currentPage = 0;\n\n constructor() {\n let m = new BucketMatrix();\n\n this.bucketMatrix = m;\n }\n\n // An array of row labels for current page.\n targets(): string[] {\n if (!this.enable) {\n return this.bucketMatrix.targets;\n }\n\n return this.bucketMatrix.targets.slice(this.pageSize * this.currentPage, this.pageSize * (this.currentPage + 1));\n }\n\n buckets(): { [yLabel: string]: Bucket[] } {\n if (!this.enable) {\n return this.bucketMatrix.buckets;\n }\n\n let buckets: { [yLabel: string]: Bucket[] } = {};\n let me = this;\n\n this.targets().map(function(rowLabel) {\n buckets[rowLabel] = me.bucketMatrix.buckets[rowLabel];\n });\n\n return buckets;\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n }\n\n setCurrent(num: number): void {\n this.currentPage = num;\n }\n\n setDefaultPageSize(num: number): void {\n this.defaultPageSize = num;\n }\n\n setPageSize(num: number): void {\n this.pageSize = num;\n }\n\n pages(): number {\n return Math.ceil(this.totalRows() / this.pageSize);\n }\n\n totalRows(): number {\n return this.bucketMatrix.targets.length;\n }\n\n pageStartRow(): number {\n if (!this.enable) {\n return 1;\n }\n return this.pageSize * this.currentPage + 1;\n }\n\n pageEndRow(): number {\n if (!this.enable) {\n return this.totalRows();\n }\n\n let last = this.pageSize * (this.currentPage + 1);\n if (last > this.totalRows()) {\n return this.totalRows();\n }\n\n return last;\n }\n\n hasNext(): boolean {\n if (!this.enable) {\n return false;\n }\n\n if ((this.currentPage + 1) * this.pageSize >= this.totalRows()) {\n return false;\n }\n\n return true;\n // currentPage >= ctrl.bucketMatrix.targets.length/ctrl.pageSizeViewer - 1 || ctrl.numberOfPages == 0\n }\n\n hasPrev(): boolean {\n if (!this.enable) {\n return false;\n }\n\n return this.currentPage > 0;\n }\n\n switchToNext() {\n if (this.hasNext()) {\n this.currentPage = this.currentPage + 1;\n }\n }\n\n switchToPrev() {\n if (this.hasPrev()) {\n this.currentPage = this.currentPage - 1;\n }\n }\n}\n\nexport { Bucket, BucketMatrix, BucketMatrixPager };\n","import * as d3 from 'd3';\nimport $ from 'jquery';\nimport _ from 'lodash';\n\nimport { StatusHeatmapCtrl } from './module';\n\nlet TOOLTIP_PADDING_X = 30;\nlet TOOLTIP_PADDING_Y = 5;\n\n// TODO rename file to tooltip_ctrl.ts\n// TODO move DefaultValueDateFormat into tooltip.ts, as it used in several places (migration, partial and tooltip render)\nlet DefaultValueDateFormat = 'YYYY/MM/DD/HH_mm_ss';\n\nexport class StatusmapTooltip {\n tooltip: any;\n scope: any;\n dashboard: any;\n panelCtrl: StatusHeatmapCtrl;\n panel: any;\n panelElem: any;\n mouseOverBucket: any;\n originalFillColor: any;\n\n tooltipWidth: number;\n tooltipFrozen: any;\n\n constructor(elem: any, scope: any) {\n this.scope = scope;\n this.dashboard = scope.ctrl.dashboard;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n this.panelElem = 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)) {\n return;\n }\n\n if (!this.tooltip) {\n this.add();\n this.move(e, this.tooltip);\n }\n }\n\n onMouseLeave() {\n this.destroy();\n }\n\n onMouseMove(e) {\n if (!this.panel.tooltip.show) {\n return;\n }\n\n this.move(e, this.tooltip);\n }\n\n add() {\n this.tooltip = d3\n .select('body')\n .append('div')\n .attr('class', 'graph-tooltip statusmap-tooltip');\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.remove();\n }\n\n this.tooltip = null;\n }\n\n removeFrozen() {\n if (this.tooltipFrozen) {\n this.tooltipFrozen.remove();\n this.tooltipFrozen = null;\n }\n }\n\n showFrozen(pos: any) {\n this.removeFrozen();\n this.tooltipFrozen = d3\n .select(this.panelElem[0])\n .append('div')\n .attr('class', 'graph-tooltip statusmap-tooltip statusmap-tooltip-frozen');\n this.displayTooltip(pos, this.tooltipFrozen, true);\n this.moveRelative(pos, this.tooltipFrozen);\n }\n\n show(pos: any) {\n if (!this.panel.tooltip.show || !this.tooltip) {\n return;\n }\n\n // TODO support for shared tooltip mode\n if (pos.panelRelY) {\n return;\n }\n\n this.displayTooltip(pos, this.tooltip, false);\n\n this.move(pos, this.tooltip);\n }\n\n // Retrieve bucket and create html content inside tooltip’s div element.\n displayTooltip(pos: any, tooltip: any, frozen: boolean) {\n let cardEl = d3.select(pos.target);\n let yid = cardEl.attr('yid');\n let xid = cardEl.attr('xid');\n // @ts-ignore\n let bucket = this.panelCtrl.bucketMatrix.get(yid, xid); // TODO string-to-number conversion for xid\n if (!bucket || bucket.isEmpty()) {\n this.destroy();\n return;\n }\n\n let timestamp = bucket.to;\n let yLabel = bucket.yLabel;\n let pLabels = bucket.pLabels;\n let value = bucket.value;\n let values = bucket.values;\n // TODO create option for this formatting.\n let tooltipTimeFormat = 'YYYY-MM-DD HH:mm:ss';\n let time: Date = this.dashboard.formatDate(+timestamp, tooltipTimeFormat);\n\n // Close button for the frozen tooltip.\n let tooltipClose = ``;\n if (frozen) {\n tooltipClose = `\n\n \n\n`;\n }\n\n let tooltipHtml = `
${time}${tooltipClose}
`;\n\n if (this.panel.color.mode === 'discrete') {\n let statuses;\n if (this.panel.seriesFilterIndex >= 0) {\n statuses = this.panelCtrl.discreteExtraSeries.convertValueToTooltips(value);\n } else {\n statuses = this.panelCtrl.discreteExtraSeries.convertValuesToTooltips(values);\n }\n\n let statusTitle = 'status:';\n if (statuses.length > 1) {\n statusTitle = 'statuses:';\n }\n tooltipHtml += `\n
\n name: ${yLabel}\n
\n ${statusTitle}\n
    \n ${_.join(\n _.map(\n statuses,\n v => `
  • ${v.tooltip}
  • `\n ),\n ''\n )}\n
\n
`;\n } else {\n if (values.length === 1) {\n tooltipHtml += `
\n name: ${yLabel}
\n value: ${value}
\n
`;\n } else {\n tooltipHtml += `
\n name: ${yLabel}
\n values:\n
    \n ${_.join(\n _.map(values, v => `
  • ${v}
  • `),\n ''\n )}\n
\n
`;\n }\n }\n\n tooltipHtml += `
`;\n\n if (this.panel.tooltip.showItems) {\n // Additional information: urls, etc.\n // Clone additional items\n let items: any = JSON.parse(JSON.stringify(this.panel.tooltip.items));\n\n let scopedVars = {};\n\n let valueVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueVar = `__value_${i}`;\n scopedVars[valueVar] = { value: bucket.values[i] };\n }\n scopedVars['__value'] = { value: bucket.value };\n scopedVars['__y_label'] = { value: yLabel };\n scopedVars['__y_label_trim'] = { value: yLabel.trim() };\n // Grafana 7.0 compatible\n scopedVars['__url_time_range'] = { value: this.panelCtrl.retrieveTimeVar() };\n\n //New vars based on partialLabels:\n for (let i in pLabels) {\n scopedVars[`__y_label_${i}`] = { value: pLabels[i] };\n }\n\n for (let item of items) {\n if (_.isEmpty(item.urlTemplate)) {\n item.link = '#';\n } else {\n let dateFormat = item.valueDateFormat;\n if (dateFormat === '') {\n dateFormat = DefaultValueDateFormat;\n }\n let valueDateVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueDateVar = `__value_${i}_date`;\n scopedVars[valueDateVar] = { value: this.dashboard.formatDate(+bucket.values[i], dateFormat) };\n }\n scopedVars['__value_date'] = { value: this.dashboard.formatDate(+bucket.value, dateFormat) };\n\n item.link = this.panelCtrl.templateSrv.replace(item.urlTemplate, scopedVars);\n\n // Force lowercase for link\n if (item.urlToLowerCase) {\n item.link = item.link.toLowerCase();\n }\n }\n\n item.label = item.urlText;\n if (_.isEmpty(item.label)) {\n item.label = _.isEmpty(item.urlTemplate) ? 'Empty URL' : _.truncate(item.link);\n }\n }\n\n if (this.panel.tooltip.showCustomContent) {\n let customContent: string = this.panelCtrl.templateSrv.replace(this.panel.tooltip.customContent, scopedVars);\n tooltipHtml += `
${customContent}
`;\n }\n\n tooltipHtml += _.join(\n _.map(\n items,\n v => `\n
\n \n
\n
`\n ),\n '\\n'\n );\n }\n\n // Ambiguous state: there multiple values in bucket!\n // TODO rename useMax to expectMultipleValues\n if (!this.panel.useMax && bucket.multipleValues) {\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.multipleValues.title}
`;\n }\n\n // Discrete mode errors\n if (this.panel.color.mode === 'discrete') {\n if (bucket.noColorDefined) {\n let badValues = this.panelCtrl.discreteExtraSeries.getNotColoredValues(values);\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.noColorDefined.title}\n
not colored values:\n
    \n ${_.join(\n _.map(badValues, v => `
  • ${v}
  • `),\n ''\n )}\n
\n
`;\n }\n }\n\n tooltip.html(tooltipHtml);\n\n // Assign mouse event handlers for \"frozen\" tooltip.\n if (frozen) {\n // Stop propagation mouse events up to parents to allow interaction with frozen tooltip’s elements.\n tooltip\n .on('click', function() {\n // @ts-ignore\n d3.event.stopPropagation();\n })\n .on('mousedown', function() {\n // @ts-ignore\n d3.event.stopPropagation();\n })\n .on('mouseup', function() {\n // @ts-ignore\n d3.event.stopPropagation();\n });\n\n // Activate close button\n tooltip.select('a.tooltip-close').on('click', this.removeFrozen.bind(this));\n }\n }\n\n // Move tooltip as absolute positioned element.\n move(pos, tooltip) {\n if (!tooltip) {\n return;\n }\n\n let elem = $(tooltip.node())[0];\n let tooltipWidth = elem.clientWidth;\n this.tooltipWidth = tooltipWidth;\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 tooltip.style('left', left + 'px').style('top', top + 'px');\n }\n\n // Move tooltip relative to svg element of panel.\n moveRelative(pos, tooltip) {\n if (!tooltip) {\n return;\n }\n\n let panelX = pos.pageX - this.panelElem.offset().left;\n let panelY = pos.pageY - this.panelElem.offset().top;\n let panelWidth = this.panelElem.width();\n let panelHeight = this.panelElem.height();\n\n // 'position: relative' sets tooltip’s width to 100% of panel element.\n // Restore width from floating tooltip and add more space for 'Close' button.\n let tooltipWidth = this.tooltipWidth + 25;\n\n // Left property is clamped so tooltip stays inside panel bound box.\n let tooltipLeft = panelX + TOOLTIP_PADDING_X;\n if (tooltipLeft + tooltipWidth > panelWidth) {\n tooltipLeft = panelWidth - tooltipWidth;\n }\n if (tooltipLeft < 0) {\n tooltipLeft = 0;\n }\n\n // Frozen tooltip’s root element is appended next to panel’s svg element,\n // so top property is adjusted to move tooltip’s root element\n // up to the mouse pointer position.\n let tooltipTop = -(panelHeight - panelY + TOOLTIP_PADDING_Y);\n\n return tooltip\n .style('left', tooltipLeft + 'px')\n .style('top', tooltipTop + 'px')\n .style('width', tooltipWidth + 'px');\n }\n}\n","import * as 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)) {\n return;\n }\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) {\n return;\n }\n\n this.move(e);\n }\n\n add() {\n this.tooltipBase = d3\n .select('body')\n .append('div')\n .attr(\n 'class',\n '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 )\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 show(pos) {\n if (!this.panel.tooltip.show || !this.tooltip) {\n return;\n }\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(\n _.map(\n annoTags,\n t =>\n `${t.text}`\n ),\n ''\n )}\n
\n
`;\n\n this.tooltip.html(tooltipHtml);\n\n this.move(pos);\n }\n\n move(pos) {\n if (!this.tooltipBase) {\n return;\n }\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.style('left', left + 'px').style('top', top + 'px');\n }\n}\n","import _ from 'lodash';\nimport $ from 'jquery';\n\n// TODO moment is used instead of @grafana/data to run in 6.2 and earlier.\n/* eslint-disable id-blacklist, no-restricted-imports, @typescript-eslint/ban-types */\nimport moment from 'moment';\n\nimport kbn from 'grafana/app/core/utils/kbn';\nimport { appEvents, contextSrv } from 'grafana/app/core/core';\nimport * as d3 from 'd3';\nimport { d3ScaleChromatic } from './d3/d3-scale-chromatic';\nimport { StatusmapTooltip } from './tooltip';\nimport { AnnotationTooltip } from './annotations';\nimport { Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data';\nimport { StatusHeatmapCtrl, renderComplete } from './module';\nimport { CoreEvents, PanelEvents } from './libs/grafana/events/index';\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 // @ts-ignore\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\n// @ts-ignore\nclass Statusmap {\n $svg: any;\n svg: any;\n bucketMatrix: BucketMatrix;\n\n timeRange: { from: number; to: number } = { from: 0, to: 0 };\n\n constructor() {}\n}\n\nexport class StatusmapRenderer {\n width = 0;\n height = 0;\n yScale: any;\n xScale: any;\n chartWidth = 0;\n chartHeight = 0;\n chartTop = 0;\n chartBottom = 0;\n yAxisWidth = 0;\n xAxisHeight = 0;\n cardVSpacing = 0;\n cardHSpacing = 0;\n cardRound = 0;\n cardWidth = 0;\n cardHeight = 0;\n colorScale: any;\n opacityScale: any;\n mouseUpHandler: any;\n xGridSize = 0;\n yGridSize = 0;\n\n bucketMatrix: BucketMatrix;\n bucketMatrixPager: BucketMatrixPager;\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: StatusHeatmapCtrl) {\n // $heatmap is JQuery object, but heatmap is D3\n this.$heatmap = this.elem.find('.statusmap-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(PanelEvents.render, this.onRender.bind(this));\n\n // @ts-ignore\n this.ctrl.tickValueFormatter = this.tickValueFormatter.bind(this);\n\n /////////////////////////////\n // Selection and crosshair //\n /////////////////////////////\n\n // Shared crosshair and tooltip this.empty = true;\n\n appEvents.on(CoreEvents.graphHover, this.onGraphHover.bind(this), this.scope);\n\n appEvents.on(CoreEvents.graphHoverClear, 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 this.$heatmap.on('click', this.onMouseClick.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 setElementHeight(): boolean {\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 if (this.panel.usingPagination) {\n // TODO get height of pagination controls.\n // reserve height for legend and for a row of pagination controls.\n height -= this.panel.legend.show ? 70 : 40; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !\n } else {\n // reserve height for legend\n height -= this.panel.legend.show ? 32 : 4; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !\n }\n\n this.$heatmap.css('height', height + 'px');\n\n return true;\n } catch (e) {\n // IE throws errors sometimes\n return false;\n }\n }\n\n getYAxisWidth(elem: any): number {\n const axisText = elem.selectAll('.axis-y text').nodes();\n const maxTextWidth = _.max(\n _.map(axisText, text => {\n // Use SVG getBBox method\n return text.getBBox().width;\n })\n );\n\n return Math.ceil(maxTextWidth);\n }\n\n getXAxisHeight(elem: any): number {\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 // Buckets without the most recent\n this.scope.xScale = this.xScale = d3\n .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\n .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: any[]) {\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\n .scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n // divide chart height by ticks with offset for ticks drawing\n getYAxisScale(ticks: any[]) {\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\n .scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n addYAxis() {\n let ticks = this.bucketMatrixPager.targets();\n\n // TODO move sorting into bucketMatrixPager.\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 // @ts-ignore\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\n .select('.axis-y')\n .select('.domain')\n .remove();\n this.heatmap\n .select('.axis-y')\n .selectAll('.tick line')\n .remove();\n }\n\n // Wide Y values range and adjust to bucket size\n wideYAxisRange(min: number, max: number, tickInterval: number) {\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 addStatusmapCanvas() {\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 // Insert svg as a first child into heatmap_elem\n // as the frozen tooltip moving logiс assumes that tooltip is the last child.\n this.heatmap = d3\n .select(heatmap_elem)\n .insert('svg', ':first-child')\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 = this.chartHeight;\n if (this.bucketMatrixPager.targets().length > 0) {\n this.yGridSize = Math.floor(this.chartHeight / this.bucketMatrixPager.targets().length);\n }\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.bucketMatrix.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\n .select('.axis-y')\n .selectAll('line')\n .style('opacity', 0);\n }\n\n if (!this.panel.xAxis.show) {\n this.heatmap\n .select('.axis-x')\n .selectAll('line')\n .style('opacity', 0);\n }\n }\n\n addStatusmap(): void {\n let maxValue = this.panel.color.max != null ? this.panel.color.max : this.bucketMatrix.maxValue;\n let minValue = this.panel.color.min != null ? this.panel.color.min : this.bucketMatrix.minValue;\n\n if (this.panel.color.mode !== 'discrete') {\n this.colorScale = this.getColorScale(maxValue, minValue);\n }\n this.setOpacityScale(maxValue);\n\n // Draw cards from buckets.\n this.heatmap\n .selectAll('.statusmap-cards-row')\n .data(this.bucketMatrixPager.targets())\n .enter()\n .selectAll('.statustmap-card')\n .data((target: string) => this.bucketMatrix.buckets[target])\n .enter()\n .append('rect')\n .attr('cardId', (b: Bucket) => b.id)\n .attr('xid', (b: Bucket) => b.xid)\n .attr('yid', (b: Bucket) => b.yLabel)\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', (b: Bucket) => (b.isEmpty() ? 'empty-card' : 'bordered statusmap-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 // Set mouse events on cards.\n let $cards = this.$heatmap.find('.statusmap-card + .bordered');\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(renderComplete, {\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 // @ts-ignore\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted =\n // @ts-ignore\n colorScheme.invert === 'always' || (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n if (maxValue === minValue) {\n maxValue = minValue + 1;\n }\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\n .scaleLinear()\n .domain([0, maxValue])\n .range([0, 1]);\n } else if (this.panel.color.colorScale === 'sqrt') {\n this.opacityScale = d3\n .scalePow()\n .exponent(this.panel.color.exponent)\n .domain([0, maxValue])\n .range([0, 1]);\n }\n }\n\n getCardX(b: Bucket) {\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 let rightX = (b.relTo / this.bucketMatrix.rangeMs) * this.chartWidth;\n let cx = rightX - this.cardWidth / 2;\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(b: Bucket) {\n //return 20;\n let w;\n\n let rightX = (b.relTo / this.bucketMatrix.rangeMs) * this.chartWidth;\n let cx = rightX - this.cardWidth / 2;\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 // Top y for card.\n // yScale gives ???\n getCardY(b: Bucket) {\n return this.yScale(b.yLabel) + this.chartTop - this.cardHeight - this.cardVSpacing / 2;\n }\n\n getCardHeight(b: Bucket) {\n //return 20;\n let ys = this.yScale(b.yLabel);\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(bucket: Bucket) {\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(bucket.value);\n } else if (this.panel.color.mode === 'discrete') {\n if (this.panel.seriesFilterIndex !== null && this.panel.seriesFilterIndex !== -1) {\n return this.ctrl.discreteExtraSeries.getBucketColorSingle(bucket.values[this.panel.seriesFilterIndex]);\n } else {\n return this.ctrl.discreteExtraSeries.getBucketColor(bucket.values);\n }\n }\n }\n\n getCardOpacity(bucket: Bucket) {\n if (this.panel.nullPointMode === 'as empty' && bucket.value == null) {\n return 0;\n }\n if (this.panel.color.mode === 'opacity') {\n return this.opacityScale(bucket.value);\n } else {\n return 1;\n }\n }\n\n getCardStrokeWidth(b: Bucket) {\n if (this.panel.color.mode === 'discrete') {\n return '1';\n }\n return '0';\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(\n Math.min(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize / 2\n );\n let timeTo = this.xScale.invert(\n Math.max(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize / 2\n );\n\n // TODO use toUtc method from moment wrapper in @grafana/data\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(e) {\n appEvents.emit(CoreEvents.graphHoverClear);\n this.clearCrosshair();\n this.annotationTooltip.destroy();\n }\n\n onMouseMove(event: MouseEvent) {\n if (!this.heatmap) {\n return;\n }\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);\n this.annotationTooltip.show(event);\n }\n }\n\n // TODO emit an event and move logic to panelCtrl\n onMouseClick(e: MouseEvent) {\n if (this.ctrl.panel.tooltip.freezeOnClick) {\n this.tooltip.showFrozen(e);\n this.tooltip.destroy();\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,\n x1: x,\n y: y,\n 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(CoreEvents.graphHover, { 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\n .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 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\n .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 render() {\n this.panel = this.ctrl.panel;\n this.timeRange = this.ctrl.range;\n this.bucketMatrix = this.ctrl.bucketMatrix;\n this.bucketMatrixPager = this.ctrl.bucketMatrixPager;\n\n if (!this.bucketMatrix || !this.setElementHeight()) {\n return;\n }\n\n // Draw default axes and return if no data\n this.addStatusmapCanvas();\n if (this.bucketMatrix.noDatapoints) {\n return;\n }\n\n this.addStatusmap();\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 let annoData = _.map(this.ctrl.annotations, (d, i) => ({\n // @ts-ignore\n x: Math.floor(this.yAxisWidth + this.xScale(d.time)),\n id: i,\n // @ts-ignore\n anno: d.source,\n }));\n\n //({\"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()\n .append('g');\n\n anno\n .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\n .append('polygon')\n .attr('points', d =>\n [\n [d.x, this.chartBottom + 1],\n [d.x - 5, this.chartBottom + 6],\n [d.x + 5, this.chartBottom + 6],\n ].join(' ')\n )\n .style('stroke-width', 0)\n .style('fill', d => d.anno.iconColor);\n\n // Polygons didn't fire mouseevents\n anno\n .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 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","import { Emitter } from 'grafana/app/core/utils/emitter';\n\n// Old Grafana releases use strings as event ids and\n// new event ids in form of object {name: \"event-id\"} are not\n// supported properly: first defined listener will receive\n// all emitted events despite of the value in 'name' field.\n//\n// This method detects this behaviour and return true\n// only for new Grafana versions.\nexport function hasAppEventCompatibleEmitter(emitter: Emitter): boolean {\n // Grafana 7.4 has new event bus for Angular plugins. It is has a 'subscribe' method.\n let emitterProto = Object.getPrototypeOf(emitter);\n if (Object.prototype.hasOwnProperty.call(emitterProto, 'subscribe')) {\n return true;\n }\n\n let receiveEvents = 0;\n let eventId: any = { name: 'non-existed-event-id' };\n let eventId2: any = { name: 'non-existed-event-id-2' };\n emitter.on(eventId, function() {\n receiveEvents++;\n });\n emitter.emit(eventId);\n emitter.emit(eventId2);\n emitter.removeAllListeners(eventId);\n\n // New Grafana versions should receive one event.\n return receiveEvents === 1;\n}\n","import _ from 'lodash';\nimport { Bucket } from './statusmap_data';\nimport { StatusHeatmapCtrl } from './module';\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// Extra Series 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 convertValueToTooltips(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 === thresholds[i].value) {\n tooltips.push({\n tooltip: thresholds[i].tooltip ? thresholds[i].tooltip : values,\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 getBucketColorSingle(value) {\n //let thresholds = this.panel.color.thresholds;\n if (value == null) {\n // treat as null value\n return 'rgba(0,0,0,1)';\n //return this.getMatchedThreshold(null).color;\n }\n let threshold = this.getMatchedThreshold(value);\n\n if (!threshold || !threshold.color || threshold.color === '') {\n return 'rgba(0,0,0,1)';\n } else {\n return threshold.color;\n }\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 updateCardsValuesHasColorInfoSingle() {\n if (!this.panelCtrl.bucketMatrix) {\n return;\n }\n this.panelCtrl.bucketMatrix.noColorDefined = false;\n\n this.panelCtrl.bucketMatrix.targets.map((target: string) => {\n this.panelCtrl.bucketMatrix.buckets[target].map((bucket: Bucket) => {\n bucket.noColorDefined = false;\n let threshold = this.getMatchedThreshold(bucket.value);\n if (!threshold || !threshold.color || threshold.color === '') {\n bucket.noColorDefined = true;\n this.panelCtrl.bucketMatrix.noColorDefined = true;\n }\n });\n });\n }\n\n updateCardsValuesHasColorInfo() {\n if (!this.panelCtrl.bucketMatrix) {\n return;\n }\n this.panelCtrl.bucketMatrix.noColorDefined = false;\n\n this.panelCtrl.bucketMatrix.targets.map((target: string) => {\n this.panelCtrl.bucketMatrix.buckets[target].map((bucket: Bucket) => {\n bucket.noColorDefined = false;\n for (let j = 0; j < bucket.values.length; j++) {\n let threshold = this.getMatchedThreshold(bucket.values[j]);\n if (!threshold || !threshold.color || threshold.color === '') {\n bucket.noColorDefined = true;\n this.panelCtrl.bucketMatrix.noColorDefined = true;\n break;\n }\n }\n });\n });\n }\n\n getMatchedThreshold(value) {\n if (value == null) {\n if (this.panel.nullPointMode === 'as empty') {\n // FIXME: make this explicit for user\n // Right now this color never used because null as empty handles in getCardOpacity method.\n return {\n color: 'rgba(0,0,0,0)',\n value: 'null',\n tooltip: 'null',\n };\n } else {\n value = 0;\n }\n }\n\n let thresholds = this.panel.color.thresholds;\n for (let k = 0; k < thresholds.length; k++) {\n if (value === thresholds[k].value) {\n return thresholds[k];\n }\n }\n return null;\n }\n\n getThreshold(index) {\n let thresholds = this.panel.color.thresholds;\n if (index < 0 || index >= 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","// Libraries\nimport _ from 'lodash';\nimport { auto } from 'angular';\n\n// Components\nimport './color_legend';\nimport { optionsEditorCtrl } from './options_editor';\nimport { tooltipEditorCtrl } from './tooltip_editor';\nimport { migratePanelConfig } from './panel_config_migration';\n\n// Utils\nimport kbn from 'grafana/app/core/utils/kbn';\nimport { loadPluginCss } from 'grafana/app/plugins/sdk';\n\n// Types\nimport { MetricsPanelCtrl } from 'grafana/app/plugins/sdk';\nimport { AnnotationsSrv } from 'grafana/app/features/annotations/annotations_srv';\nimport { CoreEvents, PanelEvents } from './libs/grafana/events/index';\nimport { Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data';\nimport rendering from './rendering';\nimport { Polygrafill } from './libs/polygrafill/index';\n\nimport { ColorModeDiscrete } from './color_mode_discrete';\n\nconst VALUE_INDEX = 0,\n TIME_INDEX = 1;\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\nloadPluginCss({\n dark: 'plugins/flant-statusmap-panel/styles/dark.css',\n light: 'plugins/flant-statusmap-panel/styles/light.css',\n});\n\nexport var renderComplete: any = { name: 'statusmap-render-complete' };\n\nclass StatusHeatmapCtrl extends MetricsPanelCtrl {\n static templateUrl = 'module.html';\n\n data: any;\n bucketMatrix: BucketMatrix;\n bucketMatrixPager: BucketMatrixPager;\n\n graph: any;\n opacityScales: any = [];\n colorModes: any = [];\n colorSchemes: any = [];\n unitFormats: any;\n\n dataWarnings: { [warningId: string]: { title: string; tip: string } } = {};\n multipleValues: boolean;\n noColorDefined: boolean;\n noDatapoints: boolean;\n\n discreteExtraSeries: ColorModeDiscrete;\n\n annotations: object[] = [];\n annotationsPromise: any;\n\n // TODO remove this transient variable: use ng-model-options=\"{ getterSetter: true }\"\n pageSizeViewer = 15;\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 },\n yAxis: {\n show: true,\n minWidth: -1,\n maxWidth: -1,\n },\n tooltip: {\n show: true,\n freezeOnClick: true,\n showItems: false,\n items: [], // see tooltip_editor.ts\n showExtraInfo: false,\n extraInfo: '',\n },\n legend: {\n show: true,\n },\n yLabel: {\n usingSplitLabel: false,\n delimiter: '',\n labelTemplate: '',\n },\n // how null points should be handled\n nullPointMode: 'as empty',\n yAxisSort: 'metrics',\n highlightCards: true,\n useMax: true,\n\n seriesFilterIndex: -1,\n\n // Pagination options\n usingPagination: false,\n pageSize: 15,\n };\n\n /** @ngInject */\n constructor($scope: any, $injector: auto.IInjectorService, private annotationsSrv: AnnotationsSrv) {\n super($scope, $injector);\n\n if (!Polygrafill.hasAppEventCompatibleEmitter(this.events)) {\n CoreEvents.fallbackToStringEvents();\n PanelEvents.fallbackToStringEvents();\n renderComplete = 'statusmap-render-complete';\n }\n\n // Grafana 7.2 workaround\n if (typeof kbn['intervalToMs'] === 'function') {\n kbn.interval_to_ms = kbn.intervalToMs;\n }\n\n migratePanelConfig(this.panel);\n _.defaultsDeep(this.panel, this.panelDefaults);\n\n this.bucketMatrix = new BucketMatrix();\n\n // Create pager for bucketMatrix and restore page size.\n this.bucketMatrixPager = new BucketMatrixPager();\n this.bucketMatrixPager.setEnable(this.panel.usingPagination);\n this.bucketMatrixPager.setDefaultPageSize(this.panel.pageSize);\n this.bucketMatrixPager.setPageSize(this.panel.pageSize);\n $scope.pager = this.bucketMatrixPager;\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.discreteExtraSeries = 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 noDatapoints: {\n title: 'No data points',\n tip: 'No datapoints returned from data query',\n },\n };\n\n this.annotations = [];\n this.annotationsSrv = annotationsSrv;\n\n this.events.on(PanelEvents.render, this.onRender.bind(this));\n this.events.on(PanelEvents.dataReceived, this.onDataReceived.bind(this));\n this.events.on(PanelEvents.dataError, this.onDataError.bind(this));\n this.events.on(PanelEvents.dataSnapshotLoad, this.onDataReceived.bind(this));\n this.events.on(PanelEvents.editModeInitialized, this.onInitEditMode.bind(this));\n this.events.on(PanelEvents.refresh, this.postRefresh.bind(this));\n // custom event from rendering.js\n this.events.on(renderComplete, this.onRenderComplete.bind(this));\n\n this.onCardColorChange = this.onCardColorChange.bind(this);\n }\n\n onRenderComplete(data: any): void {\n this.graph.chartWidth = data.chartWidth;\n this.renderingCompleted();\n }\n\n changeDefaultPaginationSize(defaultPageSize: number): void {\n this.bucketMatrixPager.setDefaultPageSize(defaultPageSize);\n this.bucketMatrixPager.setPageSize(defaultPageSize);\n this.pageSizeViewer = defaultPageSize;\n\n this.render();\n this.refresh();\n }\n\n onChangePageSize(): void {\n if (this.pageSizeViewer <= 0) {\n this.pageSizeViewer = this.bucketMatrixPager.defaultPageSize;\n }\n this.bucketMatrixPager.setPageSize(this.pageSizeViewer);\n this.bucketMatrixPager.setCurrent(0);\n\n this.render();\n this.refresh();\n }\n\n onPrevPage(): void {\n this.bucketMatrixPager.switchToPrev();\n this.render();\n }\n\n onNextPage(): void {\n this.bucketMatrixPager.switchToNext();\n this.render();\n }\n\n // getChartWidth returns an approximation of chart canvas width or\n // a saved value calculated during a render.\n getChartWidth(): number {\n if (this.graph.chartWidth > 0) {\n return this.graph.chartWidth;\n }\n\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 width of the chart draw canvas:\n // - y axis ticks are not rendered yet on first data receive,\n // so choose 200 as a decent value for y legend width\n // - chartWidth can not be lower than the half of the panel width.\n const chartWidth = _.max([panelWidth - 200, panelWidth / 2]);\n\n return chartWidth!;\n }\n\n // Quick workaround for 6.7 and 7.0+. There is no call to\n // calculateInterval in updateTimeRange in those versions.\n // TODO ts type has no argument for this method.\n //\n updateTimeRange(datasource?: any) {\n // @ts-ignore\n let ret = super.updateTimeRange(datasource);\n this.calculateInterval();\n return ret;\n }\n\n // calculateInterval is called on 'refresh' to calculate an interval\n // for datasource.\n // It is override of calculateInterval from MetricsPanelCtrl.\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.discreteExtraSeries.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 // Get final buckets count after interval is adjusted\n // TODO is it needed?\n //this.xBucketsCount = Math.floor(rangeMs / intervalMs);\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 // @ts-ignore\n if ('undefined' !== typeof this.annotationsSrv.datasourcePromises) {\n // @ts-ignore\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 = interval;\n var res = super.issueQueries(datasource);\n this.panel.interval = origInterval;\n return res;\n }\n\n onDataReceived(dataList: any) {\n this.data = dataList;\n // Quick workaround for 7.0+. There is no call to\n // calculateInterval when enter Edit mode.\n if (!this.intervalMs) {\n this.calculateInterval();\n }\n\n let newBucketMatrix = this.convertDataToBuckets(\n dataList,\n this.range.from.valueOf(),\n this.range.to.valueOf(),\n this.intervalMs,\n true\n );\n\n this.bucketMatrix = newBucketMatrix;\n this.bucketMatrixPager.bucketMatrix = newBucketMatrix;\n if (newBucketMatrix.targets.length !== this.bucketMatrix.targets.length) {\n this.bucketMatrixPager.setCurrent(0);\n }\n\n this.noDatapoints = this.bucketMatrix.noDatapoints;\n\n if (this.annotationsPromise) {\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 this.render();\n },\n () => {\n this.loading = false;\n this.annotations = [];\n this.render();\n }\n );\n } else {\n this.loading = false;\n this.annotations = [];\n this.render();\n }\n }\n\n onInitEditMode() {\n this.addEditorTab('Options', optionsEditorCtrl, 2);\n this.addEditorTab('Tooltip', tooltipEditorCtrl, 3);\n this.unitFormats = kbn.getUnitFormats();\n }\n\n // onRender will be called before StatusmapRenderer.onRender.\n // Decide if warning should be displayed over cards.\n onRender() {\n if (!this.range || !this.data) {\n this.noDatapoints = true;\n return;\n }\n\n this.multipleValues = false;\n if (!this.panel.useMax) {\n if (this.bucketMatrix) {\n this.multipleValues = this.bucketMatrix.multipleValues;\n }\n }\n\n this.noColorDefined = false;\n if (this.panel.color.mode === 'discrete') {\n if (this.panel.seriesFilterIndex === -1) {\n this.discreteExtraSeries.updateCardsValuesHasColorInfo();\n } else {\n this.discreteExtraSeries.updateCardsValuesHasColorInfoSingle();\n }\n if (this.bucketMatrix) {\n this.noColorDefined = this.bucketMatrix.noColorDefined;\n }\n }\n\n this.noDatapoints = false;\n if (this.bucketMatrix) {\n this.noDatapoints = this.bucketMatrix.noDatapoints;\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 link(scope, elem, attrs, ctrl) {\n rendering(scope, elem, attrs, ctrl);\n }\n\n // Compatible with Grafana 7.0 overrides feature.\n retrieveTimeVar() {\n var time = this.timeSrv.timeRangeForUrl();\n return 'from=' + time.from + '&to=' + time.to;\n }\n\n // convertToBuckets groups values in data into buckets by target and timestamp.\n //\n // data is a result from datasource. It is an array of timeseries and tables:\n /* [\n // timeseries\n {\n target: \"query alias\",\n refId: \"A\",\n datapoints: [\n [0, 1582681239911],\n [3, 158....],\n ...\n ],\n tags?:{key: value,...}\n },\n // table\n {\n name: \"table name\",\n refId: \"B\",\n columns: [\n {text: \"id\"},\n {text: \"info\"},\n ...\n ],\n rows: [\n [1, \"123\"],\n [2, \"44411\"],\n ...\n ]\n },\n...\n ]\n\n to and from — a time range of the panel.\n intervalMs — a calculated interval. It is used to split a time range.\n */\n convertDataToBuckets(\n data: any,\n from: number,\n to: number,\n intervalMs: number,\n mostRecentBucket: boolean\n ): BucketMatrix {\n let bucketMatrix = new BucketMatrix();\n bucketMatrix.rangeMs = to - from;\n bucketMatrix.intervalMs = intervalMs;\n\n if (!data || data.length === 0) {\n // Mimic heatmap and graph 'no data' labels.\n bucketMatrix.targets = ['1.0', '0.0', '-1.0'];\n bucketMatrix.buckets['1.0'] = [];\n bucketMatrix.buckets['0.0'] = [];\n bucketMatrix.buckets['-1.0'] = [];\n bucketMatrix.xBucketSize = 42;\n bucketMatrix.noDatapoints = true;\n return bucketMatrix;\n }\n\n let targetIndex: { [target: string]: number[] } = {};\n let targetPartials: { [target: string]: string[] } = {};\n\n // Group indicies of elements in data by target (y label).\n\n // lodash version:\n //_.map(data, (d, i) => {\n // targetIndex[d.target] = _.concat(_.toArray(targetIndex[d.target]), i);\n //});\n\n data.map((queryResult: any, i: number) => {\n // Init yLabel as the query target\n let yLabel = queryResult.target;\n\n // Check if there is some labelTemplate configured\n if (this.panel.yLabel.usingSplitLabel && this.panel.yLabel.delimiter !== '') {\n let pLabels = queryResult.target.split(this.panel.yLabel.delimiter);\n\n // Load all possible values as scoped vars and load them into targetPartials\n // to be used on different components as Bucket and BucketMatrix props\n let scopedVars = [];\n scopedVars[`__y_label`] = { value: yLabel };\n for (let i in pLabels) {\n scopedVars[`__y_label_${i}`] = { value: pLabels[i] };\n }\n\n if (this.panel.yLabel.labelTemplate !== '') {\n yLabel = this.templateSrv.replace(this.panel.yLabel.labelTemplate, scopedVars);\n }\n\n targetPartials[yLabel] = pLabels;\n }\n\n //reset if it already exists\n if (!targetIndex.hasOwnProperty(yLabel)) {\n targetIndex[yLabel] = [];\n }\n targetIndex[yLabel].push(i);\n });\n\n let targetKeys = _.keys(targetIndex);\n\n //console.log (\"targetIndex: \", targetIndex, \"targetKeys: \", targetKeys);\n\n let targetTimestampRanges: { [target: string]: { [timestamp: number]: number[] } } = {};\n\n // Collect all timestamps for each target.\n // Make map timestamp => [from, to]. from == previous ts, to == ts from datapoint.\n targetKeys.map(target => {\n let targetTimestamps: any[] = [];\n\n for (let si = 0; si < targetIndex[target].length; si++) {\n let s = data[targetIndex[target][si]];\n _.map(s.datapoints, (datapoint, idx) => {\n targetTimestamps.push(datapoint[TIME_INDEX] - from);\n });\n }\n\n //console.log(\"timestamps['\"+target+\"'] = \", targetTimestamps);\n\n targetTimestamps = _.uniq(targetTimestamps);\n\n //console.log(\"uniq timestamps['\"+target+\"'] = \", targetTimestamps);\n\n targetTimestampRanges[target] = [];\n for (let i = targetTimestamps.length - 1; i >= 0; i--) {\n let tsTo = targetTimestamps[i];\n let tsFrom = 0;\n if (tsTo < 0) {\n tsFrom = tsTo - intervalMs;\n } else {\n if (i - 1 >= 0) {\n // Set from to previous timestamp + 1ms;\n tsFrom = targetTimestamps[i - 1] + 1;\n // tfTo - tfFrom should not be more than intervalMs\n let minFrom = tsTo - intervalMs;\n if (tsFrom < minFrom) {\n tsFrom = minFrom;\n }\n }\n }\n targetTimestampRanges[target][tsTo] = [tsFrom, tsTo];\n }\n });\n\n // console.log (\"targetTimestampRanges: \", targetTimestampRanges);\n\n // Create empty buckets using intervalMs to calculate ranges.\n // If mostRecentBucket is set, create a bucket with a range \"to\":\"to\"\n // to store most recent values.\n targetKeys.map(target => {\n let targetEmptyBuckets: any[] = [];\n\n let lastTs = to - from;\n\n if (mostRecentBucket) {\n let topBucket = new Bucket();\n topBucket.yLabel = target;\n topBucket.relTo = lastTs;\n topBucket.relFrom = lastTs;\n topBucket.values = [];\n topBucket.mostRecent = true;\n if (targetTimestampRanges[target].hasOwnProperty(lastTs)) {\n topBucket.relFrom = targetTimestampRanges[target][lastTs][0];\n lastTs = topBucket.relFrom;\n }\n topBucket.to = topBucket.relTo + from;\n topBucket.from = topBucket.relFrom + from;\n targetEmptyBuckets.push(topBucket);\n }\n\n let idx = 0;\n let bucketFrom = 0;\n while (bucketFrom >= 0) {\n let b = new Bucket();\n b.yLabel = target;\n b.pLabels = targetPartials[target];\n b.relTo = lastTs - idx * intervalMs;\n b.relFrom = lastTs - (idx + 1) * intervalMs;\n b.to = b.relTo + from;\n b.from = b.relFrom + from;\n b.values = [];\n bucketFrom = b.relFrom;\n targetEmptyBuckets.push(b);\n idx++;\n }\n\n targetEmptyBuckets.map((bucket, i) => {\n bucket.xid = i;\n });\n\n bucketMatrix.buckets[target] = targetEmptyBuckets;\n });\n\n //console.log (\"bucketMatrix: \", bucketMatrix);\n\n // Put values into buckets.\n bucketMatrix.minValue = Number.MAX_VALUE;\n bucketMatrix.maxValue = Number.MIN_SAFE_INTEGER;\n targetKeys.map(target => {\n targetIndex[target].map(dataIndex => {\n let s = data[dataIndex];\n s.datapoints.map((dp: any) => {\n for (let i = 0; i < bucketMatrix.buckets[target].length; i++) {\n if (bucketMatrix.buckets[target][i].belong(dp[TIME_INDEX])) {\n bucketMatrix.buckets[target][i].put(dp[VALUE_INDEX]);\n }\n }\n });\n });\n bucketMatrix.buckets[target].map(bucket => {\n bucket.minValue = _.min(bucket.values);\n bucket.maxValue = _.max(bucket.values);\n if (bucket.minValue < bucketMatrix.minValue) {\n bucketMatrix.minValue = bucket.minValue;\n }\n if (bucket.maxValue > bucketMatrix.maxValue) {\n bucketMatrix.maxValue = bucket.maxValue;\n }\n bucket.value = bucket.maxValue;\n if (bucket.values.length > 1) {\n bucketMatrix.multipleValues = true;\n bucket.multipleValues = true;\n\n bucket.value =\n this.panel.seriesFilterIndex !== -1 ? bucket.values[this.panel.seriesFilterIndex] : bucket.maxValue;\n }\n });\n });\n\n bucketMatrix.xBucketSize = Number.MIN_SAFE_INTEGER;\n targetKeys.map(target => {\n let bucketsLen: number = bucketMatrix.buckets[target].length;\n if (bucketsLen > bucketMatrix.xBucketSize) {\n bucketMatrix.xBucketSize = bucketsLen;\n }\n });\n\n //console.log (\"bucketMatrix with values: \", bucketMatrix);\n\n bucketMatrix.targets = targetKeys;\n bucketMatrix.pLabels = targetPartials;\n return bucketMatrix;\n }\n}\n\nexport { StatusHeatmapCtrl, StatusHeatmapCtrl as PanelCtrl };\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"lodash\"","webpack:///external \"d3\"","webpack:///external \"jquery\"","webpack:///external \"app/core/utils/kbn\"","webpack:///external \"app/core/core\"","webpack:///external \"app/plugins/sdk\"","webpack:///external \"app/core/core_module\"","webpack:///external \"moment\"","webpack:///external \"app/core/utils/ticks\"","webpack:///../node_modules/tslib/tslib.es6.js","webpack:///../node_modules/d3-scale-chromatic/src/colors.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack:///../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/define.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/color.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/basis.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/constant.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/color.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/rgb.js","webpack:///../node_modules/d3-scale-chromatic/src/ramp.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/basisClosed.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack:///../node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/math.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-color/src/cubehelix.js","webpack:///../node_modules/d3-scale-chromatic/node_modules/d3-interpolate/src/cubehelix.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","webpack:///../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack:///./util/d3/d3-scale-chromatic.ts","webpack:///./util/grafana/events/events.ts","webpack:///./util/grafana/events/panelEvents.ts","webpack:///./color_legend.ts","webpack:///./options_editor.ts","webpack:///./tooltip_editor.ts","webpack:///./panel_config_migration.ts","webpack:///./statusmap_data.ts","webpack:///./tooltip.ts","webpack:///./annotations.ts","webpack:///./rendering.ts","webpack:///./util/polygrafill/funcs.ts","webpack:///./color_mode_discrete.ts","webpack:///./module.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__1__","__WEBPACK_EXTERNAL_MODULE__2__","__WEBPACK_EXTERNAL_MODULE__3__","__WEBPACK_EXTERNAL_MODULE__4__","__WEBPACK_EXTERNAL_MODULE__6__","__WEBPACK_EXTERNAL_MODULE__7__","__WEBPACK_EXTERNAL_MODULE__8__","__WEBPACK_EXTERNAL_MODULE__10__","extendStatics","b","setPrototypeOf","__proto__","Array","__assign","assign","arguments","length","apply","this","__values","iterator","next","done","TypeError","specifier","colors","slice","constructor","factory","extend","parent","definition","Color","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","format","trim","toLowerCase","exec","parseInt","rgbn","Rgb","rgba","hsla","NaN","g","a","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","isNaN","Math","max","min","round","toString","h","Hsl","hslConvert","hsl2rgb","m1","m2","basis","t1","v0","v1","v2","v3","t2","t3","define","copy","channels","displayable","formatHsl","brighter","k","pow","darker","x","linear","gamma","y","nogamma","exponential","constant","color","start","end","rgbGamma","rgbSpline","spline","rgbBasis","values","floor","scheme","concat","map","ramp","radians","PI","degrees","A","B","C","D","E","ED","EB","BC_DA","cubehelixConvert","Cubehelix","bl","sqrt","atan2","hue","cubehelixGamma","cubehelix","cosh","cos","sinh","sin","cubehelixLong","warm","cool","ts","abs","pi_1_3","pi_2_3","range","magma","inferno","plasma","GnYlRdScheme","GnYlRd","d3ScaleChromatic","interpolateGnYlRd","graphHover","graphHoverClear","fallbackToStringEvents","refresh","dataError","dataReceived","dataSnapshotLoad","editModeInitialized","drawLegendValues","elem","colorScale","rangeFrom","rangeTo","maxValue","minValue","legendWidth","legendElem","find","legend","childNodes","legendValueScale","domain","ticks","tickStepSize","ticksNum","current","isValueCloseTo","push","sortBy","uniq","buildLegendTicks","xAxis","tickValues","tickSize","colorRect","posY","getSvgElemHeight","posX","getSvgElemX","append","attr","select","remove","clearLegend","empty","getColorScale","colorScheme","colorInterpolator","colorScaleInverted","invert","user","lightTheme","svgElem","baseVal","height","val","valueTo","step","directive","restrict","template","link","scope","attrs","ctrl","panel","render","outerWidth","colorSchemes","legendHeight","valuesRange","selectAll","data","enter","LEGEND_STEP_WIDTH","drawSimpleColorLegend","colorOptions","options","exponent","cardColor","style","drawSimpleOpacityLegend","events","on","show","bucketMatrix","noDatapoints","rangeStep","widthFactor","drawColorLegend","opacityScale","legendOpacityScale","getOpacityScale","drawOpacityLegend","discreteExtraSeries","thresholds","tooltips","tr","valuesNumber","graphWidthAttr","graphWidth","textWidth","text","each","thisWidth","getBBox","width","itemWidth","getDiscreteColor","thresholdValues","thresholdTooltips","tooltip","tickFormat","valueOf","v","undefined","drawDiscreteLegendValues","drawDiscreteColorLegend","$scope","editor","panelCtrl","unitFormats","getUnitFormats","setUnitFormat","subItem","unitFormat","onAddThreshold","defaultColor","onRemoveThreshold","index","splice","onRemoveThresholds","onAddThreeLights","onAddSolarized","optionsEditorCtrl","templateUrl","controller","emptyTooltipItem","urlText","urlTemplate","urlIcon","urlToLowerCase","valueDateFormat","onAddUrl","items","onRemoveUrl","onRemoveUrls","getFAIconClasses","getValueDateFormats","tooltipEditorCtrl","TooltipEditorCtrl","migratePanelConfig","has","statusmap","ConfigVersion","labelFormat","minBucketWidthToShowWeekends","showCrosshair","showWeekends","yAxis","cards","cardSpacing","cardVSpacing","cardHSpacing","freezeOnClick","usingUrl","hasRealItems","urls","url","base_url","label","showItems","item","icon_fa","forcelowercase","replace","valueVar","useExtraSeries","extraSeries","migrate_V0_V1","id","columns","multipleValues","noColorDefined","yLabel","pLabels","xid","from","to","relFrom","relTo","mostRecent","belong","put","isEmpty","buckets","targets","rangeMs","intervalMs","xBucketSize","yid","Bucket","hasData","target","defaultPageSize","pageSize","currentPage","BucketMatrix","enable","me","rowLabel","setEnable","setCurrent","num","setDefaultPageSize","setPageSize","pages","ceil","totalRows","pageStartRow","pageEndRow","last","hasNext","hasPrev","switchToNext","switchToPrev","dashboard","panelElem","mouseOverBucket","originalFillColor","onMouseOver","onMouseLeave","e","add","move","destroy","onMouseMove","removeFrozen","tooltipFrozen","showFrozen","pos","displayTooltip","moveRelative","panelRelY","frozen","cardEl","bucket","timestamp","tooltipClose","tooltipHtml","formatDate","statuses","statusTitle","seriesFilterIndex","convertValueToTooltips","convertValuesToTooltips","join","JSON","parse","stringify","scopedVars","retrieveTimeVar","dateFormat","templateSrv","truncate","showCustomContent","customContent","useMax","dataWarnings","title","badValues","getNotColoredValues","html","stopPropagation","node","tooltipWidth","clientWidth","tooltipHeight","clientHeight","left","pageX","top","pageY","window","innerWidth","pageYOffset","innerHeight","panelX","offset","panelY","panelWidth","panelHeight","tooltipLeft","tooltipTop","mouseOverAnnotationTick","tooltipBase","annoId","anno","annotations","annoTime","time","annoText","annoTags","tags","backColor","borderColor","chartWidth","chartHeight","chartTop","chartBottom","yAxisWidth","xAxisHeight","cardRound","cardWidth","cardHeight","xGridSize","yGridSize","dataRangeWidingFactor","$heatmap","annotationTooltip","yOffset","selection","active","x1","x2","padding","right","bottom","margin","onRender","tickValueFormatter","onGraphHover","onGraphHoverClear","onMouseDown","onMouseClick","clearCrosshair","event","drawSharedCrosshair","renderingCompleted","setElementHeight","row","isString","usingPagination","css","getYAxisWidth","axisText","nodes","maxTextWidth","getXAxisHeight","axisLinePosition","parseFloat","addXAxis","xScale","timeRange","timeFormat","grafanaTimeFormatter","secPerTick","grafanaTimeFormat","getTimezone","tickPadding","heatmap","getYScale","getYAxisScale","addYAxis","bucketMatrixPager","yAxisSort","sort","localeCompare","ignorePunctuation","numeric","yAxisScale","yScale","tickSizeInner","wideYAxisRange","tickInterval","y_min","y_max","y_widing","decimals","scaledDecimals","valueFormats","addStatusmapCanvas","heatmap_elem","insert","addStatusmap","setOpacityScale","getCardX","getCardWidth","getCardY","getCardHeight","getCardColor","getCardOpacity","highlightCard","resetCardHighLight","_renderAnnotations","emit","renderComplete","highlightColor","strokeColor","current_card","cx","w","cutted_width","ys","getBucketColorSingle","getBucketColor","nullPointMode","getCardStrokeWidth","getEventOffset","elemOffset","clientX","clientY","mouseUpHandler","onMouseUp","document","one","unbind","selectionRange","timeFrom","timeTo","timeSrv","setTime","utc","clearSelection","limitSelection","offsetX","drawSelection","emitGraphHoverEvent","drawCrosshair","getEventPos","y1","offsetY","posX1","posX2","selectionX","selectionWidth","position","graphTooltip","annoData","source","hasAppEventCompatibleEmitter","emitter","emitterProto","getPrototypeOf","receiveEvents","eventId","removeAllListeners","j","getNotMatchedValues","notMatched","getMatchedThreshold","threshold","getThreshold","isAllValuesNulls","updateCardsValuesHasColorInfoSingle","updateCardsValuesHasColorInfo","roundIntervalCeil","interval","colorModes","opacityScales","dark","light","$injector","annotationsSrv","pageSizeViewer","panelDefaults","datasource","cardMinWidth","minWidth","maxWidth","showExtraInfo","extraInfo","usingSplitLabel","delimiter","labelTemplate","highlightCards","interval_to_ms","intervalToMs","defaultsDeep","BucketMatrixPager","pager","graph","ColorModeDiscrete","tip","onDataReceived","onDataError","onInitEditMode","postRefresh","onRenderComplete","onCardColorChange","__","changeDefaultPaginationSize","onChangePageSize","onPrevPage","onNextPage","getChartWidth","wndWidth","$","panelWidthFactor","gridPos","updateTimeRange","ret","calculateInterval","minCardWidth","minSpacing","maxCardsCount","lowLimitMs","intervalOverride","secondsToHms","issueQueries","annotationsPromise","getAnnotations","datasourcePromises","then","issueQueriesWithInterval","origInterval","res","dataList","newBucketMatrix","convertDataToBuckets","result","loading","addEditorTab","newColor","rendering","timeRangeForUrl","mostRecentBucket","targetIndex","targetPartials","queryResult","split","targetKeys","keys","targetTimestampRanges","targetTimestamps","si","datapoints","datapoint","idx","tsTo","tsFrom","minFrom","targetEmptyBuckets","lastTs","topBucket","bucketFrom","Number","MAX_VALUE","MIN_SAFE_INTEGER","dataIndex","dp","bucketsLen"],"mappings":"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","file":"module.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 13);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","module.exports = __WEBPACK_EXTERNAL_MODULE__2__;","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","module.exports = __WEBPACK_EXTERNAL_MODULE__4__;","module.exports = __WEBPACK_EXTERNAL_MODULE__6__;","module.exports = __WEBPACK_EXTERNAL_MODULE__7__;","module.exports = __WEBPACK_EXTERNAL_MODULE__8__;","module.exports = __WEBPACK_EXTERNAL_MODULE__10__;","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export default function(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","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + \")\";\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + \")\";\n}\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import * as d3 from 'd3';\nimport * as d3ScaleChromaticOrig from 'd3-scale-chromatic';\n\n// Add GnYlRd color schema to d3-scale-chromatic\n\nlet GnYlRdScheme = new Array(3)\n .concat(\n '91cf60ffffbffc8d59',\n '1a9641a6d96afdae61d7191c',\n '1a9641a6d96affffbffdae61d7191c',\n '1a985091cf60d9ef8bfee08bfc8d59d73027',\n '1a985091cf60d9ef8bffffbffee08bfc8d59d73027',\n '1a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027',\n '1a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027',\n '0068371a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027a50026',\n '0068371a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027a50026'\n )\n .map(function(specifier) {\n var n = (specifier.length / 6) | 0,\n colors = new Array(n),\n i = 0;\n while (i < n) {\n colors[i] = '#' + specifier.slice(i * 6, ++i * 6);\n }\n return colors;\n });\n\nlet GnYlRd = d3.interpolateRgbBasis(GnYlRdScheme[GnYlRdScheme.length - 1]);\n\nlet d3ScaleChromatic = {\n ...d3ScaleChromaticOrig,\n interpolateGnYlRd: GnYlRd,\n};\n\nexport { d3ScaleChromatic };\n","import { AppEvent } from './appEvents';\n\nexport interface GraphHoverPayload {\n pos: any;\n panel: {\n id: number;\n };\n}\n\nexport var graphHover: AppEvent | string = { name: 'graph-hover' };\nexport var graphHoverClear: AppEvent | string = { name: 'graph-hover-clear' };\n\nexport function fallbackToStringEvents() {\n graphHover = 'graph-hover';\n graphHoverClear = 'graph-hover-clear';\n}\n","import { AppEvent } from './appEvents';\n\nexport interface DataQueryError {\n data?: {\n message?: string;\n error?: string;\n };\n message?: string;\n status?: string;\n statusText?: string;\n refId?: string;\n cancelled?: boolean;\n}\n\nexport var refresh: AppEvent | string = { name: 'refresh' };\nexport var render: AppEvent | string = { name: 'render' };\nexport var dataError: AppEvent | string = { name: 'data-error' };\nexport var dataReceived: AppEvent | string = { name: 'data-received' };\nexport var dataSnapshotLoad: AppEvent | string = { name: 'data-snapshot-load' };\nexport var editModeInitialized: AppEvent | string = { name: 'init-edit-mode' };\n\nexport function fallbackToStringEvents() {\n refresh = 'refresh';\n render = 'render';\n dataError = 'data-error';\n dataReceived = 'data-received';\n dataSnapshotLoad = 'data-snapshot-load';\n editModeInitialized = 'init-edit-mode';\n}\n","import _ from 'lodash';\nimport $ from 'jquery';\nimport * as d3 from 'd3';\nimport { d3ScaleChromatic } from './util/d3/d3-scale-chromatic';\nimport { contextSrv } from 'grafana/app/core/core';\nimport { tickStep } from 'grafana/app/core/utils/ticks';\nimport coreModule from 'grafana/app/core/core_module';\n\nimport { StatusHeatmapCtrl } from './module';\nimport { PanelEvents } from './util/grafana/events/index';\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: any, elem, attrs) {\n let ctrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n\n ctrl.events.on(PanelEvents.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: StatusHeatmapCtrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n ctrl.events.on(PanelEvents.render, function() {\n render();\n });\n\n function render() {\n clearLegend(elem);\n if (!ctrl.panel.legend.show) {\n return;\n }\n if (ctrl.bucketMatrix) {\n let rangeFrom = ctrl.bucketMatrix.minValue;\n let rangeTo = ctrl.bucketMatrix.maxValue;\n let maxValue = panel.color.max != null ? panel.color.max : rangeTo;\n let minValue = panel.color.min != null ? panel.color.min : rangeFrom;\n\n if (ctrl.bucketMatrix.noDatapoints) {\n if (panel.color.max != null) {\n rangeTo = maxValue = 100;\n } else {\n rangeTo = 100;\n }\n if (panel.color.min != null) {\n rangeFrom = minValue = 0;\n } else {\n rangeFrom = 0;\n }\n }\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.discreteExtraSeries);\n }\n }\n }\n },\n };\n});\n\nfunction drawColorLegend(elem, colorScheme, rangeFrom: number, rangeTo: number, maxValue: number, minValue: number) {\n let legendElem = $(elem).find('svg');\n let legend: any = 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\n .selectAll('.status-heatmap-color-legend-rect')\n .data(valuesRange)\n .enter()\n .append('rect')\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr('x', d => (d - rangeFrom) * 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\n .selectAll('.status-heatmap-opacity-legend-rect')\n .data(valuesRange)\n .enter()\n .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, discreteExtraSeries) {\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)\n .parent()\n .parent()\n .parent()\n .find('.statusmap-panel');\n const graphWidthAttr = $heatmap.find('svg').attr('width');\n let graphWidth = parseInt(graphWidthAttr, 10);\n\n // calculate max width of tooltip and use it as width for each item\n let textWidth: number[] = [];\n legend\n .selectAll('.hidden-texts')\n .data(tooltips)\n .enter()\n .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([graphWidth - 30, (_.max(textWidth)! + 3) * valuesNumber])!);\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\n .selectAll('.status-heatmap-color-legend-rect')\n .data(valuesRange)\n .enter()\n .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 => discreteExtraSeries.getDiscreteColor(d));\n\n drawDiscreteLegendValues(elem, colorOptions, legendWidth);\n}\n\nfunction drawLegendValues(\n elem,\n colorScale,\n rangeFrom: number,\n rangeTo: number,\n maxValue: number,\n minValue: number,\n legendWidth: number\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 legendValueScale = d3\n .scaleLinear()\n .domain([rangeFrom, rangeTo])\n .range([0, legendWidth]);\n\n let ticks = buildLegendTicks(rangeFrom, rangeTo, maxValue, minValue);\n let xAxis = d3\n .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))\n .append('g')\n .attr('class', 'axis')\n .attr('transform', 'translate(' + posX + ',' + posY + ')')\n .call(xAxis);\n\n legend\n .select('.axis')\n .select('.domain')\n .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 let legendValueScale = d3\n .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\n .axisBottom(legendValueScale)\n .tickValues(d3.range(0, valuesNumber, 1)) //thresholdValues)\n .tickSize(2)\n .tickFormat(t => {\n let i = Math.floor(t.valueOf());\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))\n .append('g')\n .attr('class', 'axis')\n .attr('transform', 'translate(' + posX + ',' + posY + ')')\n .call(xAxis);\n\n legend\n .select('.axis')\n .select('.domain')\n .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\n .selectAll('.status-heatmap-color-legend-rect')\n .data(valuesRange)\n .enter()\n .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\n .scaleLinear()\n .domain([0, legendWidth])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3\n .scalePow()\n .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\n .selectAll('.status-heatmap-opacity-legend-rect')\n .data(valuesRange)\n .enter()\n .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\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 =\n colorScheme.invert === 'always' || (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\n .scaleLinear()\n .domain([minValue, maxValue])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3\n .scalePow()\n .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 + rangeFrom;\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(current);\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","import kbn from 'grafana/app/core/utils/kbn';\nimport { StatusHeatmapCtrl } from './module';\n\nexport class StatusHeatmapOptionsEditorCtrl {\n panel: any;\n panelCtrl: StatusHeatmapCtrl;\n unitFormats: any;\n\n /** @ngInject */\n constructor($scope: any) {\n $scope.editor = this;\n this.panelCtrl = $scope.ctrl as StatusHeatmapCtrl;\n this.panel = this.panelCtrl.panel;\n\n this.unitFormats = kbn.getUnitFormats();\n }\n\n setUnitFormat(subItem) {\n this.panel.data.unitFormat = subItem.value;\n this.panelCtrl.render();\n }\n\n render() {\n this.panelCtrl.render();\n }\n\n onAddThreshold() {\n this.panel.color.thresholds.push({ color: this.panel.defaultColor });\n this.render();\n }\n\n onRemoveThreshold(index: number) {\n this.panel.color.thresholds.splice(index, 1);\n this.render();\n }\n\n onRemoveThresholds() {\n this.panel.color.thresholds = [];\n this.render();\n }\n\n onAddThreeLights() {\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 onAddSolarized() {\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\n/** @ngInject */\nexport function optionsEditorCtrl() {\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","import { StatusHeatmapCtrl } from './module';\n\nlet emptyTooltipItem = {\n urlText: '',\n urlTemplate: '',\n urlIcon: 'external-link',\n urlToLowerCase: true,\n valueDateFormat: '',\n};\n\nexport class TooltipEditorCtrl {\n panel: any;\n panelCtrl: StatusHeatmapCtrl;\n\n /** @ngInject */\n constructor($scope: any) {\n $scope.editor = this;\n this.panelCtrl = $scope.ctrl as StatusHeatmapCtrl;\n this.panel = this.panelCtrl.panel;\n }\n\n render() {\n this.panelCtrl.render();\n }\n\n onAddUrl() {\n this.panel.tooltip.items.push(Object.assign({}, emptyTooltipItem));\n this.render();\n }\n\n onRemoveUrl(index: number) {\n this.panel.tooltip.items.splice(index, 1);\n this.render();\n }\n\n onRemoveUrls() {\n this.panel.tooltip.items = [];\n this.render();\n }\n\n getFAIconClasses() {\n return ['external-link', 'plus', 'anchor', 'ban', 'globe', 'gear', 'cloud', 'download', 'cloud-download'];\n }\n\n getValueDateFormats() {\n return ['YYYY/MM/DD/HH_mm_ss', 'YYYYMMDDHHmmss', 'YYYY-MM-DD-HH-mm-ss'];\n }\n}\n\nexport function tooltipEditorCtrl() {\n 'use strict';\n return {\n restrict: 'E',\n scope: true,\n templateUrl: 'public/plugins/flant-statusmap-panel/partials/tooltip_editor.html',\n controller: TooltipEditorCtrl,\n };\n}\n","import _ from 'lodash';\n\nfunction migrate_V0_V1(panel: any) {\n // Remove unused fields.\n if (_.has(panel, 'xAxis.labelFormat')) {\n delete panel.xAxis.labelFormat;\n }\n if (_.has(panel, 'xAxis.minBucketWidthToShowWeekends')) {\n delete panel.xAxis.minBucketWidthToShowWeekends;\n }\n if (_.has(panel, 'xAxis.showCrosshair')) {\n delete panel.xAxis.showCrosshair;\n }\n if (_.has(panel, 'xAxis.showWeekends')) {\n delete panel.xAxis.showWeekends;\n }\n if (_.has(panel, 'yAxis.showCrosshair')) {\n delete panel.yAxis.showCrosshair;\n }\n if (_.has(panel, 'data.unitFormat')) {\n delete panel.data;\n }\n\n // Migrate cardSpacing value. Seems rare (update from version 0.0.2).\n if (_.has(panel, 'cards.cardSpacing')) {\n if (!_.has(panel, 'cards.cardVSpacing')) {\n if (panel.cards.cardSpacing) {\n panel.cards.cardVSpacing = panel.cards.cardSpacing;\n panel.cards.cardHSpacing = panel.cards.cardSpacing;\n }\n }\n delete panel.cards.cardSpacing;\n }\n\n // Migrate initial config for urls in tooltip (pull/86).\n // 'usingUrl' was used to show tooltip with urls on click or not.\n if (_.has(panel, 'usingUrl')) {\n if (!_.has(panel, 'tooltip.freezeOnClick')) {\n panel.tooltip.freezeOnClick = panel.usingUrl;\n }\n delete panel.usingUrl;\n }\n\n // 'urls' array is now tooltip.items array. Also items are changed.\n if (_.has(panel, 'urls')) {\n if (!_.has(panel, 'tooltip.items')) {\n panel.tooltip.items = [];\n let hasRealItems = true;\n if (panel.urls.length === 0) {\n hasRealItems = false;\n }\n if (panel.urls.length === 1) {\n let url = panel.urls[0];\n if (url.base_url === '' && url.label === '') {\n hasRealItems = false;\n }\n }\n if (hasRealItems) {\n panel.tooltip.showItems = true;\n for (let url of panel.urls) {\n let item = {\n urlTemplate: _.toString(url.base_url),\n urlText: _.toString(url.label),\n urlIcon: _.toString(url.icon_fa),\n urlToLowerCase: url.forcelowercase,\n valueDateFormat: '',\n };\n // replace $vars with new ${__vars} if url template is not empty\n if (item.urlTemplate !== '') {\n // $time was a graph time with prepended &\n item.urlTemplate = _.replace(url.base_url, /\\$time/g, '&${__url_time_range}');\n // $series_label was a y axis label\n item.urlTemplate = _.replace(item.urlTemplate, /\\$series_label/, '${__y_label}');\n // $series_extra was a value from bucket. This value has format options and index.\n let valueVar = '__value';\n if (url.useExtraSeries === true) {\n // index?\n if (url.extraSeries.index > -1) {\n valueVar += '_' + url.extraSeries.index;\n }\n\n let format = _.toString(url.extraSeries.format);\n if (format === 'YYYY/MM/DD/HH_mm_ss') {\n valueVar += '_date';\n item.valueDateFormat = format;\n }\n }\n\n item.urlTemplate = _.replace(item.urlTemplate, /\\$series_extra/, `\\${${valueVar}}`);\n }\n panel.tooltip.items.push(item);\n }\n }\n }\n delete panel.urls;\n }\n\n // create statusmap metadata\n panel.statusmap = {\n ConfigVersion: 'v1',\n };\n}\n\nexport function migratePanelConfig(panel: any) {\n if (_.has(panel, 'statusmap')) {\n if (panel.statusmap.ConfigVersion === 'v1') {\n return;\n }\n } else {\n migrate_V0_V1(panel);\n }\n return;\n}\n","// A holder of a group of values\nclass Bucket {\n // uniq id\n id = 0;\n // Array of values in this bucket\n values: any[] = [];\n columns: any[] = []; // From pr/86\n // a bucket has multiple values\n multipleValues = false;\n // a bucket has values that has no mapped color\n noColorDefined = false;\n // y label\n y = '';\n yLabel = '';\n pLabels: string[] = [];\n\n // This value can be used to calculate a x coordinate on a graph\n x = 0;\n xid = 0;\n // a time range of this bucket\n from = 0;\n to = 0;\n // to and from relative to real \"from\"\n relFrom = 0;\n relTo = 0;\n\n mostRecent = false;\n\n // Saved minimum and maximum of values in this bucket\n minValue = 0;\n maxValue = 0;\n // A value if multiple values is not allowed\n value = 0;\n\n constructor() {}\n\n belong(ts: number): boolean {\n return ts >= this.from && ts <= this.to;\n }\n\n put(value: any) {\n this.values.push(value);\n }\n\n done() {\n // calculate min, max, value\n }\n\n isEmpty(): boolean {\n return this.values.length === 0;\n }\n}\n\nclass BucketMatrix {\n // buckets for each y label\n buckets: { [yLabel: string]: Bucket[] } = {};\n maxValue = 0;\n minValue = 0;\n multipleValues = false;\n noColorDefined = false;\n // a flag that indicate that buckets has stub values\n noDatapoints = false;\n\n // An array of row labels\n targets: string[] = [];\n pLabels: { [target: string]: string[] } = {};\n rangeMs = 0;\n intervalMs = 0;\n\n xBucketSize = 0; // TODO remove: a transition from CardsData\n\n constructor() {}\n\n get(yid: string, xid: number): Bucket {\n if (yid in this.buckets) {\n if (xid in this.buckets[yid]) {\n return this.buckets[yid][xid];\n }\n }\n return new Bucket();\n }\n\n hasData(): boolean {\n let hasData = false;\n if (this.targets.length > 0) {\n this.targets.map((target: string) => {\n if (this.buckets[target].length > 0) {\n hasData = true;\n }\n });\n }\n return hasData;\n }\n}\n\nexport var pagerChanged: any = { name: 'statusmap-pager-changed' };\n\nclass BucketMatrixPager {\n bucketMatrix: BucketMatrix;\n enable: boolean;\n defaultPageSize = -1;\n pageSize = -1;\n currentPage = 0;\n\n constructor() {\n let m = new BucketMatrix();\n\n this.bucketMatrix = m;\n }\n\n // An array of row labels for current page.\n targets(): string[] {\n if (!this.enable) {\n return this.bucketMatrix.targets;\n }\n\n return this.bucketMatrix.targets.slice(this.pageSize * this.currentPage, this.pageSize * (this.currentPage + 1));\n }\n\n buckets(): { [yLabel: string]: Bucket[] } {\n if (!this.enable) {\n return this.bucketMatrix.buckets;\n }\n\n let buckets: { [yLabel: string]: Bucket[] } = {};\n let me = this;\n\n this.targets().map(function(rowLabel) {\n buckets[rowLabel] = me.bucketMatrix.buckets[rowLabel];\n });\n\n return buckets;\n }\n\n setEnable(enable: boolean) {\n this.enable = enable;\n }\n\n setCurrent(num: number): void {\n this.currentPage = num;\n }\n\n setDefaultPageSize(num: number): void {\n this.defaultPageSize = num;\n }\n\n setPageSize(num: number): void {\n this.pageSize = num;\n }\n\n pages(): number {\n return Math.ceil(this.totalRows() / this.pageSize);\n }\n\n totalRows(): number {\n return this.bucketMatrix.targets.length;\n }\n\n pageStartRow(): number {\n if (!this.enable) {\n return 1;\n }\n return this.pageSize * this.currentPage + 1;\n }\n\n pageEndRow(): number {\n if (!this.enable) {\n return this.totalRows();\n }\n\n let last = this.pageSize * (this.currentPage + 1);\n if (last > this.totalRows()) {\n return this.totalRows();\n }\n\n return last;\n }\n\n hasNext(): boolean {\n if (!this.enable) {\n return false;\n }\n\n if ((this.currentPage + 1) * this.pageSize >= this.totalRows()) {\n return false;\n }\n\n return true;\n // currentPage >= ctrl.bucketMatrix.targets.length/ctrl.pageSizeViewer - 1 || ctrl.numberOfPages == 0\n }\n\n hasPrev(): boolean {\n if (!this.enable) {\n return false;\n }\n\n return this.currentPage > 0;\n }\n\n switchToNext() {\n if (this.hasNext()) {\n this.currentPage = this.currentPage + 1;\n }\n }\n\n switchToPrev() {\n if (this.hasPrev()) {\n this.currentPage = this.currentPage - 1;\n }\n }\n}\n\nexport { Bucket, BucketMatrix, BucketMatrixPager };\n","import * as d3 from 'd3';\nimport $ from 'jquery';\nimport _ from 'lodash';\n\nimport { StatusHeatmapCtrl } from './module';\n\nlet TOOLTIP_PADDING_X = 30;\nlet TOOLTIP_PADDING_Y = 5;\n\n// TODO rename file to tooltip_ctrl.ts\n// TODO move DefaultValueDateFormat into tooltip.ts, as it used in several places (migration, partial and tooltip render)\nlet DefaultValueDateFormat = 'YYYY/MM/DD/HH_mm_ss';\n\nexport class StatusmapTooltip {\n tooltip: any;\n scope: any;\n dashboard: any;\n panelCtrl: StatusHeatmapCtrl;\n panel: any;\n panelElem: any;\n mouseOverBucket: any;\n originalFillColor: any;\n\n tooltipWidth: number;\n tooltipFrozen: any;\n\n constructor(elem: any, scope: any) {\n this.scope = scope;\n this.dashboard = scope.ctrl.dashboard;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n this.panelElem = 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)) {\n return;\n }\n\n if (!this.tooltip) {\n this.add();\n this.move(e, this.tooltip);\n }\n }\n\n onMouseLeave() {\n this.destroy();\n }\n\n onMouseMove(e) {\n if (!this.panel.tooltip.show) {\n return;\n }\n\n this.move(e, this.tooltip);\n }\n\n add() {\n this.tooltip = d3\n .select('body')\n .append('div')\n .attr('class', 'graph-tooltip statusmap-tooltip');\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.remove();\n }\n\n this.tooltip = null;\n }\n\n removeFrozen() {\n if (this.tooltipFrozen) {\n this.tooltipFrozen.remove();\n this.tooltipFrozen = null;\n }\n }\n\n showFrozen(pos: any) {\n this.removeFrozen();\n this.tooltipFrozen = d3\n .select(this.panelElem[0])\n .append('div')\n .attr('class', 'graph-tooltip statusmap-tooltip statusmap-tooltip-frozen');\n this.displayTooltip(pos, this.tooltipFrozen, true);\n this.moveRelative(pos, this.tooltipFrozen);\n }\n\n show(pos: any) {\n if (!this.panel.tooltip.show || !this.tooltip) {\n return;\n }\n\n // TODO support for shared tooltip mode\n if (pos.panelRelY) {\n return;\n }\n\n this.displayTooltip(pos, this.tooltip, false);\n\n this.move(pos, this.tooltip);\n }\n\n // Retrieve bucket and create html content inside tooltip’s div element.\n displayTooltip(pos: any, tooltip: any, frozen: boolean) {\n let cardEl = d3.select(pos.target);\n let yid = cardEl.attr('yid');\n let xid = cardEl.attr('xid');\n // @ts-ignore\n let bucket = this.panelCtrl.bucketMatrix.get(yid, xid); // TODO string-to-number conversion for xid\n if (!bucket || bucket.isEmpty()) {\n this.destroy();\n return;\n }\n\n let timestamp = bucket.to;\n let yLabel = bucket.yLabel;\n let pLabels = bucket.pLabels;\n let value = bucket.value;\n let values = bucket.values;\n // TODO create option for this formatting.\n let tooltipTimeFormat = 'YYYY-MM-DD HH:mm:ss';\n let time: Date = this.dashboard.formatDate(+timestamp, tooltipTimeFormat);\n\n // Close button for the frozen tooltip.\n let tooltipClose = ``;\n if (frozen) {\n tooltipClose = `\n\n \n\n`;\n }\n\n let tooltipHtml = `
${time}${tooltipClose}
`;\n\n if (this.panel.color.mode === 'discrete') {\n let statuses;\n if (this.panel.seriesFilterIndex >= 0) {\n statuses = this.panelCtrl.discreteExtraSeries.convertValueToTooltips(value);\n } else {\n statuses = this.panelCtrl.discreteExtraSeries.convertValuesToTooltips(values);\n }\n\n let statusTitle = 'status:';\n if (statuses.length > 1) {\n statusTitle = 'statuses:';\n }\n tooltipHtml += `\n
\n name: ${yLabel}\n
\n ${statusTitle}\n
    \n ${_.join(\n _.map(\n statuses,\n v => `
  • ${v.tooltip}
  • `\n ),\n ''\n )}\n
\n
`;\n } else {\n if (values.length === 1) {\n tooltipHtml += `
\n name: ${yLabel}
\n value: ${value}
\n
`;\n } else {\n tooltipHtml += `
\n name: ${yLabel}
\n values:\n
    \n ${_.join(\n _.map(values, v => `
  • ${v}
  • `),\n ''\n )}\n
\n
`;\n }\n }\n\n tooltipHtml += `
`;\n\n if (this.panel.tooltip.showItems) {\n // Additional information: urls, etc.\n // Clone additional items\n let items: any = JSON.parse(JSON.stringify(this.panel.tooltip.items));\n\n let scopedVars = {};\n\n let valueVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueVar = `__value_${i}`;\n scopedVars[valueVar] = { value: bucket.values[i] };\n }\n scopedVars['__value'] = { value: bucket.value };\n scopedVars['__y_label'] = { value: yLabel };\n scopedVars['__y_label_trim'] = { value: yLabel.trim() };\n // Grafana 7.0 compatible\n scopedVars['__url_time_range'] = { value: this.panelCtrl.retrieveTimeVar() };\n\n //New vars based on partialLabels:\n for (let i in pLabels) {\n scopedVars[`__y_label_${i}`] = { value: pLabels[i] };\n }\n\n for (let item of items) {\n if (_.isEmpty(item.urlTemplate)) {\n item.link = '#';\n } else {\n let dateFormat = item.valueDateFormat;\n if (dateFormat === '') {\n dateFormat = DefaultValueDateFormat;\n }\n let valueDateVar;\n for (let i = 0; i < bucket.values.length; i++) {\n valueDateVar = `__value_${i}_date`;\n scopedVars[valueDateVar] = { value: this.dashboard.formatDate(+bucket.values[i], dateFormat) };\n }\n scopedVars['__value_date'] = { value: this.dashboard.formatDate(+bucket.value, dateFormat) };\n\n item.link = this.panelCtrl.templateSrv.replace(item.urlTemplate, scopedVars);\n\n // Force lowercase for link\n if (item.urlToLowerCase) {\n item.link = item.link.toLowerCase();\n }\n }\n\n item.label = item.urlText;\n if (_.isEmpty(item.label)) {\n item.label = _.isEmpty(item.urlTemplate) ? 'Empty URL' : _.truncate(item.link);\n }\n }\n\n if (this.panel.tooltip.showCustomContent) {\n let customContent: string = this.panelCtrl.templateSrv.replace(this.panel.tooltip.customContent, scopedVars);\n tooltipHtml += `
${customContent}
`;\n }\n\n tooltipHtml += _.join(\n _.map(\n items,\n v => `\n
\n \n
\n
`\n ),\n '\\n'\n );\n }\n\n // Ambiguous state: there multiple values in bucket!\n // TODO rename useMax to expectMultipleValues\n if (!this.panel.useMax && bucket.multipleValues) {\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.multipleValues.title}
`;\n }\n\n // Discrete mode errors\n if (this.panel.color.mode === 'discrete') {\n if (bucket.noColorDefined) {\n let badValues = this.panelCtrl.discreteExtraSeries.getNotColoredValues(values);\n tooltipHtml += `
Error: ${this.panelCtrl.dataWarnings.noColorDefined.title}\n
not colored values:\n
    \n ${_.join(\n _.map(badValues, v => `
  • ${v}
  • `),\n ''\n )}\n
\n
`;\n }\n }\n\n tooltip.html(tooltipHtml);\n\n // Assign mouse event handlers for \"frozen\" tooltip.\n if (frozen) {\n // Stop propagation mouse events up to parents to allow interaction with frozen tooltip’s elements.\n tooltip\n .on('click', function() {\n // @ts-ignore\n d3.event.stopPropagation();\n })\n .on('mousedown', function() {\n // @ts-ignore\n d3.event.stopPropagation();\n })\n .on('mouseup', function() {\n // @ts-ignore\n d3.event.stopPropagation();\n });\n\n // Activate close button\n tooltip.select('a.tooltip-close').on('click', this.removeFrozen.bind(this));\n }\n }\n\n // Move tooltip as absolute positioned element.\n move(pos, tooltip) {\n if (!tooltip) {\n return;\n }\n\n let elem = $(tooltip.node())[0];\n let tooltipWidth = elem.clientWidth;\n this.tooltipWidth = tooltipWidth;\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 tooltip.style('left', left + 'px').style('top', top + 'px');\n }\n\n // Move tooltip relative to svg element of panel.\n moveRelative(pos, tooltip) {\n if (!tooltip) {\n return;\n }\n\n let panelX = pos.pageX - this.panelElem.offset().left;\n let panelY = pos.pageY - this.panelElem.offset().top;\n let panelWidth = this.panelElem.width();\n let panelHeight = this.panelElem.height();\n\n // 'position: relative' sets tooltip’s width to 100% of panel element.\n // Restore width from floating tooltip and add more space for 'Close' button.\n let tooltipWidth = this.tooltipWidth + 25;\n\n // Left property is clamped so tooltip stays inside panel bound box.\n let tooltipLeft = panelX + TOOLTIP_PADDING_X;\n if (tooltipLeft + tooltipWidth > panelWidth) {\n tooltipLeft = panelWidth - tooltipWidth;\n }\n if (tooltipLeft < 0) {\n tooltipLeft = 0;\n }\n\n // Frozen tooltip’s root element is appended next to panel’s svg element,\n // so top property is adjusted to move tooltip’s root element\n // up to the mouse pointer position.\n let tooltipTop = -(panelHeight - panelY + TOOLTIP_PADDING_Y);\n\n return tooltip\n .style('left', tooltipLeft + 'px')\n .style('top', tooltipTop + 'px')\n .style('width', tooltipWidth + 'px');\n }\n}\n","import * as 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)) {\n return;\n }\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) {\n return;\n }\n\n this.move(e);\n }\n\n add() {\n this.tooltipBase = d3\n .select('body')\n .append('div')\n .attr(\n 'class',\n '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 )\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 show(pos) {\n if (!this.panel.tooltip.show || !this.tooltip) {\n return;\n }\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(\n _.map(\n annoTags,\n t =>\n `${t.text}`\n ),\n ''\n )}\n
\n
`;\n\n this.tooltip.html(tooltipHtml);\n\n this.move(pos);\n }\n\n move(pos) {\n if (!this.tooltipBase) {\n return;\n }\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.style('left', left + 'px').style('top', top + 'px');\n }\n}\n","import _ from 'lodash';\nimport $ from 'jquery';\n\n// TODO moment is used instead of @grafana/data to run in 6.2 and earlier.\n/* eslint-disable id-blacklist, no-restricted-imports, @typescript-eslint/ban-types */\nimport moment from 'moment';\n\nimport kbn from 'grafana/app/core/utils/kbn';\nimport { appEvents, contextSrv } from 'grafana/app/core/core';\nimport * as d3 from 'd3';\nimport { d3ScaleChromatic } from './util/d3/d3-scale-chromatic';\nimport { StatusmapTooltip } from './tooltip';\nimport { AnnotationTooltip } from './annotations';\nimport { Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data';\nimport { StatusHeatmapCtrl, renderComplete } from './module';\nimport { CoreEvents, PanelEvents } from './util/grafana/events/index';\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 // @ts-ignore\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\n// @ts-ignore\nclass Statusmap {\n $svg: any;\n svg: any;\n bucketMatrix: BucketMatrix;\n\n timeRange: { from: number; to: number } = { from: 0, to: 0 };\n\n constructor() {}\n}\n\nexport class StatusmapRenderer {\n width = 0;\n height = 0;\n yScale: any;\n xScale: any;\n chartWidth = 0;\n chartHeight = 0;\n chartTop = 0;\n chartBottom = 0;\n yAxisWidth = 0;\n xAxisHeight = 0;\n cardVSpacing = 0;\n cardHSpacing = 0;\n cardRound = 0;\n cardWidth = 0;\n cardHeight = 0;\n colorScale: any;\n opacityScale: any;\n mouseUpHandler: any;\n xGridSize = 0;\n yGridSize = 0;\n\n bucketMatrix: BucketMatrix;\n bucketMatrixPager: BucketMatrixPager;\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: StatusHeatmapCtrl) {\n // $heatmap is JQuery object, but heatmap is D3\n this.$heatmap = this.elem.find('.statusmap-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(PanelEvents.render, this.onRender.bind(this));\n\n // @ts-ignore\n this.ctrl.tickValueFormatter = this.tickValueFormatter.bind(this);\n\n /////////////////////////////\n // Selection and crosshair //\n /////////////////////////////\n\n // Shared crosshair and tooltip this.empty = true;\n\n appEvents.on(CoreEvents.graphHover, this.onGraphHover.bind(this), this.scope);\n\n appEvents.on(CoreEvents.graphHoverClear, 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 this.$heatmap.on('click', this.onMouseClick.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 setElementHeight(): boolean {\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 if (this.panel.usingPagination) {\n // TODO get height of pagination controls.\n // reserve height for legend and for a row of pagination controls.\n height -= this.panel.legend.show ? 70 : 40; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !\n } else {\n // reserve height for legend\n height -= this.panel.legend.show ? 32 : 4; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !\n }\n\n this.$heatmap.css('height', height + 'px');\n\n return true;\n } catch (e) {\n // IE throws errors sometimes\n return false;\n }\n }\n\n getYAxisWidth(elem: any): number {\n const axisText = elem.selectAll('.axis-y text').nodes();\n const maxTextWidth = _.max(\n _.map(axisText, text => {\n // Use SVG getBBox method\n return text.getBBox().width;\n })\n );\n\n return Math.ceil(maxTextWidth);\n }\n\n getXAxisHeight(elem: any): number {\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 // Buckets without the most recent\n this.scope.xScale = this.xScale = d3\n .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\n .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: any[]) {\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\n .scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n // divide chart height by ticks with offset for ticks drawing\n getYAxisScale(ticks: any[]) {\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\n .scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n addYAxis() {\n let ticks = this.bucketMatrixPager.targets();\n\n // TODO move sorting into bucketMatrixPager.\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 // @ts-ignore\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\n .select('.axis-y')\n .select('.domain')\n .remove();\n this.heatmap\n .select('.axis-y')\n .selectAll('.tick line')\n .remove();\n }\n\n // Wide Y values range and adjust to bucket size\n wideYAxisRange(min: number, max: number, tickInterval: number) {\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 addStatusmapCanvas() {\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 // Insert svg as a first child into heatmap_elem\n // as the frozen tooltip moving logiс assumes that tooltip is the last child.\n this.heatmap = d3\n .select(heatmap_elem)\n .insert('svg', ':first-child')\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 = this.chartHeight;\n if (this.bucketMatrixPager.targets().length > 0) {\n this.yGridSize = Math.floor(this.chartHeight / this.bucketMatrixPager.targets().length);\n }\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.bucketMatrix.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\n .select('.axis-y')\n .selectAll('line')\n .style('opacity', 0);\n }\n\n if (!this.panel.xAxis.show) {\n this.heatmap\n .select('.axis-x')\n .selectAll('line')\n .style('opacity', 0);\n }\n }\n\n addStatusmap(): void {\n let maxValue = this.panel.color.max != null ? this.panel.color.max : this.bucketMatrix.maxValue;\n let minValue = this.panel.color.min != null ? this.panel.color.min : this.bucketMatrix.minValue;\n\n if (this.panel.color.mode !== 'discrete') {\n this.colorScale = this.getColorScale(maxValue, minValue);\n }\n this.setOpacityScale(maxValue);\n\n // Draw cards from buckets.\n this.heatmap\n .selectAll('.statusmap-cards-row')\n .data(this.bucketMatrixPager.targets())\n .enter()\n .selectAll('.statustmap-card')\n .data((target: string) => this.bucketMatrix.buckets[target])\n .enter()\n .append('rect')\n .attr('cardId', (b: Bucket) => b.id)\n .attr('xid', (b: Bucket) => b.xid)\n .attr('yid', (b: Bucket) => b.yLabel)\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', (b: Bucket) => (b.isEmpty() ? 'empty-card' : 'bordered statusmap-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 // Set mouse events on cards.\n let $cards = this.$heatmap.find('.statusmap-card + .bordered');\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(renderComplete, {\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 // @ts-ignore\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted =\n // @ts-ignore\n colorScheme.invert === 'always' || (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n if (maxValue === minValue) {\n maxValue = minValue + 1;\n }\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\n .scaleLinear()\n .domain([0, maxValue])\n .range([0, 1]);\n } else if (this.panel.color.colorScale === 'sqrt') {\n this.opacityScale = d3\n .scalePow()\n .exponent(this.panel.color.exponent)\n .domain([0, maxValue])\n .range([0, 1]);\n }\n }\n\n getCardX(b: Bucket) {\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 let rightX = (b.relTo / this.bucketMatrix.rangeMs) * this.chartWidth;\n let cx = rightX - this.cardWidth / 2;\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(b: Bucket) {\n //return 20;\n let w;\n\n let rightX = (b.relTo / this.bucketMatrix.rangeMs) * this.chartWidth;\n let cx = rightX - this.cardWidth / 2;\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 // Top y for card.\n // yScale gives ???\n getCardY(b: Bucket) {\n return this.yScale(b.yLabel) + this.chartTop - this.cardHeight - this.cardVSpacing / 2;\n }\n\n getCardHeight(b: Bucket) {\n //return 20;\n let ys = this.yScale(b.yLabel);\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(bucket: Bucket) {\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(bucket.value);\n } else if (this.panel.color.mode === 'discrete') {\n if (this.panel.seriesFilterIndex !== null && this.panel.seriesFilterIndex !== -1) {\n return this.ctrl.discreteExtraSeries.getBucketColorSingle(bucket.values[this.panel.seriesFilterIndex]);\n } else {\n return this.ctrl.discreteExtraSeries.getBucketColor(bucket.values);\n }\n }\n }\n\n getCardOpacity(bucket: Bucket) {\n if (this.panel.nullPointMode === 'as empty' && bucket.value == null) {\n return 0;\n }\n if (this.panel.color.mode === 'opacity') {\n return this.opacityScale(bucket.value);\n } else {\n return 1;\n }\n }\n\n getCardStrokeWidth(b: Bucket) {\n if (this.panel.color.mode === 'discrete') {\n return '1';\n }\n return '0';\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(\n Math.min(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize / 2\n );\n let timeTo = this.xScale.invert(\n Math.max(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize / 2\n );\n\n // TODO use toUtc method from moment wrapper in @grafana/data\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(e) {\n appEvents.emit(CoreEvents.graphHoverClear);\n this.clearCrosshair();\n this.annotationTooltip.destroy();\n }\n\n onMouseMove(event: MouseEvent) {\n if (!this.heatmap) {\n return;\n }\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);\n this.annotationTooltip.show(event);\n }\n }\n\n // TODO emit an event and move logic to panelCtrl\n onMouseClick(e: MouseEvent) {\n if (this.ctrl.panel.tooltip.freezeOnClick) {\n this.tooltip.showFrozen(e);\n this.tooltip.destroy();\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,\n x1: x,\n y: y,\n 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(CoreEvents.graphHover, { 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\n .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 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\n .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 render() {\n this.panel = this.ctrl.panel;\n this.timeRange = this.ctrl.range;\n this.bucketMatrix = this.ctrl.bucketMatrix;\n this.bucketMatrixPager = this.ctrl.bucketMatrixPager;\n\n if (!this.bucketMatrix || !this.setElementHeight()) {\n return;\n }\n\n // Draw default axes and return if no data\n this.addStatusmapCanvas();\n if (this.bucketMatrix.noDatapoints) {\n return;\n }\n\n this.addStatusmap();\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 let annoData = _.map(this.ctrl.annotations, (d, i) => ({\n // @ts-ignore\n x: Math.floor(this.yAxisWidth + this.xScale(d.time)),\n id: i,\n // @ts-ignore\n anno: d.source,\n }));\n\n //({\"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()\n .append('g');\n\n anno\n .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\n .append('polygon')\n .attr('points', d =>\n [\n [d.x, this.chartBottom + 1],\n [d.x - 5, this.chartBottom + 6],\n [d.x + 5, this.chartBottom + 6],\n ].join(' ')\n )\n .style('stroke-width', 0)\n .style('fill', d => d.anno.iconColor);\n\n // Polygons didn't fire mouseevents\n anno\n .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 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","import { Emitter } from 'grafana/app/core/utils/emitter';\n\n// Old Grafana releases use strings as event ids and\n// new event ids in form of object {name: \"event-id\"} are not\n// supported properly: first defined listener will receive\n// all emitted events despite of the value in 'name' field.\n//\n// This method detects this behaviour and return true\n// only for new Grafana versions.\nexport function hasAppEventCompatibleEmitter(emitter: Emitter): boolean {\n // Grafana 7.4 has new event bus for Angular plugins. It is has a 'subscribe' method.\n let emitterProto = Object.getPrototypeOf(emitter);\n if (Object.prototype.hasOwnProperty.call(emitterProto, 'subscribe')) {\n return true;\n }\n\n let receiveEvents = 0;\n let eventId: any = { name: 'non-existed-event-id' };\n let eventId2: any = { name: 'non-existed-event-id-2' };\n emitter.on(eventId, function() {\n receiveEvents++;\n });\n emitter.emit(eventId);\n emitter.emit(eventId2);\n emitter.removeAllListeners(eventId);\n\n // New Grafana versions should receive one event.\n return receiveEvents === 1;\n}\n","import _ from 'lodash';\nimport { Bucket } from './statusmap_data';\nimport { StatusHeatmapCtrl } from './module';\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// Extra Series 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 convertValueToTooltips(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 === thresholds[i].value) {\n tooltips.push({\n tooltip: thresholds[i].tooltip ? thresholds[i].tooltip : values,\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 getBucketColorSingle(value) {\n //let thresholds = this.panel.color.thresholds;\n if (value == null) {\n // treat as null value\n return 'rgba(0,0,0,1)';\n //return this.getMatchedThreshold(null).color;\n }\n let threshold = this.getMatchedThreshold(value);\n\n if (!threshold || !threshold.color || threshold.color === '') {\n return 'rgba(0,0,0,1)';\n } else {\n return threshold.color;\n }\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 updateCardsValuesHasColorInfoSingle() {\n if (!this.panelCtrl.bucketMatrix) {\n return;\n }\n this.panelCtrl.bucketMatrix.noColorDefined = false;\n\n this.panelCtrl.bucketMatrix.targets.map((target: string) => {\n this.panelCtrl.bucketMatrix.buckets[target].map((bucket: Bucket) => {\n bucket.noColorDefined = false;\n let threshold = this.getMatchedThreshold(bucket.value);\n if (!threshold || !threshold.color || threshold.color === '') {\n bucket.noColorDefined = true;\n this.panelCtrl.bucketMatrix.noColorDefined = true;\n }\n });\n });\n }\n\n updateCardsValuesHasColorInfo() {\n if (!this.panelCtrl.bucketMatrix) {\n return;\n }\n this.panelCtrl.bucketMatrix.noColorDefined = false;\n\n this.panelCtrl.bucketMatrix.targets.map((target: string) => {\n this.panelCtrl.bucketMatrix.buckets[target].map((bucket: Bucket) => {\n bucket.noColorDefined = false;\n for (let j = 0; j < bucket.values.length; j++) {\n let threshold = this.getMatchedThreshold(bucket.values[j]);\n if (!threshold || !threshold.color || threshold.color === '') {\n bucket.noColorDefined = true;\n this.panelCtrl.bucketMatrix.noColorDefined = true;\n break;\n }\n }\n });\n });\n }\n\n getMatchedThreshold(value) {\n if (value == null) {\n if (this.panel.nullPointMode === 'as empty') {\n // FIXME: make this explicit for user\n // Right now this color never used because null as empty handles in getCardOpacity method.\n return {\n color: 'rgba(0,0,0,0)',\n value: 'null',\n tooltip: 'null',\n };\n } else {\n value = 0;\n }\n }\n\n let thresholds = this.panel.color.thresholds;\n for (let k = 0; k < thresholds.length; k++) {\n if (value === thresholds[k].value) {\n return thresholds[k];\n }\n }\n return null;\n }\n\n getThreshold(index) {\n let thresholds = this.panel.color.thresholds;\n if (index < 0 || index >= 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","// Libraries\nimport _ from 'lodash';\nimport { auto } from 'angular';\n\n// Components\nimport './color_legend';\nimport { optionsEditorCtrl } from './options_editor';\nimport { tooltipEditorCtrl } from './tooltip_editor';\nimport { migratePanelConfig } from './panel_config_migration';\n\n// Utils\nimport kbn from 'grafana/app/core/utils/kbn';\nimport { loadPluginCss } from 'grafana/app/plugins/sdk';\n\n// Types\nimport { MetricsPanelCtrl } from 'grafana/app/plugins/sdk';\nimport { AnnotationsSrv } from 'grafana/app/features/annotations/annotations_srv';\nimport { CoreEvents, PanelEvents } from './util/grafana/events/index';\nimport { Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data';\nimport rendering from './rendering';\nimport { Polygrafill } from './util/polygrafill/index';\n\nimport { ColorModeDiscrete } from './color_mode_discrete';\n\nconst VALUE_INDEX = 0,\n TIME_INDEX = 1;\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\nloadPluginCss({\n dark: 'plugins/flant-statusmap-panel/styles/dark.css',\n light: 'plugins/flant-statusmap-panel/styles/light.css',\n});\n\nexport var renderComplete: any = { name: 'statusmap-render-complete' };\n\nclass StatusHeatmapCtrl extends MetricsPanelCtrl {\n static templateUrl = 'module.html';\n\n data: any;\n bucketMatrix: BucketMatrix;\n bucketMatrixPager: BucketMatrixPager;\n\n graph: any;\n opacityScales: any = [];\n colorModes: any = [];\n colorSchemes: any = [];\n unitFormats: any;\n\n dataWarnings: { [warningId: string]: { title: string; tip: string } } = {};\n multipleValues: boolean;\n noColorDefined: boolean;\n noDatapoints: boolean;\n\n discreteExtraSeries: ColorModeDiscrete;\n\n annotations: object[] = [];\n annotationsPromise: any;\n\n // TODO remove this transient variable: use ng-model-options=\"{ getterSetter: true }\"\n pageSizeViewer = 15;\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 },\n yAxis: {\n show: true,\n minWidth: -1,\n maxWidth: -1,\n },\n tooltip: {\n show: true,\n freezeOnClick: true,\n showItems: false,\n items: [], // see tooltip_editor.ts\n showExtraInfo: false,\n extraInfo: '',\n },\n legend: {\n show: true,\n },\n yLabel: {\n usingSplitLabel: false,\n delimiter: '',\n labelTemplate: '',\n },\n // how null points should be handled\n nullPointMode: 'as empty',\n yAxisSort: 'metrics',\n highlightCards: true,\n useMax: true,\n\n seriesFilterIndex: -1,\n\n // Pagination options\n usingPagination: false,\n pageSize: 15,\n };\n\n /** @ngInject */\n constructor($scope: any, $injector: auto.IInjectorService, private annotationsSrv: AnnotationsSrv) {\n super($scope, $injector);\n\n if (!Polygrafill.hasAppEventCompatibleEmitter(this.events)) {\n CoreEvents.fallbackToStringEvents();\n PanelEvents.fallbackToStringEvents();\n renderComplete = 'statusmap-render-complete';\n }\n\n // Grafana 7.2 workaround\n if (typeof kbn['intervalToMs'] === 'function') {\n kbn.interval_to_ms = kbn.intervalToMs;\n }\n\n migratePanelConfig(this.panel);\n _.defaultsDeep(this.panel, this.panelDefaults);\n\n this.bucketMatrix = new BucketMatrix();\n\n // Create pager for bucketMatrix and restore page size.\n this.bucketMatrixPager = new BucketMatrixPager();\n this.bucketMatrixPager.setEnable(this.panel.usingPagination);\n this.bucketMatrixPager.setDefaultPageSize(this.panel.pageSize);\n this.bucketMatrixPager.setPageSize(this.panel.pageSize);\n $scope.pager = this.bucketMatrixPager;\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.discreteExtraSeries = 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 noDatapoints: {\n title: 'No data points',\n tip: 'No datapoints returned from data query',\n },\n };\n\n this.annotations = [];\n this.annotationsSrv = annotationsSrv;\n\n this.events.on(PanelEvents.render, this.onRender.bind(this));\n this.events.on(PanelEvents.dataReceived, this.onDataReceived.bind(this));\n this.events.on(PanelEvents.dataError, this.onDataError.bind(this));\n this.events.on(PanelEvents.dataSnapshotLoad, this.onDataReceived.bind(this));\n this.events.on(PanelEvents.editModeInitialized, this.onInitEditMode.bind(this));\n this.events.on(PanelEvents.refresh, this.postRefresh.bind(this));\n // custom event from rendering.js\n this.events.on(renderComplete, this.onRenderComplete.bind(this));\n\n this.onCardColorChange = this.onCardColorChange.bind(this);\n }\n\n onRenderComplete(data: any): void {\n this.graph.chartWidth = data.chartWidth;\n this.renderingCompleted();\n }\n\n changeDefaultPaginationSize(defaultPageSize: number): void {\n this.bucketMatrixPager.setDefaultPageSize(defaultPageSize);\n this.bucketMatrixPager.setPageSize(defaultPageSize);\n this.pageSizeViewer = defaultPageSize;\n\n this.render();\n this.refresh();\n }\n\n onChangePageSize(): void {\n if (this.pageSizeViewer <= 0) {\n this.pageSizeViewer = this.bucketMatrixPager.defaultPageSize;\n }\n this.bucketMatrixPager.setPageSize(this.pageSizeViewer);\n this.bucketMatrixPager.setCurrent(0);\n\n this.render();\n this.refresh();\n }\n\n onPrevPage(): void {\n this.bucketMatrixPager.switchToPrev();\n this.render();\n }\n\n onNextPage(): void {\n this.bucketMatrixPager.switchToNext();\n this.render();\n }\n\n // getChartWidth returns an approximation of chart canvas width or\n // a saved value calculated during a render.\n getChartWidth(): number {\n if (this.graph.chartWidth > 0) {\n return this.graph.chartWidth;\n }\n\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 width of the chart draw canvas:\n // - y axis ticks are not rendered yet on first data receive,\n // so choose 200 as a decent value for y legend width\n // - chartWidth can not be lower than the half of the panel width.\n const chartWidth = _.max([panelWidth - 200, panelWidth / 2]);\n\n return chartWidth!;\n }\n\n // Quick workaround for 6.7 and 7.0+. There is no call to\n // calculateInterval in updateTimeRange in those versions.\n // TODO ts type has no argument for this method.\n //\n updateTimeRange(datasource?: any) {\n // @ts-ignore\n let ret = super.updateTimeRange(datasource);\n this.calculateInterval();\n return ret;\n }\n\n // calculateInterval is called on 'refresh' to calculate an interval\n // for datasource.\n // It is override of calculateInterval from MetricsPanelCtrl.\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.discreteExtraSeries.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 // Get final buckets count after interval is adjusted\n // TODO is it needed?\n //this.xBucketsCount = Math.floor(rangeMs / intervalMs);\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 // @ts-ignore\n if ('undefined' !== typeof this.annotationsSrv.datasourcePromises) {\n // @ts-ignore\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 = interval;\n var res = super.issueQueries(datasource);\n this.panel.interval = origInterval;\n return res;\n }\n\n onDataReceived(dataList: any) {\n this.data = dataList;\n // Quick workaround for 7.0+. There is no call to\n // calculateInterval when enter Edit mode.\n if (!this.intervalMs) {\n this.calculateInterval();\n }\n\n let newBucketMatrix = this.convertDataToBuckets(\n dataList,\n this.range.from.valueOf(),\n this.range.to.valueOf(),\n this.intervalMs,\n true\n );\n\n this.bucketMatrix = newBucketMatrix;\n this.bucketMatrixPager.bucketMatrix = newBucketMatrix;\n if (newBucketMatrix.targets.length !== this.bucketMatrix.targets.length) {\n this.bucketMatrixPager.setCurrent(0);\n }\n\n this.noDatapoints = this.bucketMatrix.noDatapoints;\n\n if (this.annotationsPromise) {\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 this.render();\n },\n () => {\n this.loading = false;\n this.annotations = [];\n this.render();\n }\n );\n } else {\n this.loading = false;\n this.annotations = [];\n this.render();\n }\n }\n\n onInitEditMode() {\n this.addEditorTab('Options', optionsEditorCtrl, 2);\n this.addEditorTab('Tooltip', tooltipEditorCtrl, 3);\n this.unitFormats = kbn.getUnitFormats();\n }\n\n // onRender will be called before StatusmapRenderer.onRender.\n // Decide if warning should be displayed over cards.\n onRender() {\n if (!this.range || !this.data) {\n this.noDatapoints = true;\n return;\n }\n\n this.multipleValues = false;\n if (!this.panel.useMax) {\n if (this.bucketMatrix) {\n this.multipleValues = this.bucketMatrix.multipleValues;\n }\n }\n\n this.noColorDefined = false;\n if (this.panel.color.mode === 'discrete') {\n if (this.panel.seriesFilterIndex === -1) {\n this.discreteExtraSeries.updateCardsValuesHasColorInfo();\n } else {\n this.discreteExtraSeries.updateCardsValuesHasColorInfoSingle();\n }\n if (this.bucketMatrix) {\n this.noColorDefined = this.bucketMatrix.noColorDefined;\n }\n }\n\n this.noDatapoints = false;\n if (this.bucketMatrix) {\n this.noDatapoints = this.bucketMatrix.noDatapoints;\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 link(scope, elem, attrs, ctrl) {\n rendering(scope, elem, attrs, ctrl);\n }\n\n // Compatible with Grafana 7.0 overrides feature.\n retrieveTimeVar() {\n var time = this.timeSrv.timeRangeForUrl();\n return 'from=' + time.from + '&to=' + time.to;\n }\n\n // convertToBuckets groups values in data into buckets by target and timestamp.\n //\n // data is a result from datasource. It is an array of timeseries and tables:\n /* [\n // timeseries\n {\n target: \"query alias\",\n refId: \"A\",\n datapoints: [\n [0, 1582681239911],\n [3, 158....],\n ...\n ],\n tags?:{key: value,...}\n },\n // table\n {\n name: \"table name\",\n refId: \"B\",\n columns: [\n {text: \"id\"},\n {text: \"info\"},\n ...\n ],\n rows: [\n [1, \"123\"],\n [2, \"44411\"],\n ...\n ]\n },\n...\n ]\n\n to and from — a time range of the panel.\n intervalMs — a calculated interval. It is used to split a time range.\n */\n convertDataToBuckets(\n data: any,\n from: number,\n to: number,\n intervalMs: number,\n mostRecentBucket: boolean\n ): BucketMatrix {\n let bucketMatrix = new BucketMatrix();\n bucketMatrix.rangeMs = to - from;\n bucketMatrix.intervalMs = intervalMs;\n\n if (!data || data.length === 0) {\n // Mimic heatmap and graph 'no data' labels.\n bucketMatrix.targets = ['1.0', '0.0', '-1.0'];\n bucketMatrix.buckets['1.0'] = [];\n bucketMatrix.buckets['0.0'] = [];\n bucketMatrix.buckets['-1.0'] = [];\n bucketMatrix.xBucketSize = 42;\n bucketMatrix.noDatapoints = true;\n return bucketMatrix;\n }\n\n let targetIndex: { [target: string]: number[] } = {};\n let targetPartials: { [target: string]: string[] } = {};\n\n // Group indicies of elements in data by target (y label).\n\n // lodash version:\n //_.map(data, (d, i) => {\n // targetIndex[d.target] = _.concat(_.toArray(targetIndex[d.target]), i);\n //});\n\n data.map((queryResult: any, i: number) => {\n // Init yLabel as the query target\n let yLabel = queryResult.target;\n\n // Check if there is some labelTemplate configured\n if (this.panel.yLabel.usingSplitLabel && this.panel.yLabel.delimiter !== '') {\n let pLabels = queryResult.target.split(this.panel.yLabel.delimiter);\n\n // Load all possible values as scoped vars and load them into targetPartials\n // to be used on different components as Bucket and BucketMatrix props\n let scopedVars = [];\n scopedVars[`__y_label`] = { value: yLabel };\n for (let i in pLabels) {\n scopedVars[`__y_label_${i}`] = { value: pLabels[i] };\n }\n\n if (this.panel.yLabel.labelTemplate !== '') {\n yLabel = this.templateSrv.replace(this.panel.yLabel.labelTemplate, scopedVars);\n }\n\n targetPartials[yLabel] = pLabels;\n }\n\n //reset if it already exists\n if (!targetIndex.hasOwnProperty(yLabel)) {\n targetIndex[yLabel] = [];\n }\n targetIndex[yLabel].push(i);\n });\n\n let targetKeys = _.keys(targetIndex);\n\n //console.log (\"targetIndex: \", targetIndex, \"targetKeys: \", targetKeys);\n\n let targetTimestampRanges: { [target: string]: { [timestamp: number]: number[] } } = {};\n\n // Collect all timestamps for each target.\n // Make map timestamp => [from, to]. from == previous ts, to == ts from datapoint.\n targetKeys.map(target => {\n let targetTimestamps: any[] = [];\n\n for (let si = 0; si < targetIndex[target].length; si++) {\n let s = data[targetIndex[target][si]];\n _.map(s.datapoints, (datapoint, idx) => {\n targetTimestamps.push(datapoint[TIME_INDEX] - from);\n });\n }\n\n //console.log(\"timestamps['\"+target+\"'] = \", targetTimestamps);\n\n targetTimestamps = _.uniq(targetTimestamps);\n\n //console.log(\"uniq timestamps['\"+target+\"'] = \", targetTimestamps);\n\n targetTimestampRanges[target] = [];\n for (let i = targetTimestamps.length - 1; i >= 0; i--) {\n let tsTo = targetTimestamps[i];\n let tsFrom = 0;\n if (tsTo < 0) {\n tsFrom = tsTo - intervalMs;\n } else {\n if (i - 1 >= 0) {\n // Set from to previous timestamp + 1ms;\n tsFrom = targetTimestamps[i - 1] + 1;\n // tfTo - tfFrom should not be more than intervalMs\n let minFrom = tsTo - intervalMs;\n if (tsFrom < minFrom) {\n tsFrom = minFrom;\n }\n }\n }\n targetTimestampRanges[target][tsTo] = [tsFrom, tsTo];\n }\n });\n\n // console.log (\"targetTimestampRanges: \", targetTimestampRanges);\n\n // Create empty buckets using intervalMs to calculate ranges.\n // If mostRecentBucket is set, create a bucket with a range \"to\":\"to\"\n // to store most recent values.\n targetKeys.map(target => {\n let targetEmptyBuckets: any[] = [];\n\n let lastTs = to - from;\n\n if (mostRecentBucket) {\n let topBucket = new Bucket();\n topBucket.yLabel = target;\n topBucket.relTo = lastTs;\n topBucket.relFrom = lastTs;\n topBucket.values = [];\n topBucket.mostRecent = true;\n if (targetTimestampRanges[target].hasOwnProperty(lastTs)) {\n topBucket.relFrom = targetTimestampRanges[target][lastTs][0];\n lastTs = topBucket.relFrom;\n }\n topBucket.to = topBucket.relTo + from;\n topBucket.from = topBucket.relFrom + from;\n targetEmptyBuckets.push(topBucket);\n }\n\n let idx = 0;\n let bucketFrom = 0;\n while (bucketFrom >= 0) {\n let b = new Bucket();\n b.yLabel = target;\n b.pLabels = targetPartials[target];\n b.relTo = lastTs - idx * intervalMs;\n b.relFrom = lastTs - (idx + 1) * intervalMs;\n b.to = b.relTo + from;\n b.from = b.relFrom + from;\n b.values = [];\n bucketFrom = b.relFrom;\n targetEmptyBuckets.push(b);\n idx++;\n }\n\n targetEmptyBuckets.map((bucket, i) => {\n bucket.xid = i;\n });\n\n bucketMatrix.buckets[target] = targetEmptyBuckets;\n });\n\n //console.log (\"bucketMatrix: \", bucketMatrix);\n\n // Put values into buckets.\n bucketMatrix.minValue = Number.MAX_VALUE;\n bucketMatrix.maxValue = Number.MIN_SAFE_INTEGER;\n targetKeys.map(target => {\n targetIndex[target].map(dataIndex => {\n let s = data[dataIndex];\n s.datapoints.map((dp: any) => {\n for (let i = 0; i < bucketMatrix.buckets[target].length; i++) {\n if (bucketMatrix.buckets[target][i].belong(dp[TIME_INDEX])) {\n bucketMatrix.buckets[target][i].put(dp[VALUE_INDEX]);\n }\n }\n });\n });\n bucketMatrix.buckets[target].map(bucket => {\n bucket.minValue = _.min(bucket.values);\n bucket.maxValue = _.max(bucket.values);\n if (bucket.minValue < bucketMatrix.minValue) {\n bucketMatrix.minValue = bucket.minValue;\n }\n if (bucket.maxValue > bucketMatrix.maxValue) {\n bucketMatrix.maxValue = bucket.maxValue;\n }\n bucket.value = bucket.maxValue;\n if (bucket.values.length > 1) {\n bucketMatrix.multipleValues = true;\n bucket.multipleValues = true;\n\n bucket.value =\n this.panel.seriesFilterIndex !== -1 ? bucket.values[this.panel.seriesFilterIndex] : bucket.maxValue;\n }\n });\n });\n\n bucketMatrix.xBucketSize = Number.MIN_SAFE_INTEGER;\n targetKeys.map(target => {\n let bucketsLen: number = bucketMatrix.buckets[target].length;\n if (bucketsLen > bucketMatrix.xBucketSize) {\n bucketMatrix.xBucketSize = bucketsLen;\n }\n });\n\n //console.log (\"bucketMatrix with values: \", bucketMatrix);\n\n bucketMatrix.targets = targetKeys;\n bucketMatrix.pLabels = targetPartials;\n return bucketMatrix;\n }\n}\n\nexport { StatusHeatmapCtrl, StatusHeatmapCtrl as PanelCtrl };\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/plugin.json b/dist/plugin.json index ea76fa3..f321bb9 100644 --- a/dist/plugin.json +++ b/dist/plugin.json @@ -16,7 +16,8 @@ }, "links": [ {"name": "Github", "url": "https://github.com/flant/grafana-statusmap"}, - {"name": "MIT Licence", "url": "https://github.com/flant/grafana-statusmap/blob/master/LICENSE"} + {"name": "MIT Licence", "url": "https://github.com/flant/grafana-statusmap/blob/master/LICENSE"}, + {"name": "Developer", "url": "https://flant.com"} ], "screenshots": [ {"name": "Panel with light theme", "path": "img/flant-statusmap-panel.png"}, @@ -24,8 +25,8 @@ {"name": "Color mapping", "path": "img/color-mapping.png"}, {"name": "Queries example", "path": "img/queries-example.png"} ], - "version": "0.3.4", - "updated": "2020-09-12" + "version": "0.4.0-pre", + "updated": "2021-02-15" }, "dependencies": { diff --git a/docs/img/__repo-social-preview.png b/docs/img/__repo-social-preview.png new file mode 100644 index 0000000..b3bcbdd Binary files /dev/null and b/docs/img/__repo-social-preview.png differ diff --git a/src/img/color-mapping.png b/docs/img/color-mapping.png similarity index 100% rename from src/img/color-mapping.png rename to docs/img/color-mapping.png diff --git a/dist/img/color-preset-01.png b/docs/img/color-preset-01.png similarity index 100% rename from dist/img/color-preset-01.png rename to docs/img/color-preset-01.png diff --git a/dist/img/color-preset-02.png b/docs/img/color-preset-02.png similarity index 100% rename from dist/img/color-preset-02.png rename to docs/img/color-preset-02.png diff --git a/src/img/flant-statusmap-panel-dark.png b/docs/img/flant-statusmap-panel-dark.png similarity index 100% rename from src/img/flant-statusmap-panel-dark.png rename to docs/img/flant-statusmap-panel-dark.png diff --git a/src/img/flant-statusmap-panel.png b/docs/img/flant-statusmap-panel.png similarity index 100% rename from src/img/flant-statusmap-panel.png rename to docs/img/flant-statusmap-panel.png diff --git a/dist/img/min-width-spacing-rounding-01.png b/docs/img/min-width-spacing-rounding-01.png similarity index 100% rename from dist/img/min-width-spacing-rounding-01.png rename to docs/img/min-width-spacing-rounding-01.png diff --git a/dist/img/min-width-spacing-rounding-02.png b/docs/img/min-width-spacing-rounding-02.png similarity index 100% rename from dist/img/min-width-spacing-rounding-02.png rename to docs/img/min-width-spacing-rounding-02.png diff --git a/dist/img/multiple-values-error.png b/docs/img/multiple-values-error.png similarity index 100% rename from dist/img/multiple-values-error.png rename to docs/img/multiple-values-error.png diff --git a/dist/img/null-as-empty.png b/docs/img/null-as-empty.png similarity index 100% rename from dist/img/null-as-empty.png rename to docs/img/null-as-empty.png diff --git a/dist/img/options-bucket.png b/docs/img/options-bucket.png similarity index 100% rename from dist/img/options-bucket.png rename to docs/img/options-bucket.png diff --git a/dist/img/options-display.png b/docs/img/options-display.png similarity index 100% rename from dist/img/options-display.png rename to docs/img/options-display.png diff --git a/dist/img/pagination-graph.png b/docs/img/pagination-graph.png similarity index 100% rename from dist/img/pagination-graph.png rename to docs/img/pagination-graph.png diff --git a/src/img/queries-example.png b/docs/img/queries-example.png similarity index 100% rename from src/img/queries-example.png rename to docs/img/queries-example.png diff --git a/dist/img/tooltip-editor.png b/docs/img/tooltip-editor.png similarity index 100% rename from dist/img/tooltip-editor.png rename to docs/img/tooltip-editor.png diff --git a/dist/img/tooltip-frozen.png b/docs/img/tooltip-frozen.png similarity index 100% rename from dist/img/tooltip-frozen.png rename to docs/img/tooltip-frozen.png diff --git a/package.json b/package.json index 8ba37f1..fc18fef 100644 --- a/package.json +++ b/package.json @@ -25,11 +25,11 @@ "@types/grafana": "github:flant/types-grafana", "@types/jquery": "1.10.35", "@types/lodash": "4.14.123", - "emotion": "10.0.27" + "d3": "4.13.0", + "emotion": "10.0.27", + "lodash": "4.17.19" }, "dependencies": { - "d3": "4.13.0", - "d3-scale-chromatic": "^2", - "lodash": "4.17.19" + "d3-scale-chromatic": "^2" } } diff --git a/src/color_legend.ts b/src/color_legend.ts index 7985570..0aa6e24 100644 --- a/src/color_legend.ts +++ b/src/color_legend.ts @@ -1,13 +1,13 @@ import _ from 'lodash'; import $ from 'jquery'; import * as d3 from 'd3'; -import { d3ScaleChromatic } from './d3/d3-scale-chromatic'; +import { d3ScaleChromatic } from './util/d3/d3-scale-chromatic'; import { contextSrv } from 'grafana/app/core/core'; import { tickStep } from 'grafana/app/core/utils/ticks'; import coreModule from 'grafana/app/core/core_module'; import { StatusHeatmapCtrl } from './module'; -import { PanelEvents } from './libs/grafana/events/index'; +import { PanelEvents } from './util/grafana/events/index'; const LEGEND_STEP_WIDTH = 2; diff --git a/src/img/color-preset-01.png b/src/img/color-preset-01.png deleted file mode 100644 index 154ff89..0000000 Binary files a/src/img/color-preset-01.png and /dev/null differ diff --git a/src/img/color-preset-02.png b/src/img/color-preset-02.png deleted file mode 100644 index 16bb9fb..0000000 Binary files a/src/img/color-preset-02.png and /dev/null differ diff --git a/src/img/min-width-spacing-rounding-01.png b/src/img/min-width-spacing-rounding-01.png deleted file mode 100644 index b5b68a2..0000000 Binary files a/src/img/min-width-spacing-rounding-01.png and /dev/null differ diff --git a/src/img/min-width-spacing-rounding-02.png b/src/img/min-width-spacing-rounding-02.png deleted file mode 100644 index 25c7687..0000000 Binary files a/src/img/min-width-spacing-rounding-02.png and /dev/null differ diff --git a/src/img/multiple-values-error.png b/src/img/multiple-values-error.png deleted file mode 100644 index 113773b..0000000 Binary files a/src/img/multiple-values-error.png and /dev/null differ diff --git a/src/img/null-as-empty.png b/src/img/null-as-empty.png deleted file mode 100644 index 1dd3454..0000000 Binary files a/src/img/null-as-empty.png and /dev/null differ diff --git a/src/img/options-bucket.png b/src/img/options-bucket.png deleted file mode 100644 index 2e52438..0000000 Binary files a/src/img/options-bucket.png and /dev/null differ diff --git a/src/img/options-display.png b/src/img/options-display.png deleted file mode 100644 index c0599a6..0000000 Binary files a/src/img/options-display.png and /dev/null differ diff --git a/src/img/pagination-graph.png b/src/img/pagination-graph.png deleted file mode 100644 index eee385f..0000000 Binary files a/src/img/pagination-graph.png and /dev/null differ diff --git a/src/img/tooltip-editor.png b/src/img/tooltip-editor.png deleted file mode 100644 index 467fac3..0000000 Binary files a/src/img/tooltip-editor.png and /dev/null differ diff --git a/src/img/tooltip-frozen.png b/src/img/tooltip-frozen.png deleted file mode 100644 index ca5c1ef..0000000 Binary files a/src/img/tooltip-frozen.png and /dev/null differ diff --git a/src/libs/d3-scale-chromatic/categorical/Accent.js b/src/libs/d3-scale-chromatic/categorical/Accent.js deleted file mode 100644 index 07ab707..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Accent.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"); diff --git a/src/libs/d3-scale-chromatic/categorical/Dark2.js b/src/libs/d3-scale-chromatic/categorical/Dark2.js deleted file mode 100644 index 13fc291..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Dark2.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"); diff --git a/src/libs/d3-scale-chromatic/categorical/Paired.js b/src/libs/d3-scale-chromatic/categorical/Paired.js deleted file mode 100644 index 30094a0..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Paired.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"); diff --git a/src/libs/d3-scale-chromatic/categorical/Pastel1.js b/src/libs/d3-scale-chromatic/categorical/Pastel1.js deleted file mode 100644 index 4b0e093..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Pastel1.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"); diff --git a/src/libs/d3-scale-chromatic/categorical/Pastel2.js b/src/libs/d3-scale-chromatic/categorical/Pastel2.js deleted file mode 100644 index 520a5a3..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Pastel2.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"); diff --git a/src/libs/d3-scale-chromatic/categorical/Set1.js b/src/libs/d3-scale-chromatic/categorical/Set1.js deleted file mode 100644 index 8c34c1b..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Set1.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"); diff --git a/src/libs/d3-scale-chromatic/categorical/Set2.js b/src/libs/d3-scale-chromatic/categorical/Set2.js deleted file mode 100644 index e6bad53..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Set2.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"); diff --git a/src/libs/d3-scale-chromatic/categorical/Set3.js b/src/libs/d3-scale-chromatic/categorical/Set3.js deleted file mode 100644 index 8eeeb04..0000000 --- a/src/libs/d3-scale-chromatic/categorical/Set3.js +++ /dev/null @@ -1,3 +0,0 @@ -import colors from "../colors"; - -export default colors("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"); diff --git a/src/libs/d3-scale-chromatic/colors.js b/src/libs/d3-scale-chromatic/colors.js deleted file mode 100644 index aeedad5..0000000 --- a/src/libs/d3-scale-chromatic/colors.js +++ /dev/null @@ -1,5 +0,0 @@ -export default function(specifier) { - 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; -} diff --git a/src/libs/d3-scale-chromatic/diverging/BrBG.js b/src/libs/d3-scale-chromatic/diverging/BrBG.js deleted file mode 100644 index 5e27ee6..0000000 --- a/src/libs/d3-scale-chromatic/diverging/BrBG.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "d8b365f5f5f55ab4ac", - "a6611adfc27d80cdc1018571", - "a6611adfc27df5f5f580cdc1018571", - "8c510ad8b365f6e8c3c7eae55ab4ac01665e", - "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e", - "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e", - "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e", - "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30", - "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/GnYlRd.js b/src/libs/d3-scale-chromatic/diverging/GnYlRd.js deleted file mode 100644 index 2857b2b..0000000 --- a/src/libs/d3-scale-chromatic/diverging/GnYlRd.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "91cf60ffffbffc8d59", - "1a9641a6d96afdae61d7191c", - "1a9641a6d96affffbffdae61d7191c", - "1a985091cf60d9ef8bfee08bfc8d59d73027", - "1a985091cf60d9ef8bffffbffee08bfc8d59d73027", - "1a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027", - "1a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027", - "0068371a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027a50026", - "0068371a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027a50026" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/PRGn.js b/src/libs/d3-scale-chromatic/diverging/PRGn.js deleted file mode 100644 index 3be94f3..0000000 --- a/src/libs/d3-scale-chromatic/diverging/PRGn.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "af8dc3f7f7f77fbf7b", - "7b3294c2a5cfa6dba0008837", - "7b3294c2a5cff7f7f7a6dba0008837", - "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837", - "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837", - "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837", - "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837", - "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b", - "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/PiYG.js b/src/libs/d3-scale-chromatic/diverging/PiYG.js deleted file mode 100644 index 1d57c4f..0000000 --- a/src/libs/d3-scale-chromatic/diverging/PiYG.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e9a3c9f7f7f7a1d76a", - "d01c8bf1b6dab8e1864dac26", - "d01c8bf1b6daf7f7f7b8e1864dac26", - "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221", - "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221", - "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221", - "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221", - "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419", - "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/PuOr.js b/src/libs/d3-scale-chromatic/diverging/PuOr.js deleted file mode 100644 index 924f5cb..0000000 --- a/src/libs/d3-scale-chromatic/diverging/PuOr.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "998ec3f7f7f7f1a340", - "5e3c99b2abd2fdb863e66101", - "5e3c99b2abd2f7f7f7fdb863e66101", - "542788998ec3d8daebfee0b6f1a340b35806", - "542788998ec3d8daebf7f7f7fee0b6f1a340b35806", - "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806", - "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806", - "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08", - "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/RdBu.js b/src/libs/d3-scale-chromatic/diverging/RdBu.js deleted file mode 100644 index f9ba196..0000000 --- a/src/libs/d3-scale-chromatic/diverging/RdBu.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ef8a62f7f7f767a9cf", - "ca0020f4a58292c5de0571b0", - "ca0020f4a582f7f7f792c5de0571b0", - "b2182bef8a62fddbc7d1e5f067a9cf2166ac", - "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac", - "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac", - "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac", - "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061", - "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/RdGy.js b/src/libs/d3-scale-chromatic/diverging/RdGy.js deleted file mode 100644 index 9d1a4a1..0000000 --- a/src/libs/d3-scale-chromatic/diverging/RdGy.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ef8a62ffffff999999", - "ca0020f4a582bababa404040", - "ca0020f4a582ffffffbababa404040", - "b2182bef8a62fddbc7e0e0e09999994d4d4d", - "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d", - "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d", - "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d", - "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a", - "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/RdYlBu.js b/src/libs/d3-scale-chromatic/diverging/RdYlBu.js deleted file mode 100644 index ef93e9d..0000000 --- a/src/libs/d3-scale-chromatic/diverging/RdYlBu.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fc8d59ffffbf91bfdb", - "d7191cfdae61abd9e92c7bb6", - "d7191cfdae61ffffbfabd9e92c7bb6", - "d73027fc8d59fee090e0f3f891bfdb4575b4", - "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4", - "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4", - "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4", - "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695", - "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/RdYlGn.js b/src/libs/d3-scale-chromatic/diverging/RdYlGn.js deleted file mode 100644 index 2e3964d..0000000 --- a/src/libs/d3-scale-chromatic/diverging/RdYlGn.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fc8d59ffffbf91cf60", - "d7191cfdae61a6d96a1a9641", - "d7191cfdae61ffffbfa6d96a1a9641", - "d73027fc8d59fee08bd9ef8b91cf601a9850", - "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850", - "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850", - "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850", - "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837", - "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/diverging/Spectral.js b/src/libs/d3-scale-chromatic/diverging/Spectral.js deleted file mode 100644 index 0133e0a..0000000 --- a/src/libs/d3-scale-chromatic/diverging/Spectral.js +++ /dev/null @@ -1,16 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fc8d59ffffbf99d594", - "d7191cfdae61abdda42b83ba", - "d7191cfdae61ffffbfabdda42b83ba", - "d53e4ffc8d59fee08be6f59899d5943288bd", - "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd", - "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd", - "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd", - "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2", - "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/index.js b/src/libs/d3-scale-chromatic/index.js deleted file mode 100644 index e752dc4..0000000 --- a/src/libs/d3-scale-chromatic/index.js +++ /dev/null @@ -1,36 +0,0 @@ -export {default as schemeAccent} from "./categorical/Accent"; -export {default as schemeDark2} from "./categorical/Dark2"; -export {default as schemePaired} from "./categorical/Paired"; -export {default as schemePastel1} from "./categorical/Pastel1"; -export {default as schemePastel2} from "./categorical/Pastel2"; -export {default as schemeSet1} from "./categorical/Set1"; -export {default as schemeSet2} from "./categorical/Set2"; -export {default as schemeSet3} from "./categorical/Set3"; -export {default as interpolateBrBG, scheme as schemeBrBG} from "./diverging/BrBG"; -export {default as interpolatePRGn, scheme as schemePRGn} from "./diverging/PRGn"; -export {default as interpolatePiYG, scheme as schemePiYG} from "./diverging/PiYG"; -export {default as interpolatePuOr, scheme as schemePuOr} from "./diverging/PuOr"; -export {default as interpolateRdBu, scheme as schemeRdBu} from "./diverging/RdBu"; -export {default as interpolateRdGy, scheme as schemeRdGy} from "./diverging/RdGy"; -export {default as interpolateRdYlBu, scheme as schemeRdYlBu} from "./diverging/RdYlBu"; -export {default as interpolateRdYlGn, scheme as schemeRdYlGn} from "./diverging/RdYlGn"; -export {default as interpolateGnYlRd, scheme as schemeGnYlRd} from "./diverging/GnYlRd"; -export {default as interpolateSpectral, scheme as schemeSpectral} from "./diverging/Spectral"; -export {default as interpolateBuGn, scheme as schemeBuGn} from "./sequential-multi/BuGn"; -export {default as interpolateBuPu, scheme as schemeBuPu} from "./sequential-multi/BuPu"; -export {default as interpolateGnBu, scheme as schemeGnBu} from "./sequential-multi/GnBu"; -export {default as interpolateOrRd, scheme as schemeOrRd} from "./sequential-multi/OrRd"; -export {default as interpolatePuBuGn, scheme as schemePuBuGn} from "./sequential-multi/PuBuGn"; -export {default as interpolatePuBu, scheme as schemePuBu} from "./sequential-multi/PuBu"; -export {default as interpolatePuRd, scheme as schemePuRd} from "./sequential-multi/PuRd"; -export {default as interpolateRdPu, scheme as schemeRdPu} from "./sequential-multi/RdPu"; -export {default as interpolateYlGnBu, scheme as schemeYlGnBu} from "./sequential-multi/YlGnBu"; -export {default as interpolateYlGn, scheme as schemeYlGn} from "./sequential-multi/YlGn"; -export {default as interpolateYlOrBr, scheme as schemeYlOrBr} from "./sequential-multi/YlOrBr"; -export {default as interpolateYlOrRd, scheme as schemeYlOrRd} from "./sequential-multi/YlOrRd"; -export {default as interpolateBlues, scheme as schemeBlues} from "./sequential-single/Blues"; -export {default as interpolateGreens, scheme as schemeGreens} from "./sequential-single/Greens"; -export {default as interpolateGreys, scheme as schemeGreys} from "./sequential-single/Greys"; -export {default as interpolatePurples, scheme as schemePurples} from "./sequential-single/Purples"; -export {default as interpolateReds, scheme as schemeReds} from "./sequential-single/Reds"; -export {default as interpolateOranges, scheme as schemeOranges} from "./sequential-single/Oranges"; diff --git a/src/libs/d3-scale-chromatic/ramp.js b/src/libs/d3-scale-chromatic/ramp.js deleted file mode 100644 index f138a9b..0000000 --- a/src/libs/d3-scale-chromatic/ramp.js +++ /dev/null @@ -1,5 +0,0 @@ -import d3 from 'd3'; - -export default function(scheme) { - return d3.interpolateRgbBasis(scheme[scheme.length - 1]); -} diff --git a/src/libs/d3-scale-chromatic/sequential-multi/BuGn.js b/src/libs/d3-scale-chromatic/sequential-multi/BuGn.js deleted file mode 100644 index e7dade7..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/BuGn.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e5f5f999d8c92ca25f", - "edf8fbb2e2e266c2a4238b45", - "edf8fbb2e2e266c2a42ca25f006d2c", - "edf8fbccece699d8c966c2a42ca25f006d2c", - "edf8fbccece699d8c966c2a441ae76238b45005824", - "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824", - "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/BuPu.js b/src/libs/d3-scale-chromatic/sequential-multi/BuPu.js deleted file mode 100644 index 8aa9232..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/BuPu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e0ecf49ebcda8856a7", - "edf8fbb3cde38c96c688419d", - "edf8fbb3cde38c96c68856a7810f7c", - "edf8fbbfd3e69ebcda8c96c68856a7810f7c", - "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b", - "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b", - "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/GnBu.js b/src/libs/d3-scale-chromatic/sequential-multi/GnBu.js deleted file mode 100644 index c8dae65..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/GnBu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e0f3dba8ddb543a2ca", - "f0f9e8bae4bc7bccc42b8cbe", - "f0f9e8bae4bc7bccc443a2ca0868ac", - "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac", - "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e", - "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e", - "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/OrRd.js b/src/libs/d3-scale-chromatic/sequential-multi/OrRd.js deleted file mode 100644 index 3f96f7d..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/OrRd.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fee8c8fdbb84e34a33", - "fef0d9fdcc8afc8d59d7301f", - "fef0d9fdcc8afc8d59e34a33b30000", - "fef0d9fdd49efdbb84fc8d59e34a33b30000", - "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000", - "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000", - "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/PuBu.js b/src/libs/d3-scale-chromatic/sequential-multi/PuBu.js deleted file mode 100644 index c279e48..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/PuBu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ece7f2a6bddb2b8cbe", - "f1eef6bdc9e174a9cf0570b0", - "f1eef6bdc9e174a9cf2b8cbe045a8d", - "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d", - "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b", - "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b", - "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js b/src/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js deleted file mode 100644 index f6d8fe0..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ece2f0a6bddb1c9099", - "f6eff7bdc9e167a9cf02818a", - "f6eff7bdc9e167a9cf1c9099016c59", - "f6eff7d0d1e6a6bddb67a9cf1c9099016c59", - "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450", - "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450", - "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/PuRd.js b/src/libs/d3-scale-chromatic/sequential-multi/PuRd.js deleted file mode 100644 index fe762d2..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/PuRd.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e7e1efc994c7dd1c77", - "f1eef6d7b5d8df65b0ce1256", - "f1eef6d7b5d8df65b0dd1c77980043", - "f1eef6d4b9dac994c7df65b0dd1c77980043", - "f1eef6d4b9dac994c7df65b0e7298ace125691003f", - "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f", - "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/RdPu.js b/src/libs/d3-scale-chromatic/sequential-multi/RdPu.js deleted file mode 100644 index 748939c..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/RdPu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fde0ddfa9fb5c51b8a", - "feebe2fbb4b9f768a1ae017e", - "feebe2fbb4b9f768a1c51b8a7a0177", - "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177", - "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177", - "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177", - "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/YlGn.js b/src/libs/d3-scale-chromatic/sequential-multi/YlGn.js deleted file mode 100644 index aaacd6c..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/YlGn.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "f7fcb9addd8e31a354", - "ffffccc2e69978c679238443", - "ffffccc2e69978c67931a354006837", - "ffffccd9f0a3addd8e78c67931a354006837", - "ffffccd9f0a3addd8e78c67941ab5d238443005a32", - "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32", - "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js b/src/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js deleted file mode 100644 index eb009ef..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "edf8b17fcdbb2c7fb8", - "ffffcca1dab441b6c4225ea8", - "ffffcca1dab441b6c42c7fb8253494", - "ffffccc7e9b47fcdbb41b6c42c7fb8253494", - "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84", - "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84", - "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js b/src/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js deleted file mode 100644 index 2fc1aa1..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fff7bcfec44fd95f0e", - "ffffd4fed98efe9929cc4c02", - "ffffd4fed98efe9929d95f0e993404", - "ffffd4fee391fec44ffe9929d95f0e993404", - "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04", - "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04", - "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js b/src/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js deleted file mode 100644 index d34cca6..0000000 --- a/src/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "ffeda0feb24cf03b20", - "ffffb2fecc5cfd8d3ce31a1c", - "ffffb2fecc5cfd8d3cf03b20bd0026", - "ffffb2fed976feb24cfd8d3cf03b20bd0026", - "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026", - "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026", - "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-single/Blues.js b/src/libs/d3-scale-chromatic/sequential-single/Blues.js deleted file mode 100644 index cb36bf7..0000000 --- a/src/libs/d3-scale-chromatic/sequential-single/Blues.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "deebf79ecae13182bd", - "eff3ffbdd7e76baed62171b5", - "eff3ffbdd7e76baed63182bd08519c", - "eff3ffc6dbef9ecae16baed63182bd08519c", - "eff3ffc6dbef9ecae16baed64292c62171b5084594", - "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594", - "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-single/Greens.js b/src/libs/d3-scale-chromatic/sequential-single/Greens.js deleted file mode 100644 index 074f5bf..0000000 --- a/src/libs/d3-scale-chromatic/sequential-single/Greens.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "e5f5e0a1d99b31a354", - "edf8e9bae4b374c476238b45", - "edf8e9bae4b374c47631a354006d2c", - "edf8e9c7e9c0a1d99b74c47631a354006d2c", - "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32", - "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32", - "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-single/Greys.js b/src/libs/d3-scale-chromatic/sequential-single/Greys.js deleted file mode 100644 index ae5a0b4..0000000 --- a/src/libs/d3-scale-chromatic/sequential-single/Greys.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "f0f0f0bdbdbd636363", - "f7f7f7cccccc969696525252", - "f7f7f7cccccc969696636363252525", - "f7f7f7d9d9d9bdbdbd969696636363252525", - "f7f7f7d9d9d9bdbdbd969696737373525252252525", - "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525", - "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-single/Oranges.js b/src/libs/d3-scale-chromatic/sequential-single/Oranges.js deleted file mode 100644 index a4babe1..0000000 --- a/src/libs/d3-scale-chromatic/sequential-single/Oranges.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fee6cefdae6be6550d", - "feeddefdbe85fd8d3cd94701", - "feeddefdbe85fd8d3ce6550da63603", - "feeddefdd0a2fdae6bfd8d3ce6550da63603", - "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04", - "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04", - "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-single/Purples.js b/src/libs/d3-scale-chromatic/sequential-single/Purples.js deleted file mode 100644 index d9810e1..0000000 --- a/src/libs/d3-scale-chromatic/sequential-single/Purples.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "efedf5bcbddc756bb1", - "f2f0f7cbc9e29e9ac86a51a3", - "f2f0f7cbc9e29e9ac8756bb154278f", - "f2f0f7dadaebbcbddc9e9ac8756bb154278f", - "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486", - "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486", - "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/d3-scale-chromatic/sequential-single/Reds.js b/src/libs/d3-scale-chromatic/sequential-single/Reds.js deleted file mode 100644 index 447084c..0000000 --- a/src/libs/d3-scale-chromatic/sequential-single/Reds.js +++ /dev/null @@ -1,14 +0,0 @@ -import colors from "../colors"; -import ramp from "../ramp"; - -export var scheme = new Array(3).concat( - "fee0d2fc9272de2d26", - "fee5d9fcae91fb6a4acb181d", - "fee5d9fcae91fb6a4ade2d26a50f15", - "fee5d9fcbba1fc9272fb6a4ade2d26a50f15", - "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d", - "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d", - "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d" -).map(colors); - -export default ramp(scheme); diff --git a/src/libs/polygrafill/README.md b/src/libs/polygrafill/README.md deleted file mode 100644 index 15b7159..0000000 --- a/src/libs/polygrafill/README.md +++ /dev/null @@ -1,8 +0,0 @@ -1. @grafana/data is not supported in grafana 5.x and 6.2. The workaround is -the module `./libs/grafana/events` that include copy-pasted events -from @grafana/data and app/core from grafana sources. - -2. Newly Grafana versions flood Console with -"Usage strings as events is deprecated ..." messages. -This module has a function to detect if Grafana’s Emitter support AppEvent style event ids. - diff --git a/src/module.ts b/src/module.ts index 4daa71d..ac8cebe 100644 --- a/src/module.ts +++ b/src/module.ts @@ -15,10 +15,10 @@ import { loadPluginCss } from 'grafana/app/plugins/sdk'; // Types import { MetricsPanelCtrl } from 'grafana/app/plugins/sdk'; import { AnnotationsSrv } from 'grafana/app/features/annotations/annotations_srv'; -import { CoreEvents, PanelEvents } from './libs/grafana/events/index'; +import { CoreEvents, PanelEvents } from './util/grafana/events/index'; import { Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data'; import rendering from './rendering'; -import { Polygrafill } from './libs/polygrafill/index'; +import { Polygrafill } from './util/polygrafill/index'; import { ColorModeDiscrete } from './color_mode_discrete'; diff --git a/src/plugin.json b/src/plugin.json index ea76fa3..779c176 100644 --- a/src/plugin.json +++ b/src/plugin.json @@ -16,7 +16,8 @@ }, "links": [ {"name": "Github", "url": "https://github.com/flant/grafana-statusmap"}, - {"name": "MIT Licence", "url": "https://github.com/flant/grafana-statusmap/blob/master/LICENSE"} + {"name": "MIT Licence", "url": "https://github.com/flant/grafana-statusmap/blob/master/LICENSE"}, + {"name": "Developer", "url": "https://flant.com"} ], "screenshots": [ {"name": "Panel with light theme", "path": "img/flant-statusmap-panel.png"}, @@ -24,8 +25,8 @@ {"name": "Color mapping", "path": "img/color-mapping.png"}, {"name": "Queries example", "path": "img/queries-example.png"} ], - "version": "0.3.4", - "updated": "2020-09-12" + "version": "%VERSION%", + "updated": "%TODAY%" }, "dependencies": { diff --git a/src/rendering.ts b/src/rendering.ts index 082a1f4..17d8d93 100644 --- a/src/rendering.ts +++ b/src/rendering.ts @@ -8,12 +8,12 @@ import moment from 'moment'; import kbn from 'grafana/app/core/utils/kbn'; import { appEvents, contextSrv } from 'grafana/app/core/core'; import * as d3 from 'd3'; -import { d3ScaleChromatic } from './d3/d3-scale-chromatic'; +import { d3ScaleChromatic } from './util/d3/d3-scale-chromatic'; import { StatusmapTooltip } from './tooltip'; import { AnnotationTooltip } from './annotations'; import { Bucket, BucketMatrix, BucketMatrixPager } from './statusmap_data'; import { StatusHeatmapCtrl, renderComplete } from './module'; -import { CoreEvents, PanelEvents } from './libs/grafana/events/index'; +import { CoreEvents, PanelEvents } from './util/grafana/events/index'; let MIN_CARD_SIZE = 5, CARD_H_SPACING = 2, diff --git a/src/d3/d3-scale-chromatic.ts b/src/util/d3/d3-scale-chromatic.ts similarity index 95% rename from src/d3/d3-scale-chromatic.ts rename to src/util/d3/d3-scale-chromatic.ts index 783724d..e884136 100644 --- a/src/d3/d3-scale-chromatic.ts +++ b/src/util/d3/d3-scale-chromatic.ts @@ -1,6 +1,8 @@ import * as d3 from 'd3'; import * as d3ScaleChromaticOrig from 'd3-scale-chromatic'; +// Add GnYlRd color schema to d3-scale-chromatic + let GnYlRdScheme = new Array(3) .concat( '91cf60ffffbffc8d59', diff --git a/src/libs/grafana/events/appEvents.ts b/src/util/grafana/events/appEvents.ts similarity index 100% rename from src/libs/grafana/events/appEvents.ts rename to src/util/grafana/events/appEvents.ts diff --git a/src/libs/grafana/events/events.ts b/src/util/grafana/events/events.ts similarity index 100% rename from src/libs/grafana/events/events.ts rename to src/util/grafana/events/events.ts diff --git a/src/libs/grafana/events/index.ts b/src/util/grafana/events/index.ts similarity index 100% rename from src/libs/grafana/events/index.ts rename to src/util/grafana/events/index.ts diff --git a/src/libs/grafana/events/panelEvents.ts b/src/util/grafana/events/panelEvents.ts similarity index 100% rename from src/libs/grafana/events/panelEvents.ts rename to src/util/grafana/events/panelEvents.ts diff --git a/dist/libs/polygrafill/README.md b/src/util/polygrafill/README.md similarity index 83% rename from dist/libs/polygrafill/README.md rename to src/util/polygrafill/README.md index 15b7159..dfd486a 100644 --- a/dist/libs/polygrafill/README.md +++ b/src/util/polygrafill/README.md @@ -1,5 +1,5 @@ 1. @grafana/data is not supported in grafana 5.x and 6.2. The workaround is -the module `./libs/grafana/events` that include copy-pasted events +the module `./util/grafana/events` that include copy-pasted events from @grafana/data and app/core from grafana sources. 2. Newly Grafana versions flood Console with diff --git a/src/libs/polygrafill/funcs.ts b/src/util/polygrafill/funcs.ts similarity index 100% rename from src/libs/polygrafill/funcs.ts rename to src/util/polygrafill/funcs.ts diff --git a/src/libs/polygrafill/index.ts b/src/util/polygrafill/index.ts similarity index 100% rename from src/libs/polygrafill/index.ts rename to src/util/polygrafill/index.ts diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..0452af2 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,15 @@ +// Copy screenshots defined in plugin.json. + +const path = require('path'); +const pluginJson = require(path.resolve(process.cwd(), 'src/plugin.json')); +const CopyWebpackPlugin = require('copy-webpack-plugin'); + +module.exports.getWebpackConfig = (config, options) => ({ + ...config, + plugins: [...config.plugins, new CopyWebpackPlugin( + pluginJson.info.screenshots.map(function(item) { + return {from: "../docs/"+item.path, to: "./img"} + }), + { logLevel: options.watch ? 'silent' : 'warn' } + ) ], +});