From 60b3701394fd398b48544898abe01d5298d5eed6 Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Wed, 17 Feb 2021 12:36:59 +0300 Subject: [PATCH 1/2] chore: remove dist folder --- dist/CHANGELOG.md | 81 ------- dist/LICENSE | 22 -- dist/README.md | 209 ----------------- dist/dark.js | 2 - dist/dark.js.map | 1 - dist/img/color-mapping.png | Bin 38165 -> 0 bytes dist/img/flant-statusmap-panel-dark.png | Bin 30692 -> 0 bytes dist/img/flant-statusmap-panel.png | Bin 29716 -> 0 bytes dist/img/logo.svg | 46 ---- dist/img/queries-example.png | Bin 65326 -> 0 bytes dist/light.js | 2 - dist/light.js.map | 1 - dist/module.html | 37 --- dist/module.js | 3 - dist/module.js.LICENSE.txt | 14 -- dist/module.js.map | 1 - dist/partials/options_editor.html | 285 ------------------------ dist/partials/tooltip_editor.html | 163 -------------- dist/plugin.json | 37 --- dist/styles/dark.css | 1 - dist/styles/light.css | 1 - 21 files changed, 906 deletions(-) delete mode 100644 dist/CHANGELOG.md delete mode 100644 dist/LICENSE delete mode 100644 dist/README.md delete mode 100644 dist/dark.js delete mode 100644 dist/dark.js.map delete mode 100644 dist/img/color-mapping.png delete mode 100644 dist/img/flant-statusmap-panel-dark.png delete mode 100644 dist/img/flant-statusmap-panel.png delete mode 100644 dist/img/logo.svg delete mode 100644 dist/img/queries-example.png delete mode 100644 dist/light.js delete mode 100644 dist/light.js.map delete mode 100644 dist/module.html delete mode 100644 dist/module.js delete mode 100644 dist/module.js.LICENSE.txt delete mode 100644 dist/module.js.map delete mode 100644 dist/partials/options_editor.html delete mode 100644 dist/partials/tooltip_editor.html delete mode 100644 dist/plugin.json delete mode 100644 dist/styles/dark.css delete mode 100644 dist/styles/light.css 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 946cf42c23568acafa5dce34d95524957156acb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38165 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

t)6$P$WBA>f*f;lO6Ic!9&~VTpy<| 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 a-@!Muu0|E7_Wm5w3nn275UCK-_4_}!ECeF} diff --git a/dist/img/flant-statusmap-panel.png b/dist/img/flant-statusmap-panel.png deleted file mode 100644 index 71aaf9a93d7811bbce069ecbe47b7779f5908a80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29716 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 ZX^@=(E5Zpv@cTOvWTliOE5wZh{vX6UsZIa@ 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 7150b44a16fe7e6f7a2ad889060f138f6291f1bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65326 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 -

- -
- -
- -
- -
-
- - - -
- -
- - -
- -
- -
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 From cf6f6498546279da252ce2d91fa7d389f281d62a Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Wed, 17 Feb 2021 12:39:22 +0300 Subject: [PATCH 2/2] chore: add dist folder to .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9f06557..b01c4b3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ +dist node_modules .jshintrc .idea .sass-cache -.tscache \ No newline at end of file +.tscache