From 6662b7f52d5705f401f62efbfeba17d4c7a7f259 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen <paulus@paulusschoutsen.nl>
Date: Thu, 18 May 2017 17:40:49 -0700
Subject: [PATCH] Update frontend

---
 homeassistant/components/frontend/version.py  |   2 +-
 .../www_static/home-assistant-polymer         |   2 +-
 .../www_static/panels/ha-panel-zwave.html     | 648 +++++++++++++++++-
 .../www_static/panels/ha-panel-zwave.html.gz  | Bin 6135 -> 12987 bytes
 4 files changed, 649 insertions(+), 3 deletions(-)

diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py
index e0fd270b81b..d232f027f84 100644
--- a/homeassistant/components/frontend/version.py
+++ b/homeassistant/components/frontend/version.py
@@ -18,6 +18,6 @@ FINGERPRINTS = {
     "panels/ha-panel-iframe.html": "d920f0aa3c903680f2f8795e2255daab",
     "panels/ha-panel-logbook.html": "6dd6a16f52117318b202e60f98400163",
     "panels/ha-panel-map.html": "31c592c239636f91e07c7ac232a5ebc4",
-    "panels/ha-panel-zwave.html": "84fb45638d2a69bac343246a687f647c",
+    "panels/ha-panel-zwave.html": "19336d2c50c91dd6a122acc0606ff10d",
     "websocket_test.html": "575de64b431fe11c3785bf96d7813450"
 }
diff --git a/homeassistant/components/frontend/www_static/home-assistant-polymer b/homeassistant/components/frontend/www_static/home-assistant-polymer
index ffe0b22d772..ad3b3ce3dce 160000
--- a/homeassistant/components/frontend/www_static/home-assistant-polymer
+++ b/homeassistant/components/frontend/www_static/home-assistant-polymer
@@ -1 +1 @@
-Subproject commit ffe0b22d772c619efabc43ae56d94e1564f9f6e6
+Subproject commit ad3b3ce3dce3811cdc06e87585914c60c91e02af
diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html b/homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html
index 6af056b0db4..70e5cc64177 100644
--- a/homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html
+++ b/homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html
@@ -1 +1,647 @@
-<html><head><meta charset="UTF-8"></head><body><div hidden="" by-vulcanize=""><style>[hidden]{display:none!important}</style><style is="custom-style">:root{--layout:{display:-ms-flexbox;display:-webkit-flex;display:flex};--layout-inline:{display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex};--layout-horizontal:{@apply(--layout);-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row};--layout-horizontal-reverse:{@apply(--layout);-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse};--layout-vertical:{@apply(--layout);-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column};--layout-vertical-reverse:{@apply(--layout);-ms-flex-direction:column-reverse;-webkit-flex-direction:column-reverse;flex-direction:column-reverse};--layout-wrap:{-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap};--layout-no-wrap:{-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap};--layout-wrap-reverse:{-ms-flex-wrap:wrap-reverse;-webkit-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse};--layout-flex-auto:{-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto};--layout-flex-none:{-ms-flex:none;-webkit-flex:none;flex:none};--layout-flex:{-ms-flex:1 1 .000000001px;-webkit-flex:1;flex:1;-webkit-flex-basis:.000000001px;flex-basis:.000000001px};--layout-flex-2:{-ms-flex:2;-webkit-flex:2;flex:2};--layout-flex-3:{-ms-flex:3;-webkit-flex:3;flex:3};--layout-flex-4:{-ms-flex:4;-webkit-flex:4;flex:4};--layout-flex-5:{-ms-flex:5;-webkit-flex:5;flex:5};--layout-flex-6:{-ms-flex:6;-webkit-flex:6;flex:6};--layout-flex-7:{-ms-flex:7;-webkit-flex:7;flex:7};--layout-flex-8:{-ms-flex:8;-webkit-flex:8;flex:8};--layout-flex-9:{-ms-flex:9;-webkit-flex:9;flex:9};--layout-flex-10:{-ms-flex:10;-webkit-flex:10;flex:10};--layout-flex-11:{-ms-flex:11;-webkit-flex:11;flex:11};--layout-flex-12:{-ms-flex:12;-webkit-flex:12;flex:12};--layout-start:{-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start};--layout-center:{-ms-flex-align:center;-webkit-align-items:center;align-items:center};--layout-end:{-ms-flex-align:end;-webkit-align-items:flex-end;align-items:flex-end};--layout-baseline:{-ms-flex-align:baseline;-webkit-align-items:baseline;align-items:baseline};--layout-start-justified:{-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start};--layout-center-justified:{-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center};--layout-end-justified:{-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end};--layout-around-justified:{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around};--layout-justified:{-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between};--layout-center-center:{@apply(--layout-center);@apply(--layout-center-justified)};--layout-self-start:{-ms-align-self:flex-start;-webkit-align-self:flex-start;align-self:flex-start};--layout-self-center:{-ms-align-self:center;-webkit-align-self:center;align-self:center};--layout-self-end:{-ms-align-self:flex-end;-webkit-align-self:flex-end;align-self:flex-end};--layout-self-stretch:{-ms-align-self:stretch;-webkit-align-self:stretch;align-self:stretch};--layout-self-baseline:{-ms-align-self:baseline;-webkit-align-self:baseline;align-self:baseline};--layout-start-aligned:{-ms-flex-line-pack:start;-ms-align-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start};--layout-end-aligned:{-ms-flex-line-pack:end;-ms-align-content:flex-end;-webkit-align-content:flex-end;align-content:flex-end};--layout-center-aligned:{-ms-flex-line-pack:center;-ms-align-content:center;-webkit-align-content:center;align-content:center};--layout-between-aligned:{-ms-flex-line-pack:justify;-ms-align-content:space-between;-webkit-align-content:space-between;align-content:space-between};--layout-around-aligned:{-ms-flex-line-pack:distribute;-ms-align-content:space-around;-webkit-align-content:space-around;align-content:space-around};--layout-block:{display:block};--layout-invisible:{visibility:hidden!important};--layout-relative:{position:relative};--layout-fit:{position:absolute;top:0;right:0;bottom:0;left:0};--layout-scroll:{-webkit-overflow-scrolling:touch;overflow:auto};--layout-fullbleed:{margin:0;height:100vh};--layout-fixed-top:{position:fixed;top:0;left:0;right:0};--layout-fixed-right:{position:fixed;top:0;right:0;bottom:0};--layout-fixed-bottom:{position:fixed;right:0;bottom:0;left:0};--layout-fixed-left:{position:fixed;top:0;bottom:0;left:0};}</style><dom-module id="iron-image" assetpath="../../bower_components/iron-image/"><template><style>:host{display:inline-block;overflow:hidden;position:relative}#sizedImgDiv{@apply(--layout-fit);display:none}#img{display:block;width:var(--iron-image-width,auto);height:var(--iron-image-height,auto)}:host([sizing]) #sizedImgDiv{display:block}:host([sizing]) #img{display:none}#placeholder{@apply(--layout-fit);background-color:inherit;opacity:1;@apply(--iron-image-placeholder)}#placeholder.faded-out{transition:opacity .5s linear;opacity:0}</style><div id="sizedImgDiv" role="img" hidden$="[[_computeImgDivHidden(sizing)]]" aria-hidden$="[[_computeImgDivARIAHidden(alt)]]" aria-label$="[[_computeImgDivARIALabel(alt, src)]]"></div><img id="img" alt$="[[alt]]" hidden$="[[_computeImgHidden(sizing)]]"><div id="placeholder" hidden$="[[_computePlaceholderHidden(preload, fade, loading, loaded)]]" class$="[[_computePlaceholderClassName(preload, fade, loading, loaded)]]"></div></template><script>Polymer({is:"iron-image",properties:{src:{observer:"_srcChanged",type:String,value:""},alt:{type:String,value:null},preventLoad:{type:Boolean,value:!1,observer:"_preventLoadChanged"},sizing:{type:String,value:null,reflectToAttribute:!0},position:{type:String,value:"center"},preload:{type:Boolean,value:!1},placeholder:{type:String,value:null,observer:"_placeholderChanged"},fade:{type:Boolean,value:!1},loaded:{notify:!0,readOnly:!0,type:Boolean,value:!1},loading:{notify:!0,readOnly:!0,type:Boolean,value:!1},error:{notify:!0,readOnly:!0,type:Boolean,value:!1},width:{observer:"_widthChanged",type:Number,value:null},height:{observer:"_heightChanged",type:Number,value:null}},observers:["_transformChanged(sizing, position)"],ready:function(){var e=this.$.img;e.onload=function(){this.$.img.src===this._resolveSrc(this.src)&&(this._setLoading(!1),this._setLoaded(!0),this._setError(!1))}.bind(this),e.onerror=function(){this.$.img.src===this._resolveSrc(this.src)&&(this._reset(),this._setLoading(!1),this._setLoaded(!1),this._setError(!0))}.bind(this),this._resolvedSrc=""},_load:function(e){e?this.$.img.src=e:this.$.img.removeAttribute("src"),this.$.sizedImgDiv.style.backgroundImage=e?'url("'+e+'")':"",this._setLoading(!!e),this._setLoaded(!1),this._setError(!1)},_reset:function(){this.$.img.removeAttribute("src"),this.$.sizedImgDiv.style.backgroundImage="",this._setLoading(!1),this._setLoaded(!1),this._setError(!1)},_computePlaceholderHidden:function(){return!this.preload||!this.fade&&!this.loading&&this.loaded},_computePlaceholderClassName:function(){return this.preload&&this.fade&&!this.loading&&this.loaded?"faded-out":""},_computeImgDivHidden:function(){return!this.sizing},_computeImgDivARIAHidden:function(){return""===this.alt?"true":void 0},_computeImgDivARIALabel:function(){if(null!==this.alt)return this.alt;if(""===this.src)return"";var e=new URL(this._resolveSrc(this.src)).pathname.split("/");return e[e.length-1]},_computeImgHidden:function(){return!!this.sizing},_widthChanged:function(){this.style.width=isNaN(this.width)?this.width:this.width+"px"},_heightChanged:function(){this.style.height=isNaN(this.height)?this.height:this.height+"px"},_preventLoadChanged:function(){this.preventLoad||this.loaded||(this._reset(),this._load(this.src))},_srcChanged:function(e,t){var i=this._resolveSrc(e);i!==this._resolvedSrc&&(this._resolvedSrc=i,this._reset(),this.preventLoad||this._load(e))},_placeholderChanged:function(){this.$.placeholder.style.backgroundImage=this.placeholder?'url("'+this.placeholder+'")':""},_transformChanged:function(){var e=this.$.sizedImgDiv.style,t=this.$.placeholder.style;e.backgroundSize=t.backgroundSize=this.sizing,e.backgroundPosition=t.backgroundPosition=this.sizing?this.position:"",e.backgroundRepeat=t.backgroundRepeat=this.sizing?"no-repeat":""},_resolveSrc:function(e){var t=this.ownerDocument.baseURI;return new URL(Polymer.ResolveUrl.resolveUrl(e,t),t).href}})</script></dom-module><style is="custom-style">:root{--google-red-100:#f4c7c3;--google-red-300:#e67c73;--google-red-500:#db4437;--google-red-700:#c53929;--google-blue-100:#c6dafc;--google-blue-300:#7baaf7;--google-blue-500:#4285f4;--google-blue-700:#3367d6;--google-green-100:#b7e1cd;--google-green-300:#57bb8a;--google-green-500:#0f9d58;--google-green-700:#0b8043;--google-yellow-100:#fce8b2;--google-yellow-300:#f7cb4d;--google-yellow-500:#f4b400;--google-yellow-700:#f09300;--google-grey-100:#f5f5f5;--google-grey-300:#e0e0e0;--google-grey-500:#9e9e9e;--google-grey-700:#616161;--paper-red-50:#ffebee;--paper-red-100:#ffcdd2;--paper-red-200:#ef9a9a;--paper-red-300:#e57373;--paper-red-400:#ef5350;--paper-red-500:#f44336;--paper-red-600:#e53935;--paper-red-700:#d32f2f;--paper-red-800:#c62828;--paper-red-900:#b71c1c;--paper-red-a100:#ff8a80;--paper-red-a200:#ff5252;--paper-red-a400:#ff1744;--paper-red-a700:#d50000;--paper-pink-50:#fce4ec;--paper-pink-100:#f8bbd0;--paper-pink-200:#f48fb1;--paper-pink-300:#f06292;--paper-pink-400:#ec407a;--paper-pink-500:#e91e63;--paper-pink-600:#d81b60;--paper-pink-700:#c2185b;--paper-pink-800:#ad1457;--paper-pink-900:#880e4f;--paper-pink-a100:#ff80ab;--paper-pink-a200:#ff4081;--paper-pink-a400:#f50057;--paper-pink-a700:#c51162;--paper-purple-50:#f3e5f5;--paper-purple-100:#e1bee7;--paper-purple-200:#ce93d8;--paper-purple-300:#ba68c8;--paper-purple-400:#ab47bc;--paper-purple-500:#9c27b0;--paper-purple-600:#8e24aa;--paper-purple-700:#7b1fa2;--paper-purple-800:#6a1b9a;--paper-purple-900:#4a148c;--paper-purple-a100:#ea80fc;--paper-purple-a200:#e040fb;--paper-purple-a400:#d500f9;--paper-purple-a700:#aa00ff;--paper-deep-purple-50:#ede7f6;--paper-deep-purple-100:#d1c4e9;--paper-deep-purple-200:#b39ddb;--paper-deep-purple-300:#9575cd;--paper-deep-purple-400:#7e57c2;--paper-deep-purple-500:#673ab7;--paper-deep-purple-600:#5e35b1;--paper-deep-purple-700:#512da8;--paper-deep-purple-800:#4527a0;--paper-deep-purple-900:#311b92;--paper-deep-purple-a100:#b388ff;--paper-deep-purple-a200:#7c4dff;--paper-deep-purple-a400:#651fff;--paper-deep-purple-a700:#6200ea;--paper-indigo-50:#e8eaf6;--paper-indigo-100:#c5cae9;--paper-indigo-200:#9fa8da;--paper-indigo-300:#7986cb;--paper-indigo-400:#5c6bc0;--paper-indigo-500:#3f51b5;--paper-indigo-600:#3949ab;--paper-indigo-700:#303f9f;--paper-indigo-800:#283593;--paper-indigo-900:#1a237e;--paper-indigo-a100:#8c9eff;--paper-indigo-a200:#536dfe;--paper-indigo-a400:#3d5afe;--paper-indigo-a700:#304ffe;--paper-blue-50:#e3f2fd;--paper-blue-100:#bbdefb;--paper-blue-200:#90caf9;--paper-blue-300:#64b5f6;--paper-blue-400:#42a5f5;--paper-blue-500:#2196f3;--paper-blue-600:#1e88e5;--paper-blue-700:#1976d2;--paper-blue-800:#1565c0;--paper-blue-900:#0d47a1;--paper-blue-a100:#82b1ff;--paper-blue-a200:#448aff;--paper-blue-a400:#2979ff;--paper-blue-a700:#2962ff;--paper-light-blue-50:#e1f5fe;--paper-light-blue-100:#b3e5fc;--paper-light-blue-200:#81d4fa;--paper-light-blue-300:#4fc3f7;--paper-light-blue-400:#29b6f6;--paper-light-blue-500:#03a9f4;--paper-light-blue-600:#039be5;--paper-light-blue-700:#0288d1;--paper-light-blue-800:#0277bd;--paper-light-blue-900:#01579b;--paper-light-blue-a100:#80d8ff;--paper-light-blue-a200:#40c4ff;--paper-light-blue-a400:#00b0ff;--paper-light-blue-a700:#0091ea;--paper-cyan-50:#e0f7fa;--paper-cyan-100:#b2ebf2;--paper-cyan-200:#80deea;--paper-cyan-300:#4dd0e1;--paper-cyan-400:#26c6da;--paper-cyan-500:#00bcd4;--paper-cyan-600:#00acc1;--paper-cyan-700:#0097a7;--paper-cyan-800:#00838f;--paper-cyan-900:#006064;--paper-cyan-a100:#84ffff;--paper-cyan-a200:#18ffff;--paper-cyan-a400:#00e5ff;--paper-cyan-a700:#00b8d4;--paper-teal-50:#e0f2f1;--paper-teal-100:#b2dfdb;--paper-teal-200:#80cbc4;--paper-teal-300:#4db6ac;--paper-teal-400:#26a69a;--paper-teal-500:#009688;--paper-teal-600:#00897b;--paper-teal-700:#00796b;--paper-teal-800:#00695c;--paper-teal-900:#004d40;--paper-teal-a100:#a7ffeb;--paper-teal-a200:#64ffda;--paper-teal-a400:#1de9b6;--paper-teal-a700:#00bfa5;--paper-green-50:#e8f5e9;--paper-green-100:#c8e6c9;--paper-green-200:#a5d6a7;--paper-green-300:#81c784;--paper-green-400:#66bb6a;--paper-green-500:#4caf50;--paper-green-600:#43a047;--paper-green-700:#388e3c;--paper-green-800:#2e7d32;--paper-green-900:#1b5e20;--paper-green-a100:#b9f6ca;--paper-green-a200:#69f0ae;--paper-green-a400:#00e676;--paper-green-a700:#00c853;--paper-light-green-50:#f1f8e9;--paper-light-green-100:#dcedc8;--paper-light-green-200:#c5e1a5;--paper-light-green-300:#aed581;--paper-light-green-400:#9ccc65;--paper-light-green-500:#8bc34a;--paper-light-green-600:#7cb342;--paper-light-green-700:#689f38;--paper-light-green-800:#558b2f;--paper-light-green-900:#33691e;--paper-light-green-a100:#ccff90;--paper-light-green-a200:#b2ff59;--paper-light-green-a400:#76ff03;--paper-light-green-a700:#64dd17;--paper-lime-50:#f9fbe7;--paper-lime-100:#f0f4c3;--paper-lime-200:#e6ee9c;--paper-lime-300:#dce775;--paper-lime-400:#d4e157;--paper-lime-500:#cddc39;--paper-lime-600:#c0ca33;--paper-lime-700:#afb42b;--paper-lime-800:#9e9d24;--paper-lime-900:#827717;--paper-lime-a100:#f4ff81;--paper-lime-a200:#eeff41;--paper-lime-a400:#c6ff00;--paper-lime-a700:#aeea00;--paper-yellow-50:#fffde7;--paper-yellow-100:#fff9c4;--paper-yellow-200:#fff59d;--paper-yellow-300:#fff176;--paper-yellow-400:#ffee58;--paper-yellow-500:#ffeb3b;--paper-yellow-600:#fdd835;--paper-yellow-700:#fbc02d;--paper-yellow-800:#f9a825;--paper-yellow-900:#f57f17;--paper-yellow-a100:#ffff8d;--paper-yellow-a200:#ffff00;--paper-yellow-a400:#ffea00;--paper-yellow-a700:#ffd600;--paper-amber-50:#fff8e1;--paper-amber-100:#ffecb3;--paper-amber-200:#ffe082;--paper-amber-300:#ffd54f;--paper-amber-400:#ffca28;--paper-amber-500:#ffc107;--paper-amber-600:#ffb300;--paper-amber-700:#ffa000;--paper-amber-800:#ff8f00;--paper-amber-900:#ff6f00;--paper-amber-a100:#ffe57f;--paper-amber-a200:#ffd740;--paper-amber-a400:#ffc400;--paper-amber-a700:#ffab00;--paper-orange-50:#fff3e0;--paper-orange-100:#ffe0b2;--paper-orange-200:#ffcc80;--paper-orange-300:#ffb74d;--paper-orange-400:#ffa726;--paper-orange-500:#ff9800;--paper-orange-600:#fb8c00;--paper-orange-700:#f57c00;--paper-orange-800:#ef6c00;--paper-orange-900:#e65100;--paper-orange-a100:#ffd180;--paper-orange-a200:#ffab40;--paper-orange-a400:#ff9100;--paper-orange-a700:#ff6500;--paper-deep-orange-50:#fbe9e7;--paper-deep-orange-100:#ffccbc;--paper-deep-orange-200:#ffab91;--paper-deep-orange-300:#ff8a65;--paper-deep-orange-400:#ff7043;--paper-deep-orange-500:#ff5722;--paper-deep-orange-600:#f4511e;--paper-deep-orange-700:#e64a19;--paper-deep-orange-800:#d84315;--paper-deep-orange-900:#bf360c;--paper-deep-orange-a100:#ff9e80;--paper-deep-orange-a200:#ff6e40;--paper-deep-orange-a400:#ff3d00;--paper-deep-orange-a700:#dd2c00;--paper-brown-50:#efebe9;--paper-brown-100:#d7ccc8;--paper-brown-200:#bcaaa4;--paper-brown-300:#a1887f;--paper-brown-400:#8d6e63;--paper-brown-500:#795548;--paper-brown-600:#6d4c41;--paper-brown-700:#5d4037;--paper-brown-800:#4e342e;--paper-brown-900:#3e2723;--paper-grey-50:#fafafa;--paper-grey-100:#f5f5f5;--paper-grey-200:#eeeeee;--paper-grey-300:#e0e0e0;--paper-grey-400:#bdbdbd;--paper-grey-500:#9e9e9e;--paper-grey-600:#757575;--paper-grey-700:#616161;--paper-grey-800:#424242;--paper-grey-900:#212121;--paper-blue-grey-50:#eceff1;--paper-blue-grey-100:#cfd8dc;--paper-blue-grey-200:#b0bec5;--paper-blue-grey-300:#90a4ae;--paper-blue-grey-400:#78909c;--paper-blue-grey-500:#607d8b;--paper-blue-grey-600:#546e7a;--paper-blue-grey-700:#455a64;--paper-blue-grey-800:#37474f;--paper-blue-grey-900:#263238;--dark-divider-opacity:0.12;--dark-disabled-opacity:0.38;--dark-secondary-opacity:0.54;--dark-primary-opacity:0.87;--light-divider-opacity:0.12;--light-disabled-opacity:0.3;--light-secondary-opacity:0.7;--light-primary-opacity:1.0}</style><style is="custom-style">:root{--primary-text-color:var(--light-theme-text-color);--primary-background-color:var(--light-theme-background-color);--secondary-text-color:var(--light-theme-secondary-color);--disabled-text-color:var(--light-theme-disabled-color);--divider-color:var(--light-theme-divider-color);--error-color:var(--paper-deep-orange-a700);--primary-color:var(--paper-indigo-500);--light-primary-color:var(--paper-indigo-100);--dark-primary-color:var(--paper-indigo-700);--accent-color:var(--paper-pink-a200);--light-accent-color:var(--paper-pink-a100);--dark-accent-color:var(--paper-pink-a400);--light-theme-background-color:#ffffff;--light-theme-base-color:#000000;--light-theme-text-color:var(--paper-grey-900);--light-theme-secondary-color:#737373;--light-theme-disabled-color:#9b9b9b;--light-theme-divider-color:#dbdbdb;--dark-theme-background-color:var(--paper-grey-900);--dark-theme-base-color:#ffffff;--dark-theme-text-color:#ffffff;--dark-theme-secondary-color:#bcbcbc;--dark-theme-disabled-color:#646464;--dark-theme-divider-color:#3c3c3c;--text-primary-color:var(--dark-theme-text-color);--default-primary-color:var(--primary-color)}</style><dom-module id="paper-card" assetpath="../../bower_components/paper-card/"><template><style include="paper-material">:host{display:inline-block;position:relative;box-sizing:border-box;background-color:var(--paper-card-background-color,--primary-background-color);border-radius:2px;@apply(--paper-font-common-base);@apply(--paper-card)}[hidden]{display:none!important}.header{position:relative;border-top-left-radius:inherit;border-top-right-radius:inherit;overflow:hidden;@apply(--paper-card-header)}.header iron-image{display:block;width:100%;--iron-image-width:100%;pointer-events:none;@apply(--paper-card-header-image)}.header .title-text{padding:16px;font-size:24px;font-weight:400;color:var(--paper-card-header-color,#000);@apply(--paper-card-header-text)}.header .title-text.over-image{position:absolute;bottom:0;@apply(--paper-card-header-image-text)}:host ::content .card-content{padding:16px;position:relative;@apply(--paper-card-content)}:host ::content .card-actions{border-top:1px solid #e8e8e8;padding:5px 16px;position:relative;@apply(--paper-card-actions)}</style><div class="header"><iron-image hidden$="[[!image]]" aria-hidden$="[[_isHidden(image)]]" src="[[image]]" alt="[[alt]]" placeholder="[[placeholderImage]]" preload="[[preloadImage]]" fade="[[fadeImage]]"></iron-image><div hidden$="[[!heading]]" class$="title-text [[_computeHeadingClass(image)]]">[[heading]]</div></div><content></content></template><script>Polymer({is:"paper-card",properties:{heading:{type:String,value:"",observer:"_headingChanged"},image:{type:String,value:""},alt:{type:String},preloadImage:{type:Boolean,value:!1},fadeImage:{type:Boolean,value:!1},placeholderImage:{type:String,value:null},elevation:{type:Number,value:1,reflectToAttribute:!0},animatedShadow:{type:Boolean,value:!1},animated:{type:Boolean,reflectToAttribute:!0,readOnly:!0,computed:"_computeAnimated(animatedShadow)"}},_isHidden:function(e){return e?"false":"true"},_headingChanged:function(e){var t=this.getAttribute("heading"),a=this.getAttribute("aria-label");"string"==typeof a&&a!==t||this.setAttribute("aria-label",e)},_computeHeadingClass:function(e){return e?" over-image":""},_computeAnimated:function(e){return e}})</script></dom-module><dom-module id="ha-progress-button" assetpath="../../src/components/buttons/"><template><style>.container{position:relative;display:inline-block}paper-button{transition:all 1s}.success paper-button{color:#fff;background-color:var(--google-green-500);transition:none}.error paper-button{color:#fff;background-color:var(--google-red-500);transition:none}paper-button[disabled]{color:#c8c8c8}.progress{@apply(--layout);@apply(--layout-center-center);position:absolute;top:0;left:0;right:0;bottom:0}</style><div class="container" id="container"><paper-button id="button" disabled="[[computeDisabled(disabled, progress)]]" on-tap="buttonTapped"><slot></slot></paper-button><template is="dom-if" if="[[progress]]"><div class="progress"><paper-spinner active=""></paper-spinner></div></template></div></template></dom-module><script>Polymer({is:"ha-progress-button",properties:{hass:{type:Object},progress:{type:Boolean,value:!1},domain:{type:String},service:{type:String},serviceData:{type:Object,value:{}},disabled:{type:Boolean,value:!1}},tempClass:function(t){var e=this.$.container.classList;e.add(t),this.async(function(){e.remove(t)},1e3)},listeners:{tap:"buttonTapped"},buttonTapped:function(t){this.progress&&t.stopPropagation()},actionSuccess:function(){this.tempClass("success")},actionError:function(){this.tempClass("error")},computeDisabled:function(t,e){return t||e}})</script><dom-module id="ha-call-service-button" assetpath="../../src/components/buttons/"><template><ha-progress-button id="progress" progress="[[progress]]" on-tap="buttonTapped"><slot></slot></ha-progress-button></template></dom-module><script>Polymer({is:"ha-call-service-button",properties:{hass:{type:Object},progress:{type:Boolean,value:!1},domain:{type:String},service:{type:String},serviceData:{type:Object,value:{}}},buttonTapped:function(){this.progress=!0;var e=this,s={domain:this.domain,service:this.service,serviceData:this.serviceData};this.hass.callService(this.domain,this.service,this.serviceData).then(function(){e.progress=!1,e.$.progress.actionSuccess(),s.success=!0},function(){e.progress=!1,e.$.progress.actionError(),s.success=!1}).then(function(){e.fire("hass-service-called",s)})}})</script></div><dom-module id="ha-panel-zwave"><template><style include="iron-flex ha-style">.content{margin-top:24px}paper-card{display:block;margin:0 auto;max-width:600px}.card-actions.warning ha-call-service-button{color:var(--google-red-500)}</style><app-header-layout has-scrolling-region=""><app-header fixed=""><app-toolbar><ha-menu-button narrow="[[narrow]]" show-menu="[[showMenu]]"></ha-menu-button><div main-title="">Z-Wave Manager</div></app-toolbar></app-header><div class="content"><paper-card heading="Z-Wave Network Management"><div class="card-content">Z-Wave Network controls.</div><div class="card-actions"><ha-call-service-button hass="[[hass]]" domain="zwave" service="add_node_secure">Add Node</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="remove_failed_node">Remove Failed Node</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="remove_node">Remove Node</ha-call-service-button></div><div class="card-actions warning"><ha-call-service-button hass="[[hass]]" domain="zwave" service="cancel_command">Cancel Command</ha-call-service-button></div><div class="card-actions"><ha-call-service-button hass="[[hass]]" domain="zwave" service="heal_network">Heal Network</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="start_network">Start Network</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="stop_network">Stop Network</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="soft_reset">Soft Reset</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="test_network">Test Network</ha-call-service-button></div></paper-card></div></app-header-layout></template></dom-module><script>Polymer({is:"ha-panel-zwave",properties:{hass:{type:Object},narrow:{type:Boolean},showMenu:{type:Boolean,value:!1}}})</script></body></html>
\ No newline at end of file
+<html><head><meta charset="UTF-8"></head><body><div hidden="" by-vulcanize=""><style>[hidden]{display:none!important}</style><style is="custom-style">:root{--layout:{display:-ms-flexbox;display:-webkit-flex;display:flex};--layout-inline:{display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex};--layout-horizontal:{@apply(--layout);-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row};--layout-horizontal-reverse:{@apply(--layout);-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse};--layout-vertical:{@apply(--layout);-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column};--layout-vertical-reverse:{@apply(--layout);-ms-flex-direction:column-reverse;-webkit-flex-direction:column-reverse;flex-direction:column-reverse};--layout-wrap:{-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap};--layout-no-wrap:{-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap};--layout-wrap-reverse:{-ms-flex-wrap:wrap-reverse;-webkit-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse};--layout-flex-auto:{-ms-flex:1 1 auto;-webkit-flex:1 1 auto;flex:1 1 auto};--layout-flex-none:{-ms-flex:none;-webkit-flex:none;flex:none};--layout-flex:{-ms-flex:1 1 .000000001px;-webkit-flex:1;flex:1;-webkit-flex-basis:.000000001px;flex-basis:.000000001px};--layout-flex-2:{-ms-flex:2;-webkit-flex:2;flex:2};--layout-flex-3:{-ms-flex:3;-webkit-flex:3;flex:3};--layout-flex-4:{-ms-flex:4;-webkit-flex:4;flex:4};--layout-flex-5:{-ms-flex:5;-webkit-flex:5;flex:5};--layout-flex-6:{-ms-flex:6;-webkit-flex:6;flex:6};--layout-flex-7:{-ms-flex:7;-webkit-flex:7;flex:7};--layout-flex-8:{-ms-flex:8;-webkit-flex:8;flex:8};--layout-flex-9:{-ms-flex:9;-webkit-flex:9;flex:9};--layout-flex-10:{-ms-flex:10;-webkit-flex:10;flex:10};--layout-flex-11:{-ms-flex:11;-webkit-flex:11;flex:11};--layout-flex-12:{-ms-flex:12;-webkit-flex:12;flex:12};--layout-start:{-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start};--layout-center:{-ms-flex-align:center;-webkit-align-items:center;align-items:center};--layout-end:{-ms-flex-align:end;-webkit-align-items:flex-end;align-items:flex-end};--layout-baseline:{-ms-flex-align:baseline;-webkit-align-items:baseline;align-items:baseline};--layout-start-justified:{-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start};--layout-center-justified:{-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center};--layout-end-justified:{-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end};--layout-around-justified:{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around};--layout-justified:{-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between};--layout-center-center:{@apply(--layout-center);@apply(--layout-center-justified)};--layout-self-start:{-ms-align-self:flex-start;-webkit-align-self:flex-start;align-self:flex-start};--layout-self-center:{-ms-align-self:center;-webkit-align-self:center;align-self:center};--layout-self-end:{-ms-align-self:flex-end;-webkit-align-self:flex-end;align-self:flex-end};--layout-self-stretch:{-ms-align-self:stretch;-webkit-align-self:stretch;align-self:stretch};--layout-self-baseline:{-ms-align-self:baseline;-webkit-align-self:baseline;align-self:baseline};--layout-start-aligned:{-ms-flex-line-pack:start;-ms-align-content:flex-start;-webkit-align-content:flex-start;align-content:flex-start};--layout-end-aligned:{-ms-flex-line-pack:end;-ms-align-content:flex-end;-webkit-align-content:flex-end;align-content:flex-end};--layout-center-aligned:{-ms-flex-line-pack:center;-ms-align-content:center;-webkit-align-content:center;align-content:center};--layout-between-aligned:{-ms-flex-line-pack:justify;-ms-align-content:space-between;-webkit-align-content:space-between;align-content:space-between};--layout-around-aligned:{-ms-flex-line-pack:distribute;-ms-align-content:space-around;-webkit-align-content:space-around;align-content:space-around};--layout-block:{display:block};--layout-invisible:{visibility:hidden!important};--layout-relative:{position:relative};--layout-fit:{position:absolute;top:0;right:0;bottom:0;left:0};--layout-scroll:{-webkit-overflow-scrolling:touch;overflow:auto};--layout-fullbleed:{margin:0;height:100vh};--layout-fixed-top:{position:fixed;top:0;left:0;right:0};--layout-fixed-right:{position:fixed;top:0;right:0;bottom:0};--layout-fixed-bottom:{position:fixed;right:0;bottom:0;left:0};--layout-fixed-left:{position:fixed;top:0;bottom:0;left:0};}</style><dom-module id="iron-image" assetpath="../../bower_components/iron-image/"><template><style>:host{display:inline-block;overflow:hidden;position:relative}#sizedImgDiv{@apply(--layout-fit);display:none}#img{display:block;width:var(--iron-image-width,auto);height:var(--iron-image-height,auto)}:host([sizing]) #sizedImgDiv{display:block}:host([sizing]) #img{display:none}#placeholder{@apply(--layout-fit);background-color:inherit;opacity:1;@apply(--iron-image-placeholder)}#placeholder.faded-out{transition:opacity .5s linear;opacity:0}</style><div id="sizedImgDiv" role="img" hidden$="[[_computeImgDivHidden(sizing)]]" aria-hidden$="[[_computeImgDivARIAHidden(alt)]]" aria-label$="[[_computeImgDivARIALabel(alt, src)]]"></div><img id="img" alt$="[[alt]]" hidden$="[[_computeImgHidden(sizing)]]"><div id="placeholder" hidden$="[[_computePlaceholderHidden(preload, fade, loading, loaded)]]" class$="[[_computePlaceholderClassName(preload, fade, loading, loaded)]]"></div></template><script>Polymer({is:"iron-image",properties:{src:{observer:"_srcChanged",type:String,value:""},alt:{type:String,value:null},preventLoad:{type:Boolean,value:!1,observer:"_preventLoadChanged"},sizing:{type:String,value:null,reflectToAttribute:!0},position:{type:String,value:"center"},preload:{type:Boolean,value:!1},placeholder:{type:String,value:null,observer:"_placeholderChanged"},fade:{type:Boolean,value:!1},loaded:{notify:!0,readOnly:!0,type:Boolean,value:!1},loading:{notify:!0,readOnly:!0,type:Boolean,value:!1},error:{notify:!0,readOnly:!0,type:Boolean,value:!1},width:{observer:"_widthChanged",type:Number,value:null},height:{observer:"_heightChanged",type:Number,value:null}},observers:["_transformChanged(sizing, position)"],ready:function(){var e=this.$.img;e.onload=function(){this.$.img.src===this._resolveSrc(this.src)&&(this._setLoading(!1),this._setLoaded(!0),this._setError(!1))}.bind(this),e.onerror=function(){this.$.img.src===this._resolveSrc(this.src)&&(this._reset(),this._setLoading(!1),this._setLoaded(!1),this._setError(!0))}.bind(this),this._resolvedSrc=""},_load:function(e){e?this.$.img.src=e:this.$.img.removeAttribute("src"),this.$.sizedImgDiv.style.backgroundImage=e?'url("'+e+'")':"",this._setLoading(!!e),this._setLoaded(!1),this._setError(!1)},_reset:function(){this.$.img.removeAttribute("src"),this.$.sizedImgDiv.style.backgroundImage="",this._setLoading(!1),this._setLoaded(!1),this._setError(!1)},_computePlaceholderHidden:function(){return!this.preload||!this.fade&&!this.loading&&this.loaded},_computePlaceholderClassName:function(){return this.preload&&this.fade&&!this.loading&&this.loaded?"faded-out":""},_computeImgDivHidden:function(){return!this.sizing},_computeImgDivARIAHidden:function(){return""===this.alt?"true":void 0},_computeImgDivARIALabel:function(){if(null!==this.alt)return this.alt;if(""===this.src)return"";var e=new URL(this._resolveSrc(this.src)).pathname.split("/");return e[e.length-1]},_computeImgHidden:function(){return!!this.sizing},_widthChanged:function(){this.style.width=isNaN(this.width)?this.width:this.width+"px"},_heightChanged:function(){this.style.height=isNaN(this.height)?this.height:this.height+"px"},_preventLoadChanged:function(){this.preventLoad||this.loaded||(this._reset(),this._load(this.src))},_srcChanged:function(e,t){var i=this._resolveSrc(e);i!==this._resolvedSrc&&(this._resolvedSrc=i,this._reset(),this.preventLoad||this._load(e))},_placeholderChanged:function(){this.$.placeholder.style.backgroundImage=this.placeholder?'url("'+this.placeholder+'")':""},_transformChanged:function(){var e=this.$.sizedImgDiv.style,t=this.$.placeholder.style;e.backgroundSize=t.backgroundSize=this.sizing,e.backgroundPosition=t.backgroundPosition=this.sizing?this.position:"",e.backgroundRepeat=t.backgroundRepeat=this.sizing?"no-repeat":""},_resolveSrc:function(e){var t=this.ownerDocument.baseURI;return new URL(Polymer.ResolveUrl.resolveUrl(e,t),t).href}})</script></dom-module><style is="custom-style">:root{--google-red-100:#f4c7c3;--google-red-300:#e67c73;--google-red-500:#db4437;--google-red-700:#c53929;--google-blue-100:#c6dafc;--google-blue-300:#7baaf7;--google-blue-500:#4285f4;--google-blue-700:#3367d6;--google-green-100:#b7e1cd;--google-green-300:#57bb8a;--google-green-500:#0f9d58;--google-green-700:#0b8043;--google-yellow-100:#fce8b2;--google-yellow-300:#f7cb4d;--google-yellow-500:#f4b400;--google-yellow-700:#f09300;--google-grey-100:#f5f5f5;--google-grey-300:#e0e0e0;--google-grey-500:#9e9e9e;--google-grey-700:#616161;--paper-red-50:#ffebee;--paper-red-100:#ffcdd2;--paper-red-200:#ef9a9a;--paper-red-300:#e57373;--paper-red-400:#ef5350;--paper-red-500:#f44336;--paper-red-600:#e53935;--paper-red-700:#d32f2f;--paper-red-800:#c62828;--paper-red-900:#b71c1c;--paper-red-a100:#ff8a80;--paper-red-a200:#ff5252;--paper-red-a400:#ff1744;--paper-red-a700:#d50000;--paper-pink-50:#fce4ec;--paper-pink-100:#f8bbd0;--paper-pink-200:#f48fb1;--paper-pink-300:#f06292;--paper-pink-400:#ec407a;--paper-pink-500:#e91e63;--paper-pink-600:#d81b60;--paper-pink-700:#c2185b;--paper-pink-800:#ad1457;--paper-pink-900:#880e4f;--paper-pink-a100:#ff80ab;--paper-pink-a200:#ff4081;--paper-pink-a400:#f50057;--paper-pink-a700:#c51162;--paper-purple-50:#f3e5f5;--paper-purple-100:#e1bee7;--paper-purple-200:#ce93d8;--paper-purple-300:#ba68c8;--paper-purple-400:#ab47bc;--paper-purple-500:#9c27b0;--paper-purple-600:#8e24aa;--paper-purple-700:#7b1fa2;--paper-purple-800:#6a1b9a;--paper-purple-900:#4a148c;--paper-purple-a100:#ea80fc;--paper-purple-a200:#e040fb;--paper-purple-a400:#d500f9;--paper-purple-a700:#aa00ff;--paper-deep-purple-50:#ede7f6;--paper-deep-purple-100:#d1c4e9;--paper-deep-purple-200:#b39ddb;--paper-deep-purple-300:#9575cd;--paper-deep-purple-400:#7e57c2;--paper-deep-purple-500:#673ab7;--paper-deep-purple-600:#5e35b1;--paper-deep-purple-700:#512da8;--paper-deep-purple-800:#4527a0;--paper-deep-purple-900:#311b92;--paper-deep-purple-a100:#b388ff;--paper-deep-purple-a200:#7c4dff;--paper-deep-purple-a400:#651fff;--paper-deep-purple-a700:#6200ea;--paper-indigo-50:#e8eaf6;--paper-indigo-100:#c5cae9;--paper-indigo-200:#9fa8da;--paper-indigo-300:#7986cb;--paper-indigo-400:#5c6bc0;--paper-indigo-500:#3f51b5;--paper-indigo-600:#3949ab;--paper-indigo-700:#303f9f;--paper-indigo-800:#283593;--paper-indigo-900:#1a237e;--paper-indigo-a100:#8c9eff;--paper-indigo-a200:#536dfe;--paper-indigo-a400:#3d5afe;--paper-indigo-a700:#304ffe;--paper-blue-50:#e3f2fd;--paper-blue-100:#bbdefb;--paper-blue-200:#90caf9;--paper-blue-300:#64b5f6;--paper-blue-400:#42a5f5;--paper-blue-500:#2196f3;--paper-blue-600:#1e88e5;--paper-blue-700:#1976d2;--paper-blue-800:#1565c0;--paper-blue-900:#0d47a1;--paper-blue-a100:#82b1ff;--paper-blue-a200:#448aff;--paper-blue-a400:#2979ff;--paper-blue-a700:#2962ff;--paper-light-blue-50:#e1f5fe;--paper-light-blue-100:#b3e5fc;--paper-light-blue-200:#81d4fa;--paper-light-blue-300:#4fc3f7;--paper-light-blue-400:#29b6f6;--paper-light-blue-500:#03a9f4;--paper-light-blue-600:#039be5;--paper-light-blue-700:#0288d1;--paper-light-blue-800:#0277bd;--paper-light-blue-900:#01579b;--paper-light-blue-a100:#80d8ff;--paper-light-blue-a200:#40c4ff;--paper-light-blue-a400:#00b0ff;--paper-light-blue-a700:#0091ea;--paper-cyan-50:#e0f7fa;--paper-cyan-100:#b2ebf2;--paper-cyan-200:#80deea;--paper-cyan-300:#4dd0e1;--paper-cyan-400:#26c6da;--paper-cyan-500:#00bcd4;--paper-cyan-600:#00acc1;--paper-cyan-700:#0097a7;--paper-cyan-800:#00838f;--paper-cyan-900:#006064;--paper-cyan-a100:#84ffff;--paper-cyan-a200:#18ffff;--paper-cyan-a400:#00e5ff;--paper-cyan-a700:#00b8d4;--paper-teal-50:#e0f2f1;--paper-teal-100:#b2dfdb;--paper-teal-200:#80cbc4;--paper-teal-300:#4db6ac;--paper-teal-400:#26a69a;--paper-teal-500:#009688;--paper-teal-600:#00897b;--paper-teal-700:#00796b;--paper-teal-800:#00695c;--paper-teal-900:#004d40;--paper-teal-a100:#a7ffeb;--paper-teal-a200:#64ffda;--paper-teal-a400:#1de9b6;--paper-teal-a700:#00bfa5;--paper-green-50:#e8f5e9;--paper-green-100:#c8e6c9;--paper-green-200:#a5d6a7;--paper-green-300:#81c784;--paper-green-400:#66bb6a;--paper-green-500:#4caf50;--paper-green-600:#43a047;--paper-green-700:#388e3c;--paper-green-800:#2e7d32;--paper-green-900:#1b5e20;--paper-green-a100:#b9f6ca;--paper-green-a200:#69f0ae;--paper-green-a400:#00e676;--paper-green-a700:#00c853;--paper-light-green-50:#f1f8e9;--paper-light-green-100:#dcedc8;--paper-light-green-200:#c5e1a5;--paper-light-green-300:#aed581;--paper-light-green-400:#9ccc65;--paper-light-green-500:#8bc34a;--paper-light-green-600:#7cb342;--paper-light-green-700:#689f38;--paper-light-green-800:#558b2f;--paper-light-green-900:#33691e;--paper-light-green-a100:#ccff90;--paper-light-green-a200:#b2ff59;--paper-light-green-a400:#76ff03;--paper-light-green-a700:#64dd17;--paper-lime-50:#f9fbe7;--paper-lime-100:#f0f4c3;--paper-lime-200:#e6ee9c;--paper-lime-300:#dce775;--paper-lime-400:#d4e157;--paper-lime-500:#cddc39;--paper-lime-600:#c0ca33;--paper-lime-700:#afb42b;--paper-lime-800:#9e9d24;--paper-lime-900:#827717;--paper-lime-a100:#f4ff81;--paper-lime-a200:#eeff41;--paper-lime-a400:#c6ff00;--paper-lime-a700:#aeea00;--paper-yellow-50:#fffde7;--paper-yellow-100:#fff9c4;--paper-yellow-200:#fff59d;--paper-yellow-300:#fff176;--paper-yellow-400:#ffee58;--paper-yellow-500:#ffeb3b;--paper-yellow-600:#fdd835;--paper-yellow-700:#fbc02d;--paper-yellow-800:#f9a825;--paper-yellow-900:#f57f17;--paper-yellow-a100:#ffff8d;--paper-yellow-a200:#ffff00;--paper-yellow-a400:#ffea00;--paper-yellow-a700:#ffd600;--paper-amber-50:#fff8e1;--paper-amber-100:#ffecb3;--paper-amber-200:#ffe082;--paper-amber-300:#ffd54f;--paper-amber-400:#ffca28;--paper-amber-500:#ffc107;--paper-amber-600:#ffb300;--paper-amber-700:#ffa000;--paper-amber-800:#ff8f00;--paper-amber-900:#ff6f00;--paper-amber-a100:#ffe57f;--paper-amber-a200:#ffd740;--paper-amber-a400:#ffc400;--paper-amber-a700:#ffab00;--paper-orange-50:#fff3e0;--paper-orange-100:#ffe0b2;--paper-orange-200:#ffcc80;--paper-orange-300:#ffb74d;--paper-orange-400:#ffa726;--paper-orange-500:#ff9800;--paper-orange-600:#fb8c00;--paper-orange-700:#f57c00;--paper-orange-800:#ef6c00;--paper-orange-900:#e65100;--paper-orange-a100:#ffd180;--paper-orange-a200:#ffab40;--paper-orange-a400:#ff9100;--paper-orange-a700:#ff6500;--paper-deep-orange-50:#fbe9e7;--paper-deep-orange-100:#ffccbc;--paper-deep-orange-200:#ffab91;--paper-deep-orange-300:#ff8a65;--paper-deep-orange-400:#ff7043;--paper-deep-orange-500:#ff5722;--paper-deep-orange-600:#f4511e;--paper-deep-orange-700:#e64a19;--paper-deep-orange-800:#d84315;--paper-deep-orange-900:#bf360c;--paper-deep-orange-a100:#ff9e80;--paper-deep-orange-a200:#ff6e40;--paper-deep-orange-a400:#ff3d00;--paper-deep-orange-a700:#dd2c00;--paper-brown-50:#efebe9;--paper-brown-100:#d7ccc8;--paper-brown-200:#bcaaa4;--paper-brown-300:#a1887f;--paper-brown-400:#8d6e63;--paper-brown-500:#795548;--paper-brown-600:#6d4c41;--paper-brown-700:#5d4037;--paper-brown-800:#4e342e;--paper-brown-900:#3e2723;--paper-grey-50:#fafafa;--paper-grey-100:#f5f5f5;--paper-grey-200:#eeeeee;--paper-grey-300:#e0e0e0;--paper-grey-400:#bdbdbd;--paper-grey-500:#9e9e9e;--paper-grey-600:#757575;--paper-grey-700:#616161;--paper-grey-800:#424242;--paper-grey-900:#212121;--paper-blue-grey-50:#eceff1;--paper-blue-grey-100:#cfd8dc;--paper-blue-grey-200:#b0bec5;--paper-blue-grey-300:#90a4ae;--paper-blue-grey-400:#78909c;--paper-blue-grey-500:#607d8b;--paper-blue-grey-600:#546e7a;--paper-blue-grey-700:#455a64;--paper-blue-grey-800:#37474f;--paper-blue-grey-900:#263238;--dark-divider-opacity:0.12;--dark-disabled-opacity:0.38;--dark-secondary-opacity:0.54;--dark-primary-opacity:0.87;--light-divider-opacity:0.12;--light-disabled-opacity:0.3;--light-secondary-opacity:0.7;--light-primary-opacity:1.0}</style><style is="custom-style">:root{--primary-text-color:var(--light-theme-text-color);--primary-background-color:var(--light-theme-background-color);--secondary-text-color:var(--light-theme-secondary-color);--disabled-text-color:var(--light-theme-disabled-color);--divider-color:var(--light-theme-divider-color);--error-color:var(--paper-deep-orange-a700);--primary-color:var(--paper-indigo-500);--light-primary-color:var(--paper-indigo-100);--dark-primary-color:var(--paper-indigo-700);--accent-color:var(--paper-pink-a200);--light-accent-color:var(--paper-pink-a100);--dark-accent-color:var(--paper-pink-a400);--light-theme-background-color:#ffffff;--light-theme-base-color:#000000;--light-theme-text-color:var(--paper-grey-900);--light-theme-secondary-color:#737373;--light-theme-disabled-color:#9b9b9b;--light-theme-divider-color:#dbdbdb;--dark-theme-background-color:var(--paper-grey-900);--dark-theme-base-color:#ffffff;--dark-theme-text-color:#ffffff;--dark-theme-secondary-color:#bcbcbc;--dark-theme-disabled-color:#646464;--dark-theme-divider-color:#3c3c3c;--text-primary-color:var(--dark-theme-text-color);--default-primary-color:var(--primary-color)}</style><dom-module id="paper-card" assetpath="../../bower_components/paper-card/"><template><style include="paper-material">:host{display:inline-block;position:relative;box-sizing:border-box;background-color:var(--paper-card-background-color,--primary-background-color);border-radius:2px;@apply(--paper-font-common-base);@apply(--paper-card)}[hidden]{display:none!important}.header{position:relative;border-top-left-radius:inherit;border-top-right-radius:inherit;overflow:hidden;@apply(--paper-card-header)}.header iron-image{display:block;width:100%;--iron-image-width:100%;pointer-events:none;@apply(--paper-card-header-image)}.header .title-text{padding:16px;font-size:24px;font-weight:400;color:var(--paper-card-header-color,#000);@apply(--paper-card-header-text)}.header .title-text.over-image{position:absolute;bottom:0;@apply(--paper-card-header-image-text)}:host ::content .card-content{padding:16px;position:relative;@apply(--paper-card-content)}:host ::content .card-actions{border-top:1px solid #e8e8e8;padding:5px 16px;position:relative;@apply(--paper-card-actions)}</style><div class="header"><iron-image hidden$="[[!image]]" aria-hidden$="[[_isHidden(image)]]" src="[[image]]" alt="[[alt]]" placeholder="[[placeholderImage]]" preload="[[preloadImage]]" fade="[[fadeImage]]"></iron-image><div hidden$="[[!heading]]" class$="title-text [[_computeHeadingClass(image)]]">[[heading]]</div></div><content></content></template><script>Polymer({is:"paper-card",properties:{heading:{type:String,value:"",observer:"_headingChanged"},image:{type:String,value:""},alt:{type:String},preloadImage:{type:Boolean,value:!1},fadeImage:{type:Boolean,value:!1},placeholderImage:{type:String,value:null},elevation:{type:Number,value:1,reflectToAttribute:!0},animatedShadow:{type:Boolean,value:!1},animated:{type:Boolean,reflectToAttribute:!0,readOnly:!0,computed:"_computeAnimated(animatedShadow)"}},_isHidden:function(e){return e?"false":"true"},_headingChanged:function(e){var t=this.getAttribute("heading"),a=this.getAttribute("aria-label");"string"==typeof a&&a!==t||this.setAttribute("aria-label",e)},_computeHeadingClass:function(e){return e?" over-image":""},_computeAnimated:function(e){return e}})</script></dom-module><script>Polymer.IronSelection=function(e){this.selection=[],this.selectCallback=e},Polymer.IronSelection.prototype={get:function(){return this.multi?this.selection.slice():this.selection[0]},clear:function(e){this.selection.slice().forEach(function(t){(!e||e.indexOf(t)<0)&&this.setItemSelected(t,!1)},this)},isSelected:function(e){return this.selection.indexOf(e)>=0},setItemSelected:function(e,t){if(null!=e&&t!==this.isSelected(e)){if(t)this.selection.push(e);else{var i=this.selection.indexOf(e);i>=0&&this.selection.splice(i,1)}this.selectCallback&&this.selectCallback(e,t)}},select:function(e){this.multi?this.toggle(e):this.get()!==e&&(this.setItemSelected(this.get(),!1),this.setItemSelected(e,!0))},toggle:function(e){this.setItemSelected(e,!this.isSelected(e))}}</script><script>Polymer.IronSelectableBehavior={properties:{attrForSelected:{type:String,value:null},selected:{type:String,notify:!0},selectedItem:{type:Object,readOnly:!0,notify:!0},activateEvent:{type:String,value:"tap",observer:"_activateEventChanged"},selectable:String,selectedClass:{type:String,value:"iron-selected"},selectedAttribute:{type:String,value:null},fallbackSelection:{type:String,value:null},items:{type:Array,readOnly:!0,notify:!0,value:function(){return[]}},_excludedLocalNames:{type:Object,value:function(){return{template:1}}}},observers:["_updateAttrForSelected(attrForSelected)","_updateSelected(selected)","_checkFallback(fallbackSelection)"],created:function(){this._bindFilterItem=this._filterItem.bind(this),this._selection=new Polymer.IronSelection(this._applySelection.bind(this))},attached:function(){this._observer=this._observeItems(this),this._updateItems(),this._shouldUpdateSelection||this._updateSelected(),this._addListener(this.activateEvent)},detached:function(){this._observer&&Polymer.dom(this).unobserveNodes(this._observer),this._removeListener(this.activateEvent)},indexOf:function(e){return this.items.indexOf(e)},select:function(e){this.selected=e},selectPrevious:function(){var e=this.items.length,t=(Number(this._valueToIndex(this.selected))-1+e)%e;this.selected=this._indexToValue(t)},selectNext:function(){var e=(Number(this._valueToIndex(this.selected))+1)%this.items.length;this.selected=this._indexToValue(e)},selectIndex:function(e){this.select(this._indexToValue(e))},forceSynchronousItemUpdate:function(){this._updateItems()},get _shouldUpdateSelection(){return null!=this.selected},_checkFallback:function(){this._shouldUpdateSelection&&this._updateSelected()},_addListener:function(e){this.listen(this,e,"_activateHandler")},_removeListener:function(e){this.unlisten(this,e,"_activateHandler")},_activateEventChanged:function(e,t){this._removeListener(t),this._addListener(e)},_updateItems:function(){var e=Polymer.dom(this).queryDistributedElements(this.selectable||"*");e=Array.prototype.filter.call(e,this._bindFilterItem),this._setItems(e)},_updateAttrForSelected:function(){this._shouldUpdateSelection&&(this.selected=this._indexToValue(this.indexOf(this.selectedItem)))},_updateSelected:function(){this._selectSelected(this.selected)},_selectSelected:function(e){this._selection.select(this._valueToItem(this.selected)),this.fallbackSelection&&this.items.length&&void 0===this._selection.get()&&(this.selected=this.fallbackSelection)},_filterItem:function(e){return!this._excludedLocalNames[e.localName]},_valueToItem:function(e){return null==e?null:this.items[this._valueToIndex(e)]},_valueToIndex:function(e){if(!this.attrForSelected)return Number(e);for(var t,i=0;t=this.items[i];i++)if(this._valueForItem(t)==e)return i},_indexToValue:function(e){if(!this.attrForSelected)return e;var t=this.items[e];return t?this._valueForItem(t):void 0},_valueForItem:function(e){var t=e[Polymer.CaseMap.dashToCamelCase(this.attrForSelected)];return void 0!=t?t:e.getAttribute(this.attrForSelected)},_applySelection:function(e,t){this.selectedClass&&this.toggleClass(this.selectedClass,t,e),this.selectedAttribute&&this.toggleAttribute(this.selectedAttribute,t,e),this._selectionChange(),this.fire("iron-"+(t?"select":"deselect"),{item:e})},_selectionChange:function(){this._setSelectedItem(this._selection.get())},_observeItems:function(e){return Polymer.dom(e).observeNodes(function(e){this._updateItems(),this._shouldUpdateSelection&&this._updateSelected(),this.fire("iron-items-changed",e,{bubbles:!1,cancelable:!1})})},_activateHandler:function(e){for(var t=e.target,i=this.items;t&&t!=this;){var s=i.indexOf(t);if(s>=0){var n=this._indexToValue(s);return void this._itemActivate(n,t)}t=t.parentNode}},_itemActivate:function(e,t){this.fire("iron-activate",{selected:e,item:t},{cancelable:!0}).defaultPrevented||this.select(e)}}</script><script>Polymer.IronMultiSelectableBehaviorImpl={properties:{multi:{type:Boolean,value:!1,observer:"multiChanged"},selectedValues:{type:Array,notify:!0},selectedItems:{type:Array,readOnly:!0,notify:!0}},observers:["_updateSelected(selectedValues.splices)"],select:function(e){this.multi?this.selectedValues?this._toggleSelected(e):this.selectedValues=[e]:this.selected=e},multiChanged:function(e){this._selection.multi=e},get _shouldUpdateSelection(){return null!=this.selected||null!=this.selectedValues&&this.selectedValues.length},_updateAttrForSelected:function(){this.multi?this._shouldUpdateSelection&&(this.selectedValues=this.selectedItems.map(function(e){return this._indexToValue(this.indexOf(e))},this).filter(function(e){return null!=e},this)):Polymer.IronSelectableBehavior._updateAttrForSelected.apply(this)},_updateSelected:function(){this.multi?this._selectMulti(this.selectedValues):this._selectSelected(this.selected)},_selectMulti:function(e){if(e){var t=this._valuesToItems(e);this._selection.clear(t);for(var l=0;l<t.length;l++)this._selection.setItemSelected(t[l],!0);if(this.fallbackSelection&&this.items.length&&!this._selection.get().length){this._valueToItem(this.fallbackSelection)&&(this.selectedValues=[this.fallbackSelection])}}else this._selection.clear()},_selectionChange:function(){var e=this._selection.get();this.multi?this._setSelectedItems(e):(this._setSelectedItems([e]),this._setSelectedItem(e))},_toggleSelected:function(e){var t=this.selectedValues.indexOf(e);t<0?this.push("selectedValues",e):this.splice("selectedValues",t,1)},_valuesToItems:function(e){return null==e?null:e.map(function(e){return this._valueToItem(e)},this)}},Polymer.IronMultiSelectableBehavior=[Polymer.IronSelectableBehavior,Polymer.IronMultiSelectableBehaviorImpl]</script><script>Polymer.IronMenuBehaviorImpl={properties:{focusedItem:{observer:"_focusedItemChanged",readOnly:!0,type:Object},attrForItemTitle:{type:String},disabled:{type:Boolean,value:!1,observer:"_disabledChanged"}},_SEARCH_RESET_TIMEOUT_MS:1e3,_previousTabIndex:0,hostAttributes:{role:"menu"},observers:["_updateMultiselectable(multi)"],listeners:{focus:"_onFocus",keydown:"_onKeydown","iron-items-changed":"_onIronItemsChanged"},keyBindings:{up:"_onUpKey",down:"_onDownKey",esc:"_onEscKey","shift+tab:keydown":"_onShiftTabDown"},attached:function(){this._resetTabindices()},select:function(e){this._defaultFocusAsync&&(this.cancelAsync(this._defaultFocusAsync),this._defaultFocusAsync=null);var t=this._valueToItem(e);t&&t.hasAttribute("disabled")||(this._setFocusedItem(t),Polymer.IronMultiSelectableBehaviorImpl.select.apply(this,arguments))},_resetTabindices:function(){var e=this.multi?this.selectedItems&&this.selectedItems[0]:this.selectedItem;this.items.forEach(function(t){t.setAttribute("tabindex",t===e?"0":"-1")},this)},_updateMultiselectable:function(e){e?this.setAttribute("aria-multiselectable","true"):this.removeAttribute("aria-multiselectable")},_focusWithKeyboardEvent:function(e){this.cancelDebouncer("_clearSearchText");var t=this._searchText||"";t+=(e.key&&1==e.key.length?e.key:String.fromCharCode(e.keyCode)).toLocaleLowerCase();for(var i,s=t.length,o=0;i=this.items[o];o++)if(!i.hasAttribute("disabled")){var n=this.attrForItemTitle||"textContent",r=(i[n]||i.getAttribute(n)||"").trim();if(!(r.length<s)&&r.slice(0,s).toLocaleLowerCase()==t){this._setFocusedItem(i);break}}this._searchText=t,this.debounce("_clearSearchText",this._clearSearchText,this._SEARCH_RESET_TIMEOUT_MS)},_clearSearchText:function(){this._searchText=""},_focusPrevious:function(){for(var e=this.items.length,t=Number(this.indexOf(this.focusedItem)),i=1;i<e+1;i++){var s=this.items[(t-i+e)%e];if(!s.hasAttribute("disabled")){var o=Polymer.dom(s).getOwnerRoot()||document;if(this._setFocusedItem(s),Polymer.dom(o).activeElement==s)return}}},_focusNext:function(){for(var e=this.items.length,t=Number(this.indexOf(this.focusedItem)),i=1;i<e+1;i++){var s=this.items[(t+i)%e];if(!s.hasAttribute("disabled")){var o=Polymer.dom(s).getOwnerRoot()||document;if(this._setFocusedItem(s),Polymer.dom(o).activeElement==s)return}}},_applySelection:function(e,t){t?e.setAttribute("aria-selected","true"):e.removeAttribute("aria-selected"),Polymer.IronSelectableBehavior._applySelection.apply(this,arguments)},_focusedItemChanged:function(e,t){t&&t.setAttribute("tabindex","-1"),!e||e.hasAttribute("disabled")||this.disabled||(e.setAttribute("tabindex","0"),e.focus())},_onIronItemsChanged:function(e){e.detail.addedNodes.length&&this._resetTabindices()},_onShiftTabDown:function(e){var t=this.getAttribute("tabindex");Polymer.IronMenuBehaviorImpl._shiftTabPressed=!0,this._setFocusedItem(null),this.setAttribute("tabindex","-1"),this.async(function(){this.setAttribute("tabindex",t),Polymer.IronMenuBehaviorImpl._shiftTabPressed=!1},1)},_onFocus:function(e){if(!Polymer.IronMenuBehaviorImpl._shiftTabPressed){var t=Polymer.dom(e).rootTarget;(t===this||void 0===t.tabIndex||this.isLightDescendant(t))&&(this._defaultFocusAsync=this.async(function(){var e=this.multi?this.selectedItems&&this.selectedItems[0]:this.selectedItem;this._setFocusedItem(null),e?this._setFocusedItem(e):this.items[0]&&this._focusNext()}))}},_onUpKey:function(e){this._focusPrevious(),e.detail.keyboardEvent.preventDefault()},_onDownKey:function(e){this._focusNext(),e.detail.keyboardEvent.preventDefault()},_onEscKey:function(e){this.focusedItem.blur()},_onKeydown:function(e){this.keyboardEventMatchesKeys(e,"up down esc")||this._focusWithKeyboardEvent(e),e.stopPropagation()},_activateHandler:function(e){Polymer.IronSelectableBehavior._activateHandler.call(this,e),e.stopPropagation()},_disabledChanged:function(e){e?(this._previousTabIndex=this.hasAttribute("tabindex")?this.tabIndex:0,this.removeAttribute("tabindex")):this.hasAttribute("tabindex")||this.setAttribute("tabindex",this._previousTabIndex)}},Polymer.IronMenuBehaviorImpl._shiftTabPressed=!1,Polymer.IronMenuBehavior=[Polymer.IronMultiSelectableBehavior,Polymer.IronA11yKeysBehavior,Polymer.IronMenuBehaviorImpl]</script><dom-module id="paper-listbox" assetpath="../../bower_components/paper-listbox/"><template><style>:host{display:block;padding:8px 0;background:var(--paper-listbox-background-color,--primary-background-color);color:var(--paper-listbox-color,--primary-text-color);@apply(--paper-listbox)}</style><content></content></template><script>!function(){Polymer({is:"paper-listbox",behaviors:[Polymer.IronMenuBehavior],hostAttributes:{role:"listbox"}})}()</script></dom-module><dom-module id="ha-progress-button" assetpath="../../src/components/buttons/"><template><style>.container{position:relative;display:inline-block}paper-button{transition:all 1s}.success paper-button{color:#fff;background-color:var(--google-green-500);transition:none}.error paper-button{color:#fff;background-color:var(--google-red-500);transition:none}paper-button[disabled]{color:#c8c8c8}.progress{@apply(--layout);@apply(--layout-center-center);position:absolute;top:0;left:0;right:0;bottom:0}</style><div class="container" id="container"><paper-button id="button" disabled="[[computeDisabled(disabled, progress)]]" on-tap="buttonTapped"><slot></slot></paper-button><template is="dom-if" if="[[progress]]"><div class="progress"><paper-spinner active=""></paper-spinner></div></template></div></template></dom-module><script>Polymer({is:"ha-progress-button",properties:{hass:{type:Object},progress:{type:Boolean,value:!1},domain:{type:String},service:{type:String},serviceData:{type:Object,value:{}},disabled:{type:Boolean,value:!1}},tempClass:function(t){var e=this.$.container.classList;e.add(t),this.async(function(){e.remove(t)},1e3)},listeners:{tap:"buttonTapped"},buttonTapped:function(t){this.progress&&t.stopPropagation()},actionSuccess:function(){this.tempClass("success")},actionError:function(){this.tempClass("error")},computeDisabled:function(t,e){return t||e}})</script><dom-module id="ha-call-service-button" assetpath="../../src/components/buttons/"><template><ha-progress-button id="progress" progress="[[progress]]" on-tap="buttonTapped"><slot></slot></ha-progress-button></template></dom-module><script>Polymer({is:"ha-call-service-button",properties:{hass:{type:Object},progress:{type:Boolean,value:!1},domain:{type:String},service:{type:String},serviceData:{type:Object,value:{}}},buttonTapped:function(){this.progress=!0;var e=this,s={domain:this.domain,service:this.service,serviceData:this.serviceData};this.hass.callService(this.domain,this.service,this.serviceData).then(function(){e.progress=!1,e.$.progress.actionSuccess(),s.success=!0},function(){e.progress=!1,e.$.progress.actionError(),s.success=!1}).then(function(){e.fire("hass-service-called",s)})}})</script><dom-module id="ozw-log" assetpath="./"><template><style include="iron-flex ha-style">.content{margin-top:24px}paper-card{display:block;margin:0 auto;max-width:600px}</style><paper-card heading="OZW Log"><div class="help-text"><pre>[[ozwLogs]]</pre></div><div class="card-actions"><paper-button raised="" on-tap="refreshLog">Refresh</paper-button></div></paper-card></template></dom-module><script>Polymer({is:"ozw-log",properties:{hass:{type:Object},ozwLogs:{type:String,value:""}},refreshLog:function(){this.ozwLogs="Loading ozw log...",this.hass.callApi("GET","zwave/ozwlog").then(function(o){this.ozwLogs=o}.bind(this))}})</script><dom-module id="zwave-network" assetpath="./"><template><style include="iron-flex ha-style">.content{margin-top:24px}paper-card{display:block;margin:0 auto;max-width:600px}.card-actions.warning ha-call-service-button{color:var(--google-red-500)}</style><paper-card heading="Z-Wave Network Management"><div class="card-content">Z-Wave Network controls.</div><div class="card-actions"><ha-call-service-button hass="[[hass]]" domain="zwave" service="add_node_secure">Add Node</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="remove_node">Remove Node</ha-call-service-button></div><div class="card-actions warning"><ha-call-service-button hass="[[hass]]" domain="zwave" service="cancel_command">Cancel Command</ha-call-service-button></div><div class="card-actions"><ha-call-service-button hass="[[hass]]" domain="zwave" service="heal_network">Heal Network</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="start_network">Start Network</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="stop_network">Stop Network</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="soft_reset">Soft Reset</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="test_network">Test Network</ha-call-service-button></div></paper-card></template></dom-module><script>Polymer({is:"zwave-network",properties:{hass:{type:Object}}})</script><dom-module id="zwave-node-information" assetpath="./"><template><style include="iron-flex ha-style">.content{margin-top:24px}.node-info{margin-left:16px;text-transform:capitalize}paper-card{display:block;margin:0 auto;max-width:600px}paper-button[toggles][active]{background:#d3d3d3}</style><div class="content"><paper-card heading="Node Information"><div class="card-actions"><paper-button toggles="" raised="" noink="" active="{{nodeInfoActive}}">Show</paper-button></div><template is="dom-if" if="{{nodeInfoActive}}"><template is="dom-repeat" items="[[selectedNodeAttrs]]" as="state"><div class="node-info"><span>[[state]]</span></div></template></template></paper-card></div></template></dom-module><script>Polymer({
+  is: 'zwave-node-information',
+
+  properties: {
+    nodes: {
+      type: Array,
+      observer: 'nodeChanged'
+    },
+
+    selectedNode: {
+      type: Number,
+      value: -1,
+      observer: 'nodeChanged'
+    },
+
+    selectedNodeAttrs: {
+      type: Array,
+    },
+
+    nodeInfoActive: {
+      type: Boolean,
+    },
+  },
+
+  nodeChanged: function (selectedNode) {
+    if (!this.nodes || selectedNode === -1) return;
+    var nodeAttrs = this.nodes[this.selectedNode].attributes;
+    var att = [];
+    Object.entries(nodeAttrs).forEach(([key, value]) => {
+      att.push(key + ': ' + value);
+    });
+    this.selectedNodeAttrs = att.sort();
+  },
+});</script><dom-module id="zwave-node-config" assetpath="./"><template><style include="iron-flex ha-style">.content{margin-top:24px}paper-card{display:block;margin:0 auto;max-width:600px}.device-picker{@apply(--layout-horizontal);@apply(--layout-center-center);padding-left:24px;padding-right:24px;padding-bottom:24px}.help-text{padding-left:24px;padding-right:24px}</style><div class="content"><paper-card heading="Node config options"><template is="dom-if" if="[[wakeupNode]]"><div class="card-actions"><paper-input float-label="Wakeup Interval" type="number" value="{{wakeupInput}}" placeholder="[[computeGetWakeupValue(selectedNode)]]"><div suffix="">seconds</div></paper-input><ha-call-service-button hass="[[hass]]" domain="zwave" service="set_wakeup" service-data="[[computeWakeupServiceData(wakeupInput)]]">Set Wakeup</ha-call-service-button></div></template><div class="device-picker"><paper-dropdown-menu label="Config parameter" class="flex"><paper-listbox class="dropdown-content" selected="{{selectedConfigParameter}}"><template is="dom-repeat" items="[[config]]" as="state"><paper-item>[[computeSelectCaptionConfigParameter(state)]]</paper-item></template></paper-listbox></paper-dropdown-menu></div><template is="dom-if" if="[[isConfigParameterSelected(selectedConfigParameter, 'List')]]"><div class="device-picker"><paper-dropdown-menu label="Config value" class="flex" placeholder="{{loadedConfigValue}}"><paper-listbox class="dropdown-content" selected="{{selectedConfigValue}}"><template is="dom-repeat" items="[[selectedConfigParameterValues]]" as="state"><paper-item>[[state]]</paper-item></template></paper-listbox></paper-dropdown-menu></div></template><template is="dom-if" if="[[isConfigParameterSelected(selectedConfigParameter, 'Byte Short Int')]]"><div class="card-actions"><paper-input label="{{selectedConfigParameterNumValues}}" type="number" value="{{selectedConfigValue}}" max="{{configParameterMax}}" min="{{configParameterMin}}"></paper-input></div></template><template is="dom-if" if="[[isConfigParameterSelected(selectedConfigParameter, 'Bool Button')]]"><div class="device-picker"><paper-dropdown-menu label="Config value" class="flex" placeholder="{{loadedConfigValue}}"><paper-listbox class="dropdown-content" selected="{{selectedConfigValue}}"><template is="dom-repeat" items="[[selectedConfigParameterValues]]" as="state"><paper-item>[[state]]</paper-item></template></paper-listbox></paper-dropdown-menu></div></template><div class="help-text"><span>[[configValueHelpText]]</span></div><template is="dom-if" if="[[isConfigParameterSelected(selectedConfigParameter, 'Bool Button Byte Short Int List')]]"><div class="card-actions"><ha-call-service-button hass="[[hass]]" domain="zwave" service="set_config_parameter" service-data="[[computeSetConfigParameterServiceData(selectedConfigValue)]]">Set Config Parameter</ha-call-service-button></div></template></paper-card></div></template></dom-module><script>Polymer({
+  is: 'zwave-node-config',
+
+  properties: {
+    hass: {
+      type: Object,
+    },
+
+    nodes: {
+      type: Array,
+      observer: 'nodesChanged'
+    },
+
+    selectedNode: {
+      type: Number,
+      value: -1,
+      observer: 'nodesChanged'
+    },
+
+    config: {
+      type: Array,
+      value: function () {
+        return [];
+      }
+    },
+
+    selectedConfigParameter: {
+      type: Number,
+      value: -1,
+      observer: 'selectedConfigParameterChanged'
+    },
+
+    configParameterMax: {
+      type: Number,
+      value: -1
+    },
+
+    configParameterMin: {
+      type: Number,
+      value: -1
+    },
+
+    configValueHelpText: {
+      type: String,
+      value: '',
+      computed: 'computeConfigValueHelp(selectedConfigParameter)'
+    },
+
+    selectedConfigParameterType: {
+      type: String,
+      value: ''
+    },
+
+    selectedConfigValue: {
+      type: Number,
+      value: -1,
+      observer: 'computeSetConfigParameterServiceData'
+    },
+
+    selectedConfigParameterValues: {
+      type: Array,
+      value: function () {
+        return [];
+      }
+    },
+
+    selectedConfigParameterNumValues: {
+      type: String,
+      value: ''
+    },
+
+    loadedConfigValue: {
+      type: Number,
+      value: -1
+    },
+
+    wakeupInput: {
+      type: Number,
+    },
+
+    wakeupNode: {
+      type: Boolean,
+      value: false,
+    },
+  },
+
+  listeners: {
+    'hass-service-called': 'serviceCalled',
+  },
+
+  serviceCalled: function (ev) {
+    if (ev.detail.success) {
+      var foo = this;
+      setTimeout(function () {
+        foo.refreshConfig(foo.selectedNode);
+      }, 5000);
+    }
+  },
+
+  nodesChanged: function () {
+    if (!this.nodes) return;
+    this.wakeupNode = (this.nodes[this.selectedNode].attributes.wake_up_interval === 0 ||
+      this.nodes[this.selectedNode].attributes.wake_up_interval);
+    if (this.wakeupNode) {
+      if (this.nodes[this.selectedNode].attributes.wake_up_interval === 0) this.wakeupInput = '';
+      else this.wakeupInput = this.nodes[this.selectedNode].attributes.wake_up_interval;
+    }
+  },
+
+  computeGetWakeupValue: function (selectedNode) {
+    if (this.selectedNode === -1 ||
+      !this.nodes[selectedNode].attributes.wake_up_interval) return 'unknown';
+    return (this.nodes[selectedNode].attributes.wake_up_interval);
+  },
+
+  computeWakeupServiceData: function (wakeupInput) {
+    return { node_id: this.nodes[this.selectedNode].attributes.node_id,
+      value: wakeupInput };
+  },
+
+  computeConfigValueHelp: function (selectedConfigParameter) {
+    if (selectedConfigParameter === -1) return '';
+    var helpText = this.config[selectedConfigParameter].value.help;
+    if (!helpText) return ['No helptext available'];
+    return helpText;
+  },
+
+  computeSetConfigParameterServiceData: function (selectedConfigValue) {
+    if (this.selectedNode === -1 || this.selectedConfigParameter === -1) return -1;
+    var valueData = null;
+    if (('Short Byte Int').includes(this.selectedConfigParameterType)) {
+      valueData = parseInt(selectedConfigValue, 10);
+    } if (('Bool Button').includes(this.selectedConfigParameterType)) {
+      valueData = this.selectedConfigParameterValues[selectedConfigValue];
+    } if (this.selectedConfigParameterType === 'List') {
+      valueData = this.selectedConfigParameterValues[selectedConfigValue];
+    }
+    return { node_id: this.nodes[this.selectedNode].attributes.node_id,
+      parameter: this.config[this.selectedConfigParameter].key,
+      value: valueData };
+  },
+
+  selectedConfigParameterChanged: function (selectedConfigParameter) {
+    if (selectedConfigParameter === -1) return;
+    this.selectedConfigValue = -1;
+    this.loadedConfigValue = -1;
+    this.selectedConfigParameterValues = [];
+    this.selectedConfigParameterType = this.config[selectedConfigParameter].value.type;
+    this.configParameterMax = this.config[selectedConfigParameter].value.max;
+    this.configParameterMin = this.config[selectedConfigParameter].value.min;
+    this.loadedConfigValue = this.config[selectedConfigParameter].value.data;
+    this.configValueHelpText = this.config[selectedConfigParameter].value.help;
+    if (('Short Byte Int').includes(this.selectedConfigParameterType)) {
+      this.selectedConfigParameterNumValues = this.config[selectedConfigParameter].value.data_items;
+      this.selectedConfigValue = this.loadedConfigValue;
+    }
+    if (('Bool Button').includes(this.selectedConfigParameterType)) {
+      this.selectedConfigParameterValues = ['True', 'False'];
+      if (this.config[selectedConfigParameter].value.data) {
+        this.loadedConfigValue = 'True';
+      } else this.loadedConfigValue = 'False';
+    }
+    if (('List').includes(this.selectedConfigParameterType)) {
+      this.selectedConfigParameterValues = this.config[selectedConfigParameter].value.data_items;
+    }
+  },
+
+  isConfigParameterSelected: function (selectedConfigParameter, type) {
+    if (selectedConfigParameter === -1) return false;
+    if (this.config[selectedConfigParameter].value.type === type) return true;
+    if (type.includes(this.config[selectedConfigParameter].value.type)) return true;
+    return false;
+  },
+
+  computeSelectCaptionConfigParameter: function (stateObj) {
+    return (stateObj.key + ': ' + stateObj.value.label);
+  },
+
+  refreshConfig: function (selectedNode) {
+    var configData = [];
+    this.hass.callApi('GET', 'zwave/config/' + this.nodes[selectedNode].attributes.node_id).then(function (config) {
+      Object.entries(config).forEach(([key, value]) => {
+        configData.push({ key, value });
+      });
+      this.config = configData;
+      this.selectedConfigParameterChanged(this.selectedConfigParameter);
+    }.bind(this));
+  },
+});</script><dom-module id="zwave-usercodes" assetpath="./"><template><style include="iron-flex ha-style">.content{margin-top:24px}paper-card{display:block;margin:0 auto;max-width:600px}.device-picker{@apply(--layout-horizontal);@apply(--layout-center-center);padding-left:24px;padding-right:24px;padding-bottom:24px}</style><div class="content"><paper-card heading="Node user codes"><div class="device-picker"><paper-dropdown-menu label="Code slot" class="flex"><paper-listbox class="dropdown-content" selected="{{selectedUserCode}}"><template is="dom-repeat" items="[[userCodes]]" as="state"><paper-item>[[computeSelectCaptionUserCodes(state)]]</paper-item></template></paper-listbox></paper-dropdown-menu></div><template is="dom-if" if="[[isUserCodeSelected(selectedUserCode)]]"><div class="card-actions"><paper-input label="User code" type="number" value="{{selectedUserCodeValue}}" maxlength="{{userCodeMaxLen}}" min="0"></paper-input></div><div class="card-actions"><ha-call-service-button hass="[[hass]]" domain="lock" service="set_usercode" service-data="[[computeUserCodeServiceData(selectedUserCodeValue, &quot;Add&quot;)]]">Set Usercode</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="lock" service="clear_usercode" service-data="[[computeUserCodeServiceData(selectedUserCode, &quot;Delete&quot;)]]">Delete Usercode</ha-call-service-button></div></template></paper-card></div></template></dom-module><script>Polymer({
+  is: 'zwave-usercodes',
+
+  properties: {
+    hass: {
+      type: Object,
+    },
+
+    nodes: {
+      type: Array,
+    },
+
+    selectedNode: {
+      type: Number,
+    },
+
+    userCodes: {
+      type: Object,
+    },
+
+    userCodeMaxLen: {
+      type: Number,
+      value: 4
+    },
+
+    selectedUserCode: {
+      type: Number,
+      value: -1,
+      observer: 'selectedUserCodeChanged'
+    },
+
+    selectedUserCodeValue: {
+      type: Number,
+      value: -1
+    },
+  },
+
+  listeners: {
+    'hass-service-called': 'serviceCalled',
+  },
+  serviceCalled: function (ev) {
+    if (ev.detail.success) {
+      var foo = this;
+      setTimeout(function () {
+        foo.refreshUserCodes(foo.selectedNode);
+      }, 5000);
+    }
+  },
+
+  isUserCodeSelected: function (selectedUserCode) {
+    if (selectedUserCode === -1) return false;
+    return true;
+  },
+
+  computeSelectCaptionUserCodes: function (stateObj) {
+    return (stateObj.key + ': ' + stateObj.value.label);
+  },
+
+  selectedUserCodeChanged: function (selectedUserCode) {
+    if (this.selectedUserCode === -1 || selectedUserCode === -1) return;
+    var value = (parseInt((this.userCodes[selectedUserCode].value.code).trim()));
+    this.userCodeMaxLen = (this.userCodes[selectedUserCode].value.length);
+    if (isNaN(value)) this.selectedUserCodeValue = '';
+    else this.selectedUserCodeValue = value;
+  },
+
+  computeUserCodeServiceData: function (selectedUserCodeValue, type) {
+    if (this.selectedNode === -1 || !selectedUserCodeValue) return -1;
+    var serviceData = null;
+    var valueData = null;
+    if (type === 'Add') {
+      valueData = selectedUserCodeValue;
+      serviceData = { node_id: this.nodes[this.selectedNode].attributes.node_id,
+        code_slot: this.selectedUserCode,
+        usercode: valueData };
+    }
+    if (type === 'Delete') {
+      serviceData = { node_id: this.nodes[this.selectedNode].attributes.node_id,
+        code_slot: this.selectedUserCode };
+    }
+    return serviceData;
+  },
+
+  refreshUserCodes: function (selectedNode) {
+    this.selectedUserCodeValue = '';
+    var userCodes = [];
+    this.hass.callApi('GET', 'zwave/usercodes/' + this.nodes[selectedNode].attributes.node_id).then(function (usercodes) {
+      Object.entries(usercodes).forEach(([key, value]) => {
+        userCodes.push({ key, value });
+      });
+      this.userCodes = userCodes;
+      this.selectedUserCodeChanged(this.selectedUserCode);
+    }.bind(this));
+  },
+});</script><dom-module id="zwave-groups" assetpath="./"><template><style include="iron-flex ha-style">.content{margin-top:24px}paper-card{display:block;margin:0 auto;max-width:600px}.device-picker{@apply(--layout-horizontal);@apply(--layout-center-center);padding-left:24px;padding-right:24px;padding-bottom:24px}.help-text{padding-left:24px;padding-right:24px}</style><div class="content"><paper-card heading="Node group associations"><div class="device-picker"><paper-dropdown-menu label="Node to control" class="flex"><paper-listbox class="dropdown-content" selected="{{selectedTargetNode}}"><template is="dom-repeat" items="[[nodes]]" as="state"><paper-item>[[computeSelectCaption(state)]]</paper-item></template></paper-listbox></paper-dropdown-menu></div><template is="dom-if" if="[[!computeIsTargetNodeSelected(selectedTargetNode)]]"><div class="device-picker"><paper-dropdown-menu label="Group" class="flex"><paper-listbox class="dropdown-content" selected="{{selectedGroup}}"><template is="dom-repeat" items="[[groups]]" as="state"><paper-item>[[computeSelectCaptionGroup(state)]]</paper-item></template></paper-listbox></paper-dropdown-menu></div></template><template is="dom-if" if="[[!computeIsGroupSelected(selectedGroup)]]"><div class="help-text"><span>Other Nodes in this group:</span><template is="dom-repeat" items="[[otherGroupNodes]]" as="state"><span>[[state]]</span></template></div><div class="help-text"><span>Max Associations:</span> <span>[[maxAssociations]]</span></div><div class="card-actions"><template is="dom-if" if="[[!noAssociationsLeft]]"><ha-call-service-button hass="[[hass]]" domain="zwave" service="change_association" service-data="[[computeAssocServiceData(selectedGroup, &quot;add&quot;)]]">Add To Group</ha-call-service-button></template><ha-call-service-button hass="[[hass]]" domain="zwave" service="change_association" service-data="[[computeAssocServiceData(selectedGroup, &quot;remove&quot;)]]">Remove From Group</ha-call-service-button></div></template></paper-card></div></template></dom-module><script>Polymer({
+  is: 'zwave-groups',
+
+  properties: {
+    hass: {
+      type: Object,
+    },
+
+    nodes: {
+      type: Array,
+    },
+
+    groups: {
+      type: Array,
+    },
+
+    selectedNode: {
+      type: Number,
+    },
+
+    selectedTargetNode: {
+      type: Number,
+      value: -1
+    },
+
+    selectedGroup: {
+      type: Number,
+      value: -1,
+      observer: 'selectedGroupChanged'
+    },
+
+    otherGroupNodes: {
+      type: Array,
+      value: -1,
+      computed: 'computeOtherGroupNodes(selectedGroup)'
+    },
+
+    maxAssociations: {
+      type: String,
+      value: '',
+      computed: 'computeMaxAssociations(selectedGroup)'
+    },
+
+    noAssociationsLeft: {
+      type: Boolean,
+      value: true,
+      computed: 'computeAssociationsLeft(selectedGroup)'
+    },
+  },
+
+  listeners: {
+    'hass-service-called': 'serviceCalled',
+  },
+
+  serviceCalled: function (ev) {
+    if (ev.detail.success) {
+      var foo = this;
+      setTimeout(function () {
+        foo.refreshGroups(foo.selectedNode);
+      }, 5000);
+    }
+  },
+
+  computeAssociationsLeft: function (selectedGroup) {
+    if (selectedGroup === -1) return true;
+    return (this.maxAssociations === this.otherGroupNodes.length);
+  },
+
+  computeMaxAssociations: function (selectedGroup) {
+    if (selectedGroup === -1) return -1;
+    var maxAssociations = this.groups[selectedGroup].value.max_associations;
+    if (!maxAssociations) return ['None'];
+    return maxAssociations;
+  },
+
+  computeOtherGroupNodes: function (selectedGroup) {
+    if (selectedGroup === -1) return -1;
+    var associations = Object.values(this.groups[selectedGroup].value.associations);
+    if (!associations.length) return ['None'];
+    return associations;
+  },
+
+  computeSelectCaption: function (stateObj) {
+    return window.hassUtil.computeStateName(stateObj) + ' (Node:' +
+      stateObj.attributes.node_id + ' ' +
+      stateObj.attributes.query_stage + ')';
+  },
+
+  computeSelectCaptionGroup: function (stateObj) {
+    return (stateObj.key + ': ' + stateObj.value.label);
+  },
+
+  computeIsTargetNodeSelected: function (selectedTargetNode) {
+    return (!this.nodes || selectedTargetNode === -1);
+  },
+
+  computeIsGroupSelected: function (selectedGroup) {
+    return (!this.nodes || this.selectedNode === -1 || selectedGroup === -1);
+  },
+
+  computeAssocServiceData: function (selectedGroup, type) {
+    if (!this.groups === -1 || selectedGroup === -1 || this.selectedNode === -1) return -1;
+    return { node_id: this.nodes[this.selectedNode].attributes.node_id,
+      association: type,
+      target_node_id: this.nodes[this.selectedTargetNode].attributes.node_id,
+      group: this.groups[selectedGroup].key };
+  },
+
+  refreshGroups: function (selectedNode) {
+    var groupData = [];
+    this.hass.callApi('GET', 'zwave/groups/' + this.nodes[selectedNode].attributes.node_id).then(function (groups) {
+      Object.entries(groups).forEach(([key, value]) => {
+        groupData.push({ key, value });
+      });
+      this.groups = groupData;
+      this.selectedGroupChanged(this.selectedGroup);
+    }.bind(this));
+  },
+
+  selectedGroupChanged: function (selectedGroup) {
+    if (this.selectedGroup === -1 || selectedGroup === -1) return;
+    this.maxAssociations = this.groups[selectedGroup].value.max_associations;
+    this.otherGroupNodes = Object.values(this.groups[selectedGroup].value.associations);
+  },
+});</script></div><dom-module id="ha-panel-zwave"><template><style include="iron-flex ha-style">.content{margin-top:24px}.node-info{margin-left:16px;text-transform:capitalize}.help-text{padding-left:24px;padding-right:24px}paper-card{display:block;margin:0 auto;max-width:600px}.device-picker{@apply(--layout-horizontal);@apply(--layout-center-center);padding-left:24px;padding-right:24px;padding-bottom:24px}</style><app-header-layout has-scrolling-region=""><app-header fixed=""><app-toolbar><ha-menu-button narrow="[[narrow]]" show-menu="[[showMenu]]"></ha-menu-button><div main-title="">Z-Wave Manager</div></app-toolbar></app-header><div class="content"><zwave-network id="zwave-network" hass="[[hass]]"></zwave-network></div><div class="content"><paper-card heading="Z-Wave Node Management"><div class="card-content">Z-Wave Node controls.</div><div class="device-picker"><paper-dropdown-menu label="Nodes" class="flex"><paper-listbox class="dropdown-content" selected="{{selectedNode}}"><template is="dom-repeat" items="[[nodes]]" as="state"><paper-item>[[computeSelectCaption(state)]]</paper-item></template></paper-listbox></paper-dropdown-menu></div><template is="dom-if" if="[[!computeIsNodeSelected(selectedNode)]]"><div class="card-actions"><ha-call-service-button hass="[[hass]]" domain="zwave" service="refresh_node" service-data="[[computeNodeServiceData(selectedNode)]]">Refresh Node</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="remove_failed_node" service-data="[[computeNodeServiceData(selectedNode)]]">Remove Failed Node</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="replace_failed_node" service-data="[[computeNodeServiceData(selectedNode)]]">Replace Failed Node</ha-call-service-button><ha-call-service-button hass="[[hass]]" domain="zwave" service="print_node" service-data="[[computeNodeServiceData(selectedNode)]]">Print Node</ha-call-service-button></div><div class="card-actions"><paper-input float-label="New node name" type="text" value="{{newNodeNameInput}}" placeholder="[[computeGetNodeName(selectedNode)]]"></paper-input><ha-call-service-button hass="[[hass]]" domain="zwave" service="rename_node" service-data="[[computeNodeNameServiceData(newNodeNameInput)]]">Rename Node</ha-call-service-button></div><div class="device-picker"><paper-dropdown-menu label="Entities of this node" class="flex"><paper-listbox class="dropdown-content" selected="{{selectedEntity}}"><template is="dom-repeat" items="[[entities]]" as="state"><paper-item>[[computeSelectCaptionEnt(state)]]</paper-item></template></paper-listbox></paper-dropdown-menu></div><template is="dom-if" if="[[!computeIsEntitySelected(selectedEntity)]]"><div class="card-actions"><ha-call-service-button hass="[[hass]]" domain="zwave" service="refresh_entity" service-data="[[computeRefreshEntityServiceData(selectedEntity)]]">Refresh Entity</ha-call-service-button></div><div class="content"><div class="card-actions"><paper-button toggles="" raised="" noink="" active="{{entityInfoActive}}">Entity Attributes</paper-button></div><template is="dom-if" if="{{entityInfoActive}}"><template is="dom-repeat" items="[[selectedEntityAttrs]]" as="state"><div class="node-info"><span>[[state]]</span></div></template></template></div></template></template></paper-card></div><template is="dom-if" if="[[!computeIsNodeSelected(selectedNode)]]"><zwave-node-information id="zwave-node-information" nodes="[[nodes]]" selected-node="[[selectedNode]]"></zwave-node-information></template><template is="dom-if" if="[[!computeIsNodeSelected(selectedNode)]]"><zwave-groups hass="[[hass]]" nodes="[[nodes]]" selected-node="[[selectedNode]]" groups="[[groups]]"></zwave-groups></template><template is="dom-if" if="[[!computeIsNodeSelected(selectedNode)]]"><zwave-node-config hass="[[hass]]" nodes="[[nodes]]" selected-node="[[selectedNode]]" config="[[config]]"></zwave-node-config></template><template is="dom-if" if="{{hasNodeUserCodes}}"><zwave-usercodes id="zwave-usercodes" hass="[[hass]]" nodes="[[nodes]]" user-codes="[[userCodes]]" selected-node="[[selectedNode]]"></zwave-usercodes></template><div class="content"><ozw-log id="ozw-log" hass="[[hass]]"></ozw-log></div></app-header-layout></template></dom-module><script>Polymer({
+  is: 'ha-panel-zwave',
+
+  properties: {
+    hass: {
+      type: Object,
+    },
+
+    narrow: {
+      type: Boolean,
+    },
+
+    showMenu: {
+      type: Boolean,
+      value: false,
+    },
+
+    nodes: {
+      type: Array,
+      computed: 'computeNodes(hass)'
+    },
+
+    selectedNode: {
+      type: Number,
+      value: -1,
+      observer: 'selectedNodeChanged'
+    },
+
+    config: {
+      type: Array,
+      value: function () {
+        return [];
+      }
+    },
+
+    entities: {
+      type: Array,
+      computed: 'computeEntities(selectedNode)',
+    },
+
+    entityInfoActive: {
+      type: Boolean,
+    },
+
+    selectedEntity: {
+      type: Number,
+      value: -1,
+      observers: ['computeIsEntitySelected',
+        'computeRefreshEntityServiceData']
+    },
+
+    selectedEntityAttrs: {
+      type: Array,
+      computed: 'computeSelectedEntityAttrs(selectedEntity)'
+    },
+
+    groups: {
+      type: Array,
+    },
+
+    newNodeNameInput: {
+      type: String,
+    },
+
+    userCodes: {
+      type: Array,
+      value: function () {
+        return [];
+      },
+    },
+
+    hasNodeUserCodes: {
+      type: Boolean,
+      value: false
+    },
+  },
+
+  computeNodes: function (hass) {
+    return Object.keys(hass.states)
+      .map(function (key) { return hass.states[key]; })
+      .filter(function (ent) {
+        return (!ent.attributes.hidden &&
+                (ent.entity_id).match('zwave[.]'));
+      })
+      .sort(function (entityA, entityB) {
+        if (entityA.entity_id < entityB.entity_id) {
+          return -1;
+        }
+        if (entityA.entity_id > entityB.entity_id) {
+          return 1;
+        }
+        return 0;
+      });
+  },
+
+  computeEntities: function (selectedNode) {
+    if (!this.nodes || selectedNode === -1) return -1;
+    var hass = this.hass;
+    var nodeid = this.nodes[this.selectedNode].attributes.node_id;
+    return Object.keys(hass.states)
+      .map(function (key) { return hass.states[key]; })
+      .filter(function (ent) {
+        if (ent.attributes.node_id === undefined) {
+          return false;
+        }
+        return (!ent.attributes.hidden &&
+                'node_id' in ent.attributes &&
+                ent.attributes.node_id === nodeid &&
+                (!(ent.entity_id).match('zwave[.]')));
+      })
+      .sort(function (entityA, entityB) {
+        if (entityA.entity_id < entityB.entity_id) {
+          return -1;
+        }
+        if (entityA.entity_id > entityB.entity_id) {
+          return 1;
+        }
+        return 0;
+      });
+  },
+
+  selectedNodeChanged: function (selectedNode) {
+    if (selectedNode === -1) return;
+    this.selectedConfigParameter = -1;
+    this.selectedConfigParameterValue = -1;
+    this.selectedGroup = -1;
+    var configData = [];
+    this.hass.callApi('GET', 'zwave/config/' + this.nodes[selectedNode].attributes.node_id).then(function (configs) {
+      Object.entries(configs).forEach(([key, value]) => {
+        configData.push({ key, value });
+      });
+      this.config = configData;
+    }.bind(this));
+    var groupData = [];
+    this.hass.callApi('GET', 'zwave/groups/' + this.nodes[selectedNode].attributes.node_id).then(function (groups) {
+      Object.entries(groups).forEach(([key, value]) => {
+        groupData.push({ key, value });
+      });
+      this.groups = groupData;
+    }.bind(this));
+    var userCodes = [];
+    this.hasNodeUserCodes = false;
+    this.notifyPath('hasNodeUserCodes');
+    this.hass.callApi('GET', 'zwave/usercodes/' + this.nodes[selectedNode].attributes.node_id).then(function (usercodes) {
+      Object.entries(usercodes).forEach(([key, value]) => {
+        userCodes.push({ key, value });
+      });
+      this.userCodes = userCodes;
+      if (Object.keys(userCodes).length === 0) {
+        this.hasNodeUserCodes = false;
+      } else {
+        this.hasNodeUserCodes = true;
+      }
+      this.notifyPath('hasNodeUserCodes');
+    }.bind(this));
+  },
+
+  computeSelectedEntityAttrs: function (selectedEntity) {
+    if (selectedEntity === -1) return 'No entity selected';
+    var entityAttrs = this.entities[selectedEntity].attributes;
+    var att = [];
+    Object.entries(entityAttrs).forEach(([key, value]) => {
+      att.push(key + ': ' + value);
+    });
+    return att.sort();
+  },
+
+  computeSelectCaption: function (stateObj) {
+    return window.hassUtil.computeStateName(stateObj) + ' (Node:' +
+      stateObj.attributes.node_id + ' ' +
+      stateObj.attributes.query_stage + ')';
+  },
+
+  computeSelectCaptionEnt: function (stateObj) {
+    return (window.hassUtil.computeDomain(stateObj) + '.'
+            + window.hassUtil.computeStateName(stateObj));
+  },
+
+  computeIsNodeSelected: function () {
+    return (!this.nodes || this.selectedNode === -1);
+  },
+
+  computeIsEntitySelected: function (selectedEntity) {
+    return (selectedEntity === -1);
+  },
+
+  computeNodeServiceData: function (selectedNode) {
+    return { node_id: this.nodes[selectedNode].attributes.node_id };
+  },
+
+  computeGetNodeName: function (selectedNode) {
+    if (this.selectedNode === -1 ||
+      !this.nodes[selectedNode].entity_id) return -1;
+    var str = (this.nodes[selectedNode].entity_id);
+    var name = str.replace('zwave.', '');
+    return name;
+  },
+
+  computeNodeNameServiceData: function (newNodeNameInput) {
+    return { node_id: this.nodes[this.selectedNode].attributes.node_id,
+      name: newNodeNameInput };
+  },
+
+  computeRefreshEntityServiceData: function (selectedEntity) {
+    if (selectedEntity === -1) return -1;
+    return { entity_id: this.entities[selectedEntity].entity_id };
+  },
+});</script></body></html>
\ No newline at end of file
diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html.gz
index fec3a4f832bf9f5816f13564203a6ced55ac4e5e..86b8d15fd5d715f1bab8e0b4dcf6fcfed41408f4 100644
GIT binary patch
literal 12987
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

literal 6135
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
J;dTdI001U%0Sy2E