diff --git a/dist/CHANGELOG.md b/dist/CHANGELOG.md deleted file mode 100644 index a11aa0e..0000000 --- a/dist/CHANGELOG.md +++ /dev/null @@ -1,81 +0,0 @@ -# Changelog - -## v0.4.0 - -- Fix to work with Grafana 7.4.x -- Migrate to grafana-toolkit and yarn to build and sign. -- Cleanup dist directory, reduce compiled plugin size. -- Code cleanup: fix linter errors and warnings -- Add Github Actions configuration to automate release process. -- Add unobtrusive branding. - -## v0.3.4 - -- Fix to work in Grafana 7.2.0,7.2.1 -- Fix 'name' in tooltip for opacity and gradient modes -- Fix color scale for opacity and gradient modes - -## v0.3.3 - -- Fix fallback to string events for older versions of Grafana - -## v0.3.2 - -- Fix plugin metadata for Grafana repository - -## v0.3.1 - -- Fix to work in Grafana 7.1.0 - -## v0.3.0 - -- Tooltip freeze on click -- Show URLs in tooltip -- Pagination controls -- Fix tooltip and null buckets -- Fix display for 6.7+, 7.0+ - -## v0.2.0 - -- Migrate code base to typescript -- Fixes to work in 6.3.0+ grafana - -## v0.1.1 - -- Fix for annotations in grafana 5.x before 5.4 - -## v0.1.0 - -- Tested with Grafana 6.0.0 -- Tested with InfluxDB and Mysql datasources -- Add initial support for display annotations -- Add example for k8s statuses (thanks, @vrutkovs) -- Fix hanging on big values -- Fix horizontal spacing = 0 -- Fix for "Object doesn't support property or method 'remove'" -- Fix card width for targets with different datapoints count - -## v0.0.4 - -- Fix display of multivalues buckets as an empty cell - -## v0.0.3 - -- Add solarized preset -- Reorganize statuses editor for discrete mode -- Separate options for vertical and horizontal spacing for cards -- Add simple sort options for Y axis -- Fix display null values as zero - -## v0.0.2 - -- Install with GF_INSTALL_PLUGINS -- Fix legend overlap -- Fix colors for dark theme -- Fix panel rendering timeout error - - -## v0.0.1 - -- First public release - diff --git a/dist/LICENSE b/dist/LICENSE deleted file mode 100644 index 0702584..0000000 --- a/dist/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2018 Flant - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/dist/README.md b/dist/README.md deleted file mode 100644 index 2b69df1..0000000 --- a/dist/README.md +++ /dev/null @@ -1,209 +0,0 @@ -# Statusmap panel for Grafana - -[![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) -[![Follow Flant on Twitter](https://img.shields.io/twitter/follow/flant_com?label=Follow%20Flant&style=social)](https://twitter.com/flant_com) - -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 - -* Grouping values into rows and buckets using legend from query -* User defined color mapping -* Multiple values in bucket are displayed via tooltip -* Increasing rows/buckets' interval for better visual representation -* Representing null values as empty bucket or zero value - -### Supported environment - -* Tested with datasources: - - Prometheus - - InfluxDB - - Mysql -* Supported Grafana versions: - - 6.7+ are the most priority (6.7, 7.0-7.4) - - also works in 5.4.3 and 6.0+ - -## Motivation - -We had a desperate need to visualize a set of timeseries statuses over time period, so we can -see a history of changes for objects' status. Since we maintain a lot of Kubernetes clusters -(and related infrastructure), our main cases for that are visualization of servers & Kubernetes -pods health states as well as HTTP services health checks. We've tried a variety of Grafana -plugins available (they are listed in *Acknowledgements* below) but none of them could provide -the features and visualization really close to what we've been looking for. - -_NB: You can find more details about our journey of creating the plugin in -[this post](https://medium.com/flant-com/statusmap-grafana-plugin-to-visualize-status-over-time-fe6ced391853)._ - -_Objects_ being visualized with this plugin may be different: not only IT components (e.g. server -hosts and Kubernetes pods) but just anything you can imagine like coffee makers on the picture -above. These objects should have _discrete statuses_ which are sets of predefined values, e.g. -`ok` = 0, `off` = 1, `fail` = 2, etc. - -## Configuration - -### Datasource notes - -To create neat graphs your datasource should return good data. Plugin adjust `$__interval` variable depending on -bucket width in panel options. Your queries should aggregate statuses over `$__interval`. - -To make multiple values mode works as expected you should define multiple queries: one query for each possible status. - -Plugin doesn't aggregate data in time for now, it only renders input data as buckets. Because of this -data should contain points for each timestamp in time range and equal timestamps for every possible -target (y-axis label). This limitation is addressed by [issue #53](https://github.com/flant/grafana-statusmap/issues/53). - -#### Prometheus - -To work with data from Prometheus you will need to setup discrete statuses for your objects. -Requirements to store these statuses in metrics are as follows: -* metrics should have two values: `0` and `1`; -* there should be a label with status' value. - -When it's done, you can collect all the data via query, e.g.: - -``` -(max_over_time(coffee_maker_status{status=""}[$__interval]) == 1) * -``` - -If there was no such status (``) during query's interval, Prometheus would -return nothing. Otherwise, status' value will be returned. - -For example, if you have 5 types of statuses and a metric (`coffee_maker_status`) with 5 -allowed values (`0`, `1`, `2`, `3`, `4`), you should transform this metric using following rule: - -``` -- record: coffee_maker_status:discrete - expr: | - count_values("status", coffee_maker_status) -``` - -That's how `coffee_maker_status` metric with value `3` will be transformed into new metric: - -``` -coffee_maker_status:discrete{status="3"} 1 -``` - -Now, when Prometheus has `0` and `1` values for each status, all these metrics can be -aggregated, so you will get all available statuses of your objects over time. - -#### InfluxDB - -Choose 'Time series' for 'Format as' and use `GROUP BY ($__interval)` in query. `$tag_` can be used in 'Alias by' to define y-axis labels. - -#### Mysql - -Example query with aggregation over `$__interval` is like this (you need one query for each possible status value): - -``` -SELECT - $__timeGroupAlias(date_insert,$__interval), - name AS metric, - min(statusi) AS "statusi" -FROM coffee_makers -WHERE - $__timeFilter(date_insert) AND statusi=1 -GROUP BY 1,2 -ORDER BY $__timeGroup(date_insert,$__interval) -``` - -`metric` column is used as y-axis label. - -### Panel - -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/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/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/docs/img/color-preset-01.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._ - - -### More options - -#### Bucket - -![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/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/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/docs/img/min-width-spacing-rounding-01.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/docs/img/options-display.png) - -__Show legend__ checkbox toggles legend at the bottom of the panel. - -__Rows sort__ can be used to sort labels on Y axis. Metrics — sort y labels as they are defined on Metrics tab. a→z and z→a sort labels descending or ascending in a [natural](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare) order. - -#### Pagination - -![Pagination controls](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/pagination-graph.png) - -__Enable pagination__ toggles pagination controls on graph. - -__Rows per page__ a number of rows to display on graph. - -#### Tooltip - -![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. - -__Freeze on click__ toggles tooltip "freezing" on click. Frozen tooltip can be used to compare data with floating tooltip or to follow URLs. - -__Show items__ toggles display of additional items in tooltip. - -__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/docs/img/tooltip-editor.png) - - -## Learn more - -* [Changelog](https://github.com/flant/grafana-statusmap/blob/master/CHANGELOG.md) -* Use [GitHub Discussions](https://github.com/flant/grafana-statusmap/discussions) to ask for help. -* [Installation](https://grafana.com/grafana/plugins/flant-statusmap-panel/installation) -* Setup [development](https://github.com/flant/grafana-statusmap/blob/master/DEVELOPMENT.md) environment to help us improve the plugin. - -## Acknowledgements - -The first public release of this plugin has been fully made by [Flant](https://flant.com/) engineers. The whole idea has come from Dmitry Stolyarov ([@distol](https://github.com/distol)), initial version has been written by Sergey Gnuskov ([@gsmetal](https://github.com/gsmetal)) and final changes has been made by Ivan Mikheykin ([@diafour](https://github.com/diafour)). - -This plugin is based on "Heatmap" panel by Grafana and partly inspired by ideas from Carpet plot, Discrete panel, Status Panel, Status Dot, Status By Group. diff --git a/dist/dark.js b/dist/dark.js deleted file mode 100644 index 0934aa3..0000000 --- a/dist/dark.js +++ /dev/null @@ -1,2 +0,0 @@ -define((function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=12)}({12:function(e,t,n){}})})); -//# sourceMappingURL=dark.js.map \ No newline at end of file diff --git a/dist/dark.js.map b/dist/dark.js.map deleted file mode 100644 index b037367..0000000 --- a/dist/dark.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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/img/color-mapping.png b/dist/img/color-mapping.png deleted file mode 100644 index 946cf42..0000000 Binary files a/dist/img/color-mapping.png and /dev/null differ diff --git a/dist/img/flant-statusmap-panel-dark.png b/dist/img/flant-statusmap-panel-dark.png deleted file mode 100644 index 242eaae..0000000 Binary files a/dist/img/flant-statusmap-panel-dark.png and /dev/null differ diff --git a/dist/img/flant-statusmap-panel.png b/dist/img/flant-statusmap-panel.png deleted file mode 100644 index 71aaf9a..0000000 Binary files a/dist/img/flant-statusmap-panel.png and /dev/null differ diff --git a/dist/img/logo.svg b/dist/img/logo.svg deleted file mode 100644 index d401c33..0000000 --- a/dist/img/logo.svg +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dist/img/queries-example.png b/dist/img/queries-example.png deleted file mode 100644 index 7150b44..0000000 Binary files a/dist/img/queries-example.png and /dev/null differ diff --git a/dist/light.js b/dist/light.js deleted file mode 100644 index 4530729..0000000 --- a/dist/light.js +++ /dev/null @@ -1,2 +0,0 @@ -define((function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=11)}({11:function(e,t,n){}})})); -//# sourceMappingURL=light.js.map \ No newline at end of file diff --git a/dist/light.js.map b/dist/light.js.map deleted file mode 100644 index 370d087..0000000 --- a/dist/light.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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.html b/dist/module.html deleted file mode 100644 index 2863c19..0000000 --- a/dist/module.html +++ /dev/null @@ -1,37 +0,0 @@ -
-
-
- {{ctrl.dataWarnings.multipleValues.title}} - {{ctrl.dataWarnings.noColorDefined.title}} - {{ctrl.dataWarnings.noDatapoints.title}} -
-
-
- -
- -
- -
- -
-
- - - -
- -
- - -
- -
-
-
diff --git a/dist/module.js b/dist/module.js deleted file mode 100644 index 24d8701..0000000 --- a/dist/module.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see module.js.LICENSE.txt */ -define(["lodash","d3","jquery","app/core/utils/kbn","app/core/core","app/plugins/sdk","app/core/core_module","moment","app/core/utils/ticks"],(function(e,t,a,r,n,i,o,c,s){return function(e){var t={};function a(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,a),n.l=!0,n.exports}return a.m=e,a.c=t,a.d=function(e,t,r){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(a.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)a.d(r,n,function(t){return e[t]}.bind(null,n));return r},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="/",a(a.s=13)}([function(t,a){t.exports=e},function(e,a){e.exports=t},function(e,t){e.exports=a},function(e,t){e.exports=r},function(e,t){e.exports=n},,function(e,t){e.exports=i},function(e,t){e.exports=o},function(e,t){e.exports=c},,function(e,t){e.exports=s},,,function(e,t,a){"use strict";a.r(t);var r={};a.r(r),a.d(r,"schemeCategory10",(function(){return m})),a.d(r,"schemeAccent",(function(){return g})),a.d(r,"schemeDark2",(function(){return v})),a.d(r,"schemePaired",(function(){return y})),a.d(r,"schemePastel1",(function(){return x})),a.d(r,"schemePastel2",(function(){return w})),a.d(r,"schemeSet1",(function(){return M})),a.d(r,"schemeSet2",(function(){return k})),a.d(r,"schemeSet3",(function(){return S})),a.d(r,"schemeTableau10",(function(){return C})),a.d(r,"interpolateBrBG",(function(){return le})),a.d(r,"schemeBrBG",(function(){return de})),a.d(r,"interpolatePRGn",(function(){return ue})),a.d(r,"schemePRGn",(function(){return he})),a.d(r,"interpolatePiYG",(function(){return be})),a.d(r,"schemePiYG",(function(){return pe})),a.d(r,"interpolatePuOr",(function(){return ge})),a.d(r,"schemePuOr",(function(){return me})),a.d(r,"interpolateRdBu",(function(){return ye})),a.d(r,"schemeRdBu",(function(){return ve})),a.d(r,"interpolateRdGy",(function(){return we})),a.d(r,"schemeRdGy",(function(){return xe})),a.d(r,"interpolateRdYlBu",(function(){return ke})),a.d(r,"schemeRdYlBu",(function(){return Me})),a.d(r,"interpolateRdYlGn",(function(){return Ce})),a.d(r,"schemeRdYlGn",(function(){return Se})),a.d(r,"interpolateSpectral",(function(){return Ae})),a.d(r,"schemeSpectral",(function(){return Pe})),a.d(r,"interpolateBuGn",(function(){return Re})),a.d(r,"schemeBuGn",(function(){return Te})),a.d(r,"interpolateBuPu",(function(){return He})),a.d(r,"schemeBuPu",(function(){return _e})),a.d(r,"interpolateGnBu",(function(){return Ye})),a.d(r,"schemeGnBu",(function(){return We})),a.d(r,"interpolateOrRd",(function(){return Oe})),a.d(r,"schemeOrRd",(function(){return Be})),a.d(r,"interpolatePuBuGn",(function(){return Ve})),a.d(r,"schemePuBuGn",(function(){return Ee})),a.d(r,"interpolatePuBu",(function(){return ze})),a.d(r,"schemePuBu",(function(){return De})),a.d(r,"interpolatePuRd",(function(){return Fe})),a.d(r,"schemePuRd",(function(){return Ge})),a.d(r,"interpolateRdPu",(function(){return Ie})),a.d(r,"schemeRdPu",(function(){return Ne})),a.d(r,"interpolateYlGnBu",(function(){return $e})),a.d(r,"schemeYlGnBu",(function(){return Le})),a.d(r,"interpolateYlGn",(function(){return qe})),a.d(r,"schemeYlGn",(function(){return je})),a.d(r,"interpolateYlOrBr",(function(){return Xe})),a.d(r,"schemeYlOrBr",(function(){return Ue})),a.d(r,"interpolateYlOrRd",(function(){return Je})),a.d(r,"schemeYlOrRd",(function(){return Qe})),a.d(r,"interpolateBlues",(function(){return Ze})),a.d(r,"schemeBlues",(function(){return Ke})),a.d(r,"interpolateGreens",(function(){return tt})),a.d(r,"schemeGreens",(function(){return et})),a.d(r,"interpolateGreys",(function(){return rt})),a.d(r,"schemeGreys",(function(){return at})),a.d(r,"interpolatePurples",(function(){return it})),a.d(r,"schemePurples",(function(){return nt})),a.d(r,"interpolateReds",(function(){return ct})),a.d(r,"schemeReds",(function(){return ot})),a.d(r,"interpolateOranges",(function(){return ft})),a.d(r,"schemeOranges",(function(){return st})),a.d(r,"interpolateCividis",(function(){return dt})),a.d(r,"interpolateCubehelixDefault",(function(){return Pt})),a.d(r,"interpolateRainbow",(function(){return _t})),a.d(r,"interpolateWarm",(function(){return At})),a.d(r,"interpolateCool",(function(){return Tt})),a.d(r,"interpolateSinebow",(function(){return Bt})),a.d(r,"interpolateTurbo",(function(){return Ot})),a.d(r,"interpolateViridis",(function(){return Vt})),a.d(r,"interpolateMagma",(function(){return Dt})),a.d(r,"interpolateInferno",(function(){return zt})),a.d(r,"interpolatePlasma",(function(){return Gt}));var n={};a.r(n),a.d(n,"graphHover",(function(){return Ut})),a.d(n,"graphHoverClear",(function(){return Xt})),a.d(n,"fallbackToStringEvents",(function(){return Qt}));var i={};a.r(i),a.d(i,"refresh",(function(){return Jt})),a.d(i,"render",(function(){return Kt})),a.d(i,"dataError",(function(){return Zt})),a.d(i,"dataReceived",(function(){return ea})),a.d(i,"dataSnapshotLoad",(function(){return ta})),a.d(i,"editModeInitialized",(function(){return aa})),a.d(i,"fallbackToStringEvents",(function(){return ra}));var o={};a.r(o),a.d(o,"hasAppEventCompatibleEmitter",(function(){return Aa}));var c=function(e,t){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var a in t)t.hasOwnProperty(a)&&(e[a]=t[a])})(e,t)};var s=function(){return(s=Object.assign||function(e){for(var t,a=1,r=arguments.length;a=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}var d=a(0),l=a.n(d),h=a(2),u=a.n(h),p=a(1),b=function(e){for(var t=e.length/6|0,a=new Array(t),r=0;r>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):8===a?L(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):4===a?L(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=Y.exec(e))?new U(t[1],t[2],t[3],1):(t=B.exec(e))?new U(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=O.exec(e))?L(t[1],t[2],t[3],t[4]):(t=E.exec(e))?L(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=V.exec(e))?K(t[1],t[2]/100,t[3]/100,1):(t=D.exec(e))?K(t[1],t[2]/100,t[3]/100,t[4]):z.hasOwnProperty(e)?I(z[e]):"transparent"===e?new U(NaN,NaN,NaN,0):null}function I(e){return new U(e>>16&255,e>>8&255,255&e,1)}function L(e,t,a,r){return r<=0&&(e=t=a=NaN),new U(e,t,a,r)}function j(e){return e instanceof T||(e=N(e)),e?new U((e=e.rgb()).r,e.g,e.b,e.opacity):new U}function q(e,t,a,r){return 1===arguments.length?j(e):new U(e,t,a,null==r?1:r)}function U(e,t,a,r){this.r=+e,this.g=+t,this.b=+a,this.opacity=+r}function X(){return"#"+J(this.r)+J(this.g)+J(this.b)}function Q(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}function J(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function K(e,t,a,r){return r<=0?e=t=a=NaN:a<=0||a>=1?e=t=NaN:t<=0&&(e=NaN),new ee(e,t,a,r)}function Z(e){if(e instanceof ee)return new ee(e.h,e.s,e.l,e.opacity);if(e instanceof T||(e=N(e)),!e)return new ee;if(e instanceof ee)return e;var t=(e=e.rgb()).r/255,a=e.g/255,r=e.b/255,n=Math.min(t,a,r),i=Math.max(t,a,r),o=NaN,c=i-n,s=(i+n)/2;return c?(o=t===i?(a-r)/c+6*(a0&&s<1?0:o,new ee(o,c,s,e.opacity)}function ee(e,t,a,r){this.h=+e,this.s=+t,this.l=+a,this.opacity=+r}function te(e,t,a){return 255*(e<60?t+(a-t)*e/60:e<180?a:e<240?t+(a-t)*(240-e)/60:t)}function ae(e,t,a,r,n){var i=e*e,o=i*e;return((1-3*e+3*i-o)*t+(4-6*i+3*o)*a+(1+3*e+3*i-3*o)*r+o*n)/6}P(T,N,{copy:function(e){return Object.assign(new this.constructor,this,e)},displayable:function(){return this.rgb().displayable()},hex:G,formatHex:G,formatHsl:function(){return Z(this).formatHsl()},formatRgb:F,toString:F}),P(U,q,A(T,{brighter:function(e){return e=null==e?1/.7:Math.pow(1/.7,e),new U(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function(e){return e=null==e?.7:Math.pow(.7,e),new U(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:X,formatHex:X,formatRgb:Q,toString:Q})),P(ee,(function(e,t,a,r){return 1===arguments.length?Z(e):new ee(e,t,a,null==r?1:r)}),A(T,{brighter:function(e){return e=null==e?1/.7:Math.pow(1/.7,e),new ee(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=null==e?.7:Math.pow(.7,e),new ee(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,a=this.l,r=a+(a<.5?a:1-a)*t,n=2*a-r;return new U(te(e>=240?e-240:e+120,n,r),te(e,n,r),te(e<120?e+240:e-120,n,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===e?")":", "+e+")")}}));var re=e=>()=>e;function ne(e,t){return function(a){return e+a*t}}function ie(e){return 1==(e=+e)?oe:function(t,a){return a-t?function(e,t,a){return e=Math.pow(e,a),t=Math.pow(t,a)-e,a=1/a,function(r){return Math.pow(e+r*t,a)}}(t,a,e):re(isNaN(t)?a:t)}}function oe(e,t){var a=t-e;return a?ne(e,a):re(isNaN(e)?t:e)}(function e(t){var a=ie(t);function r(e,t){var r=a((e=q(e)).r,(t=q(t)).r),n=a(e.g,t.g),i=a(e.b,t.b),o=oe(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=n(t),e.b=i(t),e.opacity=o(t),e+""}}return r.gamma=e,r})(1);function ce(e){return function(t){var a,r,n=t.length,i=new Array(n),o=new Array(n),c=new Array(n);for(a=0;a=1?(a=1,t-1):Math.floor(a*t),n=e[r],i=e[r+1],o=r>0?e[r-1]:2*n-i,c=rse(e[e.length-1])),de=new Array(3).concat("d8b365f5f5f55ab4ac","a6611adfc27d80cdc1018571","a6611adfc27df5f5f580cdc1018571","8c510ad8b365f6e8c3c7eae55ab4ac01665e","8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e","8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e","8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e","5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30","5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(b),le=fe(de),he=new Array(3).concat("af8dc3f7f7f77fbf7b","7b3294c2a5cfa6dba0008837","7b3294c2a5cff7f7f7a6dba0008837","762a83af8dc3e7d4e8d9f0d37fbf7b1b7837","762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837","762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837","762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837","40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b","40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(b),ue=fe(he),pe=new Array(3).concat("e9a3c9f7f7f7a1d76a","d01c8bf1b6dab8e1864dac26","d01c8bf1b6daf7f7f7b8e1864dac26","c51b7de9a3c9fde0efe6f5d0a1d76a4d9221","c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221","c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221","c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221","8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419","8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(b),be=fe(pe),me=new Array(3).concat("998ec3f7f7f7f1a340","5e3c99b2abd2fdb863e66101","5e3c99b2abd2f7f7f7fdb863e66101","542788998ec3d8daebfee0b6f1a340b35806","542788998ec3d8daebf7f7f7fee0b6f1a340b35806","5427888073acb2abd2d8daebfee0b6fdb863e08214b35806","5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806","2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08","2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(b),ge=fe(me),ve=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(b),ye=fe(ve),xe=new Array(3).concat("ef8a62ffffff999999","ca0020f4a582bababa404040","ca0020f4a582ffffffbababa404040","b2182bef8a62fddbc7e0e0e09999994d4d4d","b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d","b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d","b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d","67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a","67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(b),we=fe(xe),Me=new Array(3).concat("fc8d59ffffbf91bfdb","d7191cfdae61abd9e92c7bb6","d7191cfdae61ffffbfabd9e92c7bb6","d73027fc8d59fee090e0f3f891bfdb4575b4","d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4","d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4","d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4","a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695","a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(b),ke=fe(Me),Se=new Array(3).concat("fc8d59ffffbf91cf60","d7191cfdae61a6d96a1a9641","d7191cfdae61ffffbfa6d96a1a9641","d73027fc8d59fee08bd9ef8b91cf601a9850","d73027fc8d59fee08bffffbfd9ef8b91cf601a9850","d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850","d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850","a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837","a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(b),Ce=fe(Se),Pe=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(b),Ae=fe(Pe),Te=new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(b),Re=fe(Te),_e=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(b),He=fe(_e),We=new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(b),Ye=fe(We),Be=new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(b),Oe=fe(Be),Ee=new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(b),Ve=fe(Ee),De=new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(b),ze=fe(De),Ge=new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(b),Fe=fe(Ge),Ne=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(b),Ie=fe(Ne),Le=new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(b),$e=fe(Le),je=new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(b),qe=fe(je),Ue=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(b),Xe=fe(Ue),Qe=new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(b),Je=fe(Qe),Ke=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(b),Ze=fe(Ke),et=new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(b),tt=fe(et),at=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(b),rt=fe(at),nt=new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(b),it=fe(nt),ot=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(b),ct=fe(ot),st=new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(b),ft=fe(st),dt=function(e){return e=Math.max(0,Math.min(1,e)),"rgb("+Math.max(0,Math.min(255,Math.round(-4.54-e*(35.34-e*(2381.73-e*(6402.7-e*(7024.72-2710.57*e)))))))+", "+Math.max(0,Math.min(255,Math.round(32.49+e*(170.73+e*(52.82-e*(131.46-e*(176.58-67.37*e)))))))+", "+Math.max(0,Math.min(255,Math.round(81.24+e*(442.36-e*(2482.43-e*(6167.24-e*(6614.94-2475.67*e)))))))+")"};const lt=Math.PI/180,ht=180/Math.PI;var ut=-.14861,pt=1.78277,bt=-.29227,mt=-.90649,gt=1.97294,vt=gt*mt,yt=gt*pt,xt=pt*bt-mt*ut;function wt(e){if(e instanceof kt)return new kt(e.h,e.s,e.l,e.opacity);e instanceof U||(e=j(e));var t=e.r/255,a=e.g/255,r=e.b/255,n=(xt*r+vt*t-yt*a)/(xt+vt-yt),i=r-n,o=(gt*(a-n)-bt*i)/mt,c=Math.sqrt(o*o+i*i)/(gt*n*(1-n)),s=c?Math.atan2(o,i)*ht-120:NaN;return new kt(s<0?s+360:s,c,n,e.opacity)}function Mt(e,t,a,r){return 1===arguments.length?wt(e):new kt(e,t,a,null==r?1:r)}function kt(e,t,a,r){this.h=+e,this.s=+t,this.l=+a,this.opacity=+r}function St(e){return function t(a){function r(t,r){var n=e((t=Mt(t)).h,(r=Mt(r)).h),i=oe(t.s,r.s),o=oe(t.l,r.l),c=oe(t.opacity,r.opacity);return function(e){return t.h=n(e),t.s=i(e),t.l=o(Math.pow(e,a)),t.opacity=c(e),t+""}}return a=+a,r.gamma=t,r}(1)}P(kt,Mt,A(T,{brighter:function(e){return e=null==e?1/.7:Math.pow(1/.7,e),new kt(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=null==e?.7:Math.pow(.7,e),new kt(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=isNaN(this.h)?0:(this.h+120)*lt,t=+this.l,a=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),n=Math.sin(e);return new U(255*(t+a*(ut*r+pt*n)),255*(t+a*(bt*r+mt*n)),255*(t+a*(gt*r)),this.opacity)}}));St((function(e,t){var a=t-e;return a?ne(e,a>180||a<-180?a-360*Math.round(a/360):a):re(isNaN(e)?t:e)}));var Ct=St(oe),Pt=Ct(Mt(300,.5,0),Mt(-240,.5,1)),At=Ct(Mt(-100,.75,.35),Mt(80,1.5,.8)),Tt=Ct(Mt(260,.75,.35),Mt(80,1.5,.8)),Rt=Mt(),_t=function(e){(e<0||e>1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return Rt.h=360*e-100,Rt.s=1.5-1.5*t,Rt.l=.8-.9*t,Rt+""},Ht=q(),Wt=Math.PI/3,Yt=2*Math.PI/3,Bt=function(e){var t;return e=(.5-e)*Math.PI,Ht.r=255*(t=Math.sin(e))*t,Ht.g=255*(t=Math.sin(e+Wt))*t,Ht.b=255*(t=Math.sin(e+Yt))*t,Ht+""},Ot=function(e){return e=Math.max(0,Math.min(1,e)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+e*(1172.33-e*(10793.56-e*(33300.12-e*(38394.49-14825.05*e)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+e*(557.33+e*(1225.33-e*(3574.96-e*(1073.77+707.56*e)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+e*(3211.1-e*(15327.97-e*(27814-e*(22569.18-6838.66*e)))))))+")"};function Et(e){var t=e.length;return function(a){return e[Math.max(0,Math.min(t-1,Math.floor(a*t)))]}}var Vt=Et(b("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Dt=Et(b("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),zt=Et(b("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),Gt=Et(b("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),Ft=new Array(3).concat("91cf60ffffbffc8d59","1a9641a6d96afdae61d7191c","1a9641a6d96affffbffdae61d7191c","1a985091cf60d9ef8bfee08bfc8d59d73027","1a985091cf60d9ef8bffffbffee08bfc8d59d73027","1a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027","1a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027","0068371a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027a50026","0068371a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027a50026").map((function(e){for(var t=e.length/6|0,a=new Array(t),r=0;r',link:function(e,t,a){var r=e.ctrl,n=e.ctrl.panel;function o(){var e=u()(t).find("svg"),a=Math.floor(e.outerWidth());if("spectrum"===n.color.mode){var i=oa(l.a.find(r.colorSchemes,{value:n.color.colorScheme}),a);!function(e,t){var a=u()(e).find("svg"),r=p.select(a.get(0));ia(e);var n=Math.floor(a.outerWidth()),i=a.attr("height");if(n){var o=p.range(0,n,2);r.selectAll(".status-heatmap-color-legend-rect").data(o).enter().append("rect").attr("x",(function(e){return e})).attr("y",0).attr("width",3).attr("height",i).attr("stroke-width",0).attr("fill",(function(e){return t(e)}))}}(t,i)}else if("opacity"===n.color.mode){var o=n.color;!function(e,t){var a=u()(e).find("svg"),r=p.select(a.get(0));ia(e);var n=Math.floor(a.outerWidth()),i=a.attr("height");if(n){var o;"linear"===t.colorScale?o=p.scaleLinear().domain([0,n]).range([0,1]):"sqrt"===t.colorScale&&(o=p.scalePow().exponent(t.exponent).domain([0,n]).range([0,1]));var c=p.range(0,n,2);r.selectAll(".status-heatmap-opacity-legend-rect").data(c).enter().append("rect").attr("x",(function(e){return e})).attr("y",0).attr("width",3).attr("height",i).attr("stroke-width",0).attr("fill",t.cardColor).style("opacity",(function(e){return o(e)}))}}(t,o)}}o(),r.events.on(i.render,(function(){o()}))}}})),qt.a.directive("statusHeatmapLegend",(function(){return{restrict:"E",template:'
',link:function(e,t,a){var r=e.ctrl,n=e.ctrl.panel;function o(){if(ia(t),r.panel.legend.show&&r.bucketMatrix){var e=r.bucketMatrix.minValue,a=r.bucketMatrix.maxValue,i=null!=n.color.max?n.color.max:a,o=null!=n.color.min?n.color.min:e;if(r.bucketMatrix.noDatapoints&&(a=null!=n.color.max?i=100:100,e=null!=n.color.min?o=0:0),"spectrum"===n.color.mode){var c=l.a.find(r.colorSchemes,{value:n.color.colorScheme});!function(e,t,a,r,n,i){var o=u()(e).find("svg"),c=p.select(o.get(0));ia(e);var s=Math.floor(o.outerWidth())-30,f=o.attr("height"),d=(r-a)/(s/2),l=s/(r-a),h=p.range(a,r,d),b=oa(t,n,i);c.selectAll(".status-heatmap-color-legend-rect").data(h).enter().append("rect").attr("x",(function(e){return(e-a)*l+10})).attr("y",0).attr("width",3).attr("height",f).attr("stroke-width",0).attr("fill",(function(e){return b(e)})),na(e,b,a,r,n,i,s)}(t,c,e,a,i,o)}else if("opacity"===n.color.mode){var s=n.color;!function(e,t,a,r,n,i){var o=u()(e).find("svg"),c=p.select(o.get(0));ia(e);var s=Math.floor(o.outerWidth())-30,f=o.attr("height"),d=(r-a)/(s/2),l=s/(r-a),h=p.range(a,r,d),b=function(e,t,a){void 0===a&&(a=0);var r;"linear"===e.colorScale?r=p.scaleLinear().domain([a,t]).range([0,1]):"sqrt"===e.colorScale&&(r=p.scalePow().exponent(e.exponent).domain([a,t]).range([0,1]));return r}(t,n,i);c.selectAll(".status-heatmap-opacity-legend-rect").data(h).enter().append("rect").attr("x",(function(e){return e*l+10})).attr("y",0).attr("width",3).attr("height",f).attr("stroke-width",0).attr("fill",t.cardColor).style("opacity",(function(e){return b(e)})),na(e,b,a,r,n,i,s)}(t,s,e,a,i,o)}else if("discrete"===n.color.mode){s=n.color;!function(e,t,a){var r=u()(e).find("svg"),n=p.select(r.get(0));ia(e);var i=t.thresholds,o=l.a.map(i,(function(e){return e.tooltip})),c=i.length,s=u()(e).parent().parent().parent().find(".statusmap-panel").find("svg").attr("width"),f=parseInt(s,10),d=[];n.selectAll(".hidden-texts").data(o).enter().append("text").attr("class","axis tick hidden-texts").attr("font-family","sans-serif").text((function(e){return e})).each((function(e,t){var a=this.getBBox().width;d.push(a)})),n.selectAll(".hidden-texts").remove();var h=Math.floor(l.a.min([f-30,(l.a.max(d)+3)*c]));r.attr("width",h);var b=r.attr("height"),m=Math.floor(h/c),g=p.range(c);n.selectAll(".status-heatmap-color-legend-rect").data(g).enter().append("rect").attr("x",(function(e){return e*m})).attr("y",0).attr("width",m+1).attr("height",b).attr("stroke-width",0).attr("fill",(function(e){return a.getDiscreteColor(e)})),function(e,t,a){var r=t.thresholds,n=u()(e).find("svg"),i=p.select(n.get(0));if(a<=0||0===n.get(0).childNodes.length)return;for(var o=r.length,c=Math.floor(a/o),s=p.scaleLinear().domain([0,o]).range([0,a]),f=[],d=[],l=0;l-1&&(s+="_"+o.extraSeries.index);var d=l.a.toString(o.extraSeries.format);"YYYY/MM/DD/HH_mm_ss"===d&&(s+="_date",c.valueDateFormat=d)}c.urlTemplate=l.a.replace(c.urlTemplate,/\$series_extra/,"${"+s+"}")}e.tooltip.items.push(c)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(a=n.return)&&a.call(n)}finally{if(t)throw t.error}}}}delete e.urls}e.statusmap={ConfigVersion:"v1"}}(e)}var va=a(6),ya=function(){function e(){this.id=0,this.values=[],this.columns=[],this.multipleValues=!1,this.noColorDefined=!1,this.y="",this.yLabel="",this.pLabels=[],this.x=0,this.xid=0,this.from=0,this.to=0,this.relFrom=0,this.relTo=0,this.mostRecent=!1,this.minValue=0,this.maxValue=0,this.value=0}return e.prototype.belong=function(e){return e>=this.from&&e<=this.to},e.prototype.put=function(e){this.values.push(e)},e.prototype.done=function(){},e.prototype.isEmpty=function(){return 0===this.values.length},e}(),xa=function(){function e(){this.buckets={},this.maxValue=0,this.minValue=0,this.multipleValues=!1,this.noColorDefined=!1,this.noDatapoints=!1,this.targets=[],this.pLabels={},this.rangeMs=0,this.intervalMs=0,this.xBucketSize=0}return e.prototype.get=function(e,t){return e in this.buckets&&t in this.buckets[e]?this.buckets[e][t]:new ya},e.prototype.hasData=function(){var e=this,t=!1;return this.targets.length>0&&this.targets.map((function(a){e.buckets[a].length>0&&(t=!0)})),t},e}(),wa=function(){function e(){this.defaultPageSize=-1,this.pageSize=-1,this.currentPage=0;var e=new xa;this.bucketMatrix=e}return e.prototype.targets=function(){return this.enable?this.bucketMatrix.targets.slice(this.pageSize*this.currentPage,this.pageSize*(this.currentPage+1)):this.bucketMatrix.targets},e.prototype.buckets=function(){if(!this.enable)return this.bucketMatrix.buckets;var e={},t=this;return this.targets().map((function(a){e[a]=t.bucketMatrix.buckets[a]})),e},e.prototype.setEnable=function(e){this.enable=e},e.prototype.setCurrent=function(e){this.currentPage=e},e.prototype.setDefaultPageSize=function(e){this.defaultPageSize=e},e.prototype.setPageSize=function(e){this.pageSize=e},e.prototype.pages=function(){return Math.ceil(this.totalRows()/this.pageSize)},e.prototype.totalRows=function(){return this.bucketMatrix.targets.length},e.prototype.pageStartRow=function(){return this.enable?this.pageSize*this.currentPage+1:1},e.prototype.pageEndRow=function(){if(!this.enable)return this.totalRows();var e=this.pageSize*(this.currentPage+1);return e>this.totalRows()?this.totalRows():e},e.prototype.hasNext=function(){return!!this.enable&&!((this.currentPage+1)*this.pageSize>=this.totalRows())},e.prototype.hasPrev=function(){return!!this.enable&&this.currentPage>0},e.prototype.switchToNext=function(){this.hasNext()&&(this.currentPage=this.currentPage+1)},e.prototype.switchToPrev=function(){this.hasPrev()&&(this.currentPage=this.currentPage-1)},e}(),Ma=a(8),ka=a.n(Ma),Sa=function(){function e(e,t){this.scope=t,this.dashboard=t.ctrl.dashboard,this.panelCtrl=t.ctrl,this.panel=t.ctrl.panel,this.panelElem=e,this.mouseOverBucket=!1,this.originalFillColor=null,e.on("mouseover",this.onMouseOver.bind(this)),e.on("mouseleave",this.onMouseLeave.bind(this))}return e.prototype.onMouseOver=function(e){this.panel.tooltip.show&&this.scope.ctrl.data&&!l.a.isEmpty(this.scope.ctrl.data)&&(this.tooltip||(this.add(),this.move(e,this.tooltip)))},e.prototype.onMouseLeave=function(){this.destroy()},e.prototype.onMouseMove=function(e){this.panel.tooltip.show&&this.move(e,this.tooltip)},e.prototype.add=function(){this.tooltip=p.select("body").append("div").attr("class","graph-tooltip statusmap-tooltip")},e.prototype.destroy=function(){this.tooltip&&this.tooltip.remove(),this.tooltip=null},e.prototype.removeFrozen=function(){this.tooltipFrozen&&(this.tooltipFrozen.remove(),this.tooltipFrozen=null)},e.prototype.showFrozen=function(e){this.removeFrozen(),this.tooltipFrozen=p.select(this.panelElem[0]).append("div").attr("class","graph-tooltip statusmap-tooltip statusmap-tooltip-frozen"),this.displayTooltip(e,this.tooltipFrozen,!0),this.moveRelative(e,this.tooltipFrozen)},e.prototype.show=function(e){this.panel.tooltip.show&&this.tooltip&&(e.panelRelY||(this.displayTooltip(e,this.tooltip,!1),this.move(e,this.tooltip)))},e.prototype.displayTooltip=function(e,t,a){var r,n,i=p.select(e.target),o=i.attr("yid"),c=i.attr("xid"),s=this.panelCtrl.bucketMatrix.get(o,c);if(s&&!s.isEmpty()){var d=s.to,h=s.yLabel,u=s.pLabels,b=s.value,m=s.values,g="";a&&(g='\n\n \n\n');var v='
'+this.dashboard.formatDate(+d,"YYYY-MM-DD HH:mm:ss")+g+"
";if("discrete"===this.panel.color.mode){var y=void 0,x="status:";(y=this.panel.seriesFilterIndex>=0?this.panelCtrl.discreteExtraSeries.convertValueToTooltips(b):this.panelCtrl.discreteExtraSeries.convertValuesToTooltips(m)).length>1&&(x="statuses:"),v+="\n
\n name: "+h+"\n
\n "+x+"\n
    \n "+l.a.join(l.a.map(y,(function(e){return'
  • '+e.tooltip+"
  • "})),"")+"\n
\n
"}else 1===m.length?v+="
\n name: "+h+"
\n value: "+b+"
\n
":v+="
\n name: "+h+"
\n values:\n
    \n "+l.a.join(l.a.map(m,(function(e){return"
  • "+e+"
  • "})),"")+"\n
\n
";if(v+='
',this.panel.tooltip.showItems){for(var w=JSON.parse(JSON.stringify(this.panel.tooltip.items)),M={},k=0;k";v+=l.a.join(l.a.map(w,(function(e){return'\n
\n \n
\n
'})),"\n")}if(!this.panel.useMax&&s.multipleValues&&(v+="
Error: "+this.panelCtrl.dataWarnings.multipleValues.title+"
"),"discrete"===this.panel.color.mode&&s.noColorDefined){var T=this.panelCtrl.discreteExtraSeries.getNotColoredValues(m);v+="
Error: "+this.panelCtrl.dataWarnings.noColorDefined.title+"\n
not colored values:\n
    \n "+l.a.join(l.a.map(T,(function(e){return"
  • "+e+"
  • "})),"")+"\n
\n
"}t.html(v),a&&(t.on("click",(function(){p.event.stopPropagation()})).on("mousedown",(function(){p.event.stopPropagation()})).on("mouseup",(function(){p.event.stopPropagation()})),t.select("a.tooltip-close").on("click",this.removeFrozen.bind(this)))}else this.destroy()},e.prototype.move=function(e,t){if(t){var a=u()(t.node())[0],r=a.clientWidth;this.tooltipWidth=r;var n=a.clientHeight,i=e.pageX+30,o=e.pageY+5;return e.pageX+r+40>window.innerWidth&&(i=e.pageX-r-30),e.pageY-window.pageYOffset+n+20>window.innerHeight&&(o=e.pageY-n-5),t.style("left",i+"px").style("top",o+"px")}},e.prototype.moveRelative=function(e,t){if(t){var a=e.pageX-this.panelElem.offset().left,r=e.pageY-this.panelElem.offset().top,n=this.panelElem.width(),i=this.panelElem.height(),o=this.tooltipWidth+25,c=a+30;c+o>n&&(c=n-o),c<0&&(c=0);var s=-(i-r+5);return t.style("left",c+"px").style("top",s+"px").style("width",o+"px")}},e}(),Ca=function(){function e(e,t){this.scope=t,this.dashboard=t.ctrl.dashboard,this.panelCtrl=t.ctrl,this.panel=t.ctrl.panel,this.mouseOverAnnotationTick=!1,e.on("mouseover",this.onMouseOver.bind(this)),e.on("mouseleave",this.onMouseLeave.bind(this))}return e.prototype.onMouseOver=function(e){this.panel.tooltip.show&&this.scope.ctrl.data&&!l.a.isEmpty(this.scope.ctrl.data)&&(this.tooltip||(this.add(),this.move(e)))},e.prototype.onMouseLeave=function(){this.destroy()},e.prototype.onMouseMove=function(e){this.panel.tooltip.show&&this.move(e)},e.prototype.add=function(){this.tooltipBase=p.select("body").append("div").attr("class","statusmap-annotation-tooltip drop drop-popover drop-popover--annotation drop-element drop-enabled drop-target-attached-center drop-open drop-open-transitionend drop-after-open").style("position","absolute"),this.tooltip=this.tooltipBase.append("div").attr("class","drop-content").append("div").append("annotation-tooltip").append("div").attr("class","graph-annotation")},e.prototype.destroy=function(){this.tooltip&&this.tooltip.remove(),this.tooltip=null,this.tooltipBase&&this.tooltipBase.remove(),this.tooltipBase=null},e.prototype.show=function(e){if(this.panel.tooltip.show&&this.tooltip){var t=p.select(e.target).attr("annoId");if(t){var a=this.panelCtrl.annotations[t];if(a){var r=this.dashboard.formatDate(a.time,"YYYY-MM-DD HH:mm:ss"),n=a.text,i=[];a.tags&&(i=l.a.map(a.tags,(function(e){return{text:e,backColor:"rgb(63, 43, 91)",borderColor:"rgb(101, 81, 129)"}})));var o='
\n \n '+r+'
\n
\n
'+n+"
\n "+l.a.join(l.a.map(i,(function(e){return''+e.text+""})),"")+'\n
\n
';this.tooltip.html(o),this.move(e)}else this.destroy()}else this.destroy()}},e.prototype.move=function(e){if(this.tooltipBase){var t=u()(this.tooltipBase.node())[0],a=t.clientWidth,r=t.clientHeight,n=e.pageX-a/2,i=e.pageY+10;return e.pageX+a/2+10>window.innerWidth&&(n=e.pageX-a-30),e.pageY-window.pageYOffset+r+20>window.innerHeight&&(i=e.pageY-r-10),this.tooltipBase.style("left",n+"px").style("top",i+"px")}},e}();var Pa=function(){function e(e,t,a,r){this.scope=e,this.elem=t,this.ctrl=r,this.width=0,this.height=0,this.chartWidth=0,this.chartHeight=0,this.chartTop=0,this.chartBottom=0,this.yAxisWidth=0,this.xAxisHeight=0,this.cardVSpacing=0,this.cardHSpacing=0,this.cardRound=0,this.cardWidth=0,this.cardHeight=0,this.xGridSize=0,this.yGridSize=0,this.dataRangeWidingFactor=1.2,this.$heatmap=this.elem.find(".statusmap-panel"),this.tooltip=new Sa(this.$heatmap,this.scope),this.annotationTooltip=new Ca(this.$heatmap,this.scope),this.yOffset=0,this.selection={active:!1,x1:-1,x2:-1},this.padding={left:0,right:0,top:0,bottom:0},this.margin={left:25,right:15,top:10,bottom:20},this.ctrl.events.on(i.render,this.onRender.bind(this)),this.ctrl.tickValueFormatter=this.tickValueFormatter.bind(this),Lt.appEvents.on(n.graphHover,this.onGraphHover.bind(this),this.scope),Lt.appEvents.on(n.graphHoverClear,this.onGraphHoverClear.bind(this),this.scope),this.$heatmap.on("mousedown",this.onMouseDown.bind(this)),this.$heatmap.on("mousemove",this.onMouseMove.bind(this)),this.$heatmap.on("mouseleave",this.onMouseLeave.bind(this)),this.$heatmap.on("click",this.onMouseClick.bind(this))}return e.prototype.onGraphHoverClear=function(){this.clearCrosshair()},e.prototype.onGraphHover=function(e){this.drawSharedCrosshair(e.pos)},e.prototype.onRender=function(){this.render(),this.ctrl.renderingCompleted()},e.prototype.setElementHeight=function(){try{var e=this.ctrl.height||this.panel.height||this.ctrl.row.height;return l.a.isString(e)&&(e=parseInt(e.replace("px",""),10)),this.panel.usingPagination?e-=this.panel.legend.show?70:40:e-=this.panel.legend.show?32:4,this.$heatmap.css("height",e+"px"),!0}catch(e){return!1}},e.prototype.getYAxisWidth=function(e){var t=e.selectAll(".axis-y text").nodes(),a=l.a.max(l.a.map(t,(function(e){return e.getBBox().width})));return Math.ceil(a)},e.prototype.getXAxisHeight=function(e){if(e.select(".axis-x line").empty())return 30;var t=parseFloat(e.select(".axis-x line").attr("y2"));return parseFloat(e.attr("height"))-t},e.prototype.addXAxis=function(){this.scope.xScale=this.xScale=p.scaleTime().domain([this.timeRange.from,this.timeRange.to]).range([this.xGridSize/2,this.chartWidth-this.xGridSize/2]);var e,t=this.chartWidth/100,a=function(e,t,a){if(t&&a&&e){var r=a-t,n=r/e/1e3;return n<=45?"%H:%M:%S":n<=7200||r<=864e5?"%H:%M":n<=8e4?"%m/%d %H:%M":n<=2419200||r<=31536e6?"%m/%d":"%Y-%m"}return"%H:%M"}(t,this.timeRange.from,this.timeRange.to);e="utc"===this.ctrl.dashboard.getTimezone()?p.utcFormat(a):p.timeFormat(a);var r=p.axisBottom(this.xScale).ticks(t).tickFormat(e).tickPadding(10).tickSize(this.chartHeight),n=this.chartTop,i=this.yAxisWidth;this.heatmap.append("g").attr("class","axis axis-x").attr("transform","translate("+i+","+n+")").call(r),this.heatmap.select(".axis-x").select(".domain").remove()},e.prototype.getYScale=function(e){var t=[],a=this.chartHeight/e.length;t.push(a);for(var r=1;r=0&&r<0&&(r=0),{y_min:r,y_max:n}},e.prototype.tickValueFormatter=function(e,t){void 0===t&&(t=null);var a=this.panel.yAxis.format;return function(r){return la.a.valueFormats[a](r,e,t)}},e.prototype.addStatusmapCanvas=function(){var e=this.$heatmap[0];this.width=Math.floor(this.$heatmap.width())-this.padding.right,this.height=Math.floor(this.$heatmap.height())-this.padding.bottom,this.heatmap&&this.heatmap.remove(),this.heatmap=p.select(e).insert("svg",":first-child").attr("width",this.width).attr("height",this.height),this.chartHeight=this.height-this.margin.top-this.margin.bottom,this.chartTop=this.margin.top,this.chartBottom=this.chartTop+this.chartHeight,this.cardHSpacing=null!==this.panel.cards.cardHSpacing?this.panel.cards.cardHSpacing:2,this.cardVSpacing=null!==this.panel.cards.cardVSpacing?this.panel.cards.cardVSpacing:2,this.cardRound=null!==this.panel.cards.cardRound?this.panel.cards.cardRound:0,this.yGridSize=this.chartHeight,this.bucketMatrixPager.targets().length>0&&(this.yGridSize=Math.floor(this.chartHeight/this.bucketMatrixPager.targets().length)),this.cardHeight=this.yGridSize?this.yGridSize-this.cardVSpacing:0,this.yOffset=this.cardHeight/2,this.addYAxis(),this.yAxisWidth=this.getYAxisWidth(this.heatmap)+5,this.chartWidth=this.width-this.yAxisWidth-this.margin.right,this.xGridSize=this.chartWidth/(this.bucketMatrix.xBucketSize+1),this.cardWidth=this.xGridSize-this.cardHSpacing,this.addXAxis(),this.xAxisHeight=this.getXAxisHeight(this.heatmap),this.panel.yAxis.show||this.heatmap.select(".axis-y").selectAll("line").style("opacity",0),this.panel.xAxis.show||this.heatmap.select(".axis-x").selectAll("line").style("opacity",0)},e.prototype.addStatusmap=function(){var e=this,t=null!=this.panel.color.max?this.panel.color.max:this.bucketMatrix.maxValue,a=null!=this.panel.color.min?this.panel.color.min:this.bucketMatrix.minValue;"discrete"!==this.panel.color.mode&&(this.colorScale=this.getColorScale(t,a)),this.setOpacityScale(t),this.heatmap.selectAll(".statusmap-cards-row").data(this.bucketMatrixPager.targets()).enter().selectAll(".statustmap-card").data((function(t){return e.bucketMatrix.buckets[t]})).enter().append("rect").attr("cardId",(function(e){return e.id})).attr("xid",(function(e){return e.xid})).attr("yid",(function(e){return e.yLabel})).attr("x",this.getCardX.bind(this)).attr("width",this.getCardWidth.bind(this)).attr("y",this.getCardY.bind(this)).attr("height",this.getCardHeight.bind(this)).attr("rx",this.cardRound).attr("ry",this.cardRound).attr("class",(function(e){return e.isEmpty()?"empty-card":"bordered statusmap-card"})).style("fill",this.getCardColor.bind(this)).style("stroke",this.getCardColor.bind(this)).style("stroke-width",0).style("opacity",this.getCardOpacity.bind(this)),this.$heatmap.find(".statusmap-card + .bordered").on("mouseenter",(function(t){e.tooltip.mouseOverBucket=!0,e.highlightCard(t)})).on("mouseleave",(function(t){e.tooltip.mouseOverBucket=!1,e.resetCardHighLight(t)})),this._renderAnnotations(),this.ctrl.events.emit(Wa,{chartWidth:this.chartWidth})},e.prototype.highlightCard=function(e){var t=p.select(e.target).style("fill"),a=p.color(t).darker(2),r=p.color(t).brighter(4),n=p.select(e.target);this.tooltip.originalFillColor=t,n.style("fill",a.toString()).style("stroke",r.toString()).style("stroke-width",1)},e.prototype.resetCardHighLight=function(e){p.select(e.target).style("fill",this.tooltip.originalFillColor).style("stroke",this.tooltip.originalFillColor).style("stroke-width",0)},e.prototype.getColorScale=function(e,t){void 0===t&&(t=0);var a=l.a.find(this.ctrl.colorSchemes,{value:this.panel.color.colorScheme}),r=It[a.value],n="always"===a.invert||"dark"===a.invert&&!Lt.contextSrv.user.lightTheme;e===t&&(e=t+1);var i=n?e:t,o=n?t:e;return p.scaleSequential(r).domain([i,o])},e.prototype.setOpacityScale=function(e){"linear"===this.panel.color.colorScale?this.opacityScale=p.scaleLinear().domain([0,e]).range([0,1]):"sqrt"===this.panel.color.colorScale&&(this.opacityScale=p.scalePow().exponent(this.panel.color.exponent).domain([0,e]).range([0,1]))},e.prototype.getCardX=function(e){var t=e.relTo/this.bucketMatrix.rangeMs*this.chartWidth-this.cardWidth/2;return t-this.cardWidth/2<0?this.yAxisWidth+this.cardHSpacing/2:this.yAxisWidth+t-this.cardWidth/2},e.prototype.getCardWidth=function(e){var t,a=e.relTo/this.bucketMatrix.rangeMs*this.chartWidth-this.cardWidth/2;if(a0?r:0}else t=this.chartWidth-athis.chartBottom||a+this.cardHeight>this.chartBottom)&&(r=this.chartBottom-a),r=Math.min(r,this.chartHeight),r=Math.max(r,5),0===this.cardVSpacing&&(r+=1),r},e.prototype.getCardColor=function(e){return"opacity"===this.panel.color.mode?this.panel.color.cardColor:"spectrum"===this.panel.color.mode?this.colorScale(e.value):"discrete"===this.panel.color.mode?null!==this.panel.seriesFilterIndex&&-1!==this.panel.seriesFilterIndex?this.ctrl.discreteExtraSeries.getBucketColorSingle(e.values[this.panel.seriesFilterIndex]):this.ctrl.discreteExtraSeries.getBucketColor(e.values):void 0},e.prototype.getCardOpacity=function(e){return"as empty"===this.panel.nullPointMode&&null==e.value?0:"opacity"===this.panel.color.mode?this.opacityScale(e.value):1},e.prototype.getCardStrokeWidth=function(e){return"discrete"===this.panel.color.mode?"1":"0"},e.prototype.getEventOffset=function(e){var t=this.$heatmap.offset();return{x:Math.floor(e.clientX-t.left),y:Math.floor(e.clientY-t.top)}},e.prototype.onMouseDown=function(e){var t=this,a=this.getEventOffset(e);this.selection.active=!0,this.selection.x1=a.x,this.mouseUpHandler=function(){t.onMouseUp()},u()(document).one("mouseup",this.mouseUpHandler.bind(this))},e.prototype.onMouseUp=function(){u()(document).unbind("mouseup",this.mouseUpHandler.bind(this)),this.mouseUpHandler=null,this.selection.active=!1;var e=Math.abs(this.selection.x2-this.selection.x1);if(this.selection.x2>=0&&e>2){var t=this.xScale.invert(Math.min(this.selection.x1,this.selection.x2)-this.yAxisWidth-this.xGridSize/2),a=this.xScale.invert(Math.max(this.selection.x1,this.selection.x2)-this.yAxisWidth-this.xGridSize/2);this.ctrl.timeSrv.setTime({from:ka.a.utc(t),to:ka.a.utc(a)})}this.clearSelection()},e.prototype.onMouseLeave=function(e){Lt.appEvents.emit(n.graphHoverClear),this.clearCrosshair(),this.annotationTooltip.destroy()},e.prototype.onMouseMove=function(e){if(this.heatmap){var t=this.getEventOffset(e);this.selection.active?(this.clearCrosshair(),this.tooltip.destroy(),this.annotationTooltip.destroy(),this.selection.x2=this.limitSelection(e.offsetX),this.drawSelection(this.selection.x1,this.selection.x2)):(this.emitGraphHoverEvent(e),this.drawCrosshair(t.x),this.tooltip.show(e),this.annotationTooltip.show(e))}},e.prototype.onMouseClick=function(e){this.ctrl.panel.tooltip.freezeOnClick&&(this.tooltip.showFrozen(e),this.tooltip.destroy())},e.prototype.getEventPos=function(e,t){var a=this.xScale.invert(t.x-this.yAxisWidth).valueOf(),r=this.yScale.invert(t.y-this.chartTop);return{pageX:e.pageX,pageY:e.pageY,x:a,x1:a,y:r,y1:r,panelRelY:null,offset:t}},e.prototype.emitGraphHoverEvent=function(e){var t=this.xScale.invert(e.offsetX-this.yAxisWidth-this.xGridSize/2).valueOf(),a=this.yScale(e.offsetY),r={pageX:e.pageX,pageY:e.pageY,x:t,x1:t,y:a,y1:a,panelRelY:0};r.panelRelY=Math.max(e.offsetY/this.height,.001),Lt.appEvents.emit(n.graphHover,{pos:r,panel:this.panel})},e.prototype.limitSelection=function(e){return e=Math.max(e,this.yAxisWidth),e=Math.min(e,this.chartWidth+this.yAxisWidth)},e.prototype.drawSelection=function(e,t){if(this.heatmap){this.heatmap.selectAll(".status-heatmap-selection").remove();var a=Math.min(e,t),r=Math.abs(e-t);r>2&&this.heatmap.append("rect").attr("class","status-heatmap-selection").attr("x",a).attr("width",r).attr("y",this.chartTop).attr("height",this.chartHeight)}},e.prototype.clearSelection=function(){this.selection.x1=-1,this.selection.x2=-1,this.heatmap&&this.heatmap.selectAll(".status-heatmap-selection").remove()},e.prototype.drawCrosshair=function(e){if(this.heatmap){this.heatmap.selectAll(".status-heatmap-crosshair").remove();var t=e;t=Math.max(t,this.yAxisWidth),t=Math.min(t,this.chartWidth+this.yAxisWidth),this.heatmap.append("g").attr("class","status-heatmap-crosshair").attr("transform","translate("+t+",0)").append("line").attr("x1",1).attr("y1",this.chartTop).attr("x2",1).attr("y2",this.chartBottom).attr("stroke-width",1)}},e.prototype.drawSharedCrosshair=function(e){if(this.heatmap&&0!==this.ctrl.dashboard.graphTooltip){var t=this.xScale(e.x)+this.yAxisWidth;this.drawCrosshair(t)}},e.prototype.clearCrosshair=function(){this.heatmap&&this.heatmap.selectAll(".status-heatmap-crosshair").remove()},e.prototype.render=function(){this.panel=this.ctrl.panel,this.timeRange=this.ctrl.range,this.bucketMatrix=this.ctrl.bucketMatrix,this.bucketMatrixPager=this.ctrl.bucketMatrixPager,this.bucketMatrix&&this.setElementHeight()&&(this.addStatusmapCanvas(),this.bucketMatrix.noDatapoints||(this.addStatusmap(),this.scope.yAxisWidth=this.yAxisWidth,this.scope.xAxisHeight=this.xAxisHeight,this.scope.chartHeight=this.chartHeight,this.scope.chartWidth=this.chartWidth,this.scope.chartTop=this.chartTop))},e.prototype._renderAnnotations=function(){var e=this;if(this.ctrl.annotations&&0!==this.ctrl.annotations.length&&this.heatmap){var t=l.a.map(this.ctrl.annotations,(function(t,a){return{x:Math.floor(e.yAxisWidth+e.xScale(t.time)),id:a,anno:t.source}})),a=this.heatmap.append("g").attr("class","statusmap-annotations").attr("transform","translate(0.5,0)").selectAll(".statusmap-annotations").data(t).enter().append("g");a.append("line").attr("x1",(function(e){return e.x})).attr("y1",this.chartTop).attr("x2",(function(e){return e.x})).attr("y2",this.chartBottom).style("stroke",(function(e){return e.anno.iconColor})).style("stroke-width",1).style("stroke-dasharray","3,3"),a.append("polygon").attr("points",(function(t){return[[t.x,e.chartBottom+1],[t.x-5,e.chartBottom+6],[t.x+5,e.chartBottom+6]].join(" ")})).style("stroke-width",0).style("fill",(function(e){return e.anno.iconColor})),a.append("rect").attr("x",(function(e){return e.x-5})).attr("width",10).attr("y",this.chartBottom+1).attr("height",5).attr("class","statusmap-annotation-tick").attr("annoId",(function(e){return e.id})).style("opacity",0),this.$heatmap.find(".statusmap-annotation-tick").on("mouseenter",(function(t){e.annotationTooltip.mouseOverAnnotationTick=!0})).on("mouseleave",(function(t){e.annotationTooltip.mouseOverAnnotationTick=!1}))}},e}();function Aa(e){var t=Object.getPrototypeOf(e);if(Object.prototype.hasOwnProperty.call(t,"subscribe"))return!0;var a=0,r={name:"non-existed-event-id"};return e.on(r,(function(){a++})),e.emit(r),e.emit({name:"non-existed-event-id-2"}),e.removeAllListeners(r),1===a}var Ta=function(){function e(e){this.scope=e,this.panelCtrl=e.ctrl,this.panel=e.ctrl.panel}return e.prototype.convertValuesToTooltips=function(e){for(var t=this.panel.color.thresholds,a=[],r=0;r=t.length==null?{color:"rgba(0,0,0,0)",value:"null",tooltip:"null"}:t[e]},e.prototype.roundIntervalCeil=function(e){switch(!0){case e<=10:return 10;case e<=20:return 20;case e<=50:return 50;case e<=100:return 100;case e<=200:return 200;case e<=500:return 500;case e<=1e3:return 1e3;case e<=2e3:return 2e3;case e<=5e3:return 5e3;case e<=1e4:return 1e4;case e<=15e3:return 15e3;case e<=2e4:return 2e4;case e<=3e4:return 3e4;case e<=6e4:return 6e4;case e<=12e4:return 12e4;case e<=3e5:return 3e5;case e<=6e5:return 6e5;case e<=9e5:return 9e5;case e<=12e5:return 12e5;case e<=18e5:return 18e5;case e<=36e5:return 36e5;case e<=72e5:return 72e5;case e<=108e5:return 108e5;case e<=216e5:return 216e5;case e<=432e5:return 432e5;case e<=864e5:return 864e5;case e<=6048e5:return 6048e5;case e<=2592e6:return 2592e6;default:return 31536e6}},e}();a.d(t,"renderComplete",(function(){return Wa})),a.d(t,"StatusHeatmapCtrl",(function(){return Ya})),a.d(t,"PanelCtrl",(function(){return Ya}));var Ra=[{name:"Spectral",value:"interpolateSpectral",invert:"always"},{name:"RdYlGn",value:"interpolateRdYlGn",invert:"always"},{name:"GnYlRd",value:"interpolateGnYlRd",invert:"always"},{name:"Blues",value:"interpolateBlues",invert:"dark"},{name:"Greens",value:"interpolateGreens",invert:"dark"},{name:"Greys",value:"interpolateGreys",invert:"dark"},{name:"Oranges",value:"interpolateOranges",invert:"dark"},{name:"Purples",value:"interpolatePurples",invert:"dark"},{name:"Reds",value:"interpolateReds",invert:"dark"},{name:"BuGn",value:"interpolateBuGn",invert:"dark"},{name:"BuPu",value:"interpolateBuPu",invert:"dark"},{name:"GnBu",value:"interpolateGnBu",invert:"dark"},{name:"OrRd",value:"interpolateOrRd",invert:"dark"},{name:"PuBuGn",value:"interpolatePuBuGn",invert:"dark"},{name:"PuBu",value:"interpolatePuBu",invert:"dark"},{name:"PuRd",value:"interpolatePuRd",invert:"dark"},{name:"RdPu",value:"interpolateRdPu",invert:"dark"},{name:"YlGnBu",value:"interpolateYlGnBu",invert:"dark"},{name:"YlGn",value:"interpolateYlGn",invert:"dark"},{name:"YlOrBr",value:"interpolateYlOrBr",invert:"dark"},{name:"YlOrRd",value:"interpolateYlOrRd",invert:"dark"}],_a=["opacity","spectrum","discrete"],Ha=["linear","sqrt"];Object(va.loadPluginCss)({dark:"plugins/flant-statusmap-panel/styles/dark.css",light:"plugins/flant-statusmap-panel/styles/light.css"});var Wa={name:"statusmap-render-complete"},Ya=function(e){function t(t,a,r){var c=e.call(this,t,a)||this;return c.annotationsSrv=r,c.opacityScales=[],c.colorModes=[],c.colorSchemes=[],c.dataWarnings={},c.annotations=[],c.pageSizeViewer=15,c.panelDefaults={datasource:null,color:{mode:"spectrum",cardColor:"#b4ff00",colorScale:"sqrt",exponent:.5,colorScheme:"interpolateGnYlRd",defaultColor:"#757575",thresholds:[]},cards:{cardMinWidth:5,cardVSpacing:2,cardHSpacing:2,cardRound:null},xAxis:{show:!0},yAxis:{show:!0,minWidth:-1,maxWidth:-1},tooltip:{show:!0,freezeOnClick:!0,showItems:!1,items:[],showExtraInfo:!1,extraInfo:""},legend:{show:!0},yLabel:{usingSplitLabel:!1,delimiter:"",labelTemplate:""},nullPointMode:"as empty",yAxisSort:"metrics",highlightCards:!0,useMax:!0,seriesFilterIndex:-1,usingPagination:!1,pageSize:15},o.hasAppEventCompatibleEmitter(c.events)||(n.fallbackToStringEvents(),i.fallbackToStringEvents(),Wa="statusmap-render-complete"),"function"==typeof la.a.intervalToMs&&(la.a.interval_to_ms=la.a.intervalToMs),ga(c.panel),l.a.defaultsDeep(c.panel,c.panelDefaults),c.bucketMatrix=new xa,c.bucketMatrixPager=new wa,c.bucketMatrixPager.setEnable(c.panel.usingPagination),c.bucketMatrixPager.setDefaultPageSize(c.panel.pageSize),c.bucketMatrixPager.setPageSize(c.panel.pageSize),t.pager=c.bucketMatrixPager,c.opacityScales=Ha,c.colorModes=_a,c.colorSchemes=Ra,c.graph={chartWidth:-1},c.multipleValues=!1,c.noColorDefined=!1,c.discreteExtraSeries=new Ta(t),c.dataWarnings={noColorDefined:{title:"Data has value with undefined color",tip:"Check metric values, color values or define a new color"},multipleValues:{title:"Data has multiple values for one target",tip:'Change targets definitions or set "use max value"'},noDatapoints:{title:"No data points",tip:"No datapoints returned from data query"}},c.annotations=[],c.annotationsSrv=r,c.events.on(i.render,c.onRender.bind(c)),c.events.on(i.dataReceived,c.onDataReceived.bind(c)),c.events.on(i.dataError,c.onDataError.bind(c)),c.events.on(i.dataSnapshotLoad,c.onDataReceived.bind(c)),c.events.on(i.editModeInitialized,c.onInitEditMode.bind(c)),c.events.on(i.refresh,c.postRefresh.bind(c)),c.events.on(Wa,c.onRenderComplete.bind(c)),c.onCardColorChange=c.onCardColorChange.bind(c),c}return t.$inject=["$scope","$injector","annotationsSrv"],function(e,t){function a(){this.constructor=e}c(e,t),e.prototype=null===t?Object.create(t):(a.prototype=t.prototype,new a)}(t,e),t.prototype.onRenderComplete=function(e){this.graph.chartWidth=e.chartWidth,this.renderingCompleted()},t.prototype.changeDefaultPaginationSize=function(e){this.bucketMatrixPager.setDefaultPageSize(e),this.bucketMatrixPager.setPageSize(e),this.pageSizeViewer=e,this.render(),this.refresh()},t.prototype.onChangePageSize=function(){this.pageSizeViewer<=0&&(this.pageSizeViewer=this.bucketMatrixPager.defaultPageSize),this.bucketMatrixPager.setPageSize(this.pageSizeViewer),this.bucketMatrixPager.setCurrent(0),this.render(),this.refresh()},t.prototype.onPrevPage=function(){this.bucketMatrixPager.switchToPrev(),this.render()},t.prototype.onNextPage=function(){this.bucketMatrixPager.switchToNext(),this.render()},t.prototype.getChartWidth=function(){if(this.graph.chartWidth>0)return this.graph.chartWidth;var e=$(window).width(),t=this.panel.gridPos.w/24,a=Math.ceil(e*t);return l.a.max([a-200,a/2])},t.prototype.updateTimeRange=function(t){var a=e.prototype.updateTimeRange.call(this,t);return this.calculateInterval(),a},t.prototype.calculateInterval=function(){var e,t=this.getChartWidth(),a=this.panel.cards.cardMinWidth,r=this.panel.cards.cardHSpacing,n=Math.ceil((t-a)/(a+r)),i=this.range.to.valueOf()-this.range.from.valueOf();e=this.discreteExtraSeries.roundIntervalCeil(i/n);var o=1,c=this.panel.interval;c?c=this.templateSrv.replace(c,this.panel.scopedVars):this.datasource&&this.datasource.interval&&(c=this.datasource.interval),c&&(">"===c[0]&&(c=c.slice(1)),o=la.a.interval_to_ms(c)),o>e&&(e=o);var s=la.a.secondsToHms(e/1e3);this.intervalMs=e,this.interval=s},t.prototype.issueQueries=function(e){var t=this;return this.annotationsPromise=this.annotationsSrv.getAnnotations({dashboard:this.dashboard,panel:this.panel,range:this.range}),void 0!==this.annotationsSrv.datasourcePromises?this.annotationsSrv.datasourcePromises.then((function(a){return t.issueQueriesWithInterval(e,t.interval)})):this.issueQueriesWithInterval(e,this.interval)},t.prototype.issueQueriesWithInterval=function(t,a){var r=this.panel.interval;this.panel.interval=a;var n=e.prototype.issueQueries.call(this,t);return this.panel.interval=r,n},t.prototype.onDataReceived=function(e){var t=this;this.data=e,this.intervalMs||this.calculateInterval();var a=this.convertDataToBuckets(e,this.range.from.valueOf(),this.range.to.valueOf(),this.intervalMs,!0);this.bucketMatrix=a,this.bucketMatrixPager.bucketMatrix=a,a.targets.length!==this.bucketMatrix.targets.length&&this.bucketMatrixPager.setCurrent(0),this.noDatapoints=this.bucketMatrix.noDatapoints,this.annotationsPromise?this.annotationsPromise.then((function(e){t.loading=!1,e.annotations&&e.annotations.length>0?t.annotations=e.annotations:t.annotations=[],t.render()}),(function(){t.loading=!1,t.annotations=[],t.render()})):(this.loading=!1,this.annotations=[],this.render())},t.prototype.onInitEditMode=function(){this.addEditorTab("Options",ua,2),this.addEditorTab("Tooltip",ma,3),this.unitFormats=la.a.getUnitFormats()},t.prototype.onRender=function(){this.range&&this.data?(this.multipleValues=!1,this.panel.useMax||this.bucketMatrix&&(this.multipleValues=this.bucketMatrix.multipleValues),this.noColorDefined=!1,"discrete"===this.panel.color.mode&&(-1===this.panel.seriesFilterIndex?this.discreteExtraSeries.updateCardsValuesHasColorInfo():this.discreteExtraSeries.updateCardsValuesHasColorInfoSingle(),this.bucketMatrix&&(this.noColorDefined=this.bucketMatrix.noColorDefined)),this.noDatapoints=!1,this.bucketMatrix&&(this.noDatapoints=this.bucketMatrix.noDatapoints)):this.noDatapoints=!0},t.prototype.onCardColorChange=function(e){this.panel.color.cardColor=e,this.render()},t.prototype.onDataError=function(){this.data=[],this.annotations=[],this.render()},t.prototype.postRefresh=function(){this.noColorDefined=!1},t.prototype.link=function(e,t,a,r){!function(e,t,a,r){new Pa(e,t,a,r)}(e,t,a,r)},t.prototype.retrieveTimeVar=function(){var e=this.timeSrv.timeRangeForUrl();return"from="+e.from+"&to="+e.to},t.prototype.convertDataToBuckets=function(e,t,a,r,n){var i=this,o=new xa;if(o.rangeMs=a-t,o.intervalMs=r,!e||0===e.length)return o.targets=["1.0","0.0","-1.0"],o.buckets["1.0"]=[],o.buckets["0.0"]=[],o.buckets["-1.0"]=[],o.xBucketSize=42,o.noDatapoints=!0,o;var c={},s={};e.map((function(e,t){var a=e.target;if(i.panel.yLabel.usingSplitLabel&&""!==i.panel.yLabel.delimiter){var r=e.target.split(i.panel.yLabel.delimiter),n=[];for(var o in n.__y_label={value:a},r)n["__y_label_"+o]={value:r[o]};""!==i.panel.yLabel.labelTemplate&&(a=i.templateSrv.replace(i.panel.yLabel.labelTemplate,n)),s[a]=r}c.hasOwnProperty(a)||(c[a]=[]),c[a].push(t)}));var f=l.a.keys(c),d={};return f.map((function(a){for(var n=[],i=0;i=0;s--){var f=n[s],h=0;if(f<0)h=f-r;else if(s-1>=0){h=n[s-1]+1;var u=f-r;h=0;){var u=new ya;u.yLabel=e,u.pLabels=s[e],u.relTo=c-l*r,u.relFrom=c-(l+1)*r,u.to=u.relTo+t,u.from=u.relFrom+t,u.values=[],h=u.relFrom,i.push(u),l++}i.map((function(e,t){e.xid=t})),o.buckets[e]=i})),o.minValue=Number.MAX_VALUE,o.maxValue=Number.MIN_SAFE_INTEGER,f.map((function(t){c[t].map((function(a){e[a].datapoints.map((function(e){for(var a=0;ao.maxValue&&(o.maxValue=e.maxValue),e.value=e.maxValue,e.values.length>1&&(o.multipleValues=!0,e.multipleValues=!0,e.value=-1!==i.panel.seriesFilterIndex?e.values[i.panel.seriesFilterIndex]:e.maxValue)}))})),o.xBucketSize=Number.MIN_SAFE_INTEGER,f.map((function(e){var t=o.buckets[e].length;t>o.xBucketSize&&(o.xBucketSize=t)})),o.targets=f,o.pLabels=s,o},t.templateUrl="module.html",t}(va.MetricsPanelCtrl)}])})); -//# sourceMappingURL=module.js.map \ No newline at end of file diff --git a/dist/module.js.LICENSE.txt b/dist/module.js.LICENSE.txt deleted file mode 100644 index c18ab1d..0000000 --- a/dist/module.js.LICENSE.txt +++ /dev/null @@ -1,14 +0,0 @@ -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ diff --git a/dist/module.js.map b/dist/module.js.map deleted file mode 100644 index b8acd2a..0000000 --- a/dist/module.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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/partials/options_editor.html b/dist/partials/options_editor.html deleted file mode 100644 index 29cc025..0000000 --- a/dist/partials/options_editor.html +++ /dev/null @@ -1,285 +0,0 @@ -
- Error: data has multiple values for one target. Please change target or check "use max value". -
- -
- Error: data value with undefined color. Check metric values, color values or define new color. -
- -
-
-
Colors
-
- -
- -
-
- -
-
- Note: Bucket color determined by maximum value in bucket
-
-
- - - - -
-
- -
- -
-
-
- - -
-
- -
-
- Note: Bucket color determined by maximum value in bucket
-
-
- -
- -
-
-
- -
-
- Note: Multiple values displayed using color with least index
-
- -
- - -
- -
-
- -
-
- - - - - -
-
- - -
-
- -
-
- -
-
-
- -
-
- -
-
- -
-
-
- -
-
- -
-
- -
-
- -
- -
- -
-
- -
-
Color scale
-
- - -
-
- - -
-
- -
-
Display
- - - - - - - -
- - -
-
- - -
-
- -
- -
-
- -
- -
-
Buckets
- - - -
- Color for bucket with multiple values is determined by color mode
-
-
- - -
- -
- -
- -
-
- -
- - -
-
- - -
-
- - -
-
- - -
-
- -
-
Y-axis label
-
- -
-
- - -
-
- - -
-
-
Pagination
-
- -
-
- - -
-
- -
diff --git a/dist/partials/tooltip_editor.html b/dist/partials/tooltip_editor.html deleted file mode 100644 index 76d4bf1..0000000 --- a/dist/partials/tooltip_editor.html +++ /dev/null @@ -1,163 +0,0 @@ -
-
- - - - - - -
- -
-
Custom content
- - -
- - -
-
-
- -
-
Items
- -
- - -
- -
-
-
- - - -
- -
-
- - - -
-
- - -
- -
- - -
- -
- - -
-
-
- -
-
-
- -
-
- -
-
-
-
- -
diff --git a/dist/plugin.json b/dist/plugin.json deleted file mode 100644 index ac5e87b..0000000 --- a/dist/plugin.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "panel", - "name": "Statusmap", - "id": "flant-statusmap-panel", - - "info": { - "description": "Statusmap panel for grafana", - "author": { - "name": "Flant JSC", - "url": "http://flant.com" - }, - "keywords": ["status", "statusmap", "heatmap", "panel"], - "logos": { - "small": "img/logo.svg", - "large": "img/logo.svg" - }, - "links": [ - {"name": "Github", "url": "https://github.com/flant/grafana-statusmap"}, - {"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"}, - {"name": "Panel with dark theme", "path": "img/flant-statusmap-panel-dark.png"}, - {"name": "Color mapping", "path": "img/color-mapping.png"}, - {"name": "Queries example", "path": "img/queries-example.png"} - ], - "version": "0.4.0-pre", - "updated": "2021-02-17" - }, - - "dependencies": { - "grafanaDependency": ">=5.4.3", - "grafanaVersion": "5.4.x", - "plugins": [ ] - } -} diff --git a/dist/styles/dark.css b/dist/styles/dark.css deleted file mode 100644 index fc632ca..0000000 --- a/dist/styles/dark.css +++ /dev/null @@ -1 +0,0 @@ -.status-heatmap-canvas-wrapper{cursor:crosshair}.status-heatmap-canvas-wrapper .datapoints-warning{pointer-events:none}.status-heatmap-canvas-wrapper .datapoints-warning span{background-color:#333;color:#d8d9da;padding:1px}.statusmap-panel{position:relative}.statusmap-panel .axis .tick text{fill:#d8d9da;color:#d8d9da;font-size:11px}.statusmap-panel .axis .tick line{opacity:.4;stroke:#8e8e8e}.statusmap-panel svg{pointer-events:none}.statusmap-panel svg rect{pointer-events:visiblePainted}.statusmap-tooltip{position:absolute;padding:10px;font-weight:200;border-radius:5px;max-width:800px;max-height:600px;overflow:hidden;line-height:14px;z-index:9999;white-space:nowrap;font-size:12px;background-color:#141414;color:#d8d9da}.statusmap-tooltip .discrete-item{color:#fff;padding:1px;font-weight:700;text-shadow:0 0 .2em #212124,0 0 .2em #212124,0 0 .2em #212124}.statusmap-tooltip-frozen{position:relative;z-index:1}.statusmap-histogram rect{fill:#8e8e8e}.status-heatmap-crosshair line{stroke:#9f3023;stroke-width:1}.status-heatmap-selection{stroke-width:1;fill:hsla(0,0%,40%,.4);stroke:hsla(0,0%,40%,.8)}.width-c-40{width:40rem!important}.width-c-50{width:50rem!important}.width-c-60{width:60rem!important}.width-c-70{width:70rem!important}.statusmap-pagination{margin-top:5px}.statusmap-pagination input,.statusmap-pagination label{margin-right:0}.statusmap-pagination .last-in-group{margin-right:4px}.pagination-buttons{text-align:right}.status-heatmap-legend-wrapper{margin:0 10px}.status-heatmap-legend-wrapper svg{height:24px;float:left;white-space:nowrap}.status-heatmap-legend-wrapper .status-heatmap-color-legend{margin-top:4px}.status-heatmap-legend-wrapper .status-heatmap-legend-values{display:inline-block}.status-heatmap-legend-wrapper .axis .tick text{fill:#d8d9da;color:#d8d9da;font-size:11px}.status-heatmap-legend-wrapper .axis .tick .domain,.status-heatmap-legend-wrapper .axis .tick line{opacity:.4;stroke:#8e8e8e} \ No newline at end of file diff --git a/dist/styles/light.css b/dist/styles/light.css deleted file mode 100644 index 0ab9799..0000000 --- a/dist/styles/light.css +++ /dev/null @@ -1 +0,0 @@ -.status-heatmap-canvas-wrapper{cursor:crosshair}.status-heatmap-canvas-wrapper .datapoints-warning{pointer-events:none}.status-heatmap-canvas-wrapper .datapoints-warning span{background-color:#e9edf2;color:#52545c;padding:1px}.statusmap-panel{position:relative}.statusmap-panel .axis .tick text{fill:#52545c;color:#52545c;font-size:11px}.statusmap-panel .axis .tick line{opacity:.4;stroke:#767980}.statusmap-panel svg{pointer-events:none}.statusmap-panel svg rect{pointer-events:visiblePainted}.statusmap-tooltip{position:absolute;padding:10px;font-weight:200;border-radius:5px;max-width:800px;max-height:600px;overflow:hidden;line-height:14px;z-index:9999;white-space:nowrap;font-size:12px;background-color:#dde4ed;color:#52545c}.statusmap-tooltip .discrete-item{color:#fff;padding:1px;font-weight:700;text-shadow:0 0 .2em #212124,0 0 .2em #212124,0 0 .2em #212124}.statusmap-tooltip-frozen{position:relative;z-index:1}.statusmap-histogram rect{fill:#767980}.status-heatmap-crosshair line{stroke:#9e2f22;stroke-width:1}.status-heatmap-selection{stroke-width:1;fill:hsla(0,0%,40%,.4);stroke:hsla(0,0%,40%,.8)}.width-c-40{width:40rem!important}.width-c-50{width:50rem!important}.width-c-60{width:60rem!important}.width-c-70{width:70rem!important}.statusmap-pagination{margin-top:5px}.statusmap-pagination input,.statusmap-pagination label{margin-right:0}.statusmap-pagination .last-in-group{margin-right:4px}.pagination-buttons{text-align:right}.status-heatmap-legend-wrapper{margin:0 10px}.status-heatmap-legend-wrapper svg{height:24px;float:left;white-space:nowrap}.status-heatmap-legend-wrapper .status-heatmap-color-legend{margin-top:4px}.status-heatmap-legend-wrapper .status-heatmap-legend-values{display:inline-block}.status-heatmap-legend-wrapper .axis .tick text{fill:#52545c;color:#52545c;font-size:11px}.status-heatmap-legend-wrapper .axis .tick .domain,.status-heatmap-legend-wrapper .axis .tick line{opacity:.4;stroke:#767980} \ No newline at end of file