From e9fecb817d4eecf80de775e5aeaa729d5dba73af Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 5 Feb 2020 09:55:24 +0100 Subject: [PATCH] Update frontend (#1475) --- .../panel/chunk.00de7352e51443687ebb.js.gz | Bin 6460 -> 0 bytes .../api/panel/chunk.0ab510fdc29f68beec88.js | 2 -- .../panel/chunk.0ab510fdc29f68beec88.js.gz | Bin 31210 -> 0 bytes .../panel/chunk.0ab510fdc29f68beec88.js.map | 1 - .../panel/chunk.0c4f6887f9b7e7b11ef5.js.gz | Bin 7239 -> 0 bytes .../panel/chunk.170381dce1aef5f33cec.js.gz | Bin 6565 -> 0 bytes ...33cec.js => chunk.429840c83fad61bc51a8.js} | 6 ++-- ... => chunk.429840c83fad61bc51a8.js.LICENSE} | 0 .../panel/chunk.429840c83fad61bc51a8.js.gz | Bin 0 -> 6571 bytes ....map => chunk.429840c83fad61bc51a8.js.map} | 2 +- ...c9c14.js => chunk.43e40fd69686ad51301d.js} | 4 +-- .../panel/chunk.43e40fd69686ad51301d.js.gz | Bin 0 -> 18372 bytes ....map => chunk.43e40fd69686ad51301d.js.map} | 2 +- ...87ebb.js => chunk.715824f4764bdbe425b1.js} | 6 ++-- ... => chunk.715824f4764bdbe425b1.js.LICENSE} | 0 .../panel/chunk.715824f4764bdbe425b1.js.gz | Bin 0 -> 6454 bytes ....map => chunk.715824f4764bdbe425b1.js.map} | 2 +- .../panel/chunk.8b198fe00454712c9c14.js.gz | Bin 18369 -> 0 bytes ...11ef5.js => chunk.9d371c8143226d4eaaee.js} | 6 ++-- ... => chunk.9d371c8143226d4eaaee.js.LICENSE} | 0 .../panel/chunk.9d371c8143226d4eaaee.js.gz | Bin 0 -> 7237 bytes ....map => chunk.9d371c8143226d4eaaee.js.map} | 2 +- .../api/panel/chunk.c1c599e0ec49ba4de253.js | 2 ++ .../panel/chunk.c1c599e0ec49ba4de253.js.gz | Bin 0 -> 31047 bytes .../panel/chunk.c1c599e0ec49ba4de253.js.map | 1 + hassio/api/panel/entrypoint.js | 2 +- hassio/api/panel/entrypoint.js.gz | Bin 1532 -> 1535 bytes hassio/api/panel/entrypoint.js.map | 2 +- hassio/api/panel/manifest.json | 26 +++++++++--------- home-assistant-polymer | 2 +- 30 files changed, 34 insertions(+), 34 deletions(-) delete mode 100644 hassio/api/panel/chunk.00de7352e51443687ebb.js.gz delete mode 100644 hassio/api/panel/chunk.0ab510fdc29f68beec88.js delete mode 100644 hassio/api/panel/chunk.0ab510fdc29f68beec88.js.gz delete mode 100644 hassio/api/panel/chunk.0ab510fdc29f68beec88.js.map delete mode 100644 hassio/api/panel/chunk.0c4f6887f9b7e7b11ef5.js.gz delete mode 100644 hassio/api/panel/chunk.170381dce1aef5f33cec.js.gz rename hassio/api/panel/{chunk.170381dce1aef5f33cec.js => chunk.429840c83fad61bc51a8.js} (99%) rename hassio/api/panel/{chunk.00de7352e51443687ebb.js.LICENSE => chunk.429840c83fad61bc51a8.js.LICENSE} (100%) create mode 100644 hassio/api/panel/chunk.429840c83fad61bc51a8.js.gz rename hassio/api/panel/{chunk.170381dce1aef5f33cec.js.map => chunk.429840c83fad61bc51a8.js.map} (99%) rename hassio/api/panel/{chunk.8b198fe00454712c9c14.js => chunk.43e40fd69686ad51301d.js} (99%) create mode 100644 hassio/api/panel/chunk.43e40fd69686ad51301d.js.gz rename hassio/api/panel/{chunk.8b198fe00454712c9c14.js.map => chunk.43e40fd69686ad51301d.js.map} (99%) rename hassio/api/panel/{chunk.00de7352e51443687ebb.js => chunk.715824f4764bdbe425b1.js} (99%) rename hassio/api/panel/{chunk.0c4f6887f9b7e7b11ef5.js.LICENSE => chunk.715824f4764bdbe425b1.js.LICENSE} (100%) create mode 100644 hassio/api/panel/chunk.715824f4764bdbe425b1.js.gz rename hassio/api/panel/{chunk.00de7352e51443687ebb.js.map => chunk.715824f4764bdbe425b1.js.map} (99%) delete mode 100644 hassio/api/panel/chunk.8b198fe00454712c9c14.js.gz rename hassio/api/panel/{chunk.0c4f6887f9b7e7b11ef5.js => chunk.9d371c8143226d4eaaee.js} (99%) rename hassio/api/panel/{chunk.170381dce1aef5f33cec.js.LICENSE => chunk.9d371c8143226d4eaaee.js.LICENSE} (100%) create mode 100644 hassio/api/panel/chunk.9d371c8143226d4eaaee.js.gz rename hassio/api/panel/{chunk.0c4f6887f9b7e7b11ef5.js.map => chunk.9d371c8143226d4eaaee.js.map} (99%) create mode 100644 hassio/api/panel/chunk.c1c599e0ec49ba4de253.js create mode 100644 hassio/api/panel/chunk.c1c599e0ec49ba4de253.js.gz create mode 100644 hassio/api/panel/chunk.c1c599e0ec49ba4de253.js.map diff --git a/hassio/api/panel/chunk.00de7352e51443687ebb.js.gz b/hassio/api/panel/chunk.00de7352e51443687ebb.js.gz deleted file mode 100644 index 873c5c2aa00d4d5da8825db454c2ed0efe771079..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6460 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\n \n \n \n
\n ']);return s=function(){return e},e}function c(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function l(e){return(l=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function d(e,t){return(d=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function f(e){var t,r=v(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function p(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function h(e){return e.decorators&&e.decorators.length}function m(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function y(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function v(e){var t=function(e,t){if("object"!==o(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===o(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!h(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n "]);return s=function(){return e},e}function c(){var e=u(["\n \n "]);return c=function(){return e},e}function l(){var e=u(["\n \n ",'\n \n
\n \n
\n ']);return l=function(){return e},e}function u(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function d(e){return(d=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function f(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function p(e,t){return(p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function h(e){var t,r=g(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function m(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function y(e){return e.decorators&&e.decorators.length}function v(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function b(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function g(e){var t=function(e,t){if("object"!==o(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===o(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!y(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n .container {\n position: relative;\n display: inline-block;\n }\n\n mwc-button {\n transition: all 1s;\n }\n\n .success mwc-button {\n --mdc-theme-primary: white;\n background-color: var(--google-green-500);\n transition: none;\n }\n\n .error mwc-button {\n --mdc-theme-primary: white;\n background-color: var(--google-red-500);\n transition: none;\n }\n\n .progress {\n @apply --layout;\n @apply --layout-center-center;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n \n
\n \n \n \n \n
\n ']);return a=function(){return e},e}function s(e,t){for(var r=0;r\n \n"),document.head.appendChild(o.content)},2:function(e,t,r){"use strict";r.r(t);var n=r(5),i=(r(24),r(129),r(126),r(10)),o=document.createElement("template");o.setAttribute("style","display: none;"),o.innerHTML='\n \n\n \n\n \n\n \n"),document.head.appendChild(o.content);var a=function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e._themes||(e._themes={});var i=t.default_theme;("default"===r||r&&t.themes[r])&&(i=r);var o=Object.assign({},e._themes);if("default"!==i){var a=t.themes[i];Object.keys(a).forEach(function(t){var r="--".concat(t);if(e._themes[r]="",o[r]=a[t],!t.startsWith("rgb")){var n="rgb-".concat(t);if(void 0===a[n]){var i="--".concat(n);e._themes[i]="";var s,c,l,u=(s=a[t],c=s.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(e,t,r,n){return t+t+r+r+n+n}),(l=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(c))?"".concat(parseInt(l[1],16),", ").concat(parseInt(l[2],16),", ").concat(parseInt(l[3],16)):null);null!==u&&(o[i]=u)}}})}if(e.updateStyles?e.updateStyles(o):window.ShadyCSS&&window.ShadyCSS.styleSubtree(e,o),n){var s=document.querySelector("meta[name=theme-color]");if(s){s.hasAttribute("default-content")||s.setAttribute("default-content",s.getAttribute("content"));var c=o["--primary-color"]||s.getAttribute("default-content");s.setAttribute("content",c)}}},s=r(11);r(18),r(104);function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(){var e=d(["\n .content {\n height: calc(100% - 64px);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n }\n "]);return l=function(){return e},e}function u(){var e=d(['\n \n
\n

',"

\n \n go back\n \n
\n
\n "]);return u=function(){return e},e}function d(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function p(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function h(e,t){return(h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function m(e){var t,r=w(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function y(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function v(e){return e.decorators&&e.decorators.length}function b(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function g(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function w(e){var t=function(e,t){if("object"!==c(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===c(t)?t:String(t)}(function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!v(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n \n
\n You don\'t have any add-ons installed yet. Head over to\n \n

Add-ons

\n
\n ',"\n
\n
\n "]);return ee=function(){return e},e}function te(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function re(e,t){return pe(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var r=[],n=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(c){i=!0,o=c}finally{try{n||null==s.return||s.return()}finally{if(i)throw o}}return r}(e,t)||fe()}function ne(e){return(ne=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function ie(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function oe(e,t){return(oe=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function ae(e){var t,r=de(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function se(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function ce(e){return e.decorators&&e.decorators.length}function le(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function ue(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function de(e){var t=function(e,t){if("object"!==K(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==K(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===K(t)?t:String(t)}function fe(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function pe(e){if(Array.isArray(e))return e}(function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!ce(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a0||"0"===r&&Number(i)>=105;return Object(n.e)(ee(),this.addons?this.addons.sort(function(e,t){return e.name>t.name?1:-1}).map(function(t){return Object(n.e)(X(),t,e._addonTapped,e.hass,t.name,t.description,t.installed!==t.version,t.installed!==t.version?"hassio:arrow-up-bold-circle":"hassio:puzzle","started"!==t.state?"Add-on is stopped":t.installed!==t.version?"New version available":"Add-on is running",t.installed&&t.installed!==t.version?"started"===t.state?"update":"update stopped":t.installed&&"started"===t.state?"running":"stopped",o&&t.icon?"/api/hassio/addons/".concat(t.slug,"/icon"):void 0)}):Object(n.e)(Z(),this._openStore))}},{kind:"get",static:!0,key:"styles",value:function(){return[i.a,$.a,Object(n.c)(Q())]}},{kind:"method",key:"_addonTapped",value:function(e){Object(k.a)(this,"/hassio/addon/".concat(e.currentTarget.addon.slug))}},{kind:"method",key:"_openStore",value:function(){Object(k.a)(this,"/hassio/store")}}]}},n.a),r(22),r(50);function he(){var e=Ee(["\n .icon {\n --iron-icon-height: 48px;\n --iron-icon-width: 48px;\n float: right;\n margin: 0 0 2px 10px;\n }\n .update-heading {\n font-size: var(--paper-font-subhead_-_font-size);\n font-weight: 500;\n margin-bottom: 0.5em;\n }\n .warning {\n color: var(--secondary-text-color);\n }\n .card-content {\n height: calc(100% - 47px);\n box-sizing: border-box;\n }\n .card-actions {\n text-align: right;\n }\n .errors {\n color: var(--google-red-500);\n padding: 16px;\n }\n a {\n text-decoration: none;\n }\n "]);return he=function(){return e},e}function me(e){return(me="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ye(){var e=Ee(['\n
\n \n
\n ']);return ye=function(){return e},e}function ve(){var e=Ee(['\n \n
\n ','\n
'," ",'
\n
\n You are currently running version ','\n
\n
\n
\n "]);return ge=function(){return e},e}function we(){var e=Ee(['\n
\n ',"\n

\n ",'\n

\n
\n ',"\n ","\n ","\n
\n
\n "]);return we=function(){return e},e}function ke(){var e=Ee([""]);return ke=function(){return e},e}function Ee(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Oe(e){return(Oe=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function je(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Pe(e,t){return(Pe=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function xe(e){var t,r=Te(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function _e(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function Se(e){return e.decorators&&e.decorators.length}function Ce(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function De(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Te(e){var t=function(e,t){if("object"!==me(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==me(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===me(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!Se(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a1?"Updates Available 🎉":"Update Available 🎉",this._renderUpdateCard("Home Assistant Core",this.hassInfo.version,this.hassInfo.last_version,"hassio/homeassistant/update","https://".concat(this.hassInfo.last_version.includes("b")?"rc":"www",".home-assistant.io/latest-release-notes/"),"hassio:home-assistant"),this._renderUpdateCard("Supervisor",this.supervisorInfo.version,this.supervisorInfo.last_version,"hassio/supervisor/update","https://github.com//home-assistant/hassio/releases/tag/".concat(this.supervisorInfo.last_version)),this.hassOsInfo?this._renderUpdateCard("Operating System",this.hassOsInfo.version,this.hassOsInfo.version_latest,"hassio/hassos/update","https://github.com//home-assistant/hassos/releases/tag/".concat(this.hassOsInfo.version_latest)):""):Object(n.e)(ke())}},{kind:"method",key:"_renderUpdateCard",value:function(e,t,r,i,o,a){return r===t?Object(n.e)(be()):Object(n.e)(ve(),a?Object(n.e)(ye(),a):"",e,r,t,o,this.hass,i,this._apiCalled)}},{kind:"method",key:"_apiCalled",value:function(e){if(e.detail.success)this._error="";else{var t=e.detail.response;"object"===me(t.body)?this._error=t.body.message||"Unknown error":this._error=t.body}}},{kind:"get",static:!0,key:"styles",value:function(){return[i.a,$.a,Object(n.c)(he())]}}]}},n.a);function Ae(e){return(Ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ze(){var e=Ie(["\n .content {\n margin: 0 auto;\n }\n "]);return ze=function(){return e},e}function Re(){var e=Ie(['\n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n
\n \n
\n \n ']);return Ye=function(){return e},e}function $e(){var e=rt(['\n \n
\n You don\'t have any snapshots yet.\n
\n
\n ']);return $e=function(){return e},e}function Ke(){var e=rt(['\n

',"

\n "]);return Ke=function(){return e},e}function Qe(){var e=rt(['\n \n

\n Create snapshot\n

\n

\n Snapshots allow you to easily backup and restore all data of your Home\n Assistant instance.\n

\n
\n \n
\n \n Type:\n \n \n Full snapshot\n \n \n Partial snapshot\n \n \n ','\n Security:\n \n
\n \n Create\n \n
\n \n
\n\n

Available snapshots

\n
\n ',"\n
\n
\n "]);return tt=function(){return e},e}function rt(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function nt(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function it(e,t){return(it=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function ot(e){var t,r=ut(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function at(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function st(e){return e.decorators&&e.decorators.length}function ct(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function lt(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function ut(e){var t=function(e,t){if("object"!==We(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==We(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===We(t)?t:String(t)}function dt(e,t,r){return(dt="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=ft(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function ft(e){return(ft=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!st(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n \n

\n ','\n

\n

\n Maintained by ','
\n ','\n

\n
\n ',"\n
\n
\n "]);return bt=function(){return e},e}function gt(){var e=wt(['\n
\n

\n No results found in "','"\n

\n
\n ']);return gt=function(){return e},e}function wt(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function kt(e){return(kt=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function Et(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Ot(e,t){return(Ot=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function jt(e){var t,r=Ct(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function Pt(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function xt(e){return e.decorators&&e.decorators.length}function _t(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function St(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Ct(e){var t=function(e,t){if("object"!==ht(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==ht(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ht(t)?t:String(t)}function Dt(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function Tt(e){if(Array.isArray(e))return e}var At=function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!xt(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a0||"0"===t&&Number(r)>=105}},{kind:"get",static:!0,key:"styles",value:function(){return[$.a,Object(n.c)(mt())]}}]}},n.a);customElements.define("hassio-addon-repository",At);var zt=r(135);function Rt(e){return(Rt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function It(){var e=Nt(["\n .add {\n padding: 12px 16px;\n }\n iron-icon {\n color: var(--secondary-text-color);\n margin-right: 16px;\n display: inline-block;\n }\n paper-input {\n width: calc(100% - 49px);\n display: inline-block;\n margin-top: -4px;\n }\n "]);return It=function(){return e},e}function Ft(){var e=Nt(['\n \n
\n \n
\n
\n \n Remove\n \n
\n
\n ']);return Ft=function(){return e},e}function Lt(){var e=Nt(['\n
\n

\n Repositories\n

\n

\n Configure which add-on repositories to fetch data from:\n

\n
\n ','\n\n \n
\n \n \n
\n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n "]);return Xt=function(){return e},e}function Zt(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function er(e){return(er=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function tr(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function rr(e,t){return(rr=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function nr(e){var t,r=cr(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function ir(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function or(e){return e.decorators&&e.decorators.length}function ar(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function sr(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function cr(e){var t=function(e,t){if("object"!==Kt(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Kt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Kt(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!or(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n ']);return dr=function(){return e},e}function fr(){var e=pr(['\n
\n \n \n ',"\n \n
\n "]);return fr=function(){return e},e}function pr(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function hr(e){return(hr=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function mr(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function yr(e,t){return(yr=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function vr(e){var t,r=Er(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function br(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function gr(e){return e.decorators&&e.decorators.length}function wr(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function kr(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Er(e){var t=function(e,t){if("object"!==lr(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==lr(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===lr(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!gr(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n "]);return Pr=function(){return e},e}function xr(){var e=Sr(["\n \n\n \n\n ","\n "]);return xr=function(){return e},e}function _r(){var e=Sr(["\n \n "]);return _r=function(){return e},e}function Sr(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Cr(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Dr(e,t){return(Dr=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function Tr(e){var t,r=Fr(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function Ar(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function zr(e){return e.decorators&&e.decorators.length}function Rr(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function Ir(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Fr(e){var t=function(e,t){if("object"!==Or(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Or(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Or(t)?t:String(t)}function Lr(e,t,r){return(Lr="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Nr(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function Nr(e){return(Nr=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Hr=function(e,t){return"local"===e.slug?-1:"local"===t.slug?1:"core"===e.slug?-1:"core"===t.slug?1:e.name.toUpperCase()=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;aUpdate
\n ']);return qr=function(){return e},e}function Wr(){var e=Zr(['\n Import from USB\n ']);return Wr=function(){return e},e}function Jr(){var e=Zr(['\n Shutdown\n ']);return Jr=function(){return e},e}function Yr(){var e=Zr(['\n Reboot\n ']);return Yr=function(){return e},e}function $r(){var e=Zr(['\n
Error: ',"
\n "]);return $r=function(){return e},e}function Kr(){var e=Zr(["\n \n Change hostname\n \n ']);return Kr=function(){return e},e}function Qr(){var e=Zr(["\n \n Deployment\n ","\n \n "]);return Qr=function(){return e},e}function Xr(){var e=Zr(['\n \n
\n

Host system

\n \n \n \n \n \n \n \n \n \n \n ","\n \n
Hostname',"
System","
\n \n Hardware\n \n ',"\n ",'\n
\n
\n ',"\n ","\n ","\n ","\n
\n
\n "]);return Xr=function(){return e},e}function Zr(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function en(e){return(en=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function tn(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function rn(e,t){return(rn=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function nn(e){var t,r=ln(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function on(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function an(e){return e.decorators&&e.decorators.length}function sn(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function cn(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function ln(e){var t=function(e,t){if("object"!==Gr(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Gr(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Gr(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!an(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a1&&void 0!==arguments[1]?arguments[1]:"",n="";return Object.keys(e).forEach(function(i){"object"!==Gr(e[i])?n+="".concat(r,"- ").concat(i,": ").concat(e[i],"\n"):(n+="".concat(r,"- ").concat(i,":\n"),Array.isArray(e[i])?e[i].length&&(n+="".concat(r," - ")+e[i].join("\n".concat(r," - "))+"\n"):n+=t._objectToMarkdown(e[i]," ".concat(r)))}),n}},{kind:"method",key:"_changeHostnameClicked",value:function(){var e=this.hostInfo.hostname,t=prompt("Please enter a new hostname:",e);t&&t!==e&&this.hass.callApi("POST","hassio/host/options",{hostname:t})}}]}},n.a);function un(e){return(un="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function dn(){var e=bn(["\n paper-card {\n height: 100%;\n width: 100%;\n }\n .card-content {\n color: var(--primary-text-color);\n box-sizing: border-box;\n height: calc(100% - 47px);\n }\n .info {\n width: 100%;\n }\n .info td:nth-child(2) {\n text-align: right;\n }\n .errors {\n color: var(--google-red-500);\n margin-top: 16px;\n }\n "]);return dn=function(){return e},e}function fn(){var e=bn(["\n Join beta channel\n ']);return fn=function(){return e},e}function pn(){var e=bn(["\n Update\n ']);return hn=function(){return e},e}function mn(){var e=bn(['\n
Error: ',"
\n "]);return mn=function(){return e},e}function yn(){var e=bn(["\n \n Channel\n ","\n \n "]);return yn=function(){return e},e}function vn(){var e=bn(['\n \n
\n

Supervisor

\n \n \n \n \n \n \n \n \n \n \n ","\n \n
Version',"
Latest version","
\n ",'\n
\n
\n Reload\n ',"\n ","\n ","\n
\n
\n "]);return vn=function(){return e},e}function bn(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function gn(e){return(gn=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function wn(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function kn(e,t){return(kn=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function En(e){var t,r=_n(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function On(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function jn(e){return e.decorators&&e.decorators.length}function Pn(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function xn(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function _n(e){var t=function(e,t){if("object"!==un(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==un(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===un(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!jn(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a',"
\n "]);return Tn=function(){return e},e}function An(){var e=zn(["\n \n ",'\n
\n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n

Information

\n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n \n \n \n \n Dashboard\n Snapshots\n Add-on store\n System\n \n \n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a200?n.scrollTop=0:t._currentAnimationId===i&&(n.scrollTop=(r=c,-s*(r/=200)*(r-2)+a),requestAnimationFrame(e.bind(t)))}.call(t)}},{kind:"method",key:"refreshClicked",value:function(){"snapshots"===this._page?this.shadowRoot.querySelector("hassio-snapshots").refreshData():this.shadowRoot.querySelector("hassio-addon-store").refreshData()}},{kind:"get",key:"_page",value:function(){return this.route.path.substr(1)}},{kind:"get",static:!0,key:"styles",value:function(){return[i.a,Object(n.c)(hi())]}}]}},n.a),r(119));function Ci(e){return(Ci="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Di(e,t){return Ui(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var r=[],n=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(c){i=!0,o=c}finally{try{n||null==s.return||s.return()}finally{if(i)throw o}}return r}(e,t)||Hi()}function Ti(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Ai(e,t){return(Ai=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function zi(e){var t,r=Ni(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function Ri(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function Ii(e){return e.decorators&&e.decorators.length}function Fi(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function Li(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Ni(e){var t=function(e,t){if("object"!==Ci(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Ci(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Ci(t)?t:String(t)}function Hi(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function Ui(e){if(Array.isArray(e))return e}function Bi(e,t,r){return(Bi="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Mi(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function Mi(e){return(Mi=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}customElements.get("paper-icon-button").prototype._keyBindings={};var Gi;!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!Ii(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a2&&void 0!==arguments[2]&&arguments[2];r?history.replaceState(null,"",t):history.pushState(null,"",t),Object(n.a)(window,"location-changed",{replace:r})}},41:function(e,t,r){"use strict";var n=r(5),i=(r(22),r(8)),o=r(34),a=[60,60,24,7],s=["second","minute","hour","day"];var c=r(17);function l(e){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u(e,t){for(var r=0;r2&&void 0!==arguments[2]?arguments[2]:{},i=((n.compareTime||new Date).getTime()-e.getTime())/1e3,o=i>=0?"past":"future";i=Math.abs(i);for(var c=0;c\n \n
\n
\n ']);return _=function(){return e},e}function S(){var e=D(['\n
\n ']);return S=function(){return e},e}function C(){var e=D(["\n ","\n ",'\n
\n
\n ','\n
\n
\n ',"\n ","\n ","\n
\n
\n "]);return C=function(){return e},e}function D(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function T(e){return(T=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function A(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function z(e,t){return(z=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function R(e){var t,r=H(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function I(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function F(e){return e.decorators&&e.decorators.length}function L(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function N(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function H(e){var t=function(e,t){if("object"!==O(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==O(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===O(t)?t:String(t)}customElements.define("ha-relative-time",E);!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!F(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n ']);return a=function(){return e},e}function s(e,t){return!t||"object"!==o(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function l(e,t){for(var r=0;r
\n ']);return u=function(){return e},e}function d(){var e=f(["\n \n ","\n "]);return d=function(){return e},e}function f(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function p(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function h(e,t){return(h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function m(e){var t,r=w(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function y(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function v(e){return e.decorators&&e.decorators.length}function b(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function g(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function w(e){var t=function(e,t){if("object"!==c(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===c(t)?t:String(t)}function k(e,t,r){return(k="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=E(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function E(e){return(E=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!v(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a0},Object(o.a)("_ntf",a,s,e,t))}},{kind:"method",key:"_toggleMenu",value:function(){Object(i.a)(this,"hass-toggle-menu")}},{kind:"get",static:!0,key:"styles",value:function(){return Object(n.c)(l())}}]}},n.a)}}]); -//# sourceMappingURL=chunk.0ab510fdc29f68beec88.js.map \ No newline at end of file diff --git a/hassio/api/panel/chunk.0ab510fdc29f68beec88.js.gz b/hassio/api/panel/chunk.0ab510fdc29f68beec88.js.gz deleted file mode 100644 index a8d38a8de305cecad712b30c0468e64d6a979273..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31210 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

6ZFLN2!WBGK%IM$#{8X~ylNq)~Fi=-j?N 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 jbXp}DKjX*T=oB!X=\n \n\n

${this.header}
\n \n
\n
\n `;\n }\n\n private _backTapped(): void {\n history.back();\n }\n\n static get styles(): CSSResult {\n return css`\n :host {\n display: block;\n height: 100%;\n background-color: var(--primary-background-color);\n }\n\n .toolbar {\n display: flex;\n align-items: center;\n font-size: 20px;\n height: 65px;\n padding: 0 16px;\n pointer-events: none;\n background-color: var(--app-header-background-color);\n font-weight: 400;\n color: var(--app-header-text-color, white);\n border-bottom: var(--app-header-border-bottom, none);\n box-sizing: border-box;\n }\n\n ha-menu-button,\n ha-paper-icon-button-arrow-prev,\n ::slotted([slot=\"toolbar-icon\"]) {\n pointer-events: auto;\n }\n\n ha-paper-icon-button-arrow-prev.hidden {\n visibility: hidden;\n }\n\n [main-title] {\n margin: 0 0 0 24px;\n line-height: 20px;\n flex-grow: 1;\n }\n\n .content {\n position: relative;\n width: 100%;\n height: calc(100% - 65px);\n overflow-y: auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n }\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hass-subpage\": HassSubpage;\n }\n}\n","import \"@polymer/paper-icon-button/paper-icon-button\";\nimport { Constructor } from \"../types\";\n// Not duplicate, this is for typing.\n// tslint:disable-next-line\nimport { PaperIconButtonElement } from \"@polymer/paper-icon-button/paper-icon-button\";\n\nconst paperIconButtonClass = customElements.get(\n \"paper-icon-button\"\n) as Constructor;\n\nexport class HaPaperIconButtonArrowPrev extends paperIconButtonClass {\n public hassio?: boolean;\n\n public connectedCallback() {\n super.connectedCallback();\n\n // wait to check for direction since otherwise direction is wrong even though top level is RTL\n setTimeout(() => {\n this.icon =\n window.getComputedStyle(this).direction === \"ltr\"\n ? this.hassio\n ? \"hassio:arrow-left\"\n : \"hass:arrow-left\"\n : this.hassio\n ? \"hassio:arrow-right\"\n : \"hass:arrow-right\";\n }, 100);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-paper-icon-button-arrow-prev\": HaPaperIconButtonArrowPrev;\n }\n}\n\ncustomElements.define(\n \"ha-paper-icon-button-arrow-prev\",\n HaPaperIconButtonArrowPrev\n);\n","import \"@polymer/app-layout/app-toolbar/app-toolbar\";\nimport \"@polymer/paper-spinner/paper-spinner-lite\";\nimport {\n LitElement,\n TemplateResult,\n html,\n CSSResultArray,\n css,\n customElement,\n property,\n} from \"lit-element\";\nimport \"../components/ha-menu-button\";\nimport \"../components/ha-paper-icon-button-arrow-prev\";\nimport { haStyle } from \"../resources/styles\";\nimport { HomeAssistant } from \"../types\";\n\n@customElement(\"hass-loading-screen\")\nclass HassLoadingScreen extends LitElement {\n @property({ type: Boolean }) public rootnav? = false;\n @property() public hass?: HomeAssistant;\n @property() public narrow?: boolean;\n\n protected render(): TemplateResult {\n return html`\n \n ${this.rootnav\n ? html`\n \n `\n : html`\n \n `}\n \n
\n \n
\n `;\n }\n\n private _handleBack() {\n history.back();\n }\n\n static get styles(): CSSResultArray {\n return [\n haStyle,\n css`\n :host {\n display: block;\n height: 100%;\n background-color: var(--primary-background-color);\n }\n .content {\n height: calc(100% - 64px);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hass-loading-screen\": HassLoadingScreen;\n }\n}\n","// Polymer legacy event helpers used courtesy of the Polymer project.\n//\n// Copyright (c) 2017 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\ndeclare global {\n // tslint:disable-next-line\n interface HASSDomEvents {}\n}\n\nexport type ValidHassDomEvent = keyof HASSDomEvents;\n\nexport interface HASSDomEvent extends Event {\n detail: T;\n}\n\n/**\n * Dispatches a custom event with an optional detail value.\n *\n * @param {string} type Name of event type.\n * @param {*=} detail Detail value containing event-specific\n * payload.\n * @param {{ bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * composed: (boolean|undefined) }=}\n * options Object specifying options. These may include:\n * `bubbles` (boolean, defaults to `true`),\n * `cancelable` (boolean, defaults to false), and\n * `node` on which to fire the event (HTMLElement, defaults to `this`).\n * @return {Event} The new event that was fired.\n */\nexport const fireEvent = (\n node: HTMLElement | Window,\n type: HassEvent,\n detail?: HASSDomEvents[HassEvent],\n options?: {\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n }\n) => {\n options = options || {};\n // @ts-ignore\n detail = detail === null || detail === undefined ? {} : detail;\n const event = new Event(type, {\n bubbles: options.bubbles === undefined ? true : options.bubbles,\n cancelable: Boolean(options.cancelable),\n composed: options.composed === undefined ? true : options.composed,\n });\n (event as any).detail = detail;\n node.dispatchEvent(event);\n return event;\n};\n","import \"@material/mwc-button\";\nimport \"@polymer/paper-spinner/paper-spinner\";\nimport { html } from \"@polymer/polymer/lib/utils/html-tag\";\nimport { PolymerElement } from \"@polymer/polymer/polymer-element\";\n\nclass HaProgressButton extends PolymerElement {\n static get template() {\n return html`\n \n
\n \n \n \n \n
\n `;\n }\n\n static get properties() {\n return {\n hass: {\n type: Object,\n },\n\n progress: {\n type: Boolean,\n value: false,\n },\n\n disabled: {\n type: Boolean,\n value: false,\n },\n };\n }\n\n tempClass(className) {\n var classList = this.$.container.classList;\n classList.add(className);\n setTimeout(() => {\n classList.remove(className);\n }, 1000);\n }\n\n ready() {\n super.ready();\n this.addEventListener(\"click\", (ev) => this.buttonTapped(ev));\n }\n\n buttonTapped(ev) {\n if (this.progress) ev.stopPropagation();\n }\n\n actionSuccess() {\n this.tempClass(\"success\");\n }\n\n actionError() {\n this.tempClass(\"error\");\n }\n\n computeDisabled(disabled, progress) {\n return disabled || progress;\n }\n}\n\ncustomElements.define(\"ha-progress-button\", HaProgressButton);\n","import { HomeAssistant } from \"../../types\";\nimport { HassioResponse, hassioApiResultExtractor } from \"./common\";\n\nexport interface HassioSnapshot {\n slug: string;\n date: string;\n name: string;\n type: \"full\" | \"partial\";\n protected: boolean;\n}\n\nexport interface HassioSnapshotDetail extends HassioSnapshot {\n size: number;\n homeassistant: string;\n addons: Array<{\n slug: \"ADDON_SLUG\";\n name: \"NAME\";\n version: \"INSTALLED_VERSION\";\n size: \"SIZE_IN_MB\";\n }>;\n repositories: string[];\n folders: string[];\n}\n\nexport interface HassioFullSnapshotCreateParams {\n name: string;\n password?: string;\n}\nexport interface HassioPartialSnapshotCreateParams {\n name: string;\n folders: string[];\n addons: string[];\n password?: string;\n}\n\nexport const fetchHassioSnapshots = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n \"hassio/snapshots\"\n )\n ).snapshots;\n};\n\nexport const fetchHassioSnapshotInfo = async (\n hass: HomeAssistant,\n snapshot: string\n) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n `hassio/snapshots/${snapshot}/info`\n )\n );\n};\n\nexport const reloadHassioSnapshots = async (hass: HomeAssistant) => {\n await hass.callApi>(\"POST\", `hassio/snapshots/reload`);\n};\n\nexport const createHassioFullSnapshot = async (\n hass: HomeAssistant,\n data: HassioFullSnapshotCreateParams\n) => {\n await hass.callApi>(\n \"POST\",\n `hassio/snapshots/new/full`,\n data\n );\n};\n\nexport const createHassioPartialSnapshot = async (\n hass: HomeAssistant,\n data: HassioFullSnapshotCreateParams\n) => {\n await hass.callApi>(\n \"POST\",\n `hassio/snapshots/new/partial`,\n data\n );\n};\n","import { HomeAssistant } from \"../../types\";\nimport { HassioResponse, hassioApiResultExtractor } from \"./common\";\n\nexport interface HassioHardwareAudioDevice {\n device?: string;\n name: string;\n}\n\ninterface HassioHardwareAudioList {\n audio: { input: any; output: any };\n}\n\nexport interface HassioHardwareInfo {\n serial: string[];\n input: string[];\n disk: string[];\n gpio: string[];\n audio: object;\n}\n\nexport const fetchHassioHardwareAudio = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n \"hassio/hardware/audio\"\n )\n );\n};\n\nexport const fetchHassioHardwareInfo = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n \"hassio/hardware/info\"\n )\n );\n};\n","import { fireEvent } from \"../../../../src/common/dom/fire_event\";\n\nexport interface HassioMarkdownDialogParams {\n title: string;\n content: string;\n}\n\nexport const showHassioMarkdownDialog = (\n element: HTMLElement,\n dialogParams: HassioMarkdownDialogParams\n): void => {\n fireEvent(element, \"show-dialog\", {\n dialogTag: \"dialog-hassio-markdown\",\n dialogImport: () =>\n import(\n /* webpackChunkName: \"dialog-hassio-markdown\" */ \"./dialog-hassio-markdown\"\n ),\n dialogParams,\n });\n};\n","import { css } from \"lit-element\";\n\ninterface State {\n bold: boolean;\n italic: boolean;\n underline: boolean;\n strikethrough: boolean;\n foregroundColor: null | string;\n backgroundColor: null | string;\n}\n\nexport const ANSI_HTML_STYLE = css`\n .bold {\n font-weight: bold;\n }\n .italic {\n font-style: italic;\n }\n .underline {\n text-decoration: underline;\n }\n .strikethrough {\n text-decoration: line-through;\n }\n .underline.strikethrough {\n text-decoration: underline line-through;\n }\n .fg-red {\n color: rgb(222, 56, 43);\n }\n .fg-green {\n color: rgb(57, 181, 74);\n }\n .fg-yellow {\n color: rgb(255, 199, 6);\n }\n .fg-blue {\n color: rgb(0, 111, 184);\n }\n .fg-magenta {\n color: rgb(118, 38, 113);\n }\n .fg-cyan {\n color: rgb(44, 181, 233);\n }\n .fg-white {\n color: rgb(204, 204, 204);\n }\n .bg-black {\n background-color: rgb(0, 0, 0);\n }\n .bg-red {\n background-color: rgb(222, 56, 43);\n }\n .bg-green {\n background-color: rgb(57, 181, 74);\n }\n .bg-yellow {\n background-color: rgb(255, 199, 6);\n }\n .bg-blue {\n background-color: rgb(0, 111, 184);\n }\n .bg-magenta {\n background-color: rgb(118, 38, 113);\n }\n .bg-cyan {\n background-color: rgb(44, 181, 233);\n }\n .bg-white {\n background-color: rgb(204, 204, 204);\n }\n`;\n\nexport function parseTextToColoredPre(text) {\n const pre = document.createElement(\"pre\");\n const re = /\\033(?:\\[(.*?)[@-~]|\\].*?(?:\\007|\\033\\\\))/g;\n let i = 0;\n\n const state: State = {\n bold: false,\n italic: false,\n underline: false,\n strikethrough: false,\n foregroundColor: null,\n backgroundColor: null,\n };\n\n const addSpan = (content) => {\n const span = document.createElement(\"span\");\n if (state.bold) {\n span.classList.add(\"bold\");\n }\n if (state.italic) {\n span.classList.add(\"italic\");\n }\n if (state.underline) {\n span.classList.add(\"underline\");\n }\n if (state.strikethrough) {\n span.classList.add(\"strikethrough\");\n }\n if (state.foregroundColor !== null) {\n span.classList.add(`fg-${state.foregroundColor}`);\n }\n if (state.backgroundColor !== null) {\n span.classList.add(`bg-${state.backgroundColor}`);\n }\n span.appendChild(document.createTextNode(content));\n pre.appendChild(span);\n };\n\n /* eslint-disable no-cond-assign */\n let match;\n // tslint:disable-next-line\n while ((match = re.exec(text)) !== null) {\n const j = match!.index;\n addSpan(text.substring(i, j));\n i = j + match[0].length;\n\n if (match[1] === undefined) {\n continue;\n }\n\n match[1].split(\";\").forEach((colorCode: string) => {\n switch (parseInt(colorCode, 10)) {\n case 0:\n // reset\n state.bold = false;\n state.italic = false;\n state.underline = false;\n state.strikethrough = false;\n state.foregroundColor = null;\n state.backgroundColor = null;\n break;\n case 1:\n state.bold = true;\n break;\n case 3:\n state.italic = true;\n break;\n case 4:\n state.underline = true;\n break;\n case 9:\n state.strikethrough = true;\n break;\n case 22:\n state.bold = false;\n break;\n case 23:\n state.italic = false;\n break;\n case 24:\n state.underline = false;\n break;\n case 29:\n state.strikethrough = false;\n break;\n case 30:\n // foreground black\n state.foregroundColor = null;\n break;\n case 31:\n state.foregroundColor = \"red\";\n break;\n case 32:\n state.foregroundColor = \"green\";\n break;\n case 33:\n state.foregroundColor = \"yellow\";\n break;\n case 34:\n state.foregroundColor = \"blue\";\n break;\n case 35:\n state.foregroundColor = \"magenta\";\n break;\n case 36:\n state.foregroundColor = \"cyan\";\n break;\n case 37:\n state.foregroundColor = \"white\";\n break;\n case 39:\n // foreground reset\n state.foregroundColor = null;\n break;\n case 40:\n state.backgroundColor = \"black\";\n break;\n case 41:\n state.backgroundColor = \"red\";\n break;\n case 42:\n state.backgroundColor = \"green\";\n break;\n case 43:\n state.backgroundColor = \"yellow\";\n break;\n case 44:\n state.backgroundColor = \"blue\";\n break;\n case 45:\n state.backgroundColor = \"magenta\";\n break;\n case 46:\n state.backgroundColor = \"cyan\";\n break;\n case 47:\n state.backgroundColor = \"white\";\n break;\n case 49:\n // background reset\n state.backgroundColor = null;\n break;\n }\n });\n }\n addSpan(text.substring(i));\n\n return pre;\n}\n","import { fireEvent } from \"../../common/dom/fire_event\";\n\ninterface BaseDialogParams {\n confirmText?: string;\n text?: string;\n title?: string;\n}\n\nexport interface AlertDialogParams extends BaseDialogParams {\n confirm?: () => void;\n}\n\nexport interface ConfirmationDialogParams extends BaseDialogParams {\n dismissText?: string;\n confirm?: () => void;\n cancel?: () => void;\n}\n\nexport interface PromptDialogParams extends BaseDialogParams {\n inputLabel?: string;\n inputType?: string;\n defaultValue?: string;\n confirm?: (out?: string) => void;\n}\n\nexport interface DialogParams\n extends ConfirmationDialogParams,\n PromptDialogParams {\n confirm?: (out?: string) => void;\n confirmation?: boolean;\n prompt?: boolean;\n}\n\nexport const loadGenericDialog = () =>\n import(/* webpackChunkName: \"confirmation\" */ \"./dialog-box\");\n\nconst showDialogHelper = (\n element: HTMLElement,\n dialogParams: DialogParams,\n extra?: {\n confirmation?: DialogParams[\"confirmation\"];\n prompt?: DialogParams[\"prompt\"];\n }\n) =>\n new Promise((resolve) => {\n const origCancel = dialogParams.cancel;\n const origConfirm = dialogParams.confirm;\n\n fireEvent(element, \"show-dialog\", {\n dialogTag: \"dialog-box\",\n dialogImport: loadGenericDialog,\n dialogParams: {\n ...dialogParams,\n ...extra,\n cancel: () => {\n resolve(extra?.prompt ? null : false);\n if (origCancel) {\n origCancel();\n }\n },\n confirm: (out) => {\n resolve(extra?.prompt ? out : true);\n if (origConfirm) {\n origConfirm(out);\n }\n },\n },\n });\n });\n\nexport const showAlertDialog = (\n element: HTMLElement,\n dialogParams: AlertDialogParams\n) => showDialogHelper(element, dialogParams);\n\nexport const showConfirmationDialog = (\n element: HTMLElement,\n dialogParams: ConfirmationDialogParams\n) =>\n showDialogHelper(element, dialogParams, { confirmation: true }) as Promise<\n boolean\n >;\n\nexport const showPromptDialog = (\n element: HTMLElement,\n dialogParams: PromptDialogParams\n) =>\n showDialogHelper(element, dialogParams, { prompt: true }) as Promise<\n null | string\n >;\n","import { css } from \"lit-element\";\n\nconst documentContainer = document.createElement(\"template\");\ndocumentContainer.setAttribute(\"style\", \"display: none;\");\n\nexport const hassioStyle = css`\n .content {\n margin: 8px;\n }\n h1 {\n color: var(--primary-text-color);\n font-size: 2em;\n margin-bottom: 8px;\n font-family: var(--paper-font-headline_-_font-family);\n -webkit-font-smoothing: var(--paper-font-headline_-_-webkit-font-smoothing);\n font-size: var(--paper-font-headline_-_font-size);\n font-weight: var(--paper-font-headline_-_font-weight);\n letter-spacing: var(--paper-font-headline_-_letter-spacing);\n line-height: var(--paper-font-headline_-_line-height);\n padding-left: 8px;\n }\n .description {\n margin-top: 4px;\n padding-left: 8px;\n }\n .card-group {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n grid-gap: 8px;\n }\n @media screen and (min-width: 640px) {\n .card-group {\n grid-template-columns: repeat(auto-fit, minmax(300px, 0.5fr));\n }\n }\n @media screen and (min-width: 1020px) {\n .card-group {\n grid-template-columns: repeat(auto-fit, minmax(300px, 0.333fr));\n }\n }\n @media screen and (min-width: 1300px) {\n .card-group {\n grid-template-columns: repeat(auto-fit, minmax(300px, 0.25fr));\n }\n }\n ha-call-api-button {\n font-weight: 500;\n color: var(--primary-color);\n }\n .error {\n color: var(--google-red-500);\n margin-top: 16px;\n }\n`;\n\ndocumentContainer.innerHTML = `\n \n`;\n\ndocument.head.appendChild(documentContainer.content);\n","import \"@polymer/paper-styles/paper-styles\";\nimport \"@polymer/polymer/lib/elements/custom-style\";\nimport { haStyle, haStyleDialog } from \"./styles\";\n\nconst documentContainer = document.createElement(\"template\");\ndocumentContainer.setAttribute(\"style\", \"display: none;\");\n\ndocumentContainer.innerHTML = `\n \n\n \n\n \n\n \n`;\n\ndocument.head.appendChild(documentContainer.content);\n","const hexToRgb = (hex: string): string | null => {\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n const checkHex = hex.replace(shorthandRegex, (_m, r, g, b) => {\n return r + r + g + g + b + b;\n });\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(checkHex);\n return result\n ? `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(\n result[3],\n 16\n )}`\n : null;\n};\n\n/**\n * Apply a theme to an element by setting the CSS variables on it.\n *\n * element: Element to apply theme on.\n * themes: HASS Theme information\n * localTheme: selected theme.\n * updateMeta: boolean if we should update the theme-color meta element.\n */\nexport const applyThemesOnElement = (\n element,\n themes,\n localTheme,\n updateMeta = false\n) => {\n if (!element._themes) {\n element._themes = {};\n }\n let themeName = themes.default_theme;\n if (localTheme === \"default\" || (localTheme && themes.themes[localTheme])) {\n themeName = localTheme;\n }\n const styles = { ...element._themes };\n if (themeName !== \"default\") {\n const theme = themes.themes[themeName];\n Object.keys(theme).forEach((key) => {\n const prefixedKey = `--${key}`;\n element._themes[prefixedKey] = \"\";\n styles[prefixedKey] = theme[key];\n if (key.startsWith(\"rgb\")) {\n return;\n }\n const rgbKey = `rgb-${key}`;\n if (theme[rgbKey] !== undefined) {\n return;\n }\n const prefixedRgbKey = `--${rgbKey}`;\n element._themes[prefixedRgbKey] = \"\";\n const rgbValue = hexToRgb(theme[key]);\n if (rgbValue !== null) {\n styles[prefixedRgbKey] = rgbValue;\n }\n });\n }\n if (element.updateStyles) {\n element.updateStyles(styles);\n } else if (window.ShadyCSS) {\n // implement updateStyles() method of Polymer elements\n window.ShadyCSS.styleSubtree(/** @type {!HTMLElement} */ element, styles);\n }\n\n if (!updateMeta) {\n return;\n }\n\n const meta = document.querySelector(\"meta[name=theme-color]\");\n if (meta) {\n if (!meta.hasAttribute(\"default-content\")) {\n meta.setAttribute(\"default-content\", meta.getAttribute(\"content\")!);\n }\n const themeColor =\n styles[\"--primary-color\"] || meta.getAttribute(\"default-content\");\n meta.setAttribute(\"content\", themeColor);\n }\n};\n","import {\n LitElement,\n CSSResultArray,\n css,\n TemplateResult,\n html,\n property,\n customElement,\n} from \"lit-element\";\nimport \"@material/mwc-button\";\nimport \"./hass-subpage\";\n\n@customElement(\"hass-error-screen\")\nclass HassErrorScreen extends LitElement {\n @property()\n public error?: string;\n\n protected render(): TemplateResult {\n return html`\n \n
\n

${this.error}

\n \n go back\n \n
\n
\n `;\n }\n\n private _backTapped(): void {\n history.back();\n }\n\n static get styles(): CSSResultArray {\n return [\n css`\n .content {\n height: calc(100% - 64px);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hass-error-screen\": HassErrorScreen;\n }\n}\n","import { UpdatingElement, property, PropertyValues } from \"lit-element\";\nimport \"./hass-error-screen\";\nimport \"./hass-loading-screen\";\nimport { Route } from \"../types\";\nimport { navigate } from \"../common/navigate\";\nimport memoizeOne from \"memoize-one\";\n\nconst extractPage = (path: string, defaultPage: string) => {\n if (path === \"\") {\n return defaultPage;\n }\n const subpathStart = path.indexOf(\"/\", 1);\n return subpathStart === -1\n ? path.substr(1)\n : path.substr(1, subpathStart - 1);\n};\n\nexport interface RouteOptions {\n // HTML tag of the route page.\n tag: string;\n // Function to load the page.\n load?: () => Promise;\n cache?: boolean;\n}\n\nexport interface RouterOptions {\n // The default route to show if path does not define a page.\n defaultPage?: string;\n // If all routes should be preloaded\n preloadAll?: boolean;\n // If a route has been shown, should we keep the element in memory\n cacheAll?: boolean;\n // Should we show a loading spinner while we load the element for the route\n showLoading?: boolean;\n // Promise that resolves when the initial data is loaded which is needed to show any route.\n initialLoad?: () => Promise;\n // Hook that is called before rendering a new route. Allowing redirects.\n // If string returned, that page will be rendered instead.\n beforeRender?: (page: string) => string | undefined;\n routes: {\n // If it's a string, it is another route whose options should be adopted.\n [route: string]: RouteOptions | string;\n };\n}\n\n// Time to wait for code to load before we show loading screen.\nconst LOADING_SCREEN_THRESHOLD = 400; // ms\n\nexport class HassRouterPage extends UpdatingElement {\n @property() public route?: Route;\n\n protected routerOptions!: RouterOptions;\n\n protected _currentPage = \"\";\n private _currentLoadProm?: Promise;\n private _cache = {};\n private _initialLoadDone = false;\n private _computeTail = memoizeOne((route: Route) => {\n const dividerPos = route.path.indexOf(\"/\", 1);\n return dividerPos === -1\n ? {\n prefix: route.prefix + route.path,\n path: \"\",\n }\n : {\n prefix: route.prefix + route.path.substr(0, dividerPos),\n path: route.path.substr(dividerPos),\n };\n });\n\n protected update(changedProps: PropertyValues) {\n super.update(changedProps);\n\n const routerOptions = this.routerOptions || { routes: {} };\n\n if (routerOptions && routerOptions.initialLoad && !this._initialLoadDone) {\n return;\n }\n\n if (!changedProps.has(\"route\")) {\n // Do not update if we have a currentLoadProm, because that means\n // that there is still an old panel shown and we're moving to a new one.\n if (this.lastChild && !this._currentLoadProm) {\n this.updatePageEl(this.lastChild, changedProps);\n }\n return;\n }\n\n const route = this.route;\n const defaultPage = routerOptions.defaultPage;\n\n if (route && route.path === \"\" && defaultPage !== undefined) {\n navigate(this, `${route.prefix}/${defaultPage}`, true);\n }\n\n let newPage = route\n ? extractPage(route.path, defaultPage || \"\")\n : \"not_found\";\n let routeOptions = routerOptions.routes[newPage];\n\n // Handle redirects\n while (typeof routeOptions === \"string\") {\n newPage = routeOptions;\n routeOptions = routerOptions.routes[newPage];\n }\n\n if (routerOptions.beforeRender) {\n const result = routerOptions.beforeRender(newPage);\n if (result !== undefined) {\n newPage = result;\n routeOptions = routerOptions.routes[newPage];\n\n // Handle redirects\n while (typeof routeOptions === \"string\") {\n newPage = routeOptions;\n routeOptions = routerOptions.routes[newPage];\n }\n\n // Update the url if we know where we're mounted.\n if (route) {\n navigate(this, `${route.prefix}/${result}`, true);\n }\n }\n }\n\n if (this._currentPage === newPage) {\n if (this.lastChild) {\n this.updatePageEl(this.lastChild, changedProps);\n }\n return;\n }\n\n if (!routeOptions) {\n this._currentPage = \"\";\n if (this.lastChild) {\n this.removeChild(this.lastChild);\n }\n return;\n }\n\n this._currentPage = newPage;\n const loadProm = routeOptions.load\n ? routeOptions.load()\n : Promise.resolve();\n\n // Check when loading the page source failed.\n loadProm.catch((err) => {\n // tslint:disable-next-line\n console.error(\"Error loading page\", newPage, err);\n\n // Verify that we're still trying to show the same page.\n if (this._currentPage !== newPage) {\n return;\n }\n\n // Removes either loading screen or the panel\n this.removeChild(this.lastChild!);\n\n // Show error screen\n const errorEl = document.createElement(\"hass-error-screen\");\n errorEl.error = `Error while loading page ${newPage}.`;\n this.appendChild(errorEl);\n });\n\n // If we don't show loading screen, just show the panel.\n // It will be automatically upgraded when loading done.\n if (!routerOptions.showLoading) {\n this._createPanel(routerOptions, newPage, routeOptions);\n return;\n }\n\n // We are only going to show the loading screen after some time.\n // That way we won't have a double fast flash on fast connections.\n let created = false;\n\n setTimeout(() => {\n if (created || this._currentPage !== newPage) {\n return;\n }\n\n // Show a loading screen.\n if (this.lastChild) {\n this.removeChild(this.lastChild);\n }\n this.appendChild(this.createLoadingScreen());\n }, LOADING_SCREEN_THRESHOLD);\n\n this._currentLoadProm = loadProm.then(\n () => {\n this._currentLoadProm = undefined;\n // Check if we're still trying to show the same page.\n if (this._currentPage !== newPage) {\n return;\n }\n\n created = true;\n this._createPanel(\n routerOptions,\n newPage,\n // @ts-ignore TS forgot this is not a string.\n routeOptions\n );\n },\n () => {\n this._currentLoadProm = undefined;\n }\n );\n }\n\n protected firstUpdated(changedProps: PropertyValues) {\n super.firstUpdated(changedProps);\n\n const options = this.routerOptions;\n\n if (!options) {\n return;\n }\n\n if (options.preloadAll) {\n Object.values(options.routes).forEach(\n (route) => typeof route === \"object\" && route.load && route.load()\n );\n }\n\n if (options.initialLoad) {\n setTimeout(() => {\n if (!this._initialLoadDone) {\n this.appendChild(this.createLoadingScreen());\n }\n }, LOADING_SCREEN_THRESHOLD);\n\n options.initialLoad().then(() => {\n this._initialLoadDone = true;\n this.requestUpdate(\"route\");\n });\n }\n }\n\n protected createLoadingScreen() {\n return document.createElement(\"hass-loading-screen\");\n }\n\n /**\n * Rebuild the current panel.\n *\n * Promise will resolve when rebuilding is done and DOM updated.\n */\n protected async rebuild(): Promise {\n const oldRoute = this.route;\n\n if (oldRoute === undefined) {\n return;\n }\n\n this.route = undefined;\n await this.updateComplete;\n // Make sure that the parent didn't override this in the meanwhile.\n if (this.route === undefined) {\n this.route = oldRoute;\n }\n }\n\n /**\n * Promise that resolves when the page has rendered.\n */\n protected get pageRendered(): Promise {\n return this.updateComplete.then(() => this._currentLoadProm);\n }\n\n protected createElement(tag: string) {\n return document.createElement(tag);\n }\n\n protected updatePageEl(_pageEl, _changedProps?: PropertyValues) {\n // default we do nothing\n }\n\n protected get routeTail(): Route {\n return this._computeTail(this.route!);\n }\n\n private _createPanel(\n routerOptions: RouterOptions,\n page: string,\n routeOptions: RouteOptions\n ) {\n if (this.lastChild) {\n this.removeChild(this.lastChild);\n }\n\n const panelEl = this._cache[page] || this.createElement(routeOptions.tag);\n this.updatePageEl(panelEl);\n this.appendChild(panelEl);\n\n if (routerOptions.cacheAll || routeOptions.cache) {\n this._cache[page] = panelEl;\n }\n }\n}\n","import { HomeAssistant } from \"../../types\";\nimport { HassioResponse, hassioApiResultExtractor } from \"./common\";\n\nexport type HassioHostInfo = any;\n\nexport interface HassioHassOSInfo {\n version: string;\n version_cli: string;\n version_latest: string;\n version_cli_latest: string;\n board: \"ova\" | \"rpi\";\n}\n\nexport const fetchHassioHostInfo = async (hass: HomeAssistant) => {\n const response = await hass.callApi>(\n \"GET\",\n \"hassio/host/info\"\n );\n return hassioApiResultExtractor(response);\n};\n\nexport const fetchHassioHassOsInfo = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n \"hassio/hassos/info\"\n )\n );\n};\n","import { HASSDomEvent, ValidHassDomEvent } from \"../common/dom/fire_event\";\nimport { ProvideHassElement } from \"../mixins/provide-hass-lit-mixin\";\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n \"show-dialog\": ShowDialogParams;\n \"close-dialog\": undefined;\n }\n // for add event listener\n interface HTMLElementEventMap {\n \"show-dialog\": HASSDomEvent>;\n }\n}\n\ninterface HassDialog extends HTMLElement {\n showDialog(params: T);\n}\n\ninterface ShowDialogParams {\n dialogTag: keyof HTMLElementTagNameMap;\n dialogImport: () => Promise;\n dialogParams: T;\n}\n\nconst LOADED = {};\n\nexport const showDialog = async (\n element: HTMLElement & ProvideHassElement,\n root: ShadowRoot | HTMLElement,\n dialogImport: () => Promise,\n dialogTag: string,\n dialogParams: unknown\n) => {\n if (!(dialogTag in LOADED)) {\n LOADED[dialogTag] = dialogImport().then(() => {\n const dialogEl = document.createElement(dialogTag) as HassDialog;\n element.provideHass(dialogEl);\n root.appendChild(dialogEl);\n return dialogEl;\n });\n }\n const dialogElement = await LOADED[dialogTag];\n dialogElement.showDialog(dialogParams);\n};\n\nexport const makeDialogManager = (\n element: HTMLElement & ProvideHassElement,\n root: ShadowRoot | HTMLElement\n) => {\n element.addEventListener(\n \"show-dialog\",\n async (e: HASSDomEvent>) => {\n const { dialogTag, dialogImport, dialogParams } = e.detail;\n showDialog(element, root, dialogImport, dialogTag, dialogParams);\n }\n );\n};\n","import { UpdatingElement, PropertyValues } from \"lit-element\";\nimport { HomeAssistant, Constructor } from \"../types\";\n\nexport interface ProvideHassElement {\n provideHass(element: HTMLElement);\n}\n\n/* tslint:disable-next-line:variable-name */\nexport const ProvideHassLitMixin = >(\n superClass: T\n) =>\n class extends superClass {\n protected hass!: HomeAssistant;\n /* tslint:disable-next-line:variable-name */\n private __provideHass: HTMLElement[] = [];\n\n public provideHass(el) {\n this.__provideHass.push(el);\n el.hass = this.hass;\n }\n\n protected updated(changedProps: PropertyValues) {\n super.updated(changedProps);\n\n if (changedProps.has(\"hass\")) {\n this.__provideHass.forEach((el) => {\n (el as any).hass = this.hass;\n });\n }\n }\n };\n","import \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n} from \"lit-element\";\n\nimport { HomeAssistant } from \"../../../src/types\";\nimport { HassioAddonInfo } from \"../../../src/data/hassio/addon\";\nimport { navigate } from \"../../../src/common/navigate\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport \"../components/hassio-card-content\";\n\n@customElement(\"hassio-addons\")\nclass HassioAddons extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public addons?: HassioAddonInfo[];\n\n protected render(): TemplateResult {\n const [major, minor] = this.hass.config.version.split(\".\", 2);\n const ha105pluss =\n Number(major) > 0 || (major === \"0\" && Number(minor) >= 105);\n return html`\n
\n

Add-ons

\n
\n ${!this.addons\n ? html`\n \n
\n You don't have any add-ons installed yet. Head over to\n the add-on store\n to get started!\n
\n
\n `\n : this.addons\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map(\n (addon) => html`\n \n
\n \n
\n
\n `\n )}\n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n paper-card {\n cursor: pointer;\n }\n `,\n ];\n }\n\n private _addonTapped(ev: any): void {\n navigate(this, `/hassio/addon/${ev.currentTarget.addon.slug}`);\n }\n\n private _openStore(): void {\n navigate(this, \"/hassio/store\");\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addons\": HassioAddons;\n }\n}\n","import {\n LitElement,\n TemplateResult,\n html,\n CSSResult,\n css,\n property,\n customElement,\n} from \"lit-element\";\nimport \"@polymer/iron-icon/iron-icon\";\n\nimport { HomeAssistant } from \"../../../src/types\";\nimport { HassioHassOSInfo } from \"../../../src/data/hassio/host\";\nimport {\n HassioHomeAssistantInfo,\n HassioSupervisorInfo,\n} from \"../../../src/data/hassio/supervisor\";\n\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\n\nimport \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport \"../../../src/components/buttons/ha-call-api-button\";\nimport \"../components/hassio-card-content\";\n\n@customElement(\"hassio-update\")\nexport class HassioUpdate extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public hassInfo: HassioHomeAssistantInfo;\n @property() public hassOsInfo?: HassioHassOSInfo;\n @property() public supervisorInfo: HassioSupervisorInfo;\n @property() private _error?: string;\n\n protected render(): TemplateResult {\n const updatesAvailable: number = [\n this.hassInfo,\n this.supervisorInfo,\n this.hassOsInfo,\n ].filter((value) => {\n return (\n !!value &&\n (value.last_version\n ? value.version !== value.last_version\n : value.version !== value.version_latest)\n );\n }).length;\n\n if (!updatesAvailable) {\n return html``;\n }\n\n return html`\n
\n ${this._error\n ? html`\n
Error: ${this._error}
\n `\n : \"\"}\n

\n ${updatesAvailable > 1\n ? \"Updates Available 🎉\"\n : \"Update Available 🎉\"}\n

\n
\n ${this._renderUpdateCard(\n \"Home Assistant Core\",\n this.hassInfo.version,\n this.hassInfo.last_version,\n \"hassio/homeassistant/update\",\n `https://${\n this.hassInfo.last_version.includes(\"b\") ? \"rc\" : \"www\"\n }.home-assistant.io/latest-release-notes/`,\n \"hassio:home-assistant\"\n )}\n ${this._renderUpdateCard(\n \"Supervisor\",\n this.supervisorInfo.version,\n this.supervisorInfo.last_version,\n \"hassio/supervisor/update\",\n `https://github.com//home-assistant/hassio/releases/tag/${this.supervisorInfo.last_version}`\n )}\n ${this.hassOsInfo\n ? this._renderUpdateCard(\n \"Operating System\",\n this.hassOsInfo.version,\n this.hassOsInfo.version_latest,\n \"hassio/hassos/update\",\n `https://github.com//home-assistant/hassos/releases/tag/${this.hassOsInfo.version_latest}`\n )\n : \"\"}\n
\n
\n `;\n }\n\n private _renderUpdateCard(\n name: string,\n curVersion: string,\n lastVersion: string,\n apiPath: string,\n releaseNotesUrl: string,\n icon?: string\n ): TemplateResult {\n if (lastVersion === curVersion) {\n return html``;\n }\n return html`\n \n
\n ${icon\n ? html`\n
\n \n
\n `\n : \"\"}\n
${name} ${lastVersion}
\n
\n You are currently running version ${curVersion}\n
\n
\n
\n \n Release notes\n \n \n Update\n \n
\n
\n `;\n }\n\n private _apiCalled(ev) {\n if (ev.detail.success) {\n this._error = \"\";\n return;\n }\n\n const response = ev.detail.response;\n\n typeof response.body === \"object\"\n ? (this._error = response.body.message || \"Unknown error\")\n : (this._error = response.body);\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n .icon {\n --iron-icon-height: 48px;\n --iron-icon-width: 48px;\n float: right;\n margin: 0 0 2px 10px;\n }\n .update-heading {\n font-size: var(--paper-font-subhead_-_font-size);\n font-weight: 500;\n margin-bottom: 0.5em;\n }\n .warning {\n color: var(--secondary-text-color);\n }\n .card-content {\n height: calc(100% - 47px);\n box-sizing: border-box;\n }\n .card-actions {\n text-align: right;\n }\n .errors {\n color: var(--google-red-500);\n padding: 16px;\n }\n a {\n text-decoration: none;\n }\n `,\n ];\n }\n}\n","import {\n LitElement,\n TemplateResult,\n html,\n CSSResult,\n css,\n property,\n customElement,\n} from \"lit-element\";\nimport \"./hassio-addons\";\nimport \"./hassio-update\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport { HassioHassOSInfo } from \"../../../src/data/hassio/host\";\nimport {\n HassioSupervisorInfo,\n HassioHomeAssistantInfo,\n} from \"../../../src/data/hassio/supervisor\";\n\n@customElement(\"hassio-dashboard\")\nclass HassioDashboard extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public supervisorInfo!: HassioSupervisorInfo;\n @property() public hassInfo!: HassioHomeAssistantInfo;\n @property() public hassOsInfo!: HassioHassOSInfo;\n\n protected render(): TemplateResult {\n return html`\n
\n \n \n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n css`\n .content {\n margin: 0 auto;\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-dashboard\": HassioDashboard;\n }\n}\n","import {\n LitElement,\n TemplateResult,\n html,\n CSSResultArray,\n css,\n property,\n PropertyValues,\n customElement,\n} from \"lit-element\";\nimport \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport \"@polymer/paper-checkbox/paper-checkbox\";\nimport \"@polymer/paper-input/paper-input\";\nimport \"@polymer/paper-radio-button/paper-radio-button\";\nimport \"@polymer/paper-radio-group/paper-radio-group\";\n\nimport \"../components/hassio-card-content\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\n\nimport { showHassioSnapshotDialog } from \"../dialogs/snapshot/show-dialog-hassio-snapshot\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioSnapshot,\n fetchHassioSnapshots,\n reloadHassioSnapshots,\n HassioFullSnapshotCreateParams,\n HassioPartialSnapshotCreateParams,\n createHassioFullSnapshot,\n createHassioPartialSnapshot,\n} from \"../../../src/data/hassio/snapshot\";\nimport { HassioSupervisorInfo } from \"../../../src/data/hassio/supervisor\";\nimport { PolymerChangedEvent } from \"../../../src/polymer-types\";\nimport { fireEvent } from \"../../../src/common/dom/fire_event\";\n\n// Not duplicate, used for typing\n// tslint:disable-next-line\nimport { PaperInputElement } from \"@polymer/paper-input/paper-input\";\n// tslint:disable-next-line\nimport { PaperRadioGroupElement } from \"@polymer/paper-radio-group/paper-radio-group\";\n// tslint:disable-next-line\nimport { PaperCheckboxElement } from \"@polymer/paper-checkbox/paper-checkbox\";\n\ninterface CheckboxItem {\n slug: string;\n name: string;\n checked: boolean;\n}\n\n@customElement(\"hassio-snapshots\")\nclass HassioSnapshots extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public supervisorInfo!: HassioSupervisorInfo;\n @property() private _snapshotName = \"\";\n @property() private _snapshotPassword = \"\";\n @property() private _snapshotHasPassword = false;\n @property() private _snapshotType: HassioSnapshot[\"type\"] = \"full\";\n @property() private _snapshots?: HassioSnapshot[] = [];\n @property() private _addonList: CheckboxItem[] = [];\n @property() private _folderList: CheckboxItem[] = [\n {\n slug: \"homeassistant\",\n name: \"Home Assistant configuration\",\n checked: true,\n },\n { slug: \"ssl\", name: \"SSL\", checked: true },\n { slug: \"share\", name: \"Share\", checked: true },\n { slug: \"addons/local\", name: \"Local add-ons\", checked: true },\n ];\n @property() private _creatingSnapshot = false;\n @property() private _error = \"\";\n\n public async refreshData() {\n await reloadHassioSnapshots(this.hass);\n await this._updateSnapshots();\n }\n\n protected render(): TemplateResult {\n return html`\n
\n

\n Create snapshot\n

\n

\n Snapshots allow you to easily backup and restore all data of your Home\n Assistant instance.\n

\n
\n \n
\n \n Type:\n \n \n Full snapshot\n \n \n Partial snapshot\n \n \n ${this._snapshotType === \"full\"\n ? undefined\n : html`\n Folders:\n ${this._folderList.map(\n (folder, idx) => html`\n \n ${folder.name}\n \n `\n )}\n Add-ons:\n ${this._addonList.map(\n (addon, idx) => html`\n \n ${addon.name}\n \n `\n )}\n `}\n Security:\n \n Password protection\n \n ${this._snapshotHasPassword\n ? html`\n \n `\n : undefined}\n ${this._error !== \"\"\n ? html`\n

${this._error}

\n `\n : undefined}\n
\n
\n \n Create\n \n
\n
\n
\n\n

Available snapshots

\n
\n ${this._snapshots === undefined\n ? undefined\n : this._snapshots.length === 0\n ? html`\n \n
\n You don't have any snapshots yet.\n
\n
\n `\n : this._snapshots.map(\n (snapshot) => html`\n \n
\n \n
\n \n `\n )}\n
\n
\n `;\n }\n\n protected firstUpdated(changedProps: PropertyValues) {\n super.firstUpdated(changedProps);\n this._updateSnapshots();\n }\n\n protected updated(changedProps: PropertyValues) {\n if (changedProps.has(\"supervisorInfo\")) {\n this._addonList = this.supervisorInfo.addons\n .map((addon) => ({\n slug: addon.slug,\n name: addon.name,\n checked: true,\n }))\n .sort((a, b) => (a.name < b.name ? -1 : 1));\n }\n }\n\n private _handleTextValueChanged(ev: PolymerChangedEvent) {\n const input = ev.currentTarget as PaperInputElement;\n this[`_${input.name}`] = ev.detail.value;\n }\n\n private _handleCheckboxValueChanged(ev) {\n const input = ev.currentTarget as PaperCheckboxElement;\n this[`_${input.name}`] = input.checked;\n }\n\n private _handleRadioValueChanged(ev: PolymerChangedEvent) {\n const input = ev.currentTarget as PaperRadioGroupElement;\n this[`_${input.getAttribute(\"name\")}`] = ev.detail.value;\n }\n\n private _folderChecked(ev) {\n const { idx, checked } = ev.currentTarget!;\n this._folderList = this._folderList.map((folder, curIdx) =>\n curIdx === idx ? { ...folder, checked } : folder\n );\n }\n\n private _addonChecked(ev) {\n const { idx, checked } = ev.currentTarget!;\n this._addonList = this._addonList.map((addon, curIdx) =>\n curIdx === idx ? { ...addon, checked } : addon\n );\n }\n\n private async _updateSnapshots() {\n try {\n this._snapshots = await fetchHassioSnapshots(this.hass);\n this._snapshots.sort((a, b) => (a.date < b.date ? 1 : -1));\n } catch (err) {\n this._error = err.message;\n }\n }\n\n private async _createSnapshot() {\n this._error = \"\";\n if (this._snapshotHasPassword && !this._snapshotPassword.length) {\n this._error = \"Please enter a password.\";\n return;\n }\n this._creatingSnapshot = true;\n await this.updateComplete;\n\n const name =\n this._snapshotName ||\n new Date().toLocaleDateString(navigator.language, {\n weekday: \"long\",\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n\n try {\n if (this._snapshotType === \"full\") {\n const data: HassioFullSnapshotCreateParams = { name };\n if (this._snapshotHasPassword) {\n data.password = this._snapshotPassword;\n }\n await createHassioFullSnapshot(this.hass, data);\n } else {\n const addons = this._addonList\n .filter((addon) => addon.checked)\n .map((addon) => addon.slug);\n const folders = this._folderList\n .filter((folder) => folder.checked)\n .map((folder) => folder.slug);\n\n const data: HassioPartialSnapshotCreateParams = {\n name,\n folders,\n addons,\n };\n if (this._snapshotHasPassword) {\n data.password = this._snapshotPassword;\n }\n await createHassioPartialSnapshot(this.hass, data);\n }\n this._updateSnapshots();\n fireEvent(this, \"hass-api-called\", { success: true, response: null });\n } catch (err) {\n this._error = err.message;\n } finally {\n this._creatingSnapshot = false;\n }\n }\n\n private _computeDetails(snapshot: HassioSnapshot) {\n const type =\n snapshot.type === \"full\" ? \"Full snapshot\" : \"Partial snapshot\";\n return snapshot.protected ? `${type}, password protected` : type;\n }\n\n private _snapshotClicked(ev) {\n showHassioSnapshotDialog(this, {\n slug: ev.currentTarget!.snapshot.slug,\n onDelete: () => this._updateSnapshots(),\n });\n }\n\n static get styles(): CSSResultArray {\n return [\n haStyle,\n hassioStyle,\n css`\n paper-radio-group {\n display: block;\n }\n paper-radio-button {\n padding: 0 0 2px 2px;\n }\n paper-radio-button,\n paper-checkbox,\n paper-input[type=\"password\"] {\n display: block;\n margin: 4px 0 4px 48px;\n }\n .pointer {\n cursor: pointer;\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-snapshots\": HassioSnapshots;\n }\n}\n","import { fireEvent } from \"../../../../src/common/dom/fire_event\";\n\nexport interface HassioSnapshotDialogParams {\n slug: string;\n onDelete: () => void;\n}\n\nexport const showHassioSnapshotDialog = (\n element: HTMLElement,\n dialogParams: HassioSnapshotDialogParams\n): void => {\n fireEvent(element, \"show-dialog\", {\n dialogTag: \"dialog-hassio-snapshot\",\n dialogImport: () =>\n import(\n /* webpackChunkName: \"dialog-hassio-snapshot\" */ \"./dialog-hassio-snapshot\"\n ),\n dialogParams,\n });\n};\n","import {\n css,\n TemplateResult,\n html,\n LitElement,\n property,\n CSSResultArray,\n} from \"lit-element\";\nimport \"@polymer/paper-card/paper-card\";\nimport memoizeOne from \"memoize-one\";\n\nimport \"../components/hassio-card-content\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioAddonInfo,\n HassioAddonRepository,\n} from \"../../../src/data/hassio/addon\";\nimport { navigate } from \"../../../src/common/navigate\";\nimport { filterAndSort } from \"../components/hassio-filter-addons\";\n\nclass HassioAddonRepositoryEl extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public repo!: HassioAddonRepository;\n @property() public addons!: HassioAddonInfo[];\n @property() public filter!: string;\n\n private _getAddons = memoizeOne(\n (addons: HassioAddonInfo[], filter?: string) => {\n if (filter) {\n return filterAndSort(addons, filter);\n }\n return addons.sort((a, b) =>\n a.name.toUpperCase() < b.name.toUpperCase() ? -1 : 1\n );\n }\n );\n\n protected render(): TemplateResult {\n const repo = this.repo;\n const addons = this._getAddons(this.addons, this.filter);\n const ha105pluss = this._computeHA105plus;\n\n if (this.filter && addons.length < 1) {\n return html`\n
\n

\n No results found in \"${repo.name}\"\n

\n
\n `;\n }\n return html`\n
\n

\n ${repo.name}\n

\n

\n Maintained by ${repo.maintainer}
\n ${repo.url}\n

\n
\n ${addons.map(\n (addon) => html`\n \n
\n \n
\n \n `\n )}\n
\n
\n `;\n }\n\n private _addonTapped(ev) {\n navigate(this, `/hassio/addon/${ev.currentTarget.addon.slug}`);\n }\n\n private get _computeHA105plus(): boolean {\n const [major, minor] = this.hass.config.version.split(\".\", 2);\n return Number(major) > 0 || (major === \"0\" && Number(minor) >= 105);\n }\n\n static get styles(): CSSResultArray {\n return [\n hassioStyle,\n css`\n paper-card {\n cursor: pointer;\n }\n .not_available {\n opacity: 0.6;\n }\n a.repo {\n color: var(--primary-text-color);\n }\n `,\n ];\n }\n}\n\ncustomElements.define(\"hassio-addon-repository\", HassioAddonRepositoryEl);\n","import { HassioAddonInfo } from \"../../../src/data/hassio/addon\";\nimport * as Fuse from \"fuse.js\";\n\nexport function filterAndSort(addons: HassioAddonInfo[], filter: string) {\n const options: Fuse.FuseOptions = {\n keys: [\"name\", \"description\", \"slug\"],\n caseSensitive: false,\n minMatchCharLength: 2,\n threshold: 0.2,\n };\n const fuse = new Fuse(addons, options);\n return fuse.search(filter);\n}\n","import {\n LitElement,\n html,\n CSSResultArray,\n css,\n property,\n TemplateResult,\n customElement,\n PropertyValues,\n} from \"lit-element\";\nimport \"@polymer/iron-icon/iron-icon\";\nimport \"@polymer/paper-card/paper-card\";\nimport \"@polymer/paper-input/paper-input\";\nimport memoizeOne from \"memoize-one\";\n\nimport \"../../../src/components/buttons/ha-call-api-button\";\nimport \"../components/hassio-card-content\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport { HassioAddonRepository } from \"../../../src/data/hassio/addon\";\nimport { PolymerChangedEvent } from \"../../../src/polymer-types\";\nimport { repeat } from \"lit-html/directives/repeat\";\n\n@customElement(\"hassio-repositories-editor\")\nclass HassioRepositoriesEditor extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public repos!: HassioAddonRepository[];\n @property() private _repoUrl = \"\";\n\n private _sortedRepos = memoizeOne((repos: HassioAddonRepository[]) =>\n repos\n .filter((repo) => repo.slug !== \"core\" && repo.slug !== \"local\")\n .sort((a, b) => (a.name < b.name ? -1 : 1))\n );\n\n protected render(): TemplateResult {\n const repos = this._sortedRepos(this.repos);\n return html`\n
\n

\n Repositories\n

\n

\n Configure which add-on repositories to fetch data from:\n

\n
\n ${// Use repeat so that the fade-out from call-service-api-button\n // stays with the correct repo after we add/delete one.\n repeat(\n repos,\n (repo) => repo.slug,\n (repo) => html`\n \n
\n \n
\n
\n \n Remove\n \n
\n
\n `\n )}\n\n \n
\n \n \n
\n
\n \n Add\n \n
\n
\n
\n
\n `;\n }\n\n protected updated(changedProps: PropertyValues) {\n super.updated(changedProps);\n\n if (changedProps.has(\"repos\")) {\n this._repoUrl = \"\";\n }\n }\n\n private _urlChanged(ev: PolymerChangedEvent) {\n this._repoUrl = ev.detail.value;\n }\n\n private computeRemoveRepoData(repoList, url) {\n const list = repoList\n .filter((repo) => repo.url !== url)\n .map((repo) => repo.source);\n return { addons_repositories: list };\n }\n\n private computeAddRepoData(repoList, url) {\n const list = repoList ? repoList.map((repo) => repo.source) : [];\n list.push(url);\n return { addons_repositories: list };\n }\n\n static get styles(): CSSResultArray {\n return [\n hassioStyle,\n css`\n .add {\n padding: 12px 16px;\n }\n iron-icon {\n color: var(--secondary-text-color);\n margin-right: 16px;\n display: inline-block;\n }\n paper-input {\n width: calc(100% - 49px);\n display: inline-block;\n margin-top: -4px;\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-repositories-editor\": HassioRepositoriesEditor;\n }\n}\n","import \"@polymer/paper-spinner/paper-spinner-lite\";\nimport {\n LitElement,\n TemplateResult,\n html,\n css,\n customElement,\n CSSResult,\n} from \"lit-element\";\n\n@customElement(\"loading-screen\")\nclass LoadingScreen extends LitElement {\n protected render(): TemplateResult {\n return html`\n \n `;\n }\n\n static get styles(): CSSResult {\n return css`\n :host {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"loading-screen\": LoadingScreen;\n }\n}\n","import { TemplateResult, html } from \"lit-html\";\nimport {\n css,\n CSSResult,\n customElement,\n LitElement,\n property,\n} from \"lit-element\";\nimport { fireEvent } from \"../../../src/common/dom/fire_event\";\nimport \"@polymer/iron-icon/iron-icon\";\nimport \"@polymer/paper-input/paper-input\";\nimport \"@polymer/paper-icon-button/paper-icon-button\";\nimport \"@material/mwc-button\";\n\n@customElement(\"hassio-search-input\")\nclass HassioSearchInput extends LitElement {\n @property() private filter?: string;\n\n protected render(): TemplateResult {\n return html`\n
\n \n \n ${this.filter &&\n html`\n \n `}\n \n
\n `;\n }\n\n private async _filterChanged(value: string) {\n fireEvent(this, \"value-changed\", { value: String(value) });\n }\n\n private async _filterInputChanged(e) {\n this._filterChanged(e.target.value);\n }\n\n private async _clearSearch() {\n this._filterChanged(\"\");\n }\n\n static get styles(): CSSResult {\n return css`\n paper-input {\n flex: 1 1 auto;\n margin: 0 16px;\n }\n .search-container {\n display: inline-flex;\n width: 100%;\n align-items: center;\n }\n .prefix {\n margin: 8px;\n }\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-search-input\": HassioSearchInput;\n }\n}\n","import \"./hassio-addon-repository\";\nimport \"./hassio-repositories-editor\";\nimport { TemplateResult, html } from \"lit-html\";\nimport {\n LitElement,\n CSSResult,\n css,\n property,\n PropertyValues,\n} from \"lit-element\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioAddonRepository,\n HassioAddonInfo,\n fetchHassioAddonsInfo,\n reloadHassioAddons,\n} from \"../../../src/data/hassio/addon\";\nimport \"../../../src/layouts/loading-screen\";\nimport \"../components/hassio-search-input\";\n\nconst sortRepos = (a: HassioAddonRepository, b: HassioAddonRepository) => {\n if (a.slug === \"local\") {\n return -1;\n }\n if (b.slug === \"local\") {\n return 1;\n }\n if (a.slug === \"core\") {\n return -1;\n }\n if (b.slug === \"core\") {\n return 1;\n }\n return a.name.toUpperCase() < b.name.toUpperCase() ? -1 : 1;\n};\n\nclass HassioAddonStore extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() private _addons?: HassioAddonInfo[];\n @property() private _repos?: HassioAddonRepository[];\n @property() private _filter?: string;\n\n public async refreshData() {\n this._repos = undefined;\n this._addons = undefined;\n this._filter = undefined;\n await reloadHassioAddons(this.hass);\n await this._loadData();\n }\n\n protected render(): TemplateResult {\n if (!this._addons || !this._repos) {\n return html`\n \n `;\n }\n const repos: TemplateResult[] = [];\n\n for (const repo of this._repos) {\n const addons = this._addons!.filter(\n (addon) => addon.repository === repo.slug\n );\n\n if (addons.length === 0) {\n continue;\n }\n\n repos.push(html`\n \n `);\n }\n\n return html`\n \n\n \n\n ${repos}\n `;\n }\n\n protected firstUpdated(changedProps: PropertyValues) {\n super.firstUpdated(changedProps);\n this.addEventListener(\"hass-api-called\", (ev) => this.apiCalled(ev));\n this._loadData();\n }\n\n private apiCalled(ev) {\n if (ev.detail.success) {\n this._loadData();\n }\n }\n\n private async _loadData() {\n try {\n const addonsInfo = await fetchHassioAddonsInfo(this.hass);\n this._repos = addonsInfo.repositories;\n this._repos.sort(sortRepos);\n this._addons = addonsInfo.addons;\n } catch (err) {\n alert(\"Failed to fetch add-on info\");\n }\n }\n\n private async _filterChanged(e) {\n this._filter = e.detail.value;\n }\n\n static get styles(): CSSResult {\n return css`\n hassio-addon-repository {\n margin-top: 24px;\n }\n `;\n }\n}\n\ncustomElements.define(\"hassio-addon-store\", HassioAddonStore);\n","import \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n} from \"lit-element\";\n\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport {\n HassioHostInfo as HassioHostInfoType,\n HassioHassOSInfo,\n} from \"../../../src/data/hassio/host\";\nimport { fetchHassioHardwareInfo } from \"../../../src/data/hassio/hardware\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport { showHassioMarkdownDialog } from \"../dialogs/markdown/show-dialog-hassio-markdown\";\n\nimport \"../../../src/components/buttons/ha-call-api-button\";\n\n@customElement(\"hassio-host-info\")\nclass HassioHostInfo extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public hostInfo!: HassioHostInfoType;\n @property() public hassOsInfo!: HassioHassOSInfo;\n @property() private _errors?: string;\n\n public render(): TemplateResult | void {\n return html`\n \n
\n

Host system

\n \n \n \n \n \n \n \n \n \n \n ${this.hostInfo.deployment\n ? html`\n \n \n \n \n `\n : \"\"}\n \n
Hostname${this.hostInfo.hostname}
System${this.hostInfo.operating_system}
Deployment${this.hostInfo.deployment}
\n \n Hardware\n \n ${this.hostInfo.features.includes(\"hostname\")\n ? html`\n \n Change hostname\n \n `\n : \"\"}\n ${this._errors\n ? html`\n
Error: ${this._errors}
\n `\n : \"\"}\n
\n
\n ${this.hostInfo.features.includes(\"reboot\")\n ? html`\n Reboot\n `\n : \"\"}\n ${this.hostInfo.features.includes(\"shutdown\")\n ? html`\n Shutdown\n `\n : \"\"}\n ${this.hostInfo.features.includes(\"hassos\")\n ? html`\n Import from USB\n `\n : \"\"}\n ${this.hostInfo.version !== this.hostInfo.version_latest\n ? html`\n Update\n `\n : \"\"}\n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n paper-card {\n height: 100%;\n width: 100%;\n }\n .card-content {\n color: var(--primary-text-color);\n box-sizing: border-box;\n height: calc(100% - 47px);\n }\n .info {\n width: 100%;\n }\n .info td:nth-child(2) {\n text-align: right;\n }\n .errors {\n color: var(--google-red-500);\n margin-top: 16px;\n }\n mwc-button.info {\n max-width: calc(50% - 12px);\n }\n table.info {\n margin-bottom: 10px;\n }\n .warning {\n --mdc-theme-primary: var(--google-red-500);\n }\n `,\n ];\n }\n\n protected firstUpdated(): void {\n this.addEventListener(\"hass-api-called\", (ev) => this._apiCalled(ev));\n }\n\n private _apiCalled(ev): void {\n if (ev.detail.success) {\n this._errors = undefined;\n return;\n }\n\n const response = ev.detail.response;\n\n this._errors =\n typeof response.body === \"object\"\n ? response.body.message || \"Unknown error\"\n : response.body;\n }\n\n private async _showHardware(): Promise {\n try {\n const content = this._objectToMarkdown(\n await fetchHassioHardwareInfo(this.hass)\n );\n showHassioMarkdownDialog(this, {\n title: \"Hardware\",\n content,\n });\n } catch (err) {\n showHassioMarkdownDialog(this, {\n title: \"Hardware\",\n content: \"Error getting hardware info\",\n });\n }\n }\n\n private _objectToMarkdown(obj, indent = \"\"): string {\n let data = \"\";\n Object.keys(obj).forEach((key) => {\n if (typeof obj[key] !== \"object\") {\n data += `${indent}- ${key}: ${obj[key]}\\n`;\n } else {\n data += `${indent}- ${key}:\\n`;\n if (Array.isArray(obj[key])) {\n if (obj[key].length) {\n data +=\n `${indent} - ` + obj[key].join(`\\n${indent} - `) + \"\\n\";\n }\n } else {\n data += this._objectToMarkdown(obj[key], ` ${indent}`);\n }\n }\n });\n\n return data;\n }\n\n private _changeHostnameClicked(): void {\n const curHostname = this.hostInfo.hostname;\n const hostname = prompt(\"Please enter a new hostname:\", curHostname);\n if (hostname && hostname !== curHostname) {\n this.hass.callApi(\"POST\", \"hassio/host/options\", { hostname });\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-host-info\": HassioHostInfo;\n }\n}\n","import \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n} from \"lit-element\";\n\nimport { fireEvent } from \"../../../src/common/dom/fire_event\";\nimport {\n HassioSupervisorInfo as HassioSupervisorInfoType,\n setSupervisorOption,\n SupervisorOptions,\n} from \"../../../src/data/hassio/supervisor\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\n\nimport \"../../../src/components/buttons/ha-call-api-button\";\n\n@customElement(\"hassio-supervisor-info\")\nclass HassioSupervisorInfo extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public supervisorInfo!: HassioSupervisorInfoType;\n @property() private _errors?: string;\n\n public render(): TemplateResult | void {\n return html`\n \n
\n

Supervisor

\n \n \n \n \n \n \n \n \n \n \n ${this.supervisorInfo.channel !== \"stable\"\n ? html`\n \n \n \n \n `\n : \"\"}\n \n
Version${this.supervisorInfo.version}
Latest version${this.supervisorInfo.last_version}
Channel${this.supervisorInfo.channel}
\n ${this._errors\n ? html`\n
Error: ${this._errors}
\n `\n : \"\"}\n
\n
\n Reload\n ${this.supervisorInfo.version !== this.supervisorInfo.last_version\n ? html`\n Update\n `\n : \"\"}\n ${this.supervisorInfo.channel === \"beta\"\n ? html`\n Leave beta channel\n `\n : \"\"}\n ${this.supervisorInfo.channel === \"stable\"\n ? html`\n Join beta channel\n `\n : \"\"}\n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n paper-card {\n height: 100%;\n width: 100%;\n }\n .card-content {\n color: var(--primary-text-color);\n box-sizing: border-box;\n height: calc(100% - 47px);\n }\n .info {\n width: 100%;\n }\n .info td:nth-child(2) {\n text-align: right;\n }\n .errors {\n color: var(--google-red-500);\n margin-top: 16px;\n }\n `,\n ];\n }\n\n protected firstUpdated(): void {\n this.addEventListener(\"hass-api-called\", (ev) => this._apiCalled(ev));\n }\n\n private _apiCalled(ev): void {\n if (ev.detail.success) {\n this._errors = undefined;\n return;\n }\n\n const response = ev.detail.response;\n\n this._errors =\n typeof response.body === \"object\"\n ? response.body.message || \"Unknown error\"\n : response.body;\n }\n\n private async _joinBeta() {\n if (\n !confirm(`WARNING:\nBeta releases are for testers and early adopters and can contain unstable code changes. Make sure you have backups of your data before you activate this feature.\n\nThis inludes beta releases for:\n- Home Assistant (Release Candidates)\n- Hass.io supervisor\n- Host system`)\n ) {\n return;\n }\n try {\n const data: SupervisorOptions = { channel: \"beta\" };\n await setSupervisorOption(this.hass, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"option\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._errors = `Error joining beta channel, ${err.body?.message || err}`;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-supervisor-info\": HassioSupervisorInfo;\n }\n}\n","import \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n query,\n} from \"lit-element\";\n\nimport { ANSI_HTML_STYLE, parseTextToColoredPre } from \"../ansi-to-html\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport { fetchSupervisorLogs } from \"../../../src/data/hassio/supervisor\";\n\n@customElement(\"hassio-supervisor-log\")\nclass HassioSupervisorLog extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() private _error?: string;\n @query(\"#content\") private _logContent!: HTMLDivElement;\n\n public async connectedCallback(): Promise {\n super.connectedCallback();\n await this._loadData();\n }\n\n public render(): TemplateResult | void {\n return html`\n \n ${this._error\n ? html`\n
${this._error}
\n `\n : \"\"}\n
\n
\n Refresh\n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n ANSI_HTML_STYLE,\n css`\n paper-card {\n width: 100%;\n }\n pre {\n white-space: pre-wrap;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n `,\n ];\n }\n\n private async _loadData(): Promise {\n this._error = undefined;\n try {\n const content = await fetchSupervisorLogs(this.hass);\n while (this._logContent.lastChild) {\n this._logContent.removeChild(this._logContent.lastChild as Node);\n }\n this._logContent.appendChild(parseTextToColoredPre(content));\n } catch (err) {\n this._error = `Failed to get supervisor logs, ${err.body?.message ||\n err}`;\n }\n }\n\n private async _refresh(): Promise {\n await this._loadData();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-supervisor-log\": HassioSupervisorLog;\n }\n}\n","import \"@polymer/paper-menu-button/paper-menu-button\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n} from \"lit-element\";\n\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport {\n HassioHostInfo,\n HassioHassOSInfo,\n} from \"../../../src/data/hassio/host\";\nimport { HassioSupervisorInfo } from \"../../../src/data/hassio/supervisor\";\nimport { HomeAssistant } from \"../../../src/types\";\n\nimport \"./hassio-host-info\";\nimport \"./hassio-supervisor-info\";\nimport \"./hassio-supervisor-log\";\n\n@customElement(\"hassio-system\")\nclass HassioSystem extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public supervisorInfo!: HassioSupervisorInfo;\n @property() public hostInfo!: HassioHostInfo;\n @property() public hassOsInfo!: HassioHassOSInfo;\n\n public render(): TemplateResult | void {\n return html`\n
\n

Information

\n
\n \n \n
\n

System log

\n \n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n .content {\n margin: 8px;\n color: var(--primary-text-color);\n }\n .title {\n margin-top: 24px;\n color: var(--primary-text-color);\n font-size: 2em;\n padding-left: 8px;\n margin-bottom: 8px;\n }\n .side-by-side {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));\n grid-gap: 8px;\n }\n hassio-supervisor-log {\n width: 100%;\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-system\": HassioSystem;\n }\n}\n","import {\n HassRouterPage,\n RouterOptions,\n} from \"../../src/layouts/hass-router-page\";\nimport { customElement, property } from \"lit-element\";\nimport { PolymerElement } from \"@polymer/polymer\";\nimport { HomeAssistant } from \"../../src/types\";\n// Don't codesplit it, that way the dashboard always loads fast.\nimport \"./dashboard/hassio-dashboard\";\n// Don't codesplit the others, because it breaks the UI when pushed to a Pi\nimport \"./snapshots/hassio-snapshots\";\nimport \"./addon-store/hassio-addon-store\";\nimport \"./system/hassio-system\";\nimport { HassioHostInfo, HassioHassOSInfo } from \"../../src/data/hassio/host\";\nimport {\n HassioSupervisorInfo,\n HassioHomeAssistantInfo,\n} from \"../../src/data/hassio/supervisor\";\n\n@customElement(\"hassio-tabs-router\")\nclass HassioTabsRouter extends HassRouterPage {\n @property() public hass!: HomeAssistant;\n @property() public supervisorInfo: HassioSupervisorInfo;\n @property() public hostInfo: HassioHostInfo;\n @property() public hassInfo: HassioHomeAssistantInfo;\n @property() public hassOsInfo!: HassioHassOSInfo;\n\n protected routerOptions: RouterOptions = {\n routes: {\n dashboard: {\n tag: \"hassio-dashboard\",\n },\n snapshots: {\n tag: \"hassio-snapshots\",\n },\n store: {\n tag: \"hassio-addon-store\",\n },\n system: {\n tag: \"hassio-system\",\n },\n },\n };\n\n protected updatePageEl(el) {\n if (\"setProperties\" in el) {\n // As long as we have Polymer pages\n (el as PolymerElement).setProperties({\n hass: this.hass,\n supervisorInfo: this.supervisorInfo,\n hostInfo: this.hostInfo,\n hassInfo: this.hassInfo,\n hassOsInfo: this.hassOsInfo,\n });\n } else {\n el.hass = this.hass;\n el.supervisorInfo = this.supervisorInfo;\n el.hostInfo = this.hostInfo;\n el.hassInfo = this.hassInfo;\n el.hassOsInfo = this.hassOsInfo;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-tabs-router\": HassioTabsRouter;\n }\n}\n","import {\n LitElement,\n TemplateResult,\n html,\n CSSResultArray,\n css,\n customElement,\n property,\n} from \"lit-element\";\nimport \"@polymer/app-layout/app-header-layout/app-header-layout\";\nimport \"@polymer/app-layout/app-header/app-header\";\nimport \"@polymer/app-layout/app-toolbar/app-toolbar\";\nimport \"@polymer/paper-icon-button/paper-icon-button\";\nimport \"@polymer/paper-tabs/paper-tab\";\nimport \"@polymer/paper-tabs/paper-tabs\";\n\nimport \"../../src/components/ha-menu-button\";\nimport \"../../src/resources/ha-style\";\nimport \"./hassio-tabs-router\";\n\nimport scrollToTarget from \"../../src/common/dom/scroll-to-target\";\n\nimport { haStyle } from \"../../src/resources/styles\";\nimport { HomeAssistant, Route } from \"../../src/types\";\nimport { navigate } from \"../../src/common/navigate\";\nimport { HassioHostInfo, HassioHassOSInfo } from \"../../src/data/hassio/host\";\nimport {\n HassioSupervisorInfo,\n HassioHomeAssistantInfo,\n} from \"../../src/data/hassio/supervisor\";\n\nconst HAS_REFRESH_BUTTON = [\"store\", \"snapshots\"];\n\n@customElement(\"hassio-pages-with-tabs\")\nclass HassioPagesWithTabs extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public narrow!: boolean;\n @property() public route!: Route;\n @property() public supervisorInfo!: HassioSupervisorInfo;\n @property() public hostInfo!: HassioHostInfo;\n @property() public hassInfo!: HassioHomeAssistantInfo;\n @property() public hassOsInfo!: HassioHassOSInfo;\n\n protected render(): TemplateResult {\n const page = this._page;\n return html`\n \n \n \n \n
Hass.io
\n ${HAS_REFRESH_BUTTON.includes(page)\n ? html`\n \n `\n : undefined}\n
\n \n Dashboard\n Snapshots\n Add-on store\n System\n \n
\n \n
\n `;\n }\n\n private handlePageSelected(ev) {\n const newPage = ev.detail.item.getAttribute(\"page-name\");\n if (newPage !== this._page) {\n navigate(this, `/hassio/${newPage}`);\n }\n\n scrollToTarget(\n this,\n // @ts-ignore\n this.shadowRoot!.querySelector(\"app-header-layout\").header.scrollTarget\n );\n }\n\n private refreshClicked() {\n if (this._page === \"snapshots\") {\n // @ts-ignore\n this.shadowRoot.querySelector(\"hassio-snapshots\").refreshData();\n } else {\n // @ts-ignore\n this.shadowRoot.querySelector(\"hassio-addon-store\").refreshData();\n }\n }\n\n private get _page() {\n return this.route.path.substr(1);\n }\n\n static get styles(): CSSResultArray {\n return [\n haStyle,\n css`\n :host {\n color: var(--primary-text-color);\n --paper-card-header-color: var(--primary-text-color);\n }\n paper-tabs {\n margin-left: 12px;\n --paper-tabs-selection-bar-color: var(--text-primary-color, #fff);\n text-transform: uppercase;\n }\n app-header,\n app-toolbar {\n background-color: var(--primary-color);\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-pages-with-tabs\": HassioPagesWithTabs;\n }\n}\n","/**\n * Scroll to a specific y coordinate.\n *\n * Copied from paper-scroll-header-panel.\n *\n * @method scroll\n * @param {number} top The coordinate to scroll to, along the y-axis.\n * @param {boolean} smooth true if the scroll position should be smoothly adjusted.\n */\nexport default function scrollToTarget(element, target) {\n // the scroll event will trigger _updateScrollState directly,\n // However, _updateScrollState relies on the previous `scrollTop` to update the states.\n // Calling _updateScrollState will ensure that the states are synced correctly.\n const top = 0;\n const scroller = target;\n const easingFn = function easeOutQuad(t, b, c, d) {\n /* eslint-disable no-param-reassign, space-infix-ops, no-mixed-operators */\n t /= d;\n return -c * t * (t - 2) + b;\n /* eslint-enable no-param-reassign, space-infix-ops, no-mixed-operators */\n };\n const animationId = Math.random();\n const duration = 200;\n const startTime = Date.now();\n const currentScrollTop = scroller.scrollTop;\n const deltaScrollTop = top - currentScrollTop;\n element._currentAnimationId = animationId;\n (function updateFrame() {\n const now = Date.now();\n const elapsedTime = now - startTime;\n if (elapsedTime > duration) {\n scroller.scrollTop = top;\n } else if (element._currentAnimationId === animationId) {\n scroller.scrollTop = easingFn(\n elapsedTime,\n currentScrollTop,\n deltaScrollTop,\n duration\n );\n requestAnimationFrame(updateFrame.bind(element));\n }\n }.call(element));\n}\n","import { customElement, PropertyValues, property } from \"lit-element\";\nimport { PolymerElement } from \"@polymer/polymer\";\nimport \"@polymer/paper-icon-button\";\n\nimport \"../../src/resources/ha-style\";\nimport { applyThemesOnElement } from \"../../src/common/dom/apply_themes_on_element\";\nimport { fireEvent } from \"../../src/common/dom/fire_event\";\nimport {\n HassRouterPage,\n RouterOptions,\n} from \"../../src/layouts/hass-router-page\";\nimport { HomeAssistant } from \"../../src/types\";\nimport {\n fetchHassioSupervisorInfo,\n fetchHassioHomeAssistantInfo,\n HassioSupervisorInfo,\n HassioHomeAssistantInfo,\n createHassioSession,\n HassioPanelInfo,\n} from \"../../src/data/hassio/supervisor\";\nimport {\n fetchHassioHostInfo,\n fetchHassioHassOsInfo,\n HassioHostInfo,\n HassioHassOSInfo,\n} from \"../../src/data/hassio/host\";\nimport { fetchHassioAddonInfo } from \"../../src/data/hassio/addon\";\nimport { makeDialogManager } from \"../../src/dialogs/make-dialog-manager\";\nimport { ProvideHassLitMixin } from \"../../src/mixins/provide-hass-lit-mixin\";\n// Don't codesplit it, that way the dashboard always loads fast.\nimport \"./hassio-pages-with-tabs\";\nimport { navigate } from \"../../src/common/navigate\";\nimport {\n showAlertDialog,\n AlertDialogParams,\n} from \"../../src/dialogs/generic/show-dialog-box\";\n\n// The register callback of the IronA11yKeysBehavior inside paper-icon-button\n// is not called, causing _keyBindings to be uninitiliazed for paper-icon-button,\n// causing an exception when added to DOM. When transpiled to ES5, this will\n// break the build.\ncustomElements.get(\"paper-icon-button\").prototype._keyBindings = {};\n\n@customElement(\"hassio-main\")\nclass HassioMain extends ProvideHassLitMixin(HassRouterPage) {\n @property() public hass!: HomeAssistant;\n @property() public panel!: HassioPanelInfo;\n @property() public narrow!: boolean;\n\n protected routerOptions: RouterOptions = {\n // Hass.io has a page with tabs, so we route all non-matching routes to it.\n defaultPage: \"dashboard\",\n initialLoad: () => this._fetchData(),\n showLoading: true,\n routes: {\n dashboard: {\n tag: \"hassio-pages-with-tabs\",\n cache: true,\n },\n snapshots: \"dashboard\",\n store: \"dashboard\",\n system: \"dashboard\",\n addon: {\n tag: \"hassio-addon-view\",\n load: () =>\n import(\n /* webpackChunkName: \"hassio-addon-view\" */ \"./addon-view/hassio-addon-view\"\n ),\n },\n ingress: {\n tag: \"hassio-ingress-view\",\n load: () =>\n import(\n /* webpackChunkName: \"hassio-ingress-view\" */ \"./ingress-view/hassio-ingress-view\"\n ),\n },\n },\n };\n @property() private _supervisorInfo: HassioSupervisorInfo;\n @property() private _hostInfo: HassioHostInfo;\n @property() private _hassOsInfo?: HassioHassOSInfo;\n @property() private _hassInfo: HassioHomeAssistantInfo;\n\n protected firstUpdated(changedProps: PropertyValues) {\n super.firstUpdated(changedProps);\n\n applyThemesOnElement(this, this.hass.themes, this.hass.selectedTheme, true);\n this.addEventListener(\"hass-api-called\", (ev) => this._apiCalled(ev));\n // Paulus - March 17, 2019\n // We went to a single hass-toggle-menu event in HA 0.90. However, the\n // supervisor UI can also run under older versions of Home Assistant.\n // So here we are going to translate toggle events into the appropriate\n // open and close events. These events are a no-op in newer versions of\n // Home Assistant.\n this.addEventListener(\"hass-toggle-menu\", () => {\n fireEvent(\n (window.parent as any).customPanel,\n // @ts-ignore\n this.hass.dockedSidebar ? \"hass-close-menu\" : \"hass-open-menu\"\n );\n });\n // Paulus - March 19, 2019\n // We changed the navigate event to fire directly on the window, as that's\n // where we are listening for it. However, the older panel_custom will\n // listen on this element for navigation events, so we need to forward them.\n window.addEventListener(\"location-changed\", (ev) =>\n // @ts-ignore\n fireEvent(this, ev.type, ev.detail, {\n bubbles: false,\n })\n );\n\n // Forward haptic events to parent window.\n window.addEventListener(\"haptic\", (ev) => {\n // @ts-ignore\n fireEvent(window.parent, ev.type, ev.detail, {\n bubbles: false,\n });\n });\n\n makeDialogManager(this, document.body);\n }\n\n protected updatePageEl(el) {\n // the tabs page does its own routing so needs full route.\n const route =\n el.nodeName === \"HASSIO-PAGES-WITH-TABS\" ? this.route : this.routeTail;\n\n if (\"setProperties\" in el) {\n // As long as we have Polymer pages\n (el as PolymerElement).setProperties({\n hass: this.hass,\n narrow: this.narrow,\n supervisorInfo: this._supervisorInfo,\n hostInfo: this._hostInfo,\n hassInfo: this._hassInfo,\n hassOsInfo: this._hassOsInfo,\n route,\n });\n } else {\n el.hass = this.hass;\n el.narrow = this.narrow;\n el.supervisorInfo = this._supervisorInfo;\n el.hostInfo = this._hostInfo;\n el.hassInfo = this._hassInfo;\n el.hassOsInfo = this._hassOsInfo;\n el.route = route;\n }\n }\n\n private async _fetchData() {\n if (this.panel.config && this.panel.config.ingress) {\n await this._redirectIngress(this.panel.config.ingress);\n return;\n }\n\n const [supervisorInfo, hostInfo, hassInfo] = await Promise.all([\n fetchHassioSupervisorInfo(this.hass),\n fetchHassioHostInfo(this.hass),\n fetchHassioHomeAssistantInfo(this.hass),\n ]);\n this._supervisorInfo = supervisorInfo;\n this._hostInfo = hostInfo;\n this._hassInfo = hassInfo;\n\n if (this._hostInfo.features && this._hostInfo.features.includes(\"hassos\")) {\n this._hassOsInfo = await fetchHassioHassOsInfo(this.hass);\n }\n }\n\n private async _redirectIngress(addonSlug: string) {\n // When we trigger a navigation, we sleep to make sure we don't\n // show the hassio dashboard before navigating away.\n const awaitAlert = async (\n alertParams: AlertDialogParams,\n action: () => void\n ) => {\n await new Promise((resolve) => {\n alertParams.confirm = resolve;\n showAlertDialog(this, alertParams);\n });\n action();\n await new Promise((resolve) => setTimeout(resolve, 1000));\n };\n\n const createSessionPromise = createHassioSession(this.hass).then(\n () => true,\n () => false\n );\n\n let addon;\n\n try {\n addon = await fetchHassioAddonInfo(this.hass, addonSlug);\n } catch (err) {\n await awaitAlert(\n {\n text: \"Unable to fetch add-on info to start Ingress\",\n title: \"Hass.io\",\n },\n () => history.back()\n );\n\n return;\n }\n\n if (!addon.ingress_url) {\n await awaitAlert(\n {\n text: \"Add-on does not support Ingress\",\n title: addon.name,\n },\n () => history.back()\n );\n\n return;\n }\n\n if (addon.state !== \"started\") {\n await awaitAlert(\n {\n text: \"Add-on is not running. Please start it first\",\n title: addon.name,\n },\n () => navigate(this, `/hassio/addon/${addon.slug}`, true)\n );\n\n return;\n }\n\n if (!(await createSessionPromise)) {\n await awaitAlert(\n {\n text: \"Unable to create an Ingress session\",\n title: addon.name,\n },\n () => history.back()\n );\n\n return;\n }\n\n location.assign(addon.ingress_url);\n // await a promise that doesn't resolve, so we show the loading screen\n // while we load the next page.\n await new Promise(() => undefined);\n }\n\n private _apiCalled(ev) {\n if (!ev.detail.success) {\n return;\n }\n\n let tries = 1;\n\n const tryUpdate = () => {\n this._fetchData().catch(() => {\n tries += 1;\n setTimeout(tryUpdate, Math.min(tries, 5) * 1000);\n });\n };\n\n tryUpdate();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-main\": HassioMain;\n }\n}\n","import { HomeAssistant } from \"../../types\";\nimport { HassioResponse, hassioApiResultExtractor } from \"./common\";\n\nexport interface HassioAddonInfo {\n name: string;\n slug: string;\n description: string;\n repository: \"core\" | \"local\" | string;\n version: string;\n state: \"none\" | \"started\" | \"stopped\";\n installed: string | undefined;\n detached: boolean;\n available: boolean;\n build: boolean;\n url: string | null;\n icon: boolean;\n logo: boolean;\n}\n\nexport interface HassioAddonDetails extends HassioAddonInfo {\n name: string;\n slug: string;\n description: string;\n long_description: null | string;\n auto_update: boolean;\n url: null | string;\n detached: boolean;\n available: boolean;\n arch: \"armhf\" | \"aarch64\" | \"i386\" | \"amd64\";\n machine: any;\n homeassistant: string;\n last_version: string;\n boot: \"auto\" | \"manual\";\n build: boolean;\n options: object;\n network: null | object;\n network_description: null | object;\n host_network: boolean;\n host_pid: boolean;\n host_ipc: boolean;\n host_dbus: boolean;\n privileged: any;\n apparmor: \"disable\" | \"default\" | \"profile\";\n devices: string[];\n auto_uart: boolean;\n icon: boolean;\n logo: boolean;\n changelog: boolean;\n hassio_api: boolean;\n hassio_role: \"default\" | \"homeassistant\" | \"manager\" | \"admin\";\n homeassistant_api: boolean;\n auth_api: boolean;\n full_access: boolean;\n protected: boolean;\n rating: \"1-6\";\n stdin: boolean;\n webui: null | string;\n gpio: boolean;\n kernel_modules: boolean;\n devicetree: boolean;\n docker_api: boolean;\n audio: boolean;\n audio_input: null | string;\n audio_output: null | string;\n services_role: string[];\n discovery: string[];\n ip_address: string;\n ingress: boolean;\n ingress_panel: boolean;\n ingress_entry: null | string;\n ingress_url: null | string;\n}\n\nexport interface HassioAddonsInfo {\n addons: HassioAddonInfo[];\n repositories: HassioAddonRepository[];\n}\n\nexport interface HassioAddonSetSecurityParams {\n protected?: boolean;\n}\n\nexport interface HassioAddonRepository {\n slug: string;\n name: string;\n source: string;\n url: string;\n maintainer: string;\n}\n\nexport interface HassioAddonSetOptionParams {\n audio_input?: string | null;\n audio_output?: string | null;\n options?: object | null;\n boot?: \"auto\" | \"manual\";\n auto_update?: boolean;\n ingress_panel?: boolean;\n network?: object | null;\n}\n\nexport const reloadHassioAddons = async (hass: HomeAssistant) => {\n await hass.callApi>(\"POST\", `hassio/addons/reload`);\n};\n\nexport const fetchHassioAddonsInfo = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\"GET\", `hassio/addons`)\n );\n};\n\nexport const fetchHassioAddonInfo = async (\n hass: HomeAssistant,\n slug: string\n) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n `hassio/addons/${slug}/info`\n )\n );\n};\n\nexport const fetchHassioAddonChangelog = async (\n hass: HomeAssistant,\n slug: string\n) => {\n return hass.callApi(\"GET\", `hassio/addons/${slug}/changelog`);\n};\n\nexport const fetchHassioAddonLogs = async (\n hass: HomeAssistant,\n slug: string\n) => {\n return hass.callApi(\"GET\", `hassio/addons/${slug}/logs`);\n};\n\nexport const setHassioAddonOption = async (\n hass: HomeAssistant,\n slug: string,\n data: HassioAddonSetOptionParams\n) => {\n await hass.callApi>(\n \"POST\",\n `hassio/addons/${slug}/options`,\n data\n );\n};\n\nexport const setHassioAddonSecurity = async (\n hass: HomeAssistant,\n slug: string,\n data: HassioAddonSetSecurityParams\n) => {\n await hass.callApi>(\n \"POST\",\n `hassio/addons/${slug}/security`,\n data\n );\n};\n\nexport const installHassioAddon = async (hass: HomeAssistant, slug: string) => {\n return hass.callApi>(\n \"POST\",\n `hassio/addons/${slug}/install`\n );\n};\n\nexport const uninstallHassioAddon = async (\n hass: HomeAssistant,\n slug: string\n) => {\n await hass.callApi>(\n \"POST\",\n `hassio/addons/${slug}/uninstall`\n );\n};\n","import { fireEvent } from \"./dom/fire_event\";\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n \"location-changed\": {\n replace: boolean;\n };\n }\n}\n\nexport const navigate = (\n _node: any,\n path: string,\n replace: boolean = false\n) => {\n if (__DEMO__) {\n if (replace) {\n history.replaceState(null, \"\", `${location.pathname}#${path}`);\n } else {\n window.location.hash = path;\n }\n } else {\n if (replace) {\n history.replaceState(null, \"\", path);\n } else {\n history.pushState(null, \"\", path);\n }\n }\n fireEvent(window, \"location-changed\", {\n replace,\n });\n};\n","import { LocalizeFunc } from \"../translations/localize\";\n\n/**\n * Calculate a string representing a date object as relative time from now.\n *\n * Example output: 5 minutes ago, in 3 days.\n */\nconst tests = [60, 60, 24, 7];\nconst langKey = [\"second\", \"minute\", \"hour\", \"day\"];\n\nexport default function relativeTime(\n dateObj: Date,\n localize: LocalizeFunc,\n options: {\n compareTime?: Date;\n includeTense?: boolean;\n } = {}\n): string {\n const compareTime = options.compareTime || new Date();\n let delta = (compareTime.getTime() - dateObj.getTime()) / 1000;\n const tense = delta >= 0 ? \"past\" : \"future\";\n delta = Math.abs(delta);\n\n let timeDesc;\n\n for (let i = 0; i < tests.length; i++) {\n if (delta < tests[i]) {\n delta = Math.floor(delta);\n timeDesc = localize(\n `ui.components.relative_time.duration.${langKey[i]}`,\n \"count\",\n delta\n );\n break;\n }\n\n delta /= tests[i];\n }\n\n if (timeDesc === undefined) {\n delta = Math.floor(delta);\n timeDesc = localize(\n \"ui.components.relative_time.duration.week\",\n \"count\",\n delta\n );\n }\n\n return options.includeTense === false\n ? timeDesc\n : localize(`ui.components.relative_time.${tense}`, \"time\", timeDesc);\n}\n","import { dedupingMixin } from \"@polymer/polymer/lib/utils/mixin\";\n/**\n * Polymer Mixin to enable a localize function powered by language/resources from hass object.\n *\n * @polymerMixin\n */\nexport default dedupingMixin(\n (superClass) =>\n class extends superClass {\n static get properties() {\n return {\n hass: Object,\n\n /**\n * Translates a string to the current `language`. Any parameters to the\n * string should be passed in order, as follows:\n * `localize(stringKey, param1Name, param1Value, param2Name, param2Value)`\n */\n localize: {\n type: Function,\n computed: \"__computeLocalize(hass.localize)\",\n },\n };\n }\n\n __computeLocalize(localize) {\n return localize;\n }\n }\n);\n","import { dom } from \"@polymer/polymer/lib/legacy/polymer.dom\";\nimport { PolymerElement } from \"@polymer/polymer/polymer-element\";\n\nimport relativeTime from \"../common/datetime/relative_time\";\n\nimport LocalizeMixin from \"../mixins/localize-mixin\";\n\n/*\n * @appliesMixin LocalizeMixin\n */\nclass HaRelativeTime extends LocalizeMixin(PolymerElement) {\n static get properties() {\n return {\n hass: Object,\n datetime: {\n type: String,\n observer: \"datetimeChanged\",\n },\n\n datetimeObj: {\n type: Object,\n observer: \"datetimeObjChanged\",\n },\n\n parsedDateTime: Object,\n };\n }\n\n constructor() {\n super();\n this.updateRelative = this.updateRelative.bind(this);\n }\n\n connectedCallback() {\n super.connectedCallback();\n // update every 60 seconds\n this.updateInterval = setInterval(this.updateRelative, 60000);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n clearInterval(this.updateInterval);\n }\n\n datetimeChanged(newVal) {\n this.parsedDateTime = newVal ? new Date(newVal) : null;\n\n this.updateRelative();\n }\n\n datetimeObjChanged(newVal) {\n this.parsedDateTime = newVal;\n\n this.updateRelative();\n }\n\n updateRelative() {\n const root = dom(this);\n if (!this.parsedDateTime) {\n root.innerHTML = this.localize(\"ui.components.relative_time.never\");\n } else {\n root.innerHTML = relativeTime(this.parsedDateTime, this.localize);\n }\n }\n}\n\ncustomElements.define(\"ha-relative-time\", HaRelativeTime);\n","import {\n LitElement,\n TemplateResult,\n html,\n CSSResult,\n css,\n property,\n customElement,\n} from \"lit-element\";\nimport \"@polymer/iron-icon/iron-icon\";\n\nimport \"../../../src/components/ha-relative-time\";\nimport { HomeAssistant } from \"../../../src/types\";\n\n@customElement(\"hassio-card-content\")\nclass HassioCardContent extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public title!: string;\n @property() public description?: string;\n @property({ type: Boolean }) public available: boolean = true;\n @property({ type: Boolean }) public showTopbar: boolean = false;\n @property() public topbarClass?: string;\n @property() public datetime?: string;\n @property() public iconTitle?: string;\n @property() public iconClass?: string;\n @property() public icon = \"hass:help-circle\";\n @property() public iconImage?: string;\n\n protected render(): TemplateResult {\n return html`\n ${this.showTopbar\n ? html`\n
\n `\n : \"\"}\n ${this.iconImage\n ? html`\n
\n \n
\n
\n `\n : html`\n \n `}\n
\n
\n ${this.title}\n
\n
\n ${this.description}\n ${/* treat as available when undefined */\n this.available === false ? \" (Not available)\" : \"\"}\n ${this.datetime\n ? html`\n \n `\n : undefined}\n
\n
\n `;\n }\n\n static get styles(): CSSResult {\n return css`\n iron-icon {\n margin-right: 24px;\n margin-left: 8px;\n margin-top: 12px;\n float: left;\n color: var(--secondary-text-color);\n }\n iron-icon.update {\n color: var(--paper-orange-400);\n }\n iron-icon.running,\n iron-icon.installed {\n color: var(--paper-green-400);\n }\n iron-icon.hassupdate,\n iron-icon.snapshot {\n color: var(--paper-item-icon-color);\n }\n iron-icon.not_available {\n color: var(--google-red-500);\n }\n .title {\n color: var(--primary-text-color);\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n .addition {\n color: var(--secondary-text-color);\n overflow: hidden;\n position: relative;\n height: 2.4em;\n line-height: 1.2em;\n }\n ha-relative-time {\n display: block;\n }\n .icon_image img {\n max-height: 40px;\n max-width: 40px;\n margin-top: 4px;\n margin-right: 16px;\n float: left;\n }\n .icon_image.stopped,\n .icon_image.not_available {\n filter: grayscale(1);\n }\n .dot {\n position: absolute;\n background-color: var(--paper-orange-400);\n width: 12px;\n height: 12px;\n top: 8px;\n right: 8px;\n border-radius: 50%;\n }\n .topbar {\n position: absolute;\n width: 100%;\n height: 2px;\n top: 0;\n left: 0;\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n }\n .topbar.installed {\n background-color: var(--primary-color);\n }\n .topbar.update {\n background-color: var(--accent-color);\n }\n .topbar.unavailable {\n background-color: var(--error-color);\n }\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-card-content\": HassioCardContent;\n }\n}\n","export interface HassioResponse {\n data: T;\n result: \"ok\";\n}\n\nexport const hassioApiResultExtractor = (response: HassioResponse) =>\n response.data;\n","import { LitElement, html } from \"lit-element\";\n\nimport \"./ha-progress-button\";\nimport { fireEvent } from \"../../common/dom/fire_event\";\n\nclass HaCallApiButton extends LitElement {\n render() {\n return html`\n \n `;\n }\n\n constructor() {\n super();\n this.method = \"POST\";\n this.data = {};\n this.disabled = false;\n this.progress = false;\n }\n\n static get properties() {\n return {\n hass: {},\n progress: Boolean,\n path: String,\n method: String,\n data: {},\n disabled: Boolean,\n };\n }\n\n get progressButton() {\n return this.renderRoot.querySelector(\"ha-progress-button\");\n }\n\n async _buttonTapped() {\n this.progress = true;\n const eventData = {\n method: this.method,\n path: this.path,\n data: this.data,\n };\n\n try {\n const resp = await this.hass.callApi(this.method, this.path, this.data);\n this.progress = false;\n this.progressButton.actionSuccess();\n eventData.success = true;\n eventData.response = resp;\n } catch (err) {\n this.progress = false;\n this.progressButton.actionError();\n eventData.success = false;\n eventData.response = err;\n }\n\n fireEvent(this, \"hass-api-called\", eventData);\n }\n}\n\ncustomElements.define(\"ha-call-api-button\", HaCallApiButton);\n","import { HomeAssistant, PanelInfo } from \"../../types\";\nimport { HassioResponse, hassioApiResultExtractor } from \"./common\";\n\nexport type HassioHomeAssistantInfo = any;\nexport type HassioSupervisorInfo = any;\n\nexport type HassioPanelInfo = PanelInfo<\n | undefined\n | {\n ingress?: string;\n }\n>;\n\nexport interface CreateSessionResponse {\n session: string;\n}\n\nexport interface SupervisorOptions {\n channel: \"beta\" | \"dev\" | \"stable\";\n}\n\nexport const fetchHassioHomeAssistantInfo = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n \"hassio/homeassistant/info\"\n )\n );\n};\n\nexport const fetchHassioSupervisorInfo = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n \"hassio/supervisor/info\"\n )\n );\n};\n\nexport const fetchSupervisorLogs = async (hass: HomeAssistant) => {\n return hass.callApi(\"GET\", \"hassio/supervisor/logs\");\n};\n\nexport const createHassioSession = async (hass: HomeAssistant) => {\n const response = await hass.callApi>(\n \"POST\",\n \"hassio/ingress/session\"\n );\n document.cookie = `ingress_session=${response.data.session};path=/api/hassio_ingress/`;\n};\n\nexport const setSupervisorOption = async (\n hass: HomeAssistant,\n data: SupervisorOptions\n) => {\n await hass.callApi>(\n \"POST\",\n \"hassio/supervisor/options\",\n data\n );\n};\n","import {\n createCollection,\n Connection,\n HassEntity,\n} from \"home-assistant-js-websocket\";\n\nexport interface PersitentNotificationEntity extends HassEntity {\n notification_id?: string;\n created_at?: string;\n title?: string;\n message?: string;\n}\n\nexport interface PersistentNotification {\n created_at: string;\n message: string;\n notification_id: string;\n title: string;\n status: \"read\" | \"unread\";\n}\n\nconst fetchNotifications = (conn) =>\n conn.sendMessagePromise({\n type: \"persistent_notification/get\",\n });\n\nconst subscribeUpdates = (conn, store) =>\n conn.subscribeEvents(\n () => fetchNotifications(conn).then((ntf) => store.setState(ntf, true)),\n \"persistent_notifications_updated\"\n );\n\nexport const subscribeNotifications = (\n conn: Connection,\n onChange: (notifications: PersistentNotification[]) => void\n) =>\n createCollection(\n \"_ntf\",\n fetchNotifications,\n subscribeUpdates,\n conn,\n onChange\n );\n","import \"@polymer/paper-icon-button/paper-icon-button\";\nimport {\n property,\n TemplateResult,\n LitElement,\n html,\n customElement,\n CSSResult,\n css,\n} from \"lit-element\";\n\nimport { fireEvent } from \"../common/dom/fire_event\";\nimport { HomeAssistant } from \"../types\";\nimport { UnsubscribeFunc } from \"home-assistant-js-websocket\";\nimport { subscribeNotifications } from \"../data/persistent_notification\";\nimport { computeDomain } from \"../common/entity/compute_domain\";\n\n@customElement(\"ha-menu-button\")\nclass HaMenuButton extends LitElement {\n @property({ type: Boolean }) public hassio = false;\n @property() public narrow!: boolean;\n @property() public hass!: HomeAssistant;\n @property() private _hasNotifications = false;\n private _alwaysVisible = false;\n private _attachNotifOnConnect = false;\n private _unsubNotifications?: UnsubscribeFunc;\n\n public connectedCallback() {\n super.connectedCallback();\n if (this._attachNotifOnConnect) {\n this._attachNotifOnConnect = false;\n this._subscribeNotifications();\n }\n }\n\n public disconnectedCallback() {\n super.disconnectedCallback();\n if (this._unsubNotifications) {\n this._attachNotifOnConnect = true;\n this._unsubNotifications();\n this._unsubNotifications = undefined;\n }\n }\n\n protected render(): TemplateResult {\n const hasNotifications =\n (this.narrow || this.hass.dockedSidebar === \"always_hidden\") &&\n (this._hasNotifications ||\n Object.keys(this.hass.states).some(\n (entityId) => computeDomain(entityId) === \"configurator\"\n ));\n return html`\n \n ${hasNotifications\n ? html`\n
\n `\n : \"\"}\n `;\n }\n\n protected firstUpdated(changedProps) {\n super.firstUpdated(changedProps);\n if (!this.hassio) {\n return;\n }\n // This component is used on Hass.io too, but Hass.io might run the UI\n // on older frontends too, that don't have an always visible menu button\n // in the sidebar.\n this._alwaysVisible =\n (Number((window.parent as any).frontendVersion) || 0) < 20190710;\n }\n\n protected updated(changedProps) {\n super.updated(changedProps);\n\n if (!changedProps.has(\"narrow\") && !changedProps.has(\"hass\")) {\n return;\n }\n\n const oldHass = changedProps.get(\"hass\") as HomeAssistant | undefined;\n const oldNarrow =\n changedProps.get(\"narrow\") ||\n (oldHass && oldHass.dockedSidebar === \"always_hidden\");\n const newNarrow =\n this.narrow || this.hass.dockedSidebar === \"always_hidden\";\n\n if (oldNarrow === newNarrow) {\n return;\n }\n\n this.style.visibility =\n newNarrow || this._alwaysVisible ? \"initial\" : \"hidden\";\n\n if (!newNarrow) {\n this._hasNotifications = false;\n if (this._unsubNotifications) {\n this._unsubNotifications();\n this._unsubNotifications = undefined;\n }\n return;\n }\n\n this._subscribeNotifications();\n }\n\n private _subscribeNotifications() {\n this._unsubNotifications = subscribeNotifications(\n this.hass.connection,\n (notifications) => {\n this._hasNotifications = notifications.length > 0;\n }\n );\n }\n\n private _toggleMenu(): void {\n fireEvent(this, \"hass-toggle-menu\");\n }\n\n static get styles(): CSSResult {\n return css`\n :host {\n position: relative;\n }\n .dot {\n pointer-events: none;\n position: absolute;\n background-color: var(--accent-color);\n width: 12px;\n height: 12px;\n top: 5px;\n right: 2px;\n border-radius: 50%;\n border: 2px solid var(--app-header-background-color);\n }\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-menu-button\": HaMenuButton;\n }\n}\n","export const computeDomain = (entityId: string): string => {\n return entityId.substr(0, entityId.indexOf(\".\"));\n};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/hassio/api/panel/chunk.0c4f6887f9b7e7b11ef5.js.gz b/hassio/api/panel/chunk.0c4f6887f9b7e7b11ef5.js.gz deleted file mode 100644 index bb91b69d1a5f58fcc6e830d44460878f2cd92d1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7239 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 diff --git a/hassio/api/panel/chunk.170381dce1aef5f33cec.js b/hassio/api/panel/chunk.429840c83fad61bc51a8.js similarity index 99% rename from hassio/api/panel/chunk.170381dce1aef5f33cec.js rename to hassio/api/panel/chunk.429840c83fad61bc51a8.js index 74b333a12..729e81aa4 100644 --- a/hassio/api/panel/chunk.170381dce1aef5f33cec.js +++ b/hassio/api/panel/chunk.429840c83fad61bc51a8.js @@ -1,3 +1,3 @@ -/*! For license information please see chunk.170381dce1aef5f33cec.js.LICENSE */ -(self.webpackJsonp=self.webpackJsonp||[]).push([[3],{168:function(e,t,r){"use strict";r.r(t);var n=r(5),i=(r(53),r(40),r(55),r(93),r(10)),o=r(47);function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(){var e=h(["\n ha-paper-dialog {\n min-width: 400px;\n max-width: 500px;\n }\n @media (max-width: 400px) {\n ha-paper-dialog {\n min-width: initial;\n }\n }\n p {\n margin: 0;\n padding-top: 6px;\n padding-bottom: 24px;\n color: var(--primary-text-color);\n }\n .no-bottom-padding {\n padding-bottom: 0;\n }\n .secondary {\n color: var(--secondary-text-color);\n }\n "]);return a=function(){return e},e}function c(){var e=h(['\n \n ',"\n \n "]);return c=function(){return e},e}function l(){var e=h(["\n \n "]);return l=function(){return e},e}function d(){var e=h(["\n \n ","\n

\n "]);return d=function(){return e},e}function p(){var e=h(['\n \n

\n ',"\n

\n \n ","\n ",'\n \n
\n ','\n \n ',"\n \n
\n \n "]);return p=function(){return e},e}function u(){var e=h([""]);return u=function(){return e},e}function h(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function m(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function y(e,t){return(y=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function b(e){var t,r=_(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function v(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function g(e){return e.decorators&&e.decorators.length}function w(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function k(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function _(e){var t=function(e,t){if("object"!==s(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===s(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!g(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var s=t[e.placement];s.splice(s.indexOf(e.key),1);var a=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(a)||a);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var s=0;s\n\n :host {\n display: block;\n @apply --layout-relative;\n }\n\n :host(.is-scrolled:not(:first-child))::before {\n content: \'\';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--divider-color);\n }\n\n :host(.can-scroll:not(.scrolled-to-bottom):not(:last-child))::after {\n content: \'\';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--divider-color);\n }\n\n .scrollable {\n padding: 0 24px;\n\n @apply --layout-scroll;\n @apply --paper-dialog-scrollable;\n }\n\n .fit {\n @apply --layout-fit;\n }\n \n\n
\n \n
\n']);return s=function(){return e},e}Object(i.a)({_template:Object(o.a)(s()),is:"paper-dialog-scrollable",properties:{dialogElement:{type:Object}},get scrollTarget(){return this.$.scrollable},ready:function(){this._ensureTarget(),this.classList.add("no-padding")},attached:function(){this._ensureTarget(),requestAnimationFrame(this.updateScrollState.bind(this))},updateScrollState:function(){this.toggleClass("is-scrolled",this.scrollTarget.scrollTop>0),this.toggleClass("can-scroll",this.scrollTarget.offsetHeight=this.scrollTarget.scrollHeight)},_ensureTarget:function(){this.dialogElement=this.dialogElement||this.parentElement,this.dialogElement&&this.dialogElement.behaviors&&this.dialogElement.behaviors.indexOf(n.b)>=0?(this.dialogElement.sizingTarget=this.scrollTarget,this.scrollTarget.classList.remove("fit")):this.dialogElement&&this.scrollTarget.classList.add("fit")}})},55:function(e,t,r){"use strict";r(4),r(12),r(13),r(30),r(35);var n=document.createElement("template");n.setAttribute("style","display: none;"),n.innerHTML='\n \n',document.head.appendChild(n.content);var i=r(72),o=r(31),s=r(7),a=r(6);function c(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n \n \n']);return c=function(){return e},e}Object(s.a)({_template:Object(a.a)(c()),is:"paper-dialog",behaviors:[o.a,i.a],listeners:{"neon-animation-finish":"_onNeonAnimationFinish"},_renderOpened:function(){this.cancelAnimation(),this.playAnimation("entry")},_renderClosed:function(){this.cancelAnimation(),this.playAnimation("exit")},_onNeonAnimationFinish:function(){this.opened?this._finishRenderOpened():this._finishRenderClosed()}});var l=r(59),d=r(8),p=r(67),u={getTabbableNodes:function(e){var t=[];return this._collectTabbableNodes(e,t)?p.a._sortByTabIndex(t):t},_collectTabbableNodes:function(e,t){if(e.nodeType!==Node.ELEMENT_NODE||!p.a._isVisible(e))return!1;var r,n=e,i=p.a._normalizedTabIndex(n),o=i>0;i>=0&&t.push(n),r="content"===n.localName||"slot"===n.localName?Object(d.a)(n).getDistributedNodes():Object(d.a)(n.shadowRoot||n.root||n).children;for(var s=0;s\n
\n \n
\n \n
\n
\n \n \n ']);return l=function(){return e},e}function d(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function p(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function h(e){var t,r=v(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function f(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function m(e){return e.decorators&&e.decorators.length}function y(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function b(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function v(e){var t=function(e,t){if("object"!==a(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===a(t)?t:String(t)}function g(e,t,r){return(g="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=w(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function w(e){return(w=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var k=customElements.get("mwc-switch");!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!m(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var s=t[e.placement];s.splice(s.indexOf(e.key),1);var a=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(a)||a);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var s=0;s\n ',"\n \n "]);return c=function(){return e},e}function l(){var e=h(["\n \n "]);return l=function(){return e},e}function d(){var e=h(["\n \n ","\n

\n "]);return d=function(){return e},e}function p(){var e=h(['\n \n

\n ',"\n

\n \n ","\n ",'\n \n
\n ','\n \n ',"\n \n
\n \n "]);return p=function(){return e},e}function u(){var e=h([""]);return u=function(){return e},e}function h(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function m(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function y(e,t){return(y=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function b(e){var t,r=_(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function v(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function g(e){return e.decorators&&e.decorators.length}function w(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function k(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function _(e){var t=function(e,t){if("object"!==s(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===s(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!g(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var s=t[e.placement];s.splice(s.indexOf(e.key),1);var a=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(a)||a);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var s=0;s\n\n :host {\n display: block;\n @apply --layout-relative;\n }\n\n :host(.is-scrolled:not(:first-child))::before {\n content: \'\';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--divider-color);\n }\n\n :host(.can-scroll:not(.scrolled-to-bottom):not(:last-child))::after {\n content: \'\';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--divider-color);\n }\n\n .scrollable {\n padding: 0 24px;\n\n @apply --layout-scroll;\n @apply --paper-dialog-scrollable;\n }\n\n .fit {\n @apply --layout-fit;\n }\n \n\n
\n \n
\n']);return s=function(){return e},e}Object(i.a)({_template:Object(o.a)(s()),is:"paper-dialog-scrollable",properties:{dialogElement:{type:Object}},get scrollTarget(){return this.$.scrollable},ready:function(){this._ensureTarget(),this.classList.add("no-padding")},attached:function(){this._ensureTarget(),requestAnimationFrame(this.updateScrollState.bind(this))},updateScrollState:function(){this.toggleClass("is-scrolled",this.scrollTarget.scrollTop>0),this.toggleClass("can-scroll",this.scrollTarget.offsetHeight=this.scrollTarget.scrollHeight)},_ensureTarget:function(){this.dialogElement=this.dialogElement||this.parentElement,this.dialogElement&&this.dialogElement.behaviors&&this.dialogElement.behaviors.indexOf(n.b)>=0?(this.dialogElement.sizingTarget=this.scrollTarget,this.scrollTarget.classList.remove("fit")):this.dialogElement&&this.scrollTarget.classList.add("fit")}})},55:function(e,t,r){"use strict";r(4),r(12),r(13),r(30),r(35);var n=document.createElement("template");n.setAttribute("style","display: none;"),n.innerHTML='\n \n',document.head.appendChild(n.content);var i=r(72),o=r(31),s=r(7),a=r(6);function c(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n \n \n']);return c=function(){return e},e}Object(s.a)({_template:Object(a.a)(c()),is:"paper-dialog",behaviors:[o.a,i.a],listeners:{"neon-animation-finish":"_onNeonAnimationFinish"},_renderOpened:function(){this.cancelAnimation(),this.playAnimation("entry")},_renderClosed:function(){this.cancelAnimation(),this.playAnimation("exit")},_onNeonAnimationFinish:function(){this.opened?this._finishRenderOpened():this._finishRenderClosed()}});var l=r(59),d=r(8),p=r(67),u={getTabbableNodes:function(e){var t=[];return this._collectTabbableNodes(e,t)?p.a._sortByTabIndex(t):t},_collectTabbableNodes:function(e,t){if(e.nodeType!==Node.ELEMENT_NODE||!p.a._isVisible(e))return!1;var r,n=e,i=p.a._normalizedTabIndex(n),o=i>0;i>=0&&t.push(n),r="content"===n.localName||"slot"===n.localName?Object(d.a)(n).getDistributedNodes():Object(d.a)(n.shadowRoot||n.root||n).children;for(var s=0;s\n
\n \n
\n \n
\n \n \n \n ']);return l=function(){return e},e}function d(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function p(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function h(e){var t,r=v(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function f(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function m(e){return e.decorators&&e.decorators.length}function y(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function b(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function v(e){var t=function(e,t){if("object"!==a(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===a(t)?t:String(t)}function g(e,t,r){return(g="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=w(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function w(e){return(w=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var k=customElements.get("mwc-switch");!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!m(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var s=t[e.placement];s.splice(s.indexOf(e.key),1);var a=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(a)||a);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var s=0;s|jkYWs4k5cJJ)$?K9h6&F0I+ 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 literal 0 HcmV?d00001 diff --git a/hassio/api/panel/chunk.170381dce1aef5f33cec.js.map b/hassio/api/panel/chunk.429840c83fad61bc51a8.js.map similarity index 99% rename from hassio/api/panel/chunk.170381dce1aef5f33cec.js.map rename to hassio/api/panel/chunk.429840c83fad61bc51a8.js.map index 9ca0ec418..7988719dc 100644 --- a/hassio/api/panel/chunk.170381dce1aef5f33cec.js.map +++ b/hassio/api/panel/chunk.429840c83fad61bc51a8.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./src/dialogs/generic/dialog-box.ts","webpack:///./node_modules/@polymer/paper-dialog-behavior/paper-dialog-behavior.js","webpack:///./node_modules/@polymer/paper-dialog-scrollable/paper-dialog-scrollable.js","webpack:///./node_modules/@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js","webpack:///./node_modules/@polymer/paper-dialog/paper-dialog.js","webpack:///./src/components/dialog/ha-iron-focusables-helper.js","webpack:///./src/components/dialog/ha-paper-dialog.ts","webpack:///./src/components/ha-switch.ts","webpack:///./src/data/haptics.ts"],"names":["customElement","property","params","regeneratorRuntime","async","_context","prev","next","this","_params","prompt","_value","defaultValue","stop","html","_templateObject","confirmPrompt","confirmation","_templateObject2","_openedChanged","title","hass","localize","text","_templateObject3","classMap","no-bottom-padding","Boolean","_templateObject4","_valueChanged","inputLabel","inputType","_templateObject5","_dismiss","dismissText","_confirm","confirmText","ev","detail","value","_context2","cancel","undefined","_context3","confirm","haStyleDialog","css","_templateObject6","LitElement","__webpack_require__","d","__webpack_exports__","PaperDialogBehaviorImpl","PaperDialogBehavior","_polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_1__","_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__","hostAttributes","role","tabindex","properties","modal","type","__readied","observers","listeners","tap","ready","__prevNoCancelOnOutsideClick","noCancelOnOutsideClick","__prevNoCancelOnEscKey","noCancelOnEscKey","__prevWithBackdrop","withBackdrop","_modalChanged","readied","_updateClosingReasonConfirmed","confirmed","closingReason","_onDialogClick","event","path","dom","i","l","indexOf","target","hasAttribute","close","stopPropagation","IronOverlayBehavior","Polymer","_template","is","dialogElement","Object","scrollTarget","$","scrollable","_ensureTarget","classList","add","attached","requestAnimationFrame","updateScrollState","bind","toggleClass","scrollTop","offsetHeight","scrollHeight","parentElement","behaviors","sizingTarget","remove","$_documentContainer","document","createElement","setAttribute","innerHTML","head","appendChild","content","NeonAnimationRunnerBehavior","neon-animation-finish","_renderOpened","cancelAnimation","playAnimation","_renderClosed","_onNeonAnimationFinish","opened","_finishRenderOpened","_finishRenderClosed","HaIronFocusablesHelper","getTabbableNodes","node","result","_collectTabbableNodes","IronFocusablesHelper","_sortByTabIndex","nodeType","Node","ELEMENT_NODE","_isVisible","children","element","tabIndex","_normalizedTabIndex","needsSort","push","localName","getDistributedNodes","shadowRoot","root","length","paperDialogClass","customElements","get","haTabFixBehaviorImpl","_focusableNodes","HaPaperDialog","_mixinBehaviors","_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","apply","arguments","_inherits","mixinBehaviors","define","MwcSwitch","_decorate","_initialize","_MwcSwitch","HaSwitch","_MwcSwitch2","_getPrototypeOf2","_this","_len","args","Array","_key","call","concat","_assertThisInitialized","F","kind","decorators","key","query","_this2","_get","prototype","style","setProperty","toggle","_slot","assignedNodes","addEventListener","hapticType","haptic","fireEvent","window","ripple","interactionNode","_haChangeHandler","static","e","mdcFoundation","handleChange","checked","formElement"],"mappings":"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","file":"chunk.170381dce1aef5f33cec.js","sourcesContent":["import {\n LitElement,\n html,\n css,\n CSSResult,\n TemplateResult,\n customElement,\n property,\n} from \"lit-element\";\nimport \"@polymer/paper-dialog-scrollable/paper-dialog-scrollable\";\nimport \"@polymer/paper-input/paper-input\";\n\nimport \"../../components/dialog/ha-paper-dialog\";\nimport \"../../components/ha-switch\";\n\nimport { HomeAssistant } from \"../../types\";\nimport { DialogParams } from \"./show-dialog-box\";\nimport { PolymerChangedEvent } from \"../../polymer-types\";\nimport { haStyleDialog } from \"../../resources/styles\";\nimport { classMap } from \"lit-html/directives/class-map\";\n\n@customElement(\"dialog-box\")\nclass DialogBox extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() private _params?: DialogParams;\n @property() private _value?: string;\n\n public async showDialog(params: DialogParams): Promise {\n this._params = params;\n if (params.prompt) {\n this._value = params.defaultValue;\n }\n }\n\n protected render(): TemplateResult {\n if (!this._params) {\n return html``;\n }\n\n const confirmPrompt = this._params.confirmation || this._params.prompt;\n\n return html`\n \n

\n ${this._params.title\n ? this._params.title\n : this._params.confirmation &&\n this.hass.localize(\n \"ui.dialogs.generic.default_confirmation_title\"\n )}\n

\n \n ${this._params.text\n ? html`\n \n ${this._params.text}\n

\n `\n : \"\"}\n ${this._params.prompt\n ? html`\n \n `\n : \"\"}\n
\n
\n ${confirmPrompt &&\n html`\n \n ${this._params.dismissText\n ? this._params.dismissText\n : this.hass.localize(\"ui.dialogs.generic.cancel\")}\n \n `}\n \n ${this._params.confirmText\n ? this._params.confirmText\n : this.hass.localize(\"ui.dialogs.generic.ok\")}\n \n
\n \n `;\n }\n\n private _valueChanged(ev: PolymerChangedEvent) {\n this._value = ev.detail.value;\n }\n\n private async _dismiss(): Promise {\n if (this._params!.cancel) {\n this._params!.cancel();\n }\n this._params = undefined;\n }\n\n private async _confirm(): Promise {\n if (this._params!.confirm) {\n this._params!.confirm(this._value);\n }\n this._dismiss();\n }\n\n private _openedChanged(ev: PolymerChangedEvent): void {\n if (!(ev.detail as any).value) {\n this._params = undefined;\n }\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyleDialog,\n css`\n ha-paper-dialog {\n min-width: 400px;\n max-width: 500px;\n }\n @media (max-width: 400px) {\n ha-paper-dialog {\n min-width: initial;\n }\n }\n p {\n margin: 0;\n padding-top: 6px;\n padding-bottom: 24px;\n color: var(--primary-text-color);\n }\n .no-bottom-padding {\n padding-bottom: 0;\n }\n .secondary {\n color: var(--secondary-text-color);\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dialog-box\": DialogBox;\n }\n}\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\n\nimport {IronOverlayBehavior} from '@polymer/iron-overlay-behavior/iron-overlay-behavior.js';\nimport {dom} from '@polymer/polymer/lib/legacy/polymer.dom.js';\n\n/**\n Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to\n implement a Material Design dialog.\n\n For example, if `` implements this behavior:\n\n \n

Header

\n
Dialog body
\n
\n Cancel\n Accept\n
\n
\n\n `paper-dialog-shared-styles.html` provide styles for a header, content area,\n and an action area for buttons. Use the `

` tag for the header and the\n `buttons` class for the action area. You can use the `paper-dialog-scrollable`\n element (in its own repository) if you need a scrolling content area.\n\n Use the `dialog-dismiss` and `dialog-confirm` attributes on interactive\n controls to close the dialog. If the user dismisses the dialog with\n `dialog-confirm`, the `closingReason` will update to include `confirmed:\n true`.\n\n ### Accessibility\n\n This element has `role=\"dialog\"` by default. Depending on the context, it may\n be more appropriate to override this attribute with `role=\"alertdialog\"`.\n\n If `modal` is set, the element will prevent the focus from exiting the\n element. It will also ensure that focus remains in the dialog.\n\n @hero hero.svg\n @demo demo/index.html\n @polymerBehavior PaperDialogBehavior\n */\nexport const PaperDialogBehaviorImpl = {\n\n hostAttributes: {'role': 'dialog', 'tabindex': '-1'},\n\n properties: {\n\n /**\n * If `modal` is true, this implies `no-cancel-on-outside-click`,\n * `no-cancel-on-esc-key` and `with-backdrop`.\n */\n modal: {type: Boolean, value: false},\n\n __readied: {type: Boolean, value: false}\n\n },\n\n observers: ['_modalChanged(modal, __readied)'],\n\n listeners: {'tap': '_onDialogClick'},\n\n /**\n * @return {void}\n */\n ready: function() {\n // Only now these properties can be read.\n this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;\n this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;\n this.__prevWithBackdrop = this.withBackdrop;\n this.__readied = true;\n },\n\n _modalChanged: function(modal, readied) {\n // modal implies noCancelOnOutsideClick, noCancelOnEscKey and withBackdrop.\n // We need to wait for the element to be ready before we can read the\n // properties values.\n if (!readied) {\n return;\n }\n\n if (modal) {\n this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;\n this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;\n this.__prevWithBackdrop = this.withBackdrop;\n this.noCancelOnOutsideClick = true;\n this.noCancelOnEscKey = true;\n this.withBackdrop = true;\n } else {\n // If the value was changed to false, let it false.\n this.noCancelOnOutsideClick =\n this.noCancelOnOutsideClick && this.__prevNoCancelOnOutsideClick;\n this.noCancelOnEscKey =\n this.noCancelOnEscKey && this.__prevNoCancelOnEscKey;\n this.withBackdrop = this.withBackdrop && this.__prevWithBackdrop;\n }\n },\n\n _updateClosingReasonConfirmed: function(confirmed) {\n this.closingReason = this.closingReason || {};\n this.closingReason.confirmed = confirmed;\n },\n\n /**\n * Will dismiss the dialog if user clicked on an element with dialog-dismiss\n * or dialog-confirm attribute.\n */\n _onDialogClick: function(event) {\n // Search for the element with dialog-confirm or dialog-dismiss,\n // from the root target until this (excluded).\n var path = dom(event).path;\n for (var i = 0, l = path.indexOf(this); i < l; i++) {\n var target = path[i];\n if (target.hasAttribute &&\n (target.hasAttribute('dialog-dismiss') ||\n target.hasAttribute('dialog-confirm'))) {\n this._updateClosingReasonConfirmed(\n target.hasAttribute('dialog-confirm'));\n this.close();\n event.stopPropagation();\n break;\n }\n }\n }\n\n};\n\n/** @polymerBehavior */\nexport const PaperDialogBehavior =\n [IronOverlayBehavior, PaperDialogBehaviorImpl];\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/iron-flex-layout/iron-flex-layout.js';\nimport '@polymer/paper-styles/default-theme.js';\n\nimport {PaperDialogBehaviorImpl} from '@polymer/paper-dialog-behavior/paper-dialog-behavior.js';\nimport {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js';\nimport {html} from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\nMaterial design:\n[Dialogs](https://www.google.com/design/spec/components/dialogs.html)\n\n`paper-dialog-scrollable` implements a scrolling area used in a Material Design\ndialog. It shows a divider at the top and/or bottom indicating more content,\ndepending on scroll position. Use this together with elements implementing\n`Polymer.PaperDialogBehavior`.\n\n \n

Header

\n \n Lorem ipsum...\n \n
\n OK\n
\n
\n\nIt shows a top divider after scrolling if it is not the first child in its\nparent container, indicating there is more content above. It shows a bottom\ndivider if it is scrollable and it is not the last child in its parent\ncontainer, indicating there is more content below. The bottom divider is hidden\nif it is scrolled to the bottom.\n\nIf `paper-dialog-scrollable` is not a direct child of the element implementing\n`Polymer.PaperDialogBehavior`, remember to set the `dialogElement`:\n\n \n

Header

\n
\n

Sub-header

\n \n Lorem ipsum...\n \n
\n
\n OK\n
\n
\n\n \n\n### Styling\nThe following custom properties and mixins are available for styling:\n\nCustom property | Description | Default\n----------------|-------------|----------\n`--paper-dialog-scrollable` | Mixin for the scrollable content | {}\n\n@group Paper Elements\n@element paper-dialog-scrollable\n@demo demo/index.html\n@hero hero.svg\n*/\nPolymer({\n _template: html`\n \n\n
\n \n
\n`,\n\n is: 'paper-dialog-scrollable',\n\n properties: {\n\n /**\n * The dialog element that implements `Polymer.PaperDialogBehavior`\n * containing this element.\n * @type {?Node}\n */\n dialogElement: {type: Object}\n\n },\n\n /**\n * Returns the scrolling element.\n */\n get scrollTarget() {\n return this.$.scrollable;\n },\n\n ready: function() {\n this._ensureTarget();\n this.classList.add('no-padding');\n },\n\n attached: function() {\n this._ensureTarget();\n requestAnimationFrame(this.updateScrollState.bind(this));\n },\n\n updateScrollState: function() {\n this.toggleClass('is-scrolled', this.scrollTarget.scrollTop > 0);\n this.toggleClass(\n 'can-scroll',\n this.scrollTarget.offsetHeight < this.scrollTarget.scrollHeight);\n this.toggleClass(\n 'scrolled-to-bottom',\n this.scrollTarget.scrollTop + this.scrollTarget.offsetHeight >=\n this.scrollTarget.scrollHeight);\n },\n\n _ensureTarget: function() {\n // Read parentElement instead of parentNode in order to skip shadowRoots.\n this.dialogElement = this.dialogElement || this.parentElement;\n // Check if dialog implements paper-dialog-behavior. If not, fit\n // scrollTarget to host.\n if (this.dialogElement && this.dialogElement.behaviors &&\n this.dialogElement.behaviors.indexOf(PaperDialogBehaviorImpl) >= 0) {\n this.dialogElement.sizingTarget = this.scrollTarget;\n this.scrollTarget.classList.remove('fit');\n } else if (this.dialogElement) {\n this.scrollTarget.classList.add('fit');\n }\n }\n});\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/*\n### Styling\n\nThe following custom properties and mixins are available for styling.\n\nCustom property | Description | Default\n----------------|-------------|----------\n`--paper-dialog-background-color` | Dialog background color | `--primary-background-color`\n`--paper-dialog-color` | Dialog foreground color | `--primary-text-color`\n`--paper-dialog` | Mixin applied to the dialog | `{}`\n`--paper-dialog-title` | Mixin applied to the title (`

`) element | `{}`\n`--paper-dialog-button-color` | Button area foreground color | `--default-primary-color`\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/iron-flex-layout/iron-flex-layout.js';\nimport '@polymer/paper-styles/default-theme.js';\nimport '@polymer/paper-styles/typography.js';\nimport '@polymer/paper-styles/shadow.js';\nconst $_documentContainer = document.createElement('template');\n$_documentContainer.setAttribute('style', 'display: none;');\n\n$_documentContainer.innerHTML = `\n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js';\n\nimport {NeonAnimationRunnerBehavior} from '@polymer/neon-animation/neon-animation-runner-behavior.js';\nimport {PaperDialogBehavior} from '@polymer/paper-dialog-behavior/paper-dialog-behavior.js';\nimport {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js';\nimport {html} from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\nMaterial design:\n[Dialogs](https://www.google.com/design/spec/components/dialogs.html)\n\n`` is a dialog with Material Design styling and optional\nanimations when it is opened or closed. It provides styles for a header, content\narea, and an action area for buttons. You can use the\n`` element (in its own repository) if you need a\nscrolling content area. To autofocus a specific child element after opening the\ndialog, give it the `autofocus` attribute. See `Polymer.PaperDialogBehavior` and\n`Polymer.IronOverlayBehavior` for specifics.\n\nFor example, the following code implements a dialog with a header, scrolling\ncontent area and buttons. Focus will be given to the `dialog-confirm` button\nwhen the dialog is opened.\n\n \n

Header

\n \n Lorem ipsum...\n \n
\n Cancel\n Accept\n
\n
\n\n### Styling\n\nSee the docs for `Polymer.PaperDialogBehavior` for the custom properties\navailable for styling this element.\n\n### Animations\n\nSet the `entry-animation` and/or `exit-animation` attributes to add an animation\nwhen the dialog is opened or closed. See the documentation in\n[PolymerElements/neon-animation](https://github.com/PolymerElements/neon-animation)\nfor more info.\n\nFor example:\n\n \n\n \n

Header

\n
Dialog body
\n
\n\n### Accessibility\n\nSee the docs for `Polymer.PaperDialogBehavior` for accessibility features\nimplemented by this element.\n\n@group Paper Elements\n@element paper-dialog\n@hero hero.svg\n@demo demo/index.html\n*/\nPolymer({\n _template: html`\n \n \n`,\n\n is: 'paper-dialog',\n behaviors: [PaperDialogBehavior, NeonAnimationRunnerBehavior],\n listeners: {'neon-animation-finish': '_onNeonAnimationFinish'},\n\n _renderOpened: function() {\n this.cancelAnimation();\n this.playAnimation('entry');\n },\n\n _renderClosed: function() {\n this.cancelAnimation();\n this.playAnimation('exit');\n },\n\n _onNeonAnimationFinish: function() {\n if (this.opened) {\n this._finishRenderOpened();\n } else {\n this._finishRenderClosed();\n }\n }\n});\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/*\n Fixes issue with not using shadow dom properly in iron-overlay-behavior/icon-focusables-helper.js\n*/\nimport { dom } from \"@polymer/polymer/lib/legacy/polymer.dom.js\";\n\nimport { IronFocusablesHelper } from \"@polymer/iron-overlay-behavior/iron-focusables-helper.js\";\n\nexport const HaIronFocusablesHelper = {\n /**\n * Returns a sorted array of tabbable nodes, including the root node.\n * It searches the tabbable nodes in the light and shadow dom of the chidren,\n * sorting the result by tabindex.\n * @param {!Node} node\n * @return {!Array}\n */\n getTabbableNodes: function(node) {\n var result = [];\n // If there is at least one element with tabindex > 0, we need to sort\n // the final array by tabindex.\n var needsSortByTabIndex = this._collectTabbableNodes(node, result);\n if (needsSortByTabIndex) {\n return IronFocusablesHelper._sortByTabIndex(result);\n }\n return result;\n },\n\n /**\n * Searches for nodes that are tabbable and adds them to the `result` array.\n * Returns if the `result` array needs to be sorted by tabindex.\n * @param {!Node} node The starting point for the search; added to `result`\n * if tabbable.\n * @param {!Array} result\n * @return {boolean}\n * @private\n */\n _collectTabbableNodes: function(node, result) {\n // If not an element or not visible, no need to explore children.\n if (\n node.nodeType !== Node.ELEMENT_NODE ||\n !IronFocusablesHelper._isVisible(node)\n ) {\n return false;\n }\n var element = /** @type {!HTMLElement} */ (node);\n var tabIndex = IronFocusablesHelper._normalizedTabIndex(element);\n var needsSort = tabIndex > 0;\n if (tabIndex >= 0) {\n result.push(element);\n }\n\n // In ShadowDOM v1, tab order is affected by the order of distrubution.\n // E.g. getTabbableNodes(#root) in ShadowDOM v1 should return [#A, #B];\n // in ShadowDOM v0 tab order is not affected by the distrubution order,\n // in fact getTabbableNodes(#root) returns [#B, #A].\n //
\n // \n // \n // \n // \n // \n // \n //
\n // TODO(valdrin) support ShadowDOM v1 when upgrading to Polymer v2.0.\n var children;\n if (element.localName === \"content\" || element.localName === \"slot\") {\n children = dom(element).getDistributedNodes();\n } else {\n // /////////////////////////\n // Use shadow root if possible, will check for distributed nodes.\n // THIS IS THE CHANGED LINE\n children = dom(element.shadowRoot || element.root || element).children;\n // /////////////////////////\n }\n for (var i = 0; i < children.length; i++) {\n // Ensure method is always invoked to collect tabbable children.\n needsSort = this._collectTabbableNodes(children[i], result) || needsSort;\n }\n return needsSort;\n },\n};\n","import \"@polymer/paper-dialog/paper-dialog\";\nimport { mixinBehaviors } from \"@polymer/polymer/lib/legacy/class\";\nimport { HaIronFocusablesHelper } from \"./ha-iron-focusables-helper.js\";\n// tslint:disable-next-line\nimport { PaperDialogElement } from \"@polymer/paper-dialog/paper-dialog\";\n\nconst paperDialogClass = customElements.get(\"paper-dialog\");\n\n// behavior that will override existing iron-overlay-behavior and call the fixed implementation\nconst haTabFixBehaviorImpl = {\n get _focusableNodes() {\n return HaIronFocusablesHelper.getTabbableNodes(this);\n },\n};\n\n// paper-dialog that uses the haTabFixBehaviorImpl behvaior\n// export class HaPaperDialog extends paperDialogClass {}\n// @ts-ignore\nexport class HaPaperDialog\n extends mixinBehaviors([haTabFixBehaviorImpl], paperDialogClass)\n implements PaperDialogElement {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-paper-dialog\": HaPaperDialog;\n }\n}\ncustomElements.define(\"ha-paper-dialog\", HaPaperDialog);\n","import {\n customElement,\n CSSResult,\n css,\n query,\n html,\n property,\n} from \"lit-element\";\nimport \"@material/mwc-switch\";\nimport { style } from \"@material/mwc-switch/mwc-switch-css\";\n// tslint:disable-next-line\nimport { Switch } from \"@material/mwc-switch\";\nimport { Constructor } from \"../types\";\nimport { forwardHaptic } from \"../data/haptics\";\nimport { ripple } from \"@material/mwc-ripple/ripple-directive\";\n// tslint:disable-next-line\nconst MwcSwitch = customElements.get(\"mwc-switch\") as Constructor;\n\n@customElement(\"ha-switch\")\nexport class HaSwitch extends MwcSwitch {\n // Generate a haptic vibration.\n // Only set to true if the new value of the switch is applied right away when toggling.\n // Do not add haptic when a user is required to press save.\n @property({ type: Boolean }) public haptic = false;\n @query(\"slot\") private _slot!: HTMLSlotElement;\n\n protected firstUpdated() {\n super.firstUpdated();\n this.style.setProperty(\n \"--mdc-theme-secondary\",\n \"var(--switch-checked-color)\"\n );\n this.classList.toggle(\n \"slotted\",\n Boolean(this._slot.assignedNodes().length)\n );\n this.addEventListener(\"change\", () => {\n if (this.haptic) {\n forwardHaptic(\"light\");\n }\n });\n }\n\n protected render() {\n return html`\n
\n
\n \n
\n \n
\n
\n \n \n `;\n }\n\n protected static get styles(): CSSResult[] {\n return [\n style,\n css`\n :host {\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n .mdc-switch.mdc-switch--checked .mdc-switch__thumb {\n background-color: var(--switch-checked-button-color);\n border-color: var(--switch-checked-button-color);\n }\n .mdc-switch.mdc-switch--checked .mdc-switch__track {\n background-color: var(--switch-checked-track-color);\n border-color: var(--switch-checked-track-color);\n }\n .mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb {\n background-color: var(--switch-unchecked-button-color);\n border-color: var(--switch-unchecked-button-color);\n }\n .mdc-switch:not(.mdc-switch--checked) .mdc-switch__track {\n background-color: var(--switch-unchecked-track-color);\n border-color: var(--switch-unchecked-track-color);\n }\n :host(.slotted) .mdc-switch {\n margin-right: 24px;\n }\n `,\n ];\n }\n\n private _haChangeHandler(e: Event) {\n this.mdcFoundation.handleChange(e);\n // catch \"click\" event and sync properties\n this.checked = this.formElement.checked;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-switch\": HaSwitch;\n }\n}\n","/**\n * Broadcast haptic feedback requests\n */\n\nimport { fireEvent, HASSDomEvent } from \"../common/dom/fire_event\";\n\n// Allowed types are from iOS HIG.\n// https://developer.apple.com/design/human-interface-guidelines/ios/user-interaction/feedback/#haptics\n// Implementors on platforms other than iOS should attempt to match the patterns (shown in HIG) as closely as possible.\nexport type HapticType =\n | \"success\"\n | \"warning\"\n | \"failure\"\n | \"light\"\n | \"medium\"\n | \"heavy\"\n | \"selection\";\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n haptic: HapticType;\n }\n\n interface GlobalEventHandlersEventMap {\n haptic: HASSDomEvent;\n }\n}\n\nexport const forwardHaptic = (hapticType: HapticType) => {\n fireEvent(window, \"haptic\", hapticType);\n};\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./src/dialogs/generic/dialog-box.ts","webpack:///./node_modules/@polymer/paper-dialog-behavior/paper-dialog-behavior.js","webpack:///./node_modules/@polymer/paper-dialog-scrollable/paper-dialog-scrollable.js","webpack:///./node_modules/@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js","webpack:///./node_modules/@polymer/paper-dialog/paper-dialog.js","webpack:///./src/components/dialog/ha-iron-focusables-helper.js","webpack:///./src/components/dialog/ha-paper-dialog.ts","webpack:///./src/components/ha-switch.ts","webpack:///./src/data/haptics.ts"],"names":["customElement","property","params","regeneratorRuntime","async","_context","prev","next","this","_params","prompt","_value","defaultValue","stop","html","_templateObject","confirmPrompt","confirmation","_templateObject2","_openedChanged","title","hass","localize","text","_templateObject3","classMap","no-bottom-padding","Boolean","_templateObject4","_valueChanged","inputLabel","inputType","_templateObject5","_dismiss","dismissText","_confirm","confirmText","ev","detail","value","_context2","cancel","undefined","_context3","confirm","haStyleDialog","css","_templateObject6","LitElement","__webpack_require__","d","__webpack_exports__","PaperDialogBehaviorImpl","PaperDialogBehavior","_polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_1__","_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__","hostAttributes","role","tabindex","properties","modal","type","__readied","observers","listeners","tap","ready","__prevNoCancelOnOutsideClick","noCancelOnOutsideClick","__prevNoCancelOnEscKey","noCancelOnEscKey","__prevWithBackdrop","withBackdrop","_modalChanged","readied","_updateClosingReasonConfirmed","confirmed","closingReason","_onDialogClick","event","path","dom","i","l","indexOf","target","hasAttribute","close","stopPropagation","IronOverlayBehavior","Polymer","_template","is","dialogElement","Object","scrollTarget","$","scrollable","_ensureTarget","classList","add","attached","requestAnimationFrame","updateScrollState","bind","toggleClass","scrollTop","offsetHeight","scrollHeight","parentElement","behaviors","sizingTarget","remove","$_documentContainer","document","createElement","setAttribute","innerHTML","head","appendChild","content","NeonAnimationRunnerBehavior","neon-animation-finish","_renderOpened","cancelAnimation","playAnimation","_renderClosed","_onNeonAnimationFinish","opened","_finishRenderOpened","_finishRenderClosed","HaIronFocusablesHelper","getTabbableNodes","node","result","_collectTabbableNodes","IronFocusablesHelper","_sortByTabIndex","nodeType","Node","ELEMENT_NODE","_isVisible","children","element","tabIndex","_normalizedTabIndex","needsSort","push","localName","getDistributedNodes","shadowRoot","root","length","paperDialogClass","customElements","get","haTabFixBehaviorImpl","_focusableNodes","HaPaperDialog","_mixinBehaviors","_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","apply","arguments","_inherits","mixinBehaviors","define","MwcSwitch","_decorate","_initialize","_MwcSwitch","HaSwitch","_MwcSwitch2","_getPrototypeOf2","_this","_len","args","Array","_key","call","concat","_assertThisInitialized","F","kind","decorators","key","query","_this2","_get","prototype","style","setProperty","toggle","_slot","assignedNodes","addEventListener","hapticType","haptic","fireEvent","window","ripple","interactionNode","_haChangeHandler","static","e","mdcFoundation","handleChange","checked","formElement"],"mappings":";glTAqBCA,YAAc,+nBAEZC,kEACAA,qEACAA,gFAED,SAAwBC,GAAxB,OAAAC,mBAAAC,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACEC,KAAKC,QAAUP,EACXA,EAAOQ,SACTF,KAAKG,OAAST,EAAOU,cAHzB,wBAAAP,EAAAQ,SAAA,KAAAL,0CAOA,WACE,IAAKA,KAAKC,QACR,OAAOK,YAAPC,KAGF,IAAMC,EAAgBR,KAAKC,QAAQQ,cAAgBT,KAAKC,QAAQC,OAEhE,OAAOI,YAAPI,IAKuBV,KAAKW,eAGpBX,KAAKC,QAAQW,MACXZ,KAAKC,QAAQW,MACbZ,KAAKC,QAAQQ,cACbT,KAAKa,KAAKC,SACR,iDAIJd,KAAKC,QAAQc,KACXT,YADFU,IAGcC,YAAS,CACfC,oBAAqBC,QAAQnB,KAAKC,QAAQC,UAG1CF,KAAKC,QAAQc,MAGnB,GACFf,KAAKC,QAAQC,OACXI,YADFc,IAIepB,KAAKG,OACGH,KAAKqB,cACbrB,KAAKC,QAAQqB,WAClBtB,KAAKC,QAAQqB,WACb,GACItB,KAAKC,QAAQsB,UACjBvB,KAAKC,QAAQsB,UACb,QAGR,GAGFf,GACAF,YADakB,IAEWxB,KAAKyB,SACvBzB,KAAKC,QAAQyB,YACX1B,KAAKC,QAAQyB,YACb1B,KAAKa,KAAKC,SAAS,8BAGPd,KAAK2B,SACvB3B,KAAKC,QAAQ2B,YACX5B,KAAKC,QAAQ2B,YACb5B,KAAKa,KAAKC,SAAS,qEAOjC,SAAsBe,GACpB7B,KAAKG,OAAS0B,EAAGC,OAAOC,4CAG1B,kBAAApC,mBAAAC,MAAA,SAAAoC,GAAA,cAAAA,EAAAlC,KAAAkC,EAAAjC,MAAA,OACMC,KAAKC,QAASgC,QAChBjC,KAAKC,QAASgC,SAEhBjC,KAAKC,aAAUiC,EAJjB,wBAAAF,EAAA3B,SAAA,KAAAL,4CAOA,kBAAAL,mBAAAC,MAAA,SAAAuC,GAAA,cAAAA,EAAArC,KAAAqC,EAAApC,MAAA,OACMC,KAAKC,QAASmC,SAChBpC,KAAKC,QAASmC,QAAQpC,KAAKG,QAE7BH,KAAKyB,WAJP,wBAAAU,EAAA9B,SAAA,KAAAL,kDAOA,SAAuB6B,GACfA,EAAGC,OAAeC,QACtB/B,KAAKC,aAAUiC,8CAInB,WACE,MAAO,CACLG,IACAC,YAFKC,WA1GaC,sCCtBxBC,EAAAC,EAAAC,EAAA,sBAAAC,IAAAH,EAAAC,EAAAC,EAAA,sBAAAE,IAAAJ,EAAA,OAAAK,EAAAL,EAAA,IAAAM,EAAAN,EAAA,GAoDaG,EAA0B,CAErCI,eAAgB,CAACC,KAAQ,SAAUC,SAAY,MAE/CC,WAAY,CAMVC,MAAO,CAACC,KAAMlC,QAASY,OAAO,GAE9BuB,UAAW,CAACD,KAAMlC,QAASY,OAAO,IAIpCwB,UAAW,CAAC,mCAEZC,UAAW,CAACC,IAAO,kBAKnBC,MAAO,WAEL1D,KAAK2D,6BAA+B3D,KAAK4D,uBACzC5D,KAAK6D,uBAAyB7D,KAAK8D,iBACnC9D,KAAK+D,mBAAqB/D,KAAKgE,aAC/BhE,KAAKsD,WAAY,GAGnBW,cAAe,SAASb,EAAOc,GAIxBA,IAIDd,GACFpD,KAAK2D,6BAA+B3D,KAAK4D,uBACzC5D,KAAK6D,uBAAyB7D,KAAK8D,iBACnC9D,KAAK+D,mBAAqB/D,KAAKgE,aAC/BhE,KAAK4D,wBAAyB,EAC9B5D,KAAK8D,kBAAmB,EACxB9D,KAAKgE,cAAe,IAGpBhE,KAAK4D,uBACD5D,KAAK4D,wBAA0B5D,KAAK2D,6BACxC3D,KAAK8D,iBACD9D,KAAK8D,kBAAoB9D,KAAK6D,uBAClC7D,KAAKgE,aAAehE,KAAKgE,cAAgBhE,KAAK+D,sBAIlDI,8BAA+B,SAASC,GACtCpE,KAAKqE,cAAgBrE,KAAKqE,eAAiB,GAC3CrE,KAAKqE,cAAcD,UAAYA,GAOjCE,eAAgB,SAASC,GAIvB,IADA,IAAIC,EAAOC,YAAIF,GAAOC,KACbE,EAAI,EAAGC,EAAIH,EAAKI,QAAQ5E,MAAO0E,EAAIC,EAAGD,IAAK,CAClD,IAAIG,EAASL,EAAKE,GAClB,GAAIG,EAAOC,eACND,EAAOC,aAAa,mBACpBD,EAAOC,aAAa,mBAAoB,CAC3C9E,KAAKmE,8BACDU,EAAOC,aAAa,mBACxB9E,KAAK+E,QACLR,EAAMS,kBACN,UAQKnC,EACT,CAACoC,IAAqBrC,+oCC9D1BsC,YAAQ,CACNC,UAAW7E,YAAFC,KA6CT6E,GAAI,0BAEJjC,WAAY,CAOVkC,cAAe,CAAChC,KAAMiC,SAOxBC,mBACE,OAAOvF,KAAKwF,EAAEC,YAGhB/B,MAAO,WACL1D,KAAK0F,gBACL1F,KAAK2F,UAAUC,IAAI,eAGrBC,SAAU,WACR7F,KAAK0F,gBACLI,sBAAsB9F,KAAK+F,kBAAkBC,KAAKhG,QAGpD+F,kBAAmB,WACjB/F,KAAKiG,YAAY,cAAejG,KAAKuF,aAAaW,UAAY,GAC9DlG,KAAKiG,YACD,aACAjG,KAAKuF,aAAaY,aAAenG,KAAKuF,aAAaa,cACvDpG,KAAKiG,YACD,qBACAjG,KAAKuF,aAAaW,UAAYlG,KAAKuF,aAAaY,cAC5CnG,KAAKuF,aAAaa,eAG5BV,cAAe,WAEb1F,KAAKqF,cAAgBrF,KAAKqF,eAAiBrF,KAAKqG,cAG5CrG,KAAKqF,eAAiBrF,KAAKqF,cAAciB,WACzCtG,KAAKqF,cAAciB,UAAU1B,QAAQhC,MAA4B,GACnE5C,KAAKqF,cAAckB,aAAevG,KAAKuF,aACvCvF,KAAKuF,aAAaI,UAAUa,OAAO,QAC1BxG,KAAKqF,eACdrF,KAAKuF,aAAaI,UAAUC,IAAI,4EClJhCa,EAAsBC,SAASC,cAAc,YACnDF,EAAoBG,aAAa,QAAS,kBAE1CH,EAAoBI,UAApB,o3DAuEAH,SAASI,KAAKC,YAAYN,EAAoBO,oSCtB9C9B,YAAQ,CACNC,UAAW7E,YAAFC,KAKT6E,GAAI,eACJkB,UAAW,CAACzD,IAAqBoE,KACjCzD,UAAW,CAAC0D,wBAAyB,0BAErCC,cAAe,WACbnH,KAAKoH,kBACLpH,KAAKqH,cAAc,UAGrBC,cAAe,WACbtH,KAAKoH,kBACLpH,KAAKqH,cAAc,SAGrBE,uBAAwB,WAClBvH,KAAKwH,OACPxH,KAAKyH,sBAELzH,KAAK0H,oDCvFEC,EAAyB,CAQpCC,iBAAkB,SAASC,GACzB,IAAIC,EAAS,GAIb,OAD0B9H,KAAK+H,sBAAsBF,EAAMC,GAElDE,IAAqBC,gBAAgBH,GAEvCA,GAYTC,sBAAuB,SAASF,EAAMC,GAEpC,GACED,EAAKK,WAAaC,KAAKC,eACtBJ,IAAqBK,WAAWR,GAEjC,OAAO,EAET,IAoBIS,EApBAC,EAAuCV,EACvCW,EAAWR,IAAqBS,oBAAoBF,GACpDG,EAAYF,EAAW,EACvBA,GAAY,GACdV,EAAOa,KAAKJ,GAkBZD,EADwB,YAAtBC,EAAQK,WAAiD,SAAtBL,EAAQK,UAClCnE,YAAI8D,GAASM,sBAKbpE,YAAI8D,EAAQO,YAAcP,EAAQQ,MAAQR,GAASD,SAGhE,IAAK,IAAI5D,EAAI,EAAGA,EAAI4D,EAASU,OAAQtE,IAEnCgE,EAAY1I,KAAK+H,sBAAsBO,EAAS5D,GAAIoD,IAAWY,EAEjE,OAAOA,qoBCjFX,IAAMO,EAAmBC,eAAeC,IAAI,gBAGtCC,EAAuB,CAC3BC,sBACE,OAAO1B,EAAuBC,iBAAiB5H,QAOtCsJ,EAAb,SAAAC,GAAA,SAAAD,IAAA,mGAAAE,CAAAxJ,KAAAsJ,GAAAG,EAAAzJ,KAAA0J,EAAAJ,GAAAK,MAAA3J,KAAA4J,YAAA,yOAAAC,CAAAP,EACUQ,eAAe,CAACV,GAAuBH,IADjDK,EAAA,GASAJ,eAAea,OAAO,kBAAmBT,02HCXzC,IAAMU,EAAYd,eAAeC,IAAI,o1LAGrCc,CAAA,CADCzK,YAAc,cACf,SAAA0K,EAAAC,GAAA,IAAaC,EAAb,SAAAC,GAAA,SAAAD,IAAA,IAAAE,EAAAC,mGAAAf,CAAAxJ,KAAAoK,GAAA,QAAAI,EAAAZ,UAAAZ,OAAAyB,EAAA,IAAAC,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAAF,EAAAE,GAAAf,UAAAe,GAAA,SAAA3K,KAAAuK,OAAAD,EAAAZ,EAAAU,IAAAQ,KAAAjB,MAAAW,EAAA,CAAAtK,MAAA6K,OAAAJ,mDAAAP,EAAAY,EAAAP,MAAA,yOAAAV,CAAAO,EAAAD,GAAAC,EAAA,UAAAW,EAAaX,EAAb1H,EAAA,EAAAsI,KAAA,QAAAC,WAAA,CAIGxL,YAAS,CAAE4D,KAAMlC,WAJpB+J,IAAA,SAAAnJ,MAAA,kBAI+C,IAJ/C,CAAAiJ,KAAA,QAAAC,WAAA,CAKGE,YAAM,SALTD,IAAA,QAAAnJ,WAAA,IAAAiJ,KAAA,SAAAE,IAAA,eAAAnJ,MAOE,WAAyB,IAAAqJ,EAAApL,KACvBqL,EAAA3B,EARSU,EAQTkB,WAAA,eAAAtL,MAAA4K,KAAA5K,MACAA,KAAKuL,MAAMC,YACT,wBACA,+BAEFxL,KAAK2F,UAAU8F,OACb,UACAtK,QAAQnB,KAAK0L,MAAMC,gBAAgB3C,SAErChJ,KAAK4L,iBAAiB,SAAU,WCPP,IAACC,EDQpBT,EAAKU,SCReD,EDSR,QCRpBE,YAAUC,OAAQ,SAAUH,QDX9B,CAAAb,KAAA,SAAAE,IAAA,SAAAnJ,MAwBE,WACE,OAAOzB,YAAPC,IAKiB0L,YAAO,CAChBC,gBAAiBlM,OASJA,KAAKmM,oBAxC9B,CAAAnB,KAAA,MAAAoB,QAAA,EAAAlB,IAAA,SAAAnJ,MAiDE,WACE,MAAO,CACLwJ,IACAjJ,YAFK5B,QAlDX,CAAAsK,KAAA,SAAAE,IAAA,mBAAAnJ,MAiFE,SAAyBsK,GACvBrM,KAAKsM,cAAcC,aAAaF,GAEhCrM,KAAKwM,QAAUxM,KAAKyM,YAAYD,aApFNxC","file":"chunk.429840c83fad61bc51a8.js","sourcesContent":["import {\n LitElement,\n html,\n css,\n CSSResult,\n TemplateResult,\n customElement,\n property,\n} from \"lit-element\";\nimport \"@polymer/paper-dialog-scrollable/paper-dialog-scrollable\";\nimport \"@polymer/paper-input/paper-input\";\n\nimport \"../../components/dialog/ha-paper-dialog\";\nimport \"../../components/ha-switch\";\n\nimport { HomeAssistant } from \"../../types\";\nimport { DialogParams } from \"./show-dialog-box\";\nimport { PolymerChangedEvent } from \"../../polymer-types\";\nimport { haStyleDialog } from \"../../resources/styles\";\nimport { classMap } from \"lit-html/directives/class-map\";\n\n@customElement(\"dialog-box\")\nclass DialogBox extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() private _params?: DialogParams;\n @property() private _value?: string;\n\n public async showDialog(params: DialogParams): Promise {\n this._params = params;\n if (params.prompt) {\n this._value = params.defaultValue;\n }\n }\n\n protected render(): TemplateResult {\n if (!this._params) {\n return html``;\n }\n\n const confirmPrompt = this._params.confirmation || this._params.prompt;\n\n return html`\n \n

\n ${this._params.title\n ? this._params.title\n : this._params.confirmation &&\n this.hass.localize(\n \"ui.dialogs.generic.default_confirmation_title\"\n )}\n

\n \n ${this._params.text\n ? html`\n \n ${this._params.text}\n

\n `\n : \"\"}\n ${this._params.prompt\n ? html`\n \n `\n : \"\"}\n
\n
\n ${confirmPrompt &&\n html`\n \n ${this._params.dismissText\n ? this._params.dismissText\n : this.hass.localize(\"ui.dialogs.generic.cancel\")}\n \n `}\n \n ${this._params.confirmText\n ? this._params.confirmText\n : this.hass.localize(\"ui.dialogs.generic.ok\")}\n \n
\n \n `;\n }\n\n private _valueChanged(ev: PolymerChangedEvent) {\n this._value = ev.detail.value;\n }\n\n private async _dismiss(): Promise {\n if (this._params!.cancel) {\n this._params!.cancel();\n }\n this._params = undefined;\n }\n\n private async _confirm(): Promise {\n if (this._params!.confirm) {\n this._params!.confirm(this._value);\n }\n this._dismiss();\n }\n\n private _openedChanged(ev: PolymerChangedEvent): void {\n if (!(ev.detail as any).value) {\n this._params = undefined;\n }\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyleDialog,\n css`\n ha-paper-dialog {\n min-width: 400px;\n max-width: 500px;\n }\n @media (max-width: 400px) {\n ha-paper-dialog {\n min-width: initial;\n }\n }\n p {\n margin: 0;\n padding-top: 6px;\n padding-bottom: 24px;\n color: var(--primary-text-color);\n }\n .no-bottom-padding {\n padding-bottom: 0;\n }\n .secondary {\n color: var(--secondary-text-color);\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dialog-box\": DialogBox;\n }\n}\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\n\nimport {IronOverlayBehavior} from '@polymer/iron-overlay-behavior/iron-overlay-behavior.js';\nimport {dom} from '@polymer/polymer/lib/legacy/polymer.dom.js';\n\n/**\n Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to\n implement a Material Design dialog.\n\n For example, if `` implements this behavior:\n\n \n

Header

\n
Dialog body
\n
\n Cancel\n Accept\n
\n
\n\n `paper-dialog-shared-styles.html` provide styles for a header, content area,\n and an action area for buttons. Use the `

` tag for the header and the\n `buttons` class for the action area. You can use the `paper-dialog-scrollable`\n element (in its own repository) if you need a scrolling content area.\n\n Use the `dialog-dismiss` and `dialog-confirm` attributes on interactive\n controls to close the dialog. If the user dismisses the dialog with\n `dialog-confirm`, the `closingReason` will update to include `confirmed:\n true`.\n\n ### Accessibility\n\n This element has `role=\"dialog\"` by default. Depending on the context, it may\n be more appropriate to override this attribute with `role=\"alertdialog\"`.\n\n If `modal` is set, the element will prevent the focus from exiting the\n element. It will also ensure that focus remains in the dialog.\n\n @hero hero.svg\n @demo demo/index.html\n @polymerBehavior PaperDialogBehavior\n */\nexport const PaperDialogBehaviorImpl = {\n\n hostAttributes: {'role': 'dialog', 'tabindex': '-1'},\n\n properties: {\n\n /**\n * If `modal` is true, this implies `no-cancel-on-outside-click`,\n * `no-cancel-on-esc-key` and `with-backdrop`.\n */\n modal: {type: Boolean, value: false},\n\n __readied: {type: Boolean, value: false}\n\n },\n\n observers: ['_modalChanged(modal, __readied)'],\n\n listeners: {'tap': '_onDialogClick'},\n\n /**\n * @return {void}\n */\n ready: function() {\n // Only now these properties can be read.\n this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;\n this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;\n this.__prevWithBackdrop = this.withBackdrop;\n this.__readied = true;\n },\n\n _modalChanged: function(modal, readied) {\n // modal implies noCancelOnOutsideClick, noCancelOnEscKey and withBackdrop.\n // We need to wait for the element to be ready before we can read the\n // properties values.\n if (!readied) {\n return;\n }\n\n if (modal) {\n this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;\n this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;\n this.__prevWithBackdrop = this.withBackdrop;\n this.noCancelOnOutsideClick = true;\n this.noCancelOnEscKey = true;\n this.withBackdrop = true;\n } else {\n // If the value was changed to false, let it false.\n this.noCancelOnOutsideClick =\n this.noCancelOnOutsideClick && this.__prevNoCancelOnOutsideClick;\n this.noCancelOnEscKey =\n this.noCancelOnEscKey && this.__prevNoCancelOnEscKey;\n this.withBackdrop = this.withBackdrop && this.__prevWithBackdrop;\n }\n },\n\n _updateClosingReasonConfirmed: function(confirmed) {\n this.closingReason = this.closingReason || {};\n this.closingReason.confirmed = confirmed;\n },\n\n /**\n * Will dismiss the dialog if user clicked on an element with dialog-dismiss\n * or dialog-confirm attribute.\n */\n _onDialogClick: function(event) {\n // Search for the element with dialog-confirm or dialog-dismiss,\n // from the root target until this (excluded).\n var path = dom(event).path;\n for (var i = 0, l = path.indexOf(this); i < l; i++) {\n var target = path[i];\n if (target.hasAttribute &&\n (target.hasAttribute('dialog-dismiss') ||\n target.hasAttribute('dialog-confirm'))) {\n this._updateClosingReasonConfirmed(\n target.hasAttribute('dialog-confirm'));\n this.close();\n event.stopPropagation();\n break;\n }\n }\n }\n\n};\n\n/** @polymerBehavior */\nexport const PaperDialogBehavior =\n [IronOverlayBehavior, PaperDialogBehaviorImpl];\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/iron-flex-layout/iron-flex-layout.js';\nimport '@polymer/paper-styles/default-theme.js';\n\nimport {PaperDialogBehaviorImpl} from '@polymer/paper-dialog-behavior/paper-dialog-behavior.js';\nimport {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js';\nimport {html} from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\nMaterial design:\n[Dialogs](https://www.google.com/design/spec/components/dialogs.html)\n\n`paper-dialog-scrollable` implements a scrolling area used in a Material Design\ndialog. It shows a divider at the top and/or bottom indicating more content,\ndepending on scroll position. Use this together with elements implementing\n`Polymer.PaperDialogBehavior`.\n\n \n

Header

\n \n Lorem ipsum...\n \n
\n OK\n
\n
\n\nIt shows a top divider after scrolling if it is not the first child in its\nparent container, indicating there is more content above. It shows a bottom\ndivider if it is scrollable and it is not the last child in its parent\ncontainer, indicating there is more content below. The bottom divider is hidden\nif it is scrolled to the bottom.\n\nIf `paper-dialog-scrollable` is not a direct child of the element implementing\n`Polymer.PaperDialogBehavior`, remember to set the `dialogElement`:\n\n \n

Header

\n
\n

Sub-header

\n \n Lorem ipsum...\n \n
\n
\n OK\n
\n
\n\n \n\n### Styling\nThe following custom properties and mixins are available for styling:\n\nCustom property | Description | Default\n----------------|-------------|----------\n`--paper-dialog-scrollable` | Mixin for the scrollable content | {}\n\n@group Paper Elements\n@element paper-dialog-scrollable\n@demo demo/index.html\n@hero hero.svg\n*/\nPolymer({\n _template: html`\n \n\n
\n \n
\n`,\n\n is: 'paper-dialog-scrollable',\n\n properties: {\n\n /**\n * The dialog element that implements `Polymer.PaperDialogBehavior`\n * containing this element.\n * @type {?Node}\n */\n dialogElement: {type: Object}\n\n },\n\n /**\n * Returns the scrolling element.\n */\n get scrollTarget() {\n return this.$.scrollable;\n },\n\n ready: function() {\n this._ensureTarget();\n this.classList.add('no-padding');\n },\n\n attached: function() {\n this._ensureTarget();\n requestAnimationFrame(this.updateScrollState.bind(this));\n },\n\n updateScrollState: function() {\n this.toggleClass('is-scrolled', this.scrollTarget.scrollTop > 0);\n this.toggleClass(\n 'can-scroll',\n this.scrollTarget.offsetHeight < this.scrollTarget.scrollHeight);\n this.toggleClass(\n 'scrolled-to-bottom',\n this.scrollTarget.scrollTop + this.scrollTarget.offsetHeight >=\n this.scrollTarget.scrollHeight);\n },\n\n _ensureTarget: function() {\n // Read parentElement instead of parentNode in order to skip shadowRoots.\n this.dialogElement = this.dialogElement || this.parentElement;\n // Check if dialog implements paper-dialog-behavior. If not, fit\n // scrollTarget to host.\n if (this.dialogElement && this.dialogElement.behaviors &&\n this.dialogElement.behaviors.indexOf(PaperDialogBehaviorImpl) >= 0) {\n this.dialogElement.sizingTarget = this.scrollTarget;\n this.scrollTarget.classList.remove('fit');\n } else if (this.dialogElement) {\n this.scrollTarget.classList.add('fit');\n }\n }\n});\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/*\n### Styling\n\nThe following custom properties and mixins are available for styling.\n\nCustom property | Description | Default\n----------------|-------------|----------\n`--paper-dialog-background-color` | Dialog background color | `--primary-background-color`\n`--paper-dialog-color` | Dialog foreground color | `--primary-text-color`\n`--paper-dialog` | Mixin applied to the dialog | `{}`\n`--paper-dialog-title` | Mixin applied to the title (`

`) element | `{}`\n`--paper-dialog-button-color` | Button area foreground color | `--default-primary-color`\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/iron-flex-layout/iron-flex-layout.js';\nimport '@polymer/paper-styles/default-theme.js';\nimport '@polymer/paper-styles/typography.js';\nimport '@polymer/paper-styles/shadow.js';\nconst $_documentContainer = document.createElement('template');\n$_documentContainer.setAttribute('style', 'display: none;');\n\n$_documentContainer.innerHTML = `\n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js';\n\nimport {NeonAnimationRunnerBehavior} from '@polymer/neon-animation/neon-animation-runner-behavior.js';\nimport {PaperDialogBehavior} from '@polymer/paper-dialog-behavior/paper-dialog-behavior.js';\nimport {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js';\nimport {html} from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\nMaterial design:\n[Dialogs](https://www.google.com/design/spec/components/dialogs.html)\n\n`` is a dialog with Material Design styling and optional\nanimations when it is opened or closed. It provides styles for a header, content\narea, and an action area for buttons. You can use the\n`` element (in its own repository) if you need a\nscrolling content area. To autofocus a specific child element after opening the\ndialog, give it the `autofocus` attribute. See `Polymer.PaperDialogBehavior` and\n`Polymer.IronOverlayBehavior` for specifics.\n\nFor example, the following code implements a dialog with a header, scrolling\ncontent area and buttons. Focus will be given to the `dialog-confirm` button\nwhen the dialog is opened.\n\n \n

Header

\n \n Lorem ipsum...\n \n
\n Cancel\n Accept\n
\n
\n\n### Styling\n\nSee the docs for `Polymer.PaperDialogBehavior` for the custom properties\navailable for styling this element.\n\n### Animations\n\nSet the `entry-animation` and/or `exit-animation` attributes to add an animation\nwhen the dialog is opened or closed. See the documentation in\n[PolymerElements/neon-animation](https://github.com/PolymerElements/neon-animation)\nfor more info.\n\nFor example:\n\n \n\n \n

Header

\n
Dialog body
\n
\n\n### Accessibility\n\nSee the docs for `Polymer.PaperDialogBehavior` for accessibility features\nimplemented by this element.\n\n@group Paper Elements\n@element paper-dialog\n@hero hero.svg\n@demo demo/index.html\n*/\nPolymer({\n _template: html`\n \n \n`,\n\n is: 'paper-dialog',\n behaviors: [PaperDialogBehavior, NeonAnimationRunnerBehavior],\n listeners: {'neon-animation-finish': '_onNeonAnimationFinish'},\n\n _renderOpened: function() {\n this.cancelAnimation();\n this.playAnimation('entry');\n },\n\n _renderClosed: function() {\n this.cancelAnimation();\n this.playAnimation('exit');\n },\n\n _onNeonAnimationFinish: function() {\n if (this.opened) {\n this._finishRenderOpened();\n } else {\n this._finishRenderClosed();\n }\n }\n});\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/*\n Fixes issue with not using shadow dom properly in iron-overlay-behavior/icon-focusables-helper.js\n*/\nimport { dom } from \"@polymer/polymer/lib/legacy/polymer.dom.js\";\n\nimport { IronFocusablesHelper } from \"@polymer/iron-overlay-behavior/iron-focusables-helper.js\";\n\nexport const HaIronFocusablesHelper = {\n /**\n * Returns a sorted array of tabbable nodes, including the root node.\n * It searches the tabbable nodes in the light and shadow dom of the chidren,\n * sorting the result by tabindex.\n * @param {!Node} node\n * @return {!Array}\n */\n getTabbableNodes: function(node) {\n var result = [];\n // If there is at least one element with tabindex > 0, we need to sort\n // the final array by tabindex.\n var needsSortByTabIndex = this._collectTabbableNodes(node, result);\n if (needsSortByTabIndex) {\n return IronFocusablesHelper._sortByTabIndex(result);\n }\n return result;\n },\n\n /**\n * Searches for nodes that are tabbable and adds them to the `result` array.\n * Returns if the `result` array needs to be sorted by tabindex.\n * @param {!Node} node The starting point for the search; added to `result`\n * if tabbable.\n * @param {!Array} result\n * @return {boolean}\n * @private\n */\n _collectTabbableNodes: function(node, result) {\n // If not an element or not visible, no need to explore children.\n if (\n node.nodeType !== Node.ELEMENT_NODE ||\n !IronFocusablesHelper._isVisible(node)\n ) {\n return false;\n }\n var element = /** @type {!HTMLElement} */ (node);\n var tabIndex = IronFocusablesHelper._normalizedTabIndex(element);\n var needsSort = tabIndex > 0;\n if (tabIndex >= 0) {\n result.push(element);\n }\n\n // In ShadowDOM v1, tab order is affected by the order of distrubution.\n // E.g. getTabbableNodes(#root) in ShadowDOM v1 should return [#A, #B];\n // in ShadowDOM v0 tab order is not affected by the distrubution order,\n // in fact getTabbableNodes(#root) returns [#B, #A].\n //
\n // \n // \n // \n // \n // \n // \n //
\n // TODO(valdrin) support ShadowDOM v1 when upgrading to Polymer v2.0.\n var children;\n if (element.localName === \"content\" || element.localName === \"slot\") {\n children = dom(element).getDistributedNodes();\n } else {\n // /////////////////////////\n // Use shadow root if possible, will check for distributed nodes.\n // THIS IS THE CHANGED LINE\n children = dom(element.shadowRoot || element.root || element).children;\n // /////////////////////////\n }\n for (var i = 0; i < children.length; i++) {\n // Ensure method is always invoked to collect tabbable children.\n needsSort = this._collectTabbableNodes(children[i], result) || needsSort;\n }\n return needsSort;\n },\n};\n","import \"@polymer/paper-dialog/paper-dialog\";\nimport { mixinBehaviors } from \"@polymer/polymer/lib/legacy/class\";\nimport { HaIronFocusablesHelper } from \"./ha-iron-focusables-helper.js\";\n// tslint:disable-next-line\nimport { PaperDialogElement } from \"@polymer/paper-dialog/paper-dialog\";\n\nconst paperDialogClass = customElements.get(\"paper-dialog\");\n\n// behavior that will override existing iron-overlay-behavior and call the fixed implementation\nconst haTabFixBehaviorImpl = {\n get _focusableNodes() {\n return HaIronFocusablesHelper.getTabbableNodes(this);\n },\n};\n\n// paper-dialog that uses the haTabFixBehaviorImpl behvaior\n// export class HaPaperDialog extends paperDialogClass {}\n// @ts-ignore\nexport class HaPaperDialog\n extends mixinBehaviors([haTabFixBehaviorImpl], paperDialogClass)\n implements PaperDialogElement {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-paper-dialog\": HaPaperDialog;\n }\n}\ncustomElements.define(\"ha-paper-dialog\", HaPaperDialog);\n","import {\n customElement,\n CSSResult,\n css,\n query,\n html,\n property,\n} from \"lit-element\";\nimport \"@material/mwc-switch\";\nimport { style } from \"@material/mwc-switch/mwc-switch-css\";\n// tslint:disable-next-line\nimport { Switch } from \"@material/mwc-switch\";\nimport { Constructor } from \"../types\";\nimport { forwardHaptic } from \"../data/haptics\";\nimport { ripple } from \"@material/mwc-ripple/ripple-directive\";\n// tslint:disable-next-line\nconst MwcSwitch = customElements.get(\"mwc-switch\") as Constructor;\n\n@customElement(\"ha-switch\")\nexport class HaSwitch extends MwcSwitch {\n // Generate a haptic vibration.\n // Only set to true if the new value of the switch is applied right away when toggling.\n // Do not add haptic when a user is required to press save.\n @property({ type: Boolean }) public haptic = false;\n @query(\"slot\") private _slot!: HTMLSlotElement;\n\n protected firstUpdated() {\n super.firstUpdated();\n this.style.setProperty(\n \"--mdc-theme-secondary\",\n \"var(--switch-checked-color)\"\n );\n this.classList.toggle(\n \"slotted\",\n Boolean(this._slot.assignedNodes().length)\n );\n this.addEventListener(\"change\", () => {\n if (this.haptic) {\n forwardHaptic(\"light\");\n }\n });\n }\n\n protected render() {\n return html`\n
\n
\n \n
\n \n
\n
\n \n \n `;\n }\n\n protected static get styles(): CSSResult[] {\n return [\n style,\n css`\n :host {\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n .mdc-switch.mdc-switch--checked .mdc-switch__thumb {\n background-color: var(--switch-checked-button-color);\n border-color: var(--switch-checked-button-color);\n }\n .mdc-switch.mdc-switch--checked .mdc-switch__track {\n background-color: var(--switch-checked-track-color);\n border-color: var(--switch-checked-track-color);\n }\n .mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb {\n background-color: var(--switch-unchecked-button-color);\n border-color: var(--switch-unchecked-button-color);\n }\n .mdc-switch:not(.mdc-switch--checked) .mdc-switch__track {\n background-color: var(--switch-unchecked-track-color);\n border-color: var(--switch-unchecked-track-color);\n }\n :host(.slotted) .mdc-switch {\n margin-right: 24px;\n }\n `,\n ];\n }\n\n private _haChangeHandler(e: Event) {\n this.mdcFoundation.handleChange(e);\n // catch \"click\" event and sync properties\n this.checked = this.formElement.checked;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-switch\": HaSwitch;\n }\n}\n","/**\n * Broadcast haptic feedback requests\n */\n\nimport { fireEvent, HASSDomEvent } from \"../common/dom/fire_event\";\n\n// Allowed types are from iOS HIG.\n// https://developer.apple.com/design/human-interface-guidelines/ios/user-interaction/feedback/#haptics\n// Implementors on platforms other than iOS should attempt to match the patterns (shown in HIG) as closely as possible.\nexport type HapticType =\n | \"success\"\n | \"warning\"\n | \"failure\"\n | \"light\"\n | \"medium\"\n | \"heavy\"\n | \"selection\";\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n haptic: HapticType;\n }\n\n interface GlobalEventHandlersEventMap {\n haptic: HASSDomEvent;\n }\n}\n\nexport const forwardHaptic = (hapticType: HapticType) => {\n fireEvent(window, \"haptic\", hapticType);\n};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/hassio/api/panel/chunk.8b198fe00454712c9c14.js b/hassio/api/panel/chunk.43e40fd69686ad51301d.js similarity index 99% rename from hassio/api/panel/chunk.8b198fe00454712c9c14.js rename to hassio/api/panel/chunk.43e40fd69686ad51301d.js index 81139b7b2..140f7e4a6 100644 --- a/hassio/api/panel/chunk.8b198fe00454712c9c14.js +++ b/hassio/api/panel/chunk.43e40fd69686ad51301d.js @@ -1,2 +1,2 @@ -(self.webpackJsonp=self.webpackJsonp||[]).push([[7],{177:function(e,t,r){"use strict";r.r(t);r(109),r(125),r(48),r(24),r(82);var n=r(5),i=r(27),o=r(15),a=r(10),s=(r(136),r(18),r(19),r(172),r(173),r(137),r(116));function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(){var e=h(["\n :host,\n paper-card,\n paper-dropdown-menu {\n display: block;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n paper-item {\n width: 450px;\n }\n .card-actions {\n text-align: right;\n }\n "]);return l=function(){return e},e}function d(){var e=h(["\n ","\n "]);return d=function(){return e},e}function u(){var e=h(["\n ","\n "]);return u=function(){return e},e}function p(){var e=h(['\n
',"
\n "]);return p=function(){return e},e}function f(){var e=h(['\n \n
\n ','\n\n \n \n \n \n \n \n
\n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n ".concat(e.codeMirrorCss,"\n .CodeMirror {\n height: var(--code-mirror-height, auto);\n direction: var(--code-mirror-direction, ltr);\n }\n .CodeMirror-scroll {\n max-height: var(--code-mirror-max-height, --code-mirror-height);\n }\n .CodeMirror-gutters {\n border-right: 1px solid var(--paper-input-container-color, var(--secondary-text-color));\n background-color: var(--paper-dialog-background-color, var(--primary-background-color));\n transition: 0.2s ease border-right;\n }\n :host(.error-state) .CodeMirror-gutters {\n border-color: var(--error-state-color, red);\n }\n .CodeMirror-focused .CodeMirror-gutters {\n border-right: 2px solid var(--paper-input-container-focus-color, var(--primary-color));\n }\n .CodeMirror-linenumber {\n color: var(--paper-dialog-color, var(--primary-text-color));\n }\n .rtl .CodeMirror-vscrollbar {\n right: auto;\n left: 0px;\n }\n .rtl-gutter {\n width: 20px;\n }\n "),this.codemirror=t(n,{value:this._value,lineNumbers:!0,tabSize:2,mode:this.mode,autofocus:!1!==this.autofocus,viewportMargin:1/0,extraKeys:{Tab:"indentMore","Shift-Tab":"indentLess"},gutters:this._calcGutters()}),this._setScrollBarDirection(),this.codemirror.on("changes",function(){return i._onChange()});case 9:case"end":return o.stop()}},null,this)}},{kind:"method",key:"_onChange",value:function(){var e=this.value;e!==this._value&&(this._value=e,Object(P.a)(this,"value-changed",{value:this._value}))}},{kind:"method",key:"_calcGutters",value:function(){return this.rtl?["rtl-gutter","CodeMirror-linenumbers"]:[]}},{kind:"method",key:"_setScrollBarDirection",value:function(){this.codemirror&&this.codemirror.getWrapperElement().classList.toggle("rtl",this.rtl)}}]}},n.b);var M=function(e){requestAnimationFrame(function(){return setTimeout(e,0)})};function U(){var e=V(["\n

","

\n "]);return U=function(){return e},e}function L(){var e=V(["\n ","\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;aInvalid YAML
\n ']);return re=function(){return e},e}function ne(){var e=oe(['\n
',"
\n "]);return ne=function(){return e},e}function ie(){var e=oe(['\n \n
\n \n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a bit more top margin */\n font-weight: 500;\n overflow: hidden;\n text-transform: uppercase;\n text-overflow: ellipsis;\n transition: background-color 0.3s ease-in-out;\n text-transform: var(--ha-label-badge-label-text-transform, uppercase);\n }\n .label-badge .label.big span {\n font-size: 90%;\n padding: 10% 12% 7% 12%; /* push smaller text a bit down to center vertically */\n }\n .badge-container .title {\n margin-top: 1em;\n font-size: var(--ha-label-badge-title-font-size, 0.9em);\n width: var(--ha-label-badge-title-width, 5em);\n font-weight: var(--ha-label-badge-title-font-weight, 400);\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: normal;\n }\n "]);return xe=function(){return e},e}function De(){var e=ze(['\n
',"
\n "]);return De=function(){return e},e}function Ae(){var e=ze(['\n \n ',"\n
\n "]);return Ae=function(){return e},e}function Ce(){var e=ze(["\n ","\n "]);return Ce=function(){return e},e}function Te(){var e=ze(['\n \n ']);return Te=function(){return e},e}function Se(){var e=ze(['\n
\n
\n \n ',"\n ","\n
\n ","\n
\n ","\n
\n "]);return Se=function(){return e},e}function ze(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Re(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Fe(e,t){return(Fe=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function Ie(e){var t,r=Le(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function He(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function Ne(e){return e.decorators&&e.decorators.length}function Me(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function Ue(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Le(e){var t=function(e,t){if("object"!==Pe(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Pe(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Pe(t)?t:String(t)}function Ve(e,t,r){return(Ve="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Be(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function Be(e){return(Be=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}customElements.define("ha-icon",_e);var qe=function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!Ne(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a4)}),!this.icon||this.value||this.image?"":Object(n.e)(Te(),this.icon),this.value&&!this.image?Object(n.e)(Ce(),this.value):"",this.label?Object(n.e)(Ae(),Object(ve.a)({label:!0,big:this.label.length>5}),this.label):"",this.description?Object(n.e)(De(),this.description):"")}},{kind:"get",static:!0,key:"styles",value:function(){return[Object(n.c)(xe())]}},{kind:"method",key:"updated",value:function(e){Ve(Be(r.prototype),"updated",this).call(this,e),e.has("image")&&(this.shadowRoot.getElementById("badge").style.backgroundImage=this.image?"url(".concat(this.image,")"):"")}}]}},n.a);customElements.define("ha-label-badge",qe);r(87),r(93),r(41);var We=r(37),Ge=r(117);function Ye(e){return(Ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Je(e,t){return Ut(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var r=[],n=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(c){i=!0,o=c}finally{try{n||null==s.return||s.return()}finally{if(i)throw o}}return r}(e,t)||Mt()}function Ke(){var e=At(["\n :host {\n display: block;\n }\n paper-card {\n display: block;\n margin-bottom: 16px;\n }\n paper-card.warning {\n background-color: var(--google-red-500);\n color: white;\n --paper-card-header-color: white;\n }\n paper-card.warning mwc-button {\n --mdc-theme-primary: white !important;\n }\n .warning {\n color: var(--google-red-500);\n --mdc-theme-primary: var(--google-red-500);\n }\n .light-color {\n color: var(--secondary-text-color);\n }\n .addon-header {\n font-size: 24px;\n color: var(--paper-card-header-color, --primary-text-color);\n }\n .addon-version {\n float: right;\n font-size: 15px;\n vertical-align: middle;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n .description {\n margin-bottom: 16px;\n }\n .logo img {\n max-height: 60px;\n margin: 16px 0;\n display: block;\n }\n .state {\n display: flex;\n margin: 33px 0;\n }\n .state div {\n width: 180px;\n display: inline-block;\n }\n .state iron-icon {\n width: 16px;\n height: 16px;\n color: var(--secondary-text-color);\n }\n ha-switch {\n display: flex;\n }\n iron-icon.running {\n color: var(--paper-green-400);\n }\n iron-icon.stopped {\n color: var(--google-red-300);\n }\n ha-call-api-button {\n font-weight: 500;\n color: var(--primary-color);\n }\n .right {\n float: right;\n }\n ha-markdown img {\n max-width: 100%;\n }\n protection-enable mwc-button {\n --mdc-theme-primary: white;\n }\n .description a,\n ha-markdown a {\n color: var(--primary-color);\n }\n .red {\n --ha-label-badge-color: var(--label-badge-red, #df4c1e);\n }\n .blue {\n --ha-label-badge-color: var(--label-badge-blue, #039be5);\n }\n .green {\n --ha-label-badge-color: var(--label-badge-green, #0da035);\n }\n .yellow {\n --ha-label-badge-color: var(--label-badge-yellow, #f4b400);\n }\n .security {\n margin-bottom: 16px;\n }\n .card-actions {\n display: flow-root;\n }\n .security h3 {\n margin-bottom: 8px;\n font-weight: normal;\n }\n .security ha-label-badge {\n cursor: pointer;\n margin-right: 4px;\n --iron-icon-height: 45px;\n }\n "]);return Ke=function(){return e},e}function Qe(){var e=At(['\n \n
\n \n This add-on is not available on your system.\n

\n ']);return Xe=function(){return e},e}function Ze(){var e=At(["\n ","\n \n Install\n \n "]);return Ze=function(){return e},e}function $e(){var e=At(['\n \n \n Open web UI\n \n \n ']);return et=function(){return e},e}function tt(){var e=At(["\n \n Start\n \n ']);return tt=function(){return e},e}function rt(){var e=At(['\n \n Restart\n \n \n Stop\n \n ']);return rt=function(){return e},e}function nt(){var e=At(['\n \n Rebuild\n \n ']);return nt=function(){return e},e}function it(){var e=At(['\n ',"
\n "]);return ot=function(){return e},e}function at(){var e=At(['\n
\n
\n Protection mode\n \n \n \n Grant the add-on elevated system access.\n \n \n
\n \n
Show in sidebar
\n \n
Start on boot
\n \n
\n
\n
Auto update
\n \n ']);return dt=function(){return e},e}function ut(){var e=At(["\n \n ']);return ut=function(){return e},e}function pt(){var e=At(["\n \n ']);return pt=function(){return e},e}function ft(){var e=At(["\n \n ']);return ft=function(){return e},e}function ht(){var e=At(["\n \n ']);return ht=function(){return e},e}function mt(){var e=At(["\n \n ']);return vt=function(){return e},e}function yt(){var e=At(["\n \n ']);return yt=function(){return e},e}function bt(){var e=At(["\n \n ']);return bt=function(){return e},e}function gt(){var e=At(['\n \n ']);return gt=function(){return e},e}function wt(){var e=At(["\n ","\n "]);return wt=function(){return e},e}function kt(){var e=At(['\n \n ']);return kt=function(){return e},e}function Et(){var e=At(['\n \n ']);return Et=function(){return e},e}function Ot(){var e=At(["\n ","\n ","\n "]);return Ot=function(){return e},e}function jt(){var e=At(['\n \n
\n Protection mode on this add-on is disabled! This gives the add-on full access to the entire system, which adds security risks, and could damage your system when used incorrectly. Only disable the protection mode if you know, need AND trust the source of this add-on.\n
\n
\n \n
\n \n ','\n
\n
\n \n Update\n \n ',"\n
\n \n "]);return xt=function(){return e},e}function Dt(){var e=At(["\n ","\n ",'\n\n \n \n
\n ',"\n
\n
\n\n ","\n "]);return Dt=function(){return e},e}function At(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Ct(e){return(Ct=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function Tt(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function St(e,t){return(St=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function zt(e){var t,r=Nt(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function Rt(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function Ft(e){return e.decorators&&e.decorators.length}function It(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function Ht(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Nt(e){var t=function(e,t){if("object"!==Ye(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Ye(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Ye(t)?t:String(t)}function Mt(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function Ut(e){if(Array.isArray(e))return e}var Lt={rating:{title:"Add-on Security Rating",description:"Hass.io provides a security rating to each of the add-ons, which indicates the risks involved when using this add-on. The more access an add-on requires on your system, the lower the score, thus raising the possible security risks.\n\nA score is on a scale from 1 to 6. Where 1 is the lowest score (considered the most insecure and highest risk) and a score of 6 is the highest score (considered the most secure and lowest risk)."},host_network:{title:"Host Network",description:"Add-ons usually run in their own isolated network layer, which prevents them from accessing the network of the host operating system. In some cases, this network isolation can limit add-ons in providing their services and therefore, the isolation can be lifted by the add-on author, giving the add-on full access to the network capabilities of the host machine. This gives the add-on more networking capabilities but lowers the security, hence, the security rating of the add-on will be lowered when this option is used by the add-on."},homeassistant_api:{title:"Home Assistant API Access",description:"This add-on is allowed to access your running Home Assistant instance directly via the Home Assistant API. This mode handles authentication for the add-on as well, which enables an add-on to interact with Home Assistant without the need for additional authentication tokens."},full_access:{title:"Full Hardware Access",description:"This add-on is given full access to the hardware of your system, by request of the add-on author. Access is comparable to the privileged mode in Docker. Since this opens up possible security risks, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on."},hassio_api:{title:"Hass.io API Access",description:"The add-on was given access to the Hass.io API, by request of the add-on author. By default, the add-on can access general version information of your system. When the add-on requests 'manager' or 'admin' level access to the API, it will gain access to control multiple parts of your Hass.io system. This permission is indicated by this badge and will impact the security score of the addon negatively."},docker_api:{title:"Full Docker Access",description:"The add-on author has requested the add-on to have management access to the Docker instance running on your system. This mode gives the add-on full access and control to your entire Hass.io system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on."},host_pid:{title:"Host Processes Namespace",description:"Usually, the processes the add-on runs, are isolated from all other system processes. The add-on author has requested the add-on to have access to the system processes running on the host system instance, and allow the add-on to spawn processes on the host system as well. This mode gives the add-on full access and control to your entire Hass.io system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on."},apparmor:{title:"AppArmor",description:"AppArmor ('Application Armor') is a Linux kernel security module that restricts add-ons capabilities like network access, raw socket access, and permission to read, write, or execute specific files.\n\nAdd-on authors can provide their security profiles, optimized for the add-on, or request it to be disabled. If AppArmor is disabled, it will raise security risks and therefore, has a negative impact on the security score of the add-on."},auth_api:{title:"Home Assistant Authentication",description:"An add-on can authenticate users against Home Assistant, allowing add-ons to give users the possibility to log into applications running inside add-ons, using their Home Assistant username/password. This badge indicates if the add-on author requests this capability."},ingress:{title:"Ingress",description:"This add-on is using Ingress to embed its interface securely into Home Assistant."}},Vt=(function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!Ft(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a0||"0"===t&&Number(r)>=92}},{kind:"method",key:"_startOnBootToggled",value:function(){var e,t,r;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return this._error=void 0,e={boot:"auto"===this.addon.boot?"manual":"auto"},n.prev=2,n.next=5,regeneratorRuntime.awrap(Object(i.g)(this.hass,this.addon.slug,e));case 5:t={success:!0,response:void 0,path:"option"},Object(P.a)(this,"hass-api-called",t),n.next=12;break;case 9:n.prev=9,n.t0=n.catch(2),this._error="Failed to set addon option, ".concat((null===(r=n.t0.body)||void 0===r?void 0:r.message)||n.t0);case 12:case"end":return n.stop()}},null,this,[[2,9]])}},{kind:"method",key:"_autoUpdateToggled",value:function(){var e,t,r;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return this._error=void 0,e={auto_update:!this.addon.auto_update},n.prev=2,n.next=5,regeneratorRuntime.awrap(Object(i.g)(this.hass,this.addon.slug,e));case 5:t={success:!0,response:void 0,path:"option"},Object(P.a)(this,"hass-api-called",t),n.next=12;break;case 9:n.prev=9,n.t0=n.catch(2),this._error="Failed to set addon option, ".concat((null===(r=n.t0.body)||void 0===r?void 0:r.message)||n.t0);case 12:case"end":return n.stop()}},null,this,[[2,9]])}},{kind:"method",key:"_protectionToggled",value:function(){var e,t,r;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return this._error=void 0,e={protected:!this.addon.protected},n.prev=2,n.next=5,regeneratorRuntime.awrap(Object(i.h)(this.hass,this.addon.slug,e));case 5:t={success:!0,response:void 0,path:"security"},Object(P.a)(this,"hass-api-called",t),n.next=12;break;case 9:n.prev=9,n.t0=n.catch(2),this._error="Failed to set addon security option, ".concat((null===(r=n.t0.body)||void 0===r?void 0:r.message)||n.t0);case 12:case"end":return n.stop()}},null,this,[[2,9]])}},{kind:"method",key:"_panelToggled",value:function(){var e,t,r;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return this._error=void 0,e={ingress_panel:!this.addon.ingress_panel},n.prev=2,n.next=5,regeneratorRuntime.awrap(Object(i.g)(this.hass,this.addon.slug,e));case 5:t={success:!0,response:void 0,path:"option"},Object(P.a)(this,"hass-api-called",t),n.next=12;break;case 9:n.prev=9,n.t0=n.catch(2),this._error="Failed to set addon option, ".concat((null===(r=n.t0.body)||void 0===r?void 0:r.message)||n.t0);case 12:case"end":return n.stop()}},null,this,[[2,9]])}},{kind:"method",key:"_openChangelog",value:function(){var e,t;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return this._error=void 0,r.prev=1,r.next=4,regeneratorRuntime.awrap(Object(i.a)(this.hass,this.addon.slug));case 4:e=r.sent,Object(Ge.a)(this,{title:"Changelog",content:e}),r.next=11;break;case 8:r.prev=8,r.t0=r.catch(1),this._error="Failed to get addon changelog, ".concat((null===(t=r.t0.body)||void 0===t?void 0:t.message)||r.t0);case 11:case"end":return r.stop()}},null,this,[[1,8]])}},{kind:"method",key:"_installClicked",value:function(){var e,t;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return this._error=void 0,this._installing=!0,r.prev=2,r.next=5,regeneratorRuntime.awrap(Object(i.e)(this.hass,this.addon.slug));case 5:e={success:!0,response:void 0,path:"install"},Object(P.a)(this,"hass-api-called",e),r.next=12;break;case 9:r.prev=9,r.t0=r.catch(2),this._error="Failed to install addon, ".concat((null===(t=r.t0.body)||void 0===t?void 0:t.message)||r.t0);case 12:this._installing=!1;case 13:case"end":return r.stop()}},null,this,[[2,9]])}},{kind:"method",key:"_uninstallClicked",value:function(){var e,t;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:if(confirm("Are you sure you want to uninstall this add-on?")){r.next=2;break}return r.abrupt("return");case 2:return this._error=void 0,r.prev=3,r.next=6,regeneratorRuntime.awrap(Object(i.i)(this.hass,this.addon.slug));case 6:e={success:!0,response:void 0,path:"uninstall"},Object(P.a)(this,"hass-api-called",e),r.next=13;break;case 10:r.prev=10,r.t0=r.catch(3),this._error="Failed to uninstall addon, ".concat((null===(t=r.t0.body)||void 0===t?void 0:t.message)||r.t0);case 13:case"end":return r.stop()}},null,this,[[3,10]])}}]}},n.a),r(118));function Bt(e){return(Bt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function qt(){var e=Yt(["\n :host,\n paper-card {\n display: block;\n }\n pre {\n overflow-x: auto;\n white-space: pre-wrap;\n overflow-wrap: break-word;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n "]);return qt=function(){return e},e}function Wt(){var e=Yt(['\n
',"
\n "]);return Wt=function(){return e},e}function Gt(){var e=Yt(['\n \n ','\n
\n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n ","\n \n ',"
\n "]);return sr=function(){return e},e}function cr(){var e=dr(['\n \n
\n ',"\n\n \n \n \n \n \n \n \n ",'\n \n
ContainerHostDescription
\n
\n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;at.container?1:-1})}},{kind:"method",key:"_configChanged",value:function(e){var t;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:t=e.target,this._config.forEach(function(e){e.container===t.container&&e.host!==parseInt(String(t.value),10)&&(e.host=t.value?parseInt(String(t.value),10):null)});case 2:case"end":return r.stop()}},null,this)}},{kind:"method",key:"_resetTapped",value:function(){var e,t,r;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return e={network:null},n.prev=1,n.next=4,regeneratorRuntime.awrap(Object(i.g)(this.hass,this.addon.slug,e));case 4:t={success:!0,response:void 0,path:"option"},Object(P.a)(this,"hass-api-called",t),n.next=11;break;case 8:n.prev=8,n.t0=n.catch(1),this._error="Failed to set addon network configuration, ".concat((null===(r=n.t0.body)||void 0===r?void 0:r.message)||n.t0);case 11:case"end":return n.stop()}},null,this,[[1,8]])}},{kind:"method",key:"_saveTapped",value:function(){var e,t,r,n;return regeneratorRuntime.async(function(o){for(;;)switch(o.prev=o.next){case 0:return this._error=void 0,e={},this._config.forEach(function(t){e[t.container]=parseInt(String(t.host),10)}),t={network:e},o.prev=4,o.next=7,regeneratorRuntime.awrap(Object(i.g)(this.hass,this.addon.slug,t));case 7:r={success:!0,response:void 0,path:"option"},Object(P.a)(this,"hass-api-called",r),o.next=14;break;case 11:o.prev=11,o.t0=o.catch(4),this._error="Failed to set addon network configuration, ".concat((null===(n=o.t0.body)||void 0===n?void 0:n.message)||o.t0);case 14:case"end":return o.stop()}},null,this,[[4,11]])}}]}},n.a);function kr(e){return(kr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Er(){var e=Dr(["\n :host {\n color: var(--primary-text-color);\n --paper-card-header-color: var(--primary-text-color);\n }\n .content {\n padding: 24px 0 32px;\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config {\n margin-bottom: 24px;\n width: 600px;\n }\n hassio-addon-logs {\n max-width: calc(100% - 8px);\n min-width: 600px;\n }\n @media only screen and (max-width: 600px) {\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config,\n hassio-addon-logs {\n max-width: 100%;\n min-width: 100%;\n }\n }\n "]);return Er=function(){return e},e}function Or(){var e=Dr(["\n \n "]);return Or=function(){return e},e}function jr(){var e=Dr(["\n \n "]);return jr=function(){return e},e}function _r(){var e=Dr(["\n \n\n ","\n ","\n\n \n "]);return _r=function(){return e},e}function Pr(){var e=Dr(['\n \n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n
\n \n
\n \n
\n
\n
\n \n ']);return l=function(){return e},e}function d(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function u(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function p(e,t){return(p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function f(e){var t,r=b(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function h(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function m(e){return e.decorators&&e.decorators.length}function v(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function y(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function b(e){var t=function(e,t){if("object"!==s(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===s(t)?t:String(t)}function g(e,t,r){return(g="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=w(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function w(e){return(w=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var k=customElements.get("mwc-switch");!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!m(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a","\n "]);return d=function(){return e},e}function u(){var e=h(["\n ","\n "]);return u=function(){return e},e}function p(){var e=h(['\n
',"
\n "]);return p=function(){return e},e}function f(){var e=h(['\n \n
\n ','\n\n \n \n \n \n \n \n
\n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n ".concat(e.codeMirrorCss,"\n .CodeMirror {\n height: var(--code-mirror-height, auto);\n direction: var(--code-mirror-direction, ltr);\n }\n .CodeMirror-scroll {\n max-height: var(--code-mirror-max-height, --code-mirror-height);\n }\n .CodeMirror-gutters {\n border-right: 1px solid var(--paper-input-container-color, var(--secondary-text-color));\n background-color: var(--paper-dialog-background-color, var(--primary-background-color));\n transition: 0.2s ease border-right;\n }\n :host(.error-state) .CodeMirror-gutters {\n border-color: var(--error-state-color, red);\n }\n .CodeMirror-focused .CodeMirror-gutters {\n border-right: 2px solid var(--paper-input-container-focus-color, var(--primary-color));\n }\n .CodeMirror-linenumber {\n color: var(--paper-dialog-color, var(--primary-text-color));\n }\n .rtl .CodeMirror-vscrollbar {\n right: auto;\n left: 0px;\n }\n .rtl-gutter {\n width: 20px;\n }\n "),this.codemirror=t(n,{value:this._value,lineNumbers:!0,tabSize:2,mode:this.mode,autofocus:!1!==this.autofocus,viewportMargin:1/0,extraKeys:{Tab:"indentMore","Shift-Tab":"indentLess"},gutters:this._calcGutters()}),this._setScrollBarDirection(),this.codemirror.on("changes",function(){return i._onChange()});case 9:case"end":return o.stop()}},null,this)}},{kind:"method",key:"_onChange",value:function(){var e=this.value;e!==this._value&&(this._value=e,Object(P.a)(this,"value-changed",{value:this._value}))}},{kind:"method",key:"_calcGutters",value:function(){return this.rtl?["rtl-gutter","CodeMirror-linenumbers"]:[]}},{kind:"method",key:"_setScrollBarDirection",value:function(){this.codemirror&&this.codemirror.getWrapperElement().classList.toggle("rtl",this.rtl)}}]}},n.b);var M=function(e){requestAnimationFrame(function(){return setTimeout(e,0)})};function U(){var e=V(["\n

","

\n "]);return U=function(){return e},e}function L(){var e=V(["\n ","\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;aInvalid YAML
\n ']);return re=function(){return e},e}function ne(){var e=oe(['\n
',"
\n "]);return ne=function(){return e},e}function ie(){var e=oe(['\n \n
\n \n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a bit more top margin */\n font-weight: 500;\n overflow: hidden;\n text-transform: uppercase;\n text-overflow: ellipsis;\n transition: background-color 0.3s ease-in-out;\n text-transform: var(--ha-label-badge-label-text-transform, uppercase);\n }\n .label-badge .label.big span {\n font-size: 90%;\n padding: 10% 12% 7% 12%; /* push smaller text a bit down to center vertically */\n }\n .badge-container .title {\n margin-top: 1em;\n font-size: var(--ha-label-badge-title-font-size, 0.9em);\n width: var(--ha-label-badge-title-width, 5em);\n font-weight: var(--ha-label-badge-title-font-weight, 400);\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: normal;\n }\n "]);return xe=function(){return e},e}function De(){var e=ze(['\n
',"
\n "]);return De=function(){return e},e}function Ae(){var e=ze(['\n \n ',"\n
\n "]);return Ae=function(){return e},e}function Ce(){var e=ze(["\n ","\n "]);return Ce=function(){return e},e}function Te(){var e=ze(['\n \n ']);return Te=function(){return e},e}function Se(){var e=ze(['\n
\n
\n \n ',"\n ","\n
\n ","\n
\n ","\n
\n "]);return Se=function(){return e},e}function ze(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Re(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Fe(e,t){return(Fe=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function Ie(e){var t,r=Le(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function He(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function Ne(e){return e.decorators&&e.decorators.length}function Me(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function Ue(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Le(e){var t=function(e,t){if("object"!==Pe(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Pe(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Pe(t)?t:String(t)}function Ve(e,t,r){return(Ve="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Be(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function Be(e){return(Be=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}customElements.define("ha-icon",_e);var qe=function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!Ne(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a4)}),!this.icon||this.value||this.image?"":Object(n.e)(Te(),this.icon),this.value&&!this.image?Object(n.e)(Ce(),this.value):"",this.label?Object(n.e)(Ae(),Object(ve.a)({label:!0,big:this.label.length>5}),this.label):"",this.description?Object(n.e)(De(),this.description):"")}},{kind:"get",static:!0,key:"styles",value:function(){return[Object(n.c)(xe())]}},{kind:"method",key:"updated",value:function(e){Ve(Be(r.prototype),"updated",this).call(this,e),e.has("image")&&(this.shadowRoot.getElementById("badge").style.backgroundImage=this.image?"url(".concat(this.image,")"):"")}}]}},n.a);customElements.define("ha-label-badge",qe);r(87),r(93),r(41);var We=r(37),Ge=r(117);function Ye(e){return(Ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Je(e,t){return Ut(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var r=[],n=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(c){i=!0,o=c}finally{try{n||null==s.return||s.return()}finally{if(i)throw o}}return r}(e,t)||Mt()}function Ke(){var e=At(["\n :host {\n display: block;\n }\n paper-card {\n display: block;\n margin-bottom: 16px;\n }\n paper-card.warning {\n background-color: var(--google-red-500);\n color: white;\n --paper-card-header-color: white;\n }\n paper-card.warning mwc-button {\n --mdc-theme-primary: white !important;\n }\n .warning {\n color: var(--google-red-500);\n --mdc-theme-primary: var(--google-red-500);\n }\n .light-color {\n color: var(--secondary-text-color);\n }\n .addon-header {\n font-size: 24px;\n color: var(--paper-card-header-color, --primary-text-color);\n }\n .addon-version {\n float: right;\n font-size: 15px;\n vertical-align: middle;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n .description {\n margin-bottom: 16px;\n }\n .logo img {\n max-height: 60px;\n margin: 16px 0;\n display: block;\n }\n .state {\n display: flex;\n margin: 33px 0;\n }\n .state div {\n width: 180px;\n display: inline-block;\n }\n .state iron-icon {\n width: 16px;\n height: 16px;\n color: var(--secondary-text-color);\n }\n ha-switch {\n display: flex;\n }\n iron-icon.running {\n color: var(--paper-green-400);\n }\n iron-icon.stopped {\n color: var(--google-red-300);\n }\n ha-call-api-button {\n font-weight: 500;\n color: var(--primary-color);\n }\n .right {\n float: right;\n }\n ha-markdown img {\n max-width: 100%;\n }\n protection-enable mwc-button {\n --mdc-theme-primary: white;\n }\n .description a,\n ha-markdown a {\n color: var(--primary-color);\n }\n .red {\n --ha-label-badge-color: var(--label-badge-red, #df4c1e);\n }\n .blue {\n --ha-label-badge-color: var(--label-badge-blue, #039be5);\n }\n .green {\n --ha-label-badge-color: var(--label-badge-green, #0da035);\n }\n .yellow {\n --ha-label-badge-color: var(--label-badge-yellow, #f4b400);\n }\n .security {\n margin-bottom: 16px;\n }\n .card-actions {\n display: flow-root;\n }\n .security h3 {\n margin-bottom: 8px;\n font-weight: normal;\n }\n .security ha-label-badge {\n cursor: pointer;\n margin-right: 4px;\n --iron-icon-height: 45px;\n }\n "]);return Ke=function(){return e},e}function Qe(){var e=At(['\n \n
\n \n This add-on is not available on your system.\n

\n ']);return Xe=function(){return e},e}function Ze(){var e=At(["\n ","\n \n Install\n \n "]);return Ze=function(){return e},e}function $e(){var e=At(['\n \n \n Open web UI\n \n
\n ']);return et=function(){return e},e}function tt(){var e=At(["\n \n Start\n \n ']);return tt=function(){return e},e}function rt(){var e=At(['\n \n Restart\n \n \n Stop\n \n ']);return rt=function(){return e},e}function nt(){var e=At(['\n \n Rebuild\n \n ']);return nt=function(){return e},e}function it(){var e=At(['\n ',"
\n "]);return ot=function(){return e},e}function at(){var e=At(['\n
\n
\n Protection mode\n \n \n \n Grant the add-on elevated system access.\n \n \n
\n \n
Show in sidebar
\n \n
Start on boot
\n \n
\n
\n
Auto update
\n \n ']);return dt=function(){return e},e}function ut(){var e=At(["\n \n ']);return ut=function(){return e},e}function pt(){var e=At(["\n \n ']);return pt=function(){return e},e}function ft(){var e=At(["\n \n ']);return ft=function(){return e},e}function ht(){var e=At(["\n \n ']);return ht=function(){return e},e}function mt(){var e=At(["\n \n ']);return vt=function(){return e},e}function yt(){var e=At(["\n \n ']);return yt=function(){return e},e}function bt(){var e=At(["\n \n ']);return bt=function(){return e},e}function gt(){var e=At(['\n \n ']);return gt=function(){return e},e}function wt(){var e=At(["\n ","\n "]);return wt=function(){return e},e}function kt(){var e=At(['\n \n ']);return kt=function(){return e},e}function Et(){var e=At(['\n \n ']);return Et=function(){return e},e}function Ot(){var e=At(["\n ","\n ","\n "]);return Ot=function(){return e},e}function jt(){var e=At(['\n \n
\n Protection mode on this add-on is disabled! This gives the add-on full access to the entire system, which adds security risks, and could damage your system when used incorrectly. Only disable the protection mode if you know, need AND trust the source of this add-on.\n
\n
\n \n
\n \n ','\n
\n
\n \n Update\n \n ',"\n
\n \n "]);return xt=function(){return e},e}function Dt(){var e=At(["\n ","\n ",'\n\n \n \n
\n ',"\n
\n
\n\n ","\n "]);return Dt=function(){return e},e}function At(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Ct(e){return(Ct=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function Tt(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function St(e,t){return(St=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function zt(e){var t,r=Nt(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function Rt(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function Ft(e){return e.decorators&&e.decorators.length}function It(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function Ht(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Nt(e){var t=function(e,t){if("object"!==Ye(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Ye(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Ye(t)?t:String(t)}function Mt(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function Ut(e){if(Array.isArray(e))return e}var Lt={rating:{title:"Add-on Security Rating",description:"Hass.io provides a security rating to each of the add-ons, which indicates the risks involved when using this add-on. The more access an add-on requires on your system, the lower the score, thus raising the possible security risks.\n\nA score is on a scale from 1 to 6. Where 1 is the lowest score (considered the most insecure and highest risk) and a score of 6 is the highest score (considered the most secure and lowest risk)."},host_network:{title:"Host Network",description:"Add-ons usually run in their own isolated network layer, which prevents them from accessing the network of the host operating system. In some cases, this network isolation can limit add-ons in providing their services and therefore, the isolation can be lifted by the add-on author, giving the add-on full access to the network capabilities of the host machine. This gives the add-on more networking capabilities but lowers the security, hence, the security rating of the add-on will be lowered when this option is used by the add-on."},homeassistant_api:{title:"Home Assistant API Access",description:"This add-on is allowed to access your running Home Assistant instance directly via the Home Assistant API. This mode handles authentication for the add-on as well, which enables an add-on to interact with Home Assistant without the need for additional authentication tokens."},full_access:{title:"Full Hardware Access",description:"This add-on is given full access to the hardware of your system, by request of the add-on author. Access is comparable to the privileged mode in Docker. Since this opens up possible security risks, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on."},hassio_api:{title:"Hass.io API Access",description:"The add-on was given access to the Hass.io API, by request of the add-on author. By default, the add-on can access general version information of your system. When the add-on requests 'manager' or 'admin' level access to the API, it will gain access to control multiple parts of your Hass.io system. This permission is indicated by this badge and will impact the security score of the addon negatively."},docker_api:{title:"Full Docker Access",description:"The add-on author has requested the add-on to have management access to the Docker instance running on your system. This mode gives the add-on full access and control to your entire Hass.io system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on."},host_pid:{title:"Host Processes Namespace",description:"Usually, the processes the add-on runs, are isolated from all other system processes. The add-on author has requested the add-on to have access to the system processes running on the host system instance, and allow the add-on to spawn processes on the host system as well. This mode gives the add-on full access and control to your entire Hass.io system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\n\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on."},apparmor:{title:"AppArmor",description:"AppArmor ('Application Armor') is a Linux kernel security module that restricts add-ons capabilities like network access, raw socket access, and permission to read, write, or execute specific files.\n\nAdd-on authors can provide their security profiles, optimized for the add-on, or request it to be disabled. If AppArmor is disabled, it will raise security risks and therefore, has a negative impact on the security score of the add-on."},auth_api:{title:"Home Assistant Authentication",description:"An add-on can authenticate users against Home Assistant, allowing add-ons to give users the possibility to log into applications running inside add-ons, using their Home Assistant username/password. This badge indicates if the add-on author requests this capability."},ingress:{title:"Ingress",description:"This add-on is using Ingress to embed its interface securely into Home Assistant."}},Vt=(function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!Ft(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a0||"0"===t&&Number(r)>=92}},{kind:"method",key:"_startOnBootToggled",value:function(){var e,t,r;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return this._error=void 0,e={boot:"auto"===this.addon.boot?"manual":"auto"},n.prev=2,n.next=5,regeneratorRuntime.awrap(Object(i.g)(this.hass,this.addon.slug,e));case 5:t={success:!0,response:void 0,path:"option"},Object(P.a)(this,"hass-api-called",t),n.next=12;break;case 9:n.prev=9,n.t0=n.catch(2),this._error="Failed to set addon option, ".concat((null===(r=n.t0.body)||void 0===r?void 0:r.message)||n.t0);case 12:case"end":return n.stop()}},null,this,[[2,9]])}},{kind:"method",key:"_autoUpdateToggled",value:function(){var e,t,r;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return this._error=void 0,e={auto_update:!this.addon.auto_update},n.prev=2,n.next=5,regeneratorRuntime.awrap(Object(i.g)(this.hass,this.addon.slug,e));case 5:t={success:!0,response:void 0,path:"option"},Object(P.a)(this,"hass-api-called",t),n.next=12;break;case 9:n.prev=9,n.t0=n.catch(2),this._error="Failed to set addon option, ".concat((null===(r=n.t0.body)||void 0===r?void 0:r.message)||n.t0);case 12:case"end":return n.stop()}},null,this,[[2,9]])}},{kind:"method",key:"_protectionToggled",value:function(){var e,t,r;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return this._error=void 0,e={protected:!this.addon.protected},n.prev=2,n.next=5,regeneratorRuntime.awrap(Object(i.h)(this.hass,this.addon.slug,e));case 5:t={success:!0,response:void 0,path:"security"},Object(P.a)(this,"hass-api-called",t),n.next=12;break;case 9:n.prev=9,n.t0=n.catch(2),this._error="Failed to set addon security option, ".concat((null===(r=n.t0.body)||void 0===r?void 0:r.message)||n.t0);case 12:case"end":return n.stop()}},null,this,[[2,9]])}},{kind:"method",key:"_panelToggled",value:function(){var e,t,r;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return this._error=void 0,e={ingress_panel:!this.addon.ingress_panel},n.prev=2,n.next=5,regeneratorRuntime.awrap(Object(i.g)(this.hass,this.addon.slug,e));case 5:t={success:!0,response:void 0,path:"option"},Object(P.a)(this,"hass-api-called",t),n.next=12;break;case 9:n.prev=9,n.t0=n.catch(2),this._error="Failed to set addon option, ".concat((null===(r=n.t0.body)||void 0===r?void 0:r.message)||n.t0);case 12:case"end":return n.stop()}},null,this,[[2,9]])}},{kind:"method",key:"_openChangelog",value:function(){var e,t;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return this._error=void 0,r.prev=1,r.next=4,regeneratorRuntime.awrap(Object(i.a)(this.hass,this.addon.slug));case 4:e=r.sent,Object(Ge.a)(this,{title:"Changelog",content:e}),r.next=11;break;case 8:r.prev=8,r.t0=r.catch(1),this._error="Failed to get addon changelog, ".concat((null===(t=r.t0.body)||void 0===t?void 0:t.message)||r.t0);case 11:case"end":return r.stop()}},null,this,[[1,8]])}},{kind:"method",key:"_installClicked",value:function(){var e,t;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return this._error=void 0,this._installing=!0,r.prev=2,r.next=5,regeneratorRuntime.awrap(Object(i.e)(this.hass,this.addon.slug));case 5:e={success:!0,response:void 0,path:"install"},Object(P.a)(this,"hass-api-called",e),r.next=12;break;case 9:r.prev=9,r.t0=r.catch(2),this._error="Failed to install addon, ".concat((null===(t=r.t0.body)||void 0===t?void 0:t.message)||r.t0);case 12:this._installing=!1;case 13:case"end":return r.stop()}},null,this,[[2,9]])}},{kind:"method",key:"_uninstallClicked",value:function(){var e,t;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:if(confirm("Are you sure you want to uninstall this add-on?")){r.next=2;break}return r.abrupt("return");case 2:return this._error=void 0,r.prev=3,r.next=6,regeneratorRuntime.awrap(Object(i.i)(this.hass,this.addon.slug));case 6:e={success:!0,response:void 0,path:"uninstall"},Object(P.a)(this,"hass-api-called",e),r.next=13;break;case 10:r.prev=10,r.t0=r.catch(3),this._error="Failed to uninstall addon, ".concat((null===(t=r.t0.body)||void 0===t?void 0:t.message)||r.t0);case 13:case"end":return r.stop()}},null,this,[[3,10]])}}]}},n.a),r(118));function Bt(e){return(Bt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function qt(){var e=Yt(["\n :host,\n paper-card {\n display: block;\n }\n pre {\n overflow-x: auto;\n white-space: pre-wrap;\n overflow-wrap: break-word;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n "]);return qt=function(){return e},e}function Wt(){var e=Yt(['\n
',"
\n "]);return Wt=function(){return e},e}function Gt(){var e=Yt(['\n \n ','\n
\n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n ","\n \n ',"
\n "]);return sr=function(){return e},e}function cr(){var e=dr(['\n \n
\n ',"\n\n \n \n \n \n \n \n \n ",'\n \n
ContainerHostDescription
\n
\n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;at.container?1:-1})}},{kind:"method",key:"_configChanged",value:function(e){var t;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:t=e.target,this._config.forEach(function(e){e.container===t.container&&e.host!==parseInt(String(t.value),10)&&(e.host=t.value?parseInt(String(t.value),10):null)});case 2:case"end":return r.stop()}},null,this)}},{kind:"method",key:"_resetTapped",value:function(){var e,t,r;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return e={network:null},n.prev=1,n.next=4,regeneratorRuntime.awrap(Object(i.g)(this.hass,this.addon.slug,e));case 4:t={success:!0,response:void 0,path:"option"},Object(P.a)(this,"hass-api-called",t),n.next=11;break;case 8:n.prev=8,n.t0=n.catch(1),this._error="Failed to set addon network configuration, ".concat((null===(r=n.t0.body)||void 0===r?void 0:r.message)||n.t0);case 11:case"end":return n.stop()}},null,this,[[1,8]])}},{kind:"method",key:"_saveTapped",value:function(){var e,t,r,n;return regeneratorRuntime.async(function(o){for(;;)switch(o.prev=o.next){case 0:return this._error=void 0,e={},this._config.forEach(function(t){e[t.container]=parseInt(String(t.host),10)}),t={network:e},o.prev=4,o.next=7,regeneratorRuntime.awrap(Object(i.g)(this.hass,this.addon.slug,t));case 7:r={success:!0,response:void 0,path:"option"},Object(P.a)(this,"hass-api-called",r),o.next=14;break;case 11:o.prev=11,o.t0=o.catch(4),this._error="Failed to set addon network configuration, ".concat((null===(n=o.t0.body)||void 0===n?void 0:n.message)||o.t0);case 14:case"end":return o.stop()}},null,this,[[4,11]])}}]}},n.a);function kr(e){return(kr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Er(){var e=Dr(["\n :host {\n color: var(--primary-text-color);\n --paper-card-header-color: var(--primary-text-color);\n }\n .content {\n padding: 24px 0 32px;\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config {\n margin-bottom: 24px;\n width: 600px;\n }\n hassio-addon-logs {\n max-width: calc(100% - 8px);\n min-width: 600px;\n }\n @media only screen and (max-width: 600px) {\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config,\n hassio-addon-logs {\n max-width: 100%;\n min-width: 100%;\n }\n }\n "]);return Er=function(){return e},e}function Or(){var e=Dr(["\n \n "]);return Or=function(){return e},e}function jr(){var e=Dr(["\n \n "]);return jr=function(){return e},e}function _r(){var e=Dr(["\n \n\n ","\n ","\n\n \n "]);return _r=function(){return e},e}function Pr(){var e=Dr(['\n \n
\n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n
\n \n
\n \n
\n
\n
\n \n ']);return l=function(){return e},e}function d(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function u(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function p(e,t){return(p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function f(e){var t,r=b(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function h(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function m(e){return e.decorators&&e.decorators.length}function v(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function y(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function b(e){var t=function(e,t){if("object"!==s(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===s(t)?t:String(t)}function g(e,t,r){return(g="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=w(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function w(e){return(w=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var k=customElements.get("mwc-switch");!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!m(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;as 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 literal 0 HcmV?d00001 diff --git a/hassio/api/panel/chunk.8b198fe00454712c9c14.js.map b/hassio/api/panel/chunk.43e40fd69686ad51301d.js.map similarity index 99% rename from hassio/api/panel/chunk.8b198fe00454712c9c14.js.map rename to hassio/api/panel/chunk.43e40fd69686ad51301d.js.map index 3cde92939..55bdba152 100644 --- a/hassio/api/panel/chunk.8b198fe00454712c9c14.js.map +++ b/hassio/api/panel/chunk.43e40fd69686ad51301d.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./hassio/src/addon-view/hassio-addon-audio.ts","webpack:///./src/resources/codemirror.ondemand.ts","webpack:///./src/components/ha-code-editor.ts","webpack:///./src/common/util/render-status.ts","webpack:///./src/components/ha-yaml-editor.ts","webpack:///./hassio/src/addon-view/hassio-addon-config.ts","webpack:///./src/components/ha-icon.ts","webpack:///./src/components/ha-label-badge.ts","webpack:///./hassio/src/addon-view/hassio-addon-info.ts","webpack:///./hassio/src/addon-view/hassio-addon-logs.ts","webpack:///./hassio/src/addon-view/hassio-addon-network.ts","webpack:///./hassio/src/addon-view/hassio-addon-view.ts","webpack:///./src/components/ha-markdown.ts","webpack:///./src/resources/markdown_worker.ts","webpack:///./src/components/ha-switch.ts","webpack:///./src/data/haptics.ts"],"names":["customElement","HassioAddonAudio","property","html","_templateObject","this","_error","_templateObject2","_setInputDevice","_selectedInput","_inputDevices","map","item","_templateObject3","device","name","_setOutputDevice","_selectedOutput","_outputDevices","_templateObject4","_saveSettings","haStyle","hassioStyle","css","_templateObject5","changedProperties","_get","_getPrototypeOf","prototype","call","has","_addonChanged","ev","detail","getAttribute","noDevice","_ref","audio","inupt","output","regeneratorRuntime","async","_context","prev","next","addon","audio_input","audio_output","abrupt","undefined","awrap","fetchHassioHardwareAudio","hass","sent","Object","keys","input","key","concat","t0","stop","data","_context2","setHassioAddonOption","slug","LitElement","loaded","ha_code_editor_decorate","_initialize","_UpdatingElement","HaCodeEditor","_UpdatingElement2","_getPrototypeOf2","_this","ha_code_editor_classCallCheck","_len","arguments","length","args","Array","_key","ha_code_editor_getPrototypeOf","apply","ha_code_editor_assertThisInitialized","ha_code_editor_inherits","F","d","kind","value","decorators","_value","codemirror","getValue","shadowRoot","querySelector","ha_code_editor_get","refresh","autofocus","focus","changedProps","setOption","mode","setValue","_calcGutters","_setScrollBarDirection","classList","toggle","error","_load","codeMirror","_this2","Promise","all","__webpack_require__","e","then","bind","attachShadow","innerHTML","codeMirrorCss","lineNumbers","tabSize","viewportMargin","Infinity","extraKeys","Tab","Shift-Tab","gutters","on","_onChange","newValue","fireEvent","rtl","getWrapperElement","UpdatingElement","afterNextRender","cb","requestAnimationFrame","setTimeout","ha_yaml_editor_decorate","_LitElement","_LitElement2","HaYamlEditor","ha_yaml_editor_classCallCheck","ha_yaml_editor_getPrototypeOf","ha_yaml_editor_assertThisInitialized","ha_yaml_editor_inherits","query","_yaml","obj","ha_yaml_editor_typeof","hasOwnProperty","isEmpty","safeDump","err","alert","_this2$_editor","_editor","defaultValue","ha_yaml_editor_templateObject","label","ha_yaml_editor_templateObject2","isValid","stopPropagation","parsed","safeLoad","HassioAddonConfig","type","Boolean","editor","valid","hassio_addon_config_templateObject","_configChanged","hassio_addon_config_templateObject2","hassio_addon_config_templateObject3","_resetTapped","_saveTapped","_configHasChanged","hassio_addon_config_templateObject4","hassio_addon_config_get","hassio_addon_config_getPrototypeOf","options","requestUpdate","eventdata","_err$body","showConfirmationDialog","title","text","confirmText","success","response","path","body","message","_err$body2","t1","ironIconClass","customElements","get","HaIcon","_ironIconClass","ha_icon_classCallCheck","ha_icon_getPrototypeOf","ha_icon_assertThisInitialized","ha_icon_inherits","node","eventName","methodName","ha_icon_get","_iconsetName","define","HaLabelBadge","ha_label_badge_templateObject","classMap","big","icon","image","ha_label_badge_templateObject2","ha_label_badge_templateObject3","ha_label_badge_templateObject4","description","ha_label_badge_templateObject5","_templateObject6","ha_label_badge_get","ha_label_badge_getPrototypeOf","getElementById","style","backgroundImage","PERMIS_DESC","rating","host_network","homeassistant_api","full_access","hassio_api","docker_api","host_pid","apparmor","auth_api","ingress","hassio_addon_info_templateObject","_computeUpdateAvailable","hassio_addon_info_templateObject2","last_version","version","available","hassio_addon_info_templateObject3","changelog","hassio_addon_info_templateObject4","_openChangelog","hassio_addon_info_templateObject5","_protectionToggled","hassio_addon_info_templateObject6","_computeIsRunning","_templateObject7","_templateObject8","_templateObject9","url","logo","_templateObject10","green","includes","Number","yellow","red","_showMoreInfo","_templateObject11","_templateObject12","_templateObject13","_computeHassioApi","_templateObject14","hassio_role","_templateObject15","_templateObject16","_templateObject17","_computeApparmorClassName","_templateObject18","_templateObject19","_templateObject20","_startOnBootToggled","boot","_autoUpdateToggled","auto_update","_templateObject21","_panelToggled","ingress_panel","_computeCannotIngressSidebar","_templateObject22","_computeUsesProtectedOptions","_templateObject23","_templateObject24","_templateObject25","_uninstallClicked","build","_templateObject26","_templateObject27","_templateObject28","_computeShowWebUI","_templateObject29","_pathWebui","_computeShowIngressUI","_templateObject30","_openIngress","_templateObject31","_templateObject32","_installing","_installClicked","long_description","_templateObject33","_templateObject34","id","target","showHassioMarkdownDialog","content","_this$addon","state","detached","webui","replace","document","location","hostname","navigate","_computeHA92plus","_this$hass$config$ver2","_slicedToArray","config","split","major","minor","_err$body3","_context3","protected","setHassioAddonSecurity","_err$body4","_context4","_err$body5","_context5","fetchHassioAddonChangelog","_err$body6","_context6","installHassioAddon","_err$body7","_context7","confirm","uninstallHassioAddon","HassioAddonLogs","hassio_addon_logs_get","hassio_addon_logs_getPrototypeOf","_loadData","hassio_addon_logs_templateObject","hassio_addon_logs_templateObject2","_refresh","ANSI_HTML_STYLE","hassio_addon_logs_templateObject3","fetchHassioAddonLogs","_logContent","lastChild","removeChild","appendChild","parseTextToColoredPre","HassioAddonNetwork","hassio_addon_network_get","hassio_addon_network_getPrototypeOf","_setNetworkConfig","_config","hassio_addon_network_templateObject2","hassio_addon_network_templateObject3","hassio_addon_network_templateObject4","container","host","hassio_addon_network_templateObject","hassio_addon_network_templateObject5","network","network_description","items","sort","a","b","forEach","parseInt","String","networkconfiguration","hassio_addon_view_templateObject2","hassio_addon_view_templateObject3","hassio_addon_view_templateObject4","hassio_addon_view_templateObject5","hassio_addon_view_templateObject","hassio_addon_view_templateObject6","_routeDataChanged","route","addEventListener","_apiCalled","history","back","routeData","addoninfo","substr","fetchHassioAddonInfo","worker","HaMarkdown","markdownWorker","_render","walker","renderMarkdown","breaks","gfm","tables","allowSvg","_resize","createTreeWalker","nextNode","currentNode","HTMLAnchorElement","rel","addMethods","methods","module","exports","w","Worker","p","MwcSwitch","_decorate","_MwcSwitch","HaSwitch","_MwcSwitch2","_classCallCheck","_assertThisInitialized","_inherits","setProperty","_slot","assignedNodes","hapticType","haptic","window","ripple","interactionNode","_haChangeHandler","static","mdcFoundation","handleChange","checked","formElement"],"mappings":"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","file":"chunk.8b198fe00454712c9c14.js","sourcesContent":["import \"web-animations-js/web-animations-next-lite.min\";\n\nimport \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport \"@polymer/paper-dropdown-menu/paper-dropdown-menu\";\nimport \"@polymer/paper-item/paper-item\";\nimport \"@polymer/paper-listbox/paper-listbox\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n PropertyValues,\n TemplateResult,\n} from \"lit-element\";\n\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioAddonDetails,\n setHassioAddonOption,\n HassioAddonSetOptionParams,\n} from \"../../../src/data/hassio/addon\";\nimport {\n HassioHardwareAudioDevice,\n fetchHassioHardwareAudio,\n} from \"../../../src/data/hassio/hardware\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\n\n@customElement(\"hassio-addon-audio\")\nclass HassioAddonAudio extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public addon!: HassioAddonDetails;\n @property() private _error?: string;\n @property() private _inputDevices?: HassioHardwareAudioDevice[];\n @property() private _outputDevices?: HassioHardwareAudioDevice[];\n @property() private _selectedInput!: null | string;\n @property() private _selectedOutput!: null | string;\n\n protected render(): TemplateResult {\n return html`\n \n
\n ${this._error\n ? html`\n
${this._error}
\n `\n : \"\"}\n\n \n \n ${this._inputDevices &&\n this._inputDevices.map((item) => {\n return html`\n ${item.name}\n `;\n })}\n \n \n \n \n ${this._outputDevices &&\n this._outputDevices.map((item) => {\n return html`\n ${item.name}\n `;\n })}\n \n \n
\n
\n Save\n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n :host,\n paper-card,\n paper-dropdown-menu {\n display: block;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n paper-item {\n width: 450px;\n }\n .card-actions {\n text-align: right;\n }\n `,\n ];\n }\n\n protected update(changedProperties: PropertyValues): void {\n super.update(changedProperties);\n if (changedProperties.has(\"addon\")) {\n this._addonChanged();\n }\n }\n\n private _setInputDevice(ev): void {\n const device = ev.detail.item.getAttribute(\"device\");\n if (device) {\n this._selectedInput = device;\n }\n }\n\n private _setOutputDevice(ev): void {\n const device = ev.detail.item.getAttribute(\"device\");\n if (device) {\n this._selectedOutput = device;\n }\n }\n\n private async _addonChanged(): Promise {\n this._selectedInput = this.addon.audio_input;\n this._selectedOutput = this.addon.audio_output;\n if (this._outputDevices) {\n return;\n }\n\n const noDevice: HassioHardwareAudioDevice[] = [\n { device: undefined, name: \"-\" },\n ];\n\n try {\n const { audio } = await fetchHassioHardwareAudio(this.hass);\n const inupt = Object.keys(audio.input).map((key) => ({\n device: key,\n name: audio.input[key],\n }));\n const output = Object.keys(audio.output).map((key) => ({\n device: key,\n name: audio.output[key],\n }));\n\n this._inputDevices = noDevice.concat(inupt);\n this._outputDevices = noDevice.concat(output);\n } catch {\n this._error = \"Failed to fetch audio hardware\";\n this._inputDevices = noDevice;\n this._outputDevices = noDevice;\n }\n }\n\n private async _saveSettings(): Promise {\n this._error = undefined;\n const data: HassioAddonSetOptionParams = {\n audio_input: this._selectedInput || null,\n audio_output: this._selectedOutput || null,\n };\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n } catch {\n this._error = \"Failed to set addon audio device\";\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addon-audio\": HassioAddonAudio;\n }\n}\n","interface LoadedCodeMirror {\n codeMirror: any;\n codeMirrorCss: any;\n}\n\nlet loaded: Promise;\n\nexport const loadCodeMirror = async (): Promise => {\n if (!loaded) {\n loaded = import(/* webpackChunkName: \"codemirror\" */ \"./codemirror\");\n }\n return loaded;\n};\n","import { loadCodeMirror } from \"../resources/codemirror.ondemand\";\nimport { fireEvent } from \"../common/dom/fire_event\";\nimport {\n UpdatingElement,\n property,\n customElement,\n PropertyValues,\n} from \"lit-element\";\nimport { Editor } from \"codemirror\";\n\ndeclare global {\n interface HASSDomEvents {\n \"editor-save\": undefined;\n }\n}\n\n@customElement(\"ha-code-editor\")\nexport class HaCodeEditor extends UpdatingElement {\n public codemirror?: Editor;\n @property() public mode?: string;\n @property() public autofocus = false;\n @property() public rtl = false;\n @property() public error = false;\n @property() private _value = \"\";\n\n public set value(value: string) {\n this._value = value;\n }\n\n public get value(): string {\n return this.codemirror ? this.codemirror.getValue() : this._value;\n }\n\n public get hasComments(): boolean {\n return this.shadowRoot!.querySelector(\"span.cm-comment\") ? true : false;\n }\n\n public connectedCallback() {\n super.connectedCallback();\n if (!this.codemirror) {\n return;\n }\n this.codemirror.refresh();\n if (this.autofocus !== false) {\n this.codemirror.focus();\n }\n }\n\n protected update(changedProps: PropertyValues): void {\n super.update(changedProps);\n\n if (!this.codemirror) {\n return;\n }\n\n if (changedProps.has(\"mode\")) {\n this.codemirror.setOption(\"mode\", this.mode);\n }\n if (changedProps.has(\"autofocus\")) {\n this.codemirror.setOption(\"autofocus\", this.autofocus !== false);\n }\n if (changedProps.has(\"_value\") && this._value !== this.value) {\n this.codemirror.setValue(this._value);\n }\n if (changedProps.has(\"rtl\")) {\n this.codemirror.setOption(\"gutters\", this._calcGutters());\n this._setScrollBarDirection();\n }\n if (changedProps.has(\"error\")) {\n this.classList.toggle(\"error-state\", this.error);\n }\n }\n\n protected firstUpdated(changedProps: PropertyValues): void {\n super.firstUpdated(changedProps);\n this._load();\n }\n\n private async _load(): Promise {\n const loaded = await loadCodeMirror();\n\n const codeMirror = loaded.codeMirror;\n\n const shadowRoot = this.attachShadow({ mode: \"open\" });\n\n shadowRoot!.innerHTML = `\n `;\n\n this.codemirror = codeMirror(shadowRoot, {\n value: this._value,\n lineNumbers: true,\n tabSize: 2,\n mode: this.mode,\n autofocus: this.autofocus !== false,\n viewportMargin: Infinity,\n extraKeys: {\n Tab: \"indentMore\",\n \"Shift-Tab\": \"indentLess\",\n },\n gutters: this._calcGutters(),\n });\n this._setScrollBarDirection();\n this.codemirror!.on(\"changes\", () => this._onChange());\n }\n\n private _onChange(): void {\n const newValue = this.value;\n if (newValue === this._value) {\n return;\n }\n this._value = newValue;\n fireEvent(this, \"value-changed\", { value: this._value });\n }\n\n private _calcGutters(): string[] {\n return this.rtl ? [\"rtl-gutter\", \"CodeMirror-linenumbers\"] : [];\n }\n\n private _setScrollBarDirection(): void {\n if (this.codemirror) {\n this.codemirror.getWrapperElement().classList.toggle(\"rtl\", this.rtl);\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-code-editor\": HaCodeEditor;\n }\n}\n","export const afterNextRender = (cb: () => void): void => {\n requestAnimationFrame(() => setTimeout(cb, 0));\n};\n\nexport const nextRender = () => {\n return new Promise((resolve) => {\n afterNextRender(resolve);\n });\n};\n","import { safeDump, safeLoad } from \"js-yaml\";\nimport \"./ha-code-editor\";\nimport { LitElement, property, customElement, html, query } from \"lit-element\";\nimport { fireEvent } from \"../common/dom/fire_event\";\nimport { afterNextRender } from \"../common/util/render-status\";\n// tslint:disable-next-line\nimport { HaCodeEditor } from \"./ha-code-editor\";\n\nconst isEmpty = (obj: object) => {\n if (typeof obj !== \"object\") {\n return false;\n }\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n return false;\n }\n }\n return true;\n};\n\n@customElement(\"ha-yaml-editor\")\nexport class HaYamlEditor extends LitElement {\n @property() public value?: any;\n @property() public defaultValue?: any;\n @property() public isValid = true;\n @property() public label?: string;\n @property() private _yaml: string = \"\";\n @query(\"ha-code-editor\") private _editor?: HaCodeEditor;\n\n public setValue(value) {\n try {\n this._yaml = value && !isEmpty(value) ? safeDump(value) : \"\";\n } catch (err) {\n alert(`There was an error converting to YAML: ${err}`);\n }\n afterNextRender(() => {\n if (this._editor?.codemirror) {\n this._editor.codemirror.refresh();\n }\n });\n }\n\n protected firstUpdated() {\n if (this.defaultValue) {\n this.setValue(this.defaultValue);\n }\n }\n\n protected render() {\n if (this._yaml === undefined) {\n return;\n }\n return html`\n ${this.label\n ? html`\n

${this.label}

\n `\n : \"\"}\n \n `;\n }\n\n private _onChange(ev: CustomEvent) {\n ev.stopPropagation();\n const value = ev.detail.value;\n let parsed;\n let isValid = true;\n\n if (value) {\n try {\n parsed = safeLoad(value);\n } catch (err) {\n // Invalid YAML\n isValid = false;\n }\n } else {\n parsed = {};\n }\n\n this.value = parsed;\n this.isValid = isValid;\n\n fireEvent(this, \"value-changed\", { value: parsed, isValid } as any);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-yaml-editor\": HaYamlEditor;\n }\n}\n","import \"@polymer/iron-autogrow-textarea/iron-autogrow-textarea\";\nimport \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n PropertyValues,\n TemplateResult,\n query,\n} from \"lit-element\";\n\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioAddonDetails,\n setHassioAddonOption,\n HassioAddonSetOptionParams,\n} from \"../../../src/data/hassio/addon\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport { fireEvent } from \"../../../src/common/dom/fire_event\";\nimport \"../../../src/components/ha-yaml-editor\";\n// tslint:disable-next-line: no-duplicate-imports\nimport { HaYamlEditor } from \"../../../src/components/ha-yaml-editor\";\nimport { showConfirmationDialog } from \"../../../src/dialogs/generic/show-dialog-box\";\n\n@customElement(\"hassio-addon-config\")\nclass HassioAddonConfig extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public addon!: HassioAddonDetails;\n @property() private _error?: string;\n @property({ type: Boolean }) private _configHasChanged = false;\n\n @query(\"ha-yaml-editor\") private _editor!: HaYamlEditor;\n\n protected render(): TemplateResult {\n const editor = this._editor;\n // If editor not rendered, don't show the error.\n const valid = editor ? editor.isValid : true;\n\n return html`\n \n
\n \n ${this._error\n ? html`\n
${this._error}
\n `\n : \"\"}\n ${valid\n ? \"\"\n : html`\n
Invalid YAML
\n `}\n
\n
\n \n Reset to defaults\n \n \n Save\n \n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n :host {\n display: block;\n }\n paper-card {\n display: block;\n }\n .card-actions {\n display: flex;\n justify-content: space-between;\n }\n .errors {\n color: var(--google-red-500);\n margin-top: 16px;\n }\n iron-autogrow-textarea {\n width: 100%;\n font-family: monospace;\n }\n .syntaxerror {\n color: var(--google-red-500);\n }\n `,\n ];\n }\n\n protected updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n if (changedProperties.has(\"addon\")) {\n this._editor.setValue(this.addon.options);\n }\n }\n\n private _configChanged(): void {\n this._configHasChanged = true;\n this.requestUpdate();\n }\n\n private async _resetTapped(): Promise {\n const confirmed = await showConfirmationDialog(this, {\n title: this.addon.name,\n text: \"Are you sure you want to reset all your options?\",\n confirmText: \"reset options\",\n });\n\n if (!confirmed) {\n return;\n }\n\n this._error = undefined;\n const data: HassioAddonSetOptionParams = {\n options: null,\n };\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n this._configHasChanged = false;\n const eventdata = {\n success: true,\n response: undefined,\n path: \"options\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to reset addon configuration, ${err.body?.message ||\n err}`;\n }\n }\n\n private async _saveTapped(): Promise {\n let data: HassioAddonSetOptionParams;\n this._error = undefined;\n try {\n data = {\n options: this._editor.value,\n };\n } catch (err) {\n this._error = err;\n return;\n }\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n this._configHasChanged = false;\n const eventdata = {\n success: true,\n response: undefined,\n path: \"options\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to save addon configuration, ${err.body?.message ||\n err}`;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addon-config\": HassioAddonConfig;\n }\n}\n","import { Constructor } from \"../types\";\n\nimport \"@polymer/iron-icon/iron-icon\";\n// Not duplicate, this is for typing.\n// tslint:disable-next-line\nimport { IronIconElement } from \"@polymer/iron-icon/iron-icon\";\n\nconst ironIconClass = customElements.get(\"iron-icon\") as Constructor<\n IronIconElement\n>;\n\nlet loaded = false;\n\nexport class HaIcon extends ironIconClass {\n private _iconsetName?: string;\n\n public listen(\n node: EventTarget | null,\n eventName: string,\n methodName: string\n ): void {\n super.listen(node, eventName, methodName);\n\n if (!loaded && this._iconsetName === \"mdi\") {\n loaded = true;\n import(/* webpackChunkName: \"mdi-icons\" */ \"../resources/mdi-icons\");\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-icon\": HaIcon;\n }\n}\n\ncustomElements.define(\"ha-icon\", HaIcon);\n","import {\n html,\n LitElement,\n PropertyValues,\n TemplateResult,\n CSSResult,\n css,\n property,\n} from \"lit-element\";\nimport { classMap } from \"lit-html/directives/class-map\";\nimport \"./ha-icon\";\n\nclass HaLabelBadge extends LitElement {\n @property() public value?: string;\n @property() public icon?: string;\n @property() public label?: string;\n @property() public description?: string;\n @property() public image?: string;\n\n protected render(): TemplateResult {\n return html`\n
\n
\n 4),\n })}\"\n >\n ${this.icon && !this.value && !this.image\n ? html`\n \n `\n : \"\"}\n ${this.value && !this.image\n ? html`\n ${this.value}\n `\n : \"\"}\n
\n ${this.label\n ? html`\n 5,\n })}\"\n >\n ${this.label}\n
\n `\n : \"\"}\n
\n ${this.description\n ? html`\n
${this.description}
\n `\n : \"\"}\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n css`\n .badge-container {\n display: inline-block;\n text-align: center;\n vertical-align: top;\n }\n .label-badge {\n position: relative;\n display: block;\n margin: 0 auto;\n width: var(--ha-label-badge-size, 2.5em);\n text-align: center;\n height: var(--ha-label-badge-size, 2.5em);\n line-height: var(--ha-label-badge-size, 2.5em);\n font-size: var(--ha-label-badge-font-size, 1.5em);\n border-radius: 50%;\n border: 0.1em solid var(--ha-label-badge-color, var(--primary-color));\n color: var(--label-badge-text-color, rgb(76, 76, 76));\n\n white-space: nowrap;\n background-color: var(--label-badge-background-color, white);\n background-size: cover;\n transition: border 0.3s ease-in-out;\n }\n .label-badge .value {\n font-size: 90%;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .label-badge .value.big {\n font-size: 70%;\n }\n .label-badge .label {\n position: absolute;\n bottom: -1em;\n /* Make the label as wide as container+border. (parent_borderwidth / font-size) */\n left: -0.2em;\n right: -0.2em;\n line-height: 1em;\n font-size: 0.5em;\n }\n .label-badge .label span {\n box-sizing: border-box;\n max-width: 100%;\n display: inline-block;\n background-color: var(--ha-label-badge-color, var(--primary-color));\n color: var(--ha-label-badge-label-color, white);\n border-radius: 1em;\n padding: 9% 16% 8% 16%; /* mostly apitalized text, not much descenders => bit more top margin */\n font-weight: 500;\n overflow: hidden;\n text-transform: uppercase;\n text-overflow: ellipsis;\n transition: background-color 0.3s ease-in-out;\n text-transform: var(--ha-label-badge-label-text-transform, uppercase);\n }\n .label-badge .label.big span {\n font-size: 90%;\n padding: 10% 12% 7% 12%; /* push smaller text a bit down to center vertically */\n }\n .badge-container .title {\n margin-top: 1em;\n font-size: var(--ha-label-badge-title-font-size, 0.9em);\n width: var(--ha-label-badge-title-width, 5em);\n font-weight: var(--ha-label-badge-title-font-weight, 400);\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: normal;\n }\n `,\n ];\n }\n\n protected updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n if (changedProperties.has(\"image\")) {\n this.shadowRoot!.getElementById(\"badge\")!.style.backgroundImage = this\n .image\n ? `url(${this.image})`\n : \"\";\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-label-badge\": HaLabelBadge;\n }\n}\n\ncustomElements.define(\"ha-label-badge\", HaLabelBadge);\n","import \"@material/mwc-button\";\nimport \"@polymer/iron-icon/iron-icon\";\nimport \"@polymer/paper-card/paper-card\";\nimport \"@polymer/paper-tooltip/paper-tooltip\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n} from \"lit-element\";\nimport { classMap } from \"lit-html/directives/class-map\";\n\nimport \"../../../src/components/buttons/ha-call-api-button\";\nimport \"../../../src/components/buttons/ha-progress-button\";\nimport \"../../../src/components/ha-label-badge\";\nimport \"../../../src/components/ha-markdown\";\nimport \"../../../src/components/ha-switch\";\nimport \"../components/hassio-card-content\";\n\nimport { fireEvent } from \"../../../src/common/dom/fire_event\";\nimport {\n HassioAddonDetails,\n HassioAddonSetOptionParams,\n HassioAddonSetSecurityParams,\n setHassioAddonOption,\n setHassioAddonSecurity,\n uninstallHassioAddon,\n installHassioAddon,\n fetchHassioAddonChangelog,\n} from \"../../../src/data/hassio/addon\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport { navigate } from \"../../../src/common/navigate\";\nimport { showHassioMarkdownDialog } from \"../dialogs/markdown/show-dialog-hassio-markdown\";\n\nconst PERMIS_DESC = {\n rating: {\n title: \"Add-on Security Rating\",\n description:\n \"Hass.io provides a security rating to each of the add-ons, which indicates the risks involved when using this add-on. The more access an add-on requires on your system, the lower the score, thus raising the possible security risks.\\n\\nA score is on a scale from 1 to 6. Where 1 is the lowest score (considered the most insecure and highest risk) and a score of 6 is the highest score (considered the most secure and lowest risk).\",\n },\n host_network: {\n title: \"Host Network\",\n description:\n \"Add-ons usually run in their own isolated network layer, which prevents them from accessing the network of the host operating system. In some cases, this network isolation can limit add-ons in providing their services and therefore, the isolation can be lifted by the add-on author, giving the add-on full access to the network capabilities of the host machine. This gives the add-on more networking capabilities but lowers the security, hence, the security rating of the add-on will be lowered when this option is used by the add-on.\",\n },\n homeassistant_api: {\n title: \"Home Assistant API Access\",\n description:\n \"This add-on is allowed to access your running Home Assistant instance directly via the Home Assistant API. This mode handles authentication for the add-on as well, which enables an add-on to interact with Home Assistant without the need for additional authentication tokens.\",\n },\n full_access: {\n title: \"Full Hardware Access\",\n description:\n \"This add-on is given full access to the hardware of your system, by request of the add-on author. Access is comparable to the privileged mode in Docker. Since this opens up possible security risks, this feature impacts the add-on security score negatively.\\n\\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on.\",\n },\n hassio_api: {\n title: \"Hass.io API Access\",\n description:\n \"The add-on was given access to the Hass.io API, by request of the add-on author. By default, the add-on can access general version information of your system. When the add-on requests 'manager' or 'admin' level access to the API, it will gain access to control multiple parts of your Hass.io system. This permission is indicated by this badge and will impact the security score of the addon negatively.\",\n },\n docker_api: {\n title: \"Full Docker Access\",\n description:\n \"The add-on author has requested the add-on to have management access to the Docker instance running on your system. This mode gives the add-on full access and control to your entire Hass.io system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\\n\\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on.\",\n },\n host_pid: {\n title: \"Host Processes Namespace\",\n description:\n \"Usually, the processes the add-on runs, are isolated from all other system processes. The add-on author has requested the add-on to have access to the system processes running on the host system instance, and allow the add-on to spawn processes on the host system as well. This mode gives the add-on full access and control to your entire Hass.io system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\\n\\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on.\",\n },\n apparmor: {\n title: \"AppArmor\",\n description:\n \"AppArmor ('Application Armor') is a Linux kernel security module that restricts add-ons capabilities like network access, raw socket access, and permission to read, write, or execute specific files.\\n\\nAdd-on authors can provide their security profiles, optimized for the add-on, or request it to be disabled. If AppArmor is disabled, it will raise security risks and therefore, has a negative impact on the security score of the add-on.\",\n },\n auth_api: {\n title: \"Home Assistant Authentication\",\n description:\n \"An add-on can authenticate users against Home Assistant, allowing add-ons to give users the possibility to log into applications running inside add-ons, using their Home Assistant username/password. This badge indicates if the add-on author requests this capability.\",\n },\n ingress: {\n title: \"Ingress\",\n description:\n \"This add-on is using Ingress to embed its interface securely into Home Assistant.\",\n },\n};\n\n@customElement(\"hassio-addon-info\")\nclass HassioAddonInfo extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public addon!: HassioAddonDetails;\n @property() private _error?: string;\n @property({ type: Boolean }) private _installing = false;\n\n protected render(): TemplateResult {\n return html`\n ${this._computeUpdateAvailable\n ? html`\n \n
\n \n ${!this.addon.available\n ? html`\n

\n This update is no longer compatible with your system.\n

\n `\n : \"\"}\n
\n
\n \n Update\n \n ${this.addon.changelog\n ? html`\n \n Changelog\n \n `\n : \"\"}\n
\n
\n `\n : \"\"}\n ${!this.addon.protected\n ? html`\n \n
\n Protection mode on this add-on is disabled! This gives the add-on full access to the entire system, which adds security risks, and could damage your system when used incorrectly. Only disable the protection mode if you know, need AND trust the source of this add-on.\n
\n
\n Enable Protection mode\n
\n
\n
\n `\n : \"\"}\n\n \n
\n
\n ${this.addon.name}\n
\n ${this.addon.version\n ? html`\n ${this.addon.version}\n ${this._computeIsRunning\n ? html`\n \n `\n : html`\n \n `}\n `\n : html`\n ${this.addon.last_version}\n `}\n
\n
\n
\n ${this.addon.logo\n ? html`\n \n \n \n `\n : \"\"}\n
\n \n ${this.addon.host_network\n ? html`\n \n `\n : \"\"}\n ${this.addon.full_access\n ? html`\n \n `\n : \"\"}\n ${this.addon.homeassistant_api\n ? html`\n \n `\n : \"\"}\n ${this._computeHassioApi\n ? html`\n \n `\n : \"\"}\n ${this.addon.docker_api\n ? html`\n \n `\n : \"\"}\n ${this.addon.host_pid\n ? html`\n \n `\n : \"\"}\n ${this.addon.apparmor\n ? html`\n \n `\n : \"\"}\n ${this.addon.auth_api\n ? html`\n \n `\n : \"\"}\n ${this.addon.ingress\n ? html`\n \n `\n : \"\"}\n
\n\n ${this.addon.version\n ? html`\n
\n
Start on boot
\n \n
\n
\n
Auto update
\n \n
\n ${this.addon.ingress\n ? html`\n
\n
Show in sidebar
\n \n ${this._computeCannotIngressSidebar\n ? html`\n \n This option requires Home Assistant 0.92 or\n later.\n \n `\n : \"\"}\n
\n `\n : \"\"}\n ${this._computeUsesProtectedOptions\n ? html`\n
\n
\n Protection mode\n \n \n \n Grant the add-on elevated system access.\n \n \n
\n \n
\n `\n : \"\"}\n `\n : \"\"}\n ${this._error\n ? html`\n
${this._error}
\n `\n : \"\"}\n
\n
\n ${this.addon.version\n ? html`\n \n Uninstall\n \n ${this.addon.build\n ? html`\n \n Rebuild\n \n `\n : \"\"}\n ${this._computeIsRunning\n ? html`\n \n Restart\n \n \n Stop\n \n `\n : html`\n \n Start\n \n `}\n ${this._computeShowWebUI\n ? html`\n \n \n Open web UI\n \n \n `\n : \"\"}\n ${this._computeShowIngressUI\n ? html`\n \n Open web UI\n \n `\n : \"\"}\n `\n : html`\n ${!this.addon.available\n ? html`\n

\n This add-on is not available on your system.\n

\n `\n : \"\"}\n \n Install\n \n `}\n
\n \n\n ${this.addon.long_description\n ? html`\n \n
\n \n
\n
\n `\n : \"\"}\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n :host {\n display: block;\n }\n paper-card {\n display: block;\n margin-bottom: 16px;\n }\n paper-card.warning {\n background-color: var(--google-red-500);\n color: white;\n --paper-card-header-color: white;\n }\n paper-card.warning mwc-button {\n --mdc-theme-primary: white !important;\n }\n .warning {\n color: var(--google-red-500);\n --mdc-theme-primary: var(--google-red-500);\n }\n .light-color {\n color: var(--secondary-text-color);\n }\n .addon-header {\n font-size: 24px;\n color: var(--paper-card-header-color, --primary-text-color);\n }\n .addon-version {\n float: right;\n font-size: 15px;\n vertical-align: middle;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n .description {\n margin-bottom: 16px;\n }\n .logo img {\n max-height: 60px;\n margin: 16px 0;\n display: block;\n }\n .state {\n display: flex;\n margin: 33px 0;\n }\n .state div {\n width: 180px;\n display: inline-block;\n }\n .state iron-icon {\n width: 16px;\n height: 16px;\n color: var(--secondary-text-color);\n }\n ha-switch {\n display: flex;\n }\n iron-icon.running {\n color: var(--paper-green-400);\n }\n iron-icon.stopped {\n color: var(--google-red-300);\n }\n ha-call-api-button {\n font-weight: 500;\n color: var(--primary-color);\n }\n .right {\n float: right;\n }\n ha-markdown img {\n max-width: 100%;\n }\n protection-enable mwc-button {\n --mdc-theme-primary: white;\n }\n .description a,\n ha-markdown a {\n color: var(--primary-color);\n }\n .red {\n --ha-label-badge-color: var(--label-badge-red, #df4c1e);\n }\n .blue {\n --ha-label-badge-color: var(--label-badge-blue, #039be5);\n }\n .green {\n --ha-label-badge-color: var(--label-badge-green, #0da035);\n }\n .yellow {\n --ha-label-badge-color: var(--label-badge-yellow, #f4b400);\n }\n .security {\n margin-bottom: 16px;\n }\n .card-actions {\n display: flow-root;\n }\n .security h3 {\n margin-bottom: 8px;\n font-weight: normal;\n }\n .security ha-label-badge {\n cursor: pointer;\n margin-right: 4px;\n --iron-icon-height: 45px;\n }\n `,\n ];\n }\n\n private get _computeHassioApi(): boolean {\n return (\n this.addon.hassio_api &&\n (this.addon.hassio_role === \"manager\" ||\n this.addon.hassio_role === \"admin\")\n );\n }\n\n private get _computeApparmorClassName(): string {\n if (this.addon.apparmor === \"profile\") {\n return \"green\";\n }\n if (this.addon.apparmor === \"disable\") {\n return \"red\";\n }\n return \"\";\n }\n\n private _showMoreInfo(ev): void {\n const id = ev.target.getAttribute(\"id\");\n showHassioMarkdownDialog(this, {\n title: PERMIS_DESC[id].title,\n content: PERMIS_DESC[id].description,\n });\n }\n\n private get _computeIsRunning(): boolean {\n return this.addon?.state === \"started\";\n }\n\n private get _computeUpdateAvailable(): boolean | \"\" {\n return (\n this.addon &&\n !this.addon.detached &&\n this.addon.version &&\n this.addon.version !== this.addon.last_version\n );\n }\n\n private get _pathWebui(): string | null {\n return (\n this.addon.webui &&\n this.addon.webui.replace(\"[HOST]\", document.location.hostname)\n );\n }\n\n private get _computeShowWebUI(): boolean | \"\" | null {\n return !this.addon.ingress && this.addon.webui && this._computeIsRunning;\n }\n\n private _openIngress(): void {\n navigate(this, `/hassio/ingress/${this.addon.slug}`);\n }\n\n private get _computeShowIngressUI(): boolean {\n return this.addon.ingress && this._computeIsRunning;\n }\n\n private get _computeCannotIngressSidebar(): boolean {\n return !this.addon.ingress || !this._computeHA92plus;\n }\n\n private get _computeUsesProtectedOptions(): boolean {\n return (\n this.addon.docker_api || this.addon.full_access || this.addon.host_pid\n );\n }\n\n private get _computeHA92plus(): boolean {\n const [major, minor] = this.hass.config.version.split(\".\", 2);\n return Number(major) > 0 || (major === \"0\" && Number(minor) >= 92);\n }\n\n private async _startOnBootToggled(): Promise {\n this._error = undefined;\n const data: HassioAddonSetOptionParams = {\n boot: this.addon.boot === \"auto\" ? \"manual\" : \"auto\",\n };\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"option\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to set addon option, ${err.body?.message || err}`;\n }\n }\n\n private async _autoUpdateToggled(): Promise {\n this._error = undefined;\n const data: HassioAddonSetOptionParams = {\n auto_update: !this.addon.auto_update,\n };\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"option\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to set addon option, ${err.body?.message || err}`;\n }\n }\n\n private async _protectionToggled(): Promise {\n this._error = undefined;\n const data: HassioAddonSetSecurityParams = {\n protected: !this.addon.protected,\n };\n try {\n await setHassioAddonSecurity(this.hass, this.addon.slug, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"security\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to set addon security option, ${err.body?.message ||\n err}`;\n }\n }\n\n private async _panelToggled(): Promise {\n this._error = undefined;\n const data: HassioAddonSetOptionParams = {\n ingress_panel: !this.addon.ingress_panel,\n };\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"option\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to set addon option, ${err.body?.message || err}`;\n }\n }\n\n private async _openChangelog(): Promise {\n this._error = undefined;\n try {\n const content = await fetchHassioAddonChangelog(\n this.hass,\n this.addon.slug\n );\n showHassioMarkdownDialog(this, {\n title: \"Changelog\",\n content,\n });\n } catch (err) {\n this._error = `Failed to get addon changelog, ${err.body?.message ||\n err}`;\n }\n }\n\n private async _installClicked(): Promise {\n this._error = undefined;\n this._installing = true;\n try {\n await installHassioAddon(this.hass, this.addon.slug);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"install\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to install addon, ${err.body?.message || err}`;\n }\n this._installing = false;\n }\n\n private async _uninstallClicked(): Promise {\n if (!confirm(\"Are you sure you want to uninstall this add-on?\")) {\n return;\n }\n this._error = undefined;\n try {\n await uninstallHassioAddon(this.hass, this.addon.slug);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"uninstall\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to uninstall addon, ${err.body?.message || err}`;\n }\n }\n}\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addon-info\": HassioAddonInfo;\n }\n}\n","import \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n query,\n} from \"lit-element\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioAddonDetails,\n fetchHassioAddonLogs,\n} from \"../../../src/data/hassio/addon\";\nimport { ANSI_HTML_STYLE, parseTextToColoredPre } from \"../ansi-to-html\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\n\n@customElement(\"hassio-addon-logs\")\nclass HassioAddonLogs extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public addon!: HassioAddonDetails;\n @property() private _error?: string;\n @query(\"#content\") private _logContent!: any;\n\n public async connectedCallback(): Promise {\n super.connectedCallback();\n await this._loadData();\n }\n\n protected render(): TemplateResult {\n return html`\n \n ${this._error\n ? html`\n
${this._error}
\n `\n : \"\"}\n
\n
\n Refresh\n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n ANSI_HTML_STYLE,\n css`\n :host,\n paper-card {\n display: block;\n }\n pre {\n overflow-x: auto;\n white-space: pre-wrap;\n overflow-wrap: break-word;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n `,\n ];\n }\n\n private async _loadData(): Promise {\n this._error = undefined;\n try {\n const content = await fetchHassioAddonLogs(this.hass, this.addon.slug);\n while (this._logContent.lastChild) {\n this._logContent.removeChild(this._logContent.lastChild as Node);\n }\n this._logContent.appendChild(parseTextToColoredPre(content));\n } catch (err) {\n this._error = `Failed to get addon logs, ${err.body?.message || err}`;\n }\n }\n\n private async _refresh(): Promise {\n await this._loadData();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addon-logs\": HassioAddonLogs;\n }\n}\n","import \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n PropertyValues,\n TemplateResult,\n} from \"lit-element\";\n\nimport { PaperInputElement } from \"@polymer/paper-input/paper-input\";\n\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioAddonDetails,\n HassioAddonSetOptionParams,\n setHassioAddonOption,\n} from \"../../../src/data/hassio/addon\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport { fireEvent } from \"../../../src/common/dom/fire_event\";\n\ninterface NetworkItem {\n description: string;\n container: string;\n host: number | null;\n}\n\ninterface NetworkItemInput extends PaperInputElement {\n container: string;\n}\n\n@customElement(\"hassio-addon-network\")\nclass HassioAddonNetwork extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public addon!: HassioAddonDetails;\n @property() private _error?: string;\n @property() private _config?: NetworkItem[];\n\n public connectedCallback(): void {\n super.connectedCallback();\n this._setNetworkConfig();\n }\n\n protected render(): TemplateResult {\n if (!this._config) {\n return html``;\n }\n\n return html`\n \n
\n ${this._error\n ? html`\n
${this._error}
\n `\n : \"\"}\n\n \n \n \n \n \n \n \n ${this._config!.map((item) => {\n return html`\n \n \n \n \n \n `;\n })}\n \n
ContainerHostDescription
${item.container}\n \n ${item.description}
\n
\n
\n \n Reset to defaults\n \n Save\n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n :host {\n display: block;\n }\n paper-card {\n display: block;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n .card-actions {\n display: flex;\n justify-content: space-between;\n }\n `,\n ];\n }\n\n protected update(changedProperties: PropertyValues): void {\n super.update(changedProperties);\n if (changedProperties.has(\"addon\")) {\n this._setNetworkConfig();\n }\n }\n\n private _setNetworkConfig(): void {\n const network = this.addon.network || {};\n const description = this.addon.network_description || {};\n const items: NetworkItem[] = Object.keys(network).map((key) => {\n return {\n container: key,\n host: network[key],\n description: description[key],\n };\n });\n this._config = items.sort((a, b) => (a.container > b.container ? 1 : -1));\n }\n\n private async _configChanged(ev: Event): Promise {\n const target = ev.target as NetworkItemInput;\n this._config!.forEach((item) => {\n if (\n item.container === target.container &&\n item.host !== parseInt(String(target.value), 10)\n ) {\n item.host = target.value ? parseInt(String(target.value), 10) : null;\n }\n });\n }\n\n private async _resetTapped(): Promise {\n const data: HassioAddonSetOptionParams = {\n network: null,\n };\n\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"option\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to set addon network configuration, ${err.body\n ?.message || err}`;\n }\n }\n\n private async _saveTapped(): Promise {\n this._error = undefined;\n const networkconfiguration = {};\n this._config!.forEach((item) => {\n networkconfiguration[item.container] = parseInt(String(item.host), 10);\n });\n\n const data: HassioAddonSetOptionParams = {\n network: networkconfiguration,\n };\n\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"option\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to set addon network configuration, ${err.body\n ?.message || err}`;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addon-network\": HassioAddonNetwork;\n }\n}\n","import \"@polymer/app-layout/app-header-layout/app-header-layout\";\nimport \"@polymer/app-layout/app-header/app-header\";\nimport \"@polymer/app-layout/app-toolbar/app-toolbar\";\nimport \"@polymer/paper-icon-button/paper-icon-button\";\nimport \"@polymer/paper-spinner/paper-spinner-lite\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n} from \"lit-element\";\n\nimport { HomeAssistant, Route } from \"../../../src/types\";\nimport {\n HassioAddonDetails,\n fetchHassioAddonInfo,\n} from \"../../../src/data/hassio/addon\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\n\nimport \"./hassio-addon-audio\";\nimport \"./hassio-addon-config\";\nimport \"./hassio-addon-info\";\nimport \"./hassio-addon-logs\";\nimport \"./hassio-addon-network\";\n\n@customElement(\"hassio-addon-view\")\nclass HassioAddonView extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public route!: Route;\n @property() public addon?: HassioAddonDetails;\n\n protected render(): TemplateResult {\n if (!this.addon) {\n return html`\n \n `;\n }\n return html`\n \n
\n \n\n ${this.addon && this.addon.version\n ? html`\n \n\n ${this.addon.audio\n ? html`\n \n `\n : \"\"}\n ${this.addon.network\n ? html`\n \n `\n : \"\"}\n\n \n `\n : \"\"}\n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n :host {\n color: var(--primary-text-color);\n --paper-card-header-color: var(--primary-text-color);\n }\n .content {\n padding: 24px 0 32px;\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config {\n margin-bottom: 24px;\n width: 600px;\n }\n hassio-addon-logs {\n max-width: calc(100% - 8px);\n min-width: 600px;\n }\n @media only screen and (max-width: 600px) {\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config,\n hassio-addon-logs {\n max-width: 100%;\n min-width: 100%;\n }\n }\n `,\n ];\n }\n\n protected async firstUpdated(): Promise {\n await this._routeDataChanged(this.route);\n this.addEventListener(\"hass-api-called\", (ev) => this._apiCalled(ev));\n }\n\n private async _apiCalled(ev): Promise {\n const path: string = ev.detail.path;\n\n if (!path) {\n return;\n }\n\n if (path === \"uninstall\") {\n history.back();\n } else {\n await this._routeDataChanged(this.route);\n }\n }\n\n private async _routeDataChanged(routeData: Route): Promise {\n const addon = routeData.path.substr(1);\n try {\n const addoninfo = await fetchHassioAddonInfo(this.hass, addon);\n this.addon = addoninfo;\n } catch {\n this.addon = undefined;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addon-view\": HassioAddonView;\n }\n}\n","import { UpdatingElement, property, customElement } from \"lit-element\";\n// eslint-disable-next-line import/no-webpack-loader-syntax\n// @ts-ignore\n// tslint:disable-next-line: no-implicit-dependencies\nimport markdownWorker from \"workerize-loader!../resources/markdown_worker\";\nimport { fireEvent } from \"../common/dom/fire_event\";\n\nlet worker: any | undefined;\n\n@customElement(\"ha-markdown\")\nclass HaMarkdown extends UpdatingElement {\n @property() public content = \"\";\n @property({ type: Boolean }) public allowSvg = false;\n\n protected update(changedProps) {\n super.update(changedProps);\n\n if (!worker) {\n worker = markdownWorker();\n }\n\n this._render();\n }\n\n private async _render() {\n this.innerHTML = await worker.renderMarkdown(\n this.content,\n {\n breaks: true,\n gfm: true,\n tables: true,\n },\n {\n allowSvg: this.allowSvg,\n }\n );\n\n this._resize();\n\n const walker = document.createTreeWalker(\n this,\n 1 /* SHOW_ELEMENT */,\n null,\n false\n );\n\n while (walker.nextNode()) {\n const node = walker.currentNode;\n\n // Open external links in a new window\n if (\n node instanceof HTMLAnchorElement &&\n node.host !== document.location.host\n ) {\n node.target = \"_blank\";\n\n // protect referrer on external links and deny window.opener access for security reasons\n // (see https://mathiasbynens.github.io/rel-noopener/)\n node.rel = \"noreferrer noopener\";\n\n // Fire a resize event when images loaded to notify content resized\n } else if (node) {\n node.addEventListener(\"load\", this._resize);\n }\n }\n }\n\n private _resize = () => fireEvent(this, \"iron-resize\");\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-markdown\": HaMarkdown;\n }\n}\n","\n\t\t\t\tvar addMethods = require(\"../../node_modules/workerize-loader/dist/rpc-wrapper.js\")\n\t\t\t\tvar methods = [\"renderMarkdown\"]\n\t\t\t\tmodule.exports = function() {\n\t\t\t\t\tvar w = new Worker(__webpack_public_path__ + \"201359fd5a526afe13ef.worker.js\", { name: \"[hash].worker.js\" })\n\t\t\t\t\taddMethods(w, methods)\n\t\t\t\t\t\n\t\t\t\t\treturn w\n\t\t\t\t}\n\t\t\t","import {\n customElement,\n CSSResult,\n css,\n query,\n html,\n property,\n} from \"lit-element\";\nimport \"@material/mwc-switch\";\nimport { style } from \"@material/mwc-switch/mwc-switch-css\";\n// tslint:disable-next-line\nimport { Switch } from \"@material/mwc-switch\";\nimport { Constructor } from \"../types\";\nimport { forwardHaptic } from \"../data/haptics\";\nimport { ripple } from \"@material/mwc-ripple/ripple-directive\";\n// tslint:disable-next-line\nconst MwcSwitch = customElements.get(\"mwc-switch\") as Constructor;\n\n@customElement(\"ha-switch\")\nexport class HaSwitch extends MwcSwitch {\n // Generate a haptic vibration.\n // Only set to true if the new value of the switch is applied right away when toggling.\n // Do not add haptic when a user is required to press save.\n @property({ type: Boolean }) public haptic = false;\n @query(\"slot\") private _slot!: HTMLSlotElement;\n\n protected firstUpdated() {\n super.firstUpdated();\n this.style.setProperty(\n \"--mdc-theme-secondary\",\n \"var(--switch-checked-color)\"\n );\n this.classList.toggle(\n \"slotted\",\n Boolean(this._slot.assignedNodes().length)\n );\n this.addEventListener(\"change\", () => {\n if (this.haptic) {\n forwardHaptic(\"light\");\n }\n });\n }\n\n protected render() {\n return html`\n
\n
\n \n
\n \n
\n
\n
\n \n `;\n }\n\n protected static get styles(): CSSResult[] {\n return [\n style,\n css`\n :host {\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n .mdc-switch.mdc-switch--checked .mdc-switch__thumb {\n background-color: var(--switch-checked-button-color);\n border-color: var(--switch-checked-button-color);\n }\n .mdc-switch.mdc-switch--checked .mdc-switch__track {\n background-color: var(--switch-checked-track-color);\n border-color: var(--switch-checked-track-color);\n }\n .mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb {\n background-color: var(--switch-unchecked-button-color);\n border-color: var(--switch-unchecked-button-color);\n }\n .mdc-switch:not(.mdc-switch--checked) .mdc-switch__track {\n background-color: var(--switch-unchecked-track-color);\n border-color: var(--switch-unchecked-track-color);\n }\n :host(.slotted) .mdc-switch {\n margin-right: 24px;\n }\n `,\n ];\n }\n\n private _haChangeHandler(e: Event) {\n this.mdcFoundation.handleChange(e);\n // catch \"click\" event and sync properties\n this.checked = this.formElement.checked;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-switch\": HaSwitch;\n }\n}\n","/**\n * Broadcast haptic feedback requests\n */\n\nimport { fireEvent, HASSDomEvent } from \"../common/dom/fire_event\";\n\n// Allowed types are from iOS HIG.\n// https://developer.apple.com/design/human-interface-guidelines/ios/user-interaction/feedback/#haptics\n// Implementors on platforms other than iOS should attempt to match the patterns (shown in HIG) as closely as possible.\nexport type HapticType =\n | \"success\"\n | \"warning\"\n | \"failure\"\n | \"light\"\n | \"medium\"\n | \"heavy\"\n | \"selection\";\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n haptic: HapticType;\n }\n\n interface GlobalEventHandlersEventMap {\n haptic: HASSDomEvent;\n }\n}\n\nexport const forwardHaptic = (hapticType: HapticType) => {\n fireEvent(window, \"haptic\", hapticType);\n};\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./hassio/src/addon-view/hassio-addon-audio.ts","webpack:///./src/resources/codemirror.ondemand.ts","webpack:///./src/components/ha-code-editor.ts","webpack:///./src/common/util/render-status.ts","webpack:///./src/components/ha-yaml-editor.ts","webpack:///./hassio/src/addon-view/hassio-addon-config.ts","webpack:///./src/components/ha-icon.ts","webpack:///./src/components/ha-label-badge.ts","webpack:///./hassio/src/addon-view/hassio-addon-info.ts","webpack:///./hassio/src/addon-view/hassio-addon-logs.ts","webpack:///./hassio/src/addon-view/hassio-addon-network.ts","webpack:///./hassio/src/addon-view/hassio-addon-view.ts","webpack:///./src/components/ha-markdown.ts","webpack:///./src/resources/markdown_worker.ts","webpack:///./src/components/ha-switch.ts","webpack:///./src/data/haptics.ts"],"names":["customElement","HassioAddonAudio","property","html","_templateObject","this","_error","_templateObject2","_setInputDevice","_selectedInput","_inputDevices","map","item","_templateObject3","device","name","_setOutputDevice","_selectedOutput","_outputDevices","_templateObject4","_saveSettings","haStyle","hassioStyle","css","_templateObject5","changedProperties","_get","_getPrototypeOf","prototype","call","has","_addonChanged","ev","detail","getAttribute","noDevice","_ref","audio","inupt","output","regeneratorRuntime","async","_context","prev","next","addon","audio_input","audio_output","abrupt","undefined","awrap","fetchHassioHardwareAudio","hass","sent","Object","keys","input","key","concat","t0","stop","data","_context2","setHassioAddonOption","slug","LitElement","loaded","ha_code_editor_decorate","_initialize","_UpdatingElement","HaCodeEditor","_UpdatingElement2","_getPrototypeOf2","_this","ha_code_editor_classCallCheck","_len","arguments","length","args","Array","_key","ha_code_editor_getPrototypeOf","apply","ha_code_editor_assertThisInitialized","ha_code_editor_inherits","F","d","kind","value","decorators","_value","codemirror","getValue","shadowRoot","querySelector","ha_code_editor_get","refresh","autofocus","focus","changedProps","setOption","mode","setValue","_calcGutters","_setScrollBarDirection","classList","toggle","error","_load","codeMirror","_this2","Promise","all","__webpack_require__","e","then","bind","attachShadow","innerHTML","codeMirrorCss","lineNumbers","tabSize","viewportMargin","Infinity","extraKeys","Tab","Shift-Tab","gutters","on","_onChange","newValue","fireEvent","rtl","getWrapperElement","UpdatingElement","afterNextRender","cb","requestAnimationFrame","setTimeout","ha_yaml_editor_decorate","_LitElement","_LitElement2","HaYamlEditor","ha_yaml_editor_classCallCheck","ha_yaml_editor_getPrototypeOf","ha_yaml_editor_assertThisInitialized","ha_yaml_editor_inherits","query","_yaml","obj","ha_yaml_editor_typeof","hasOwnProperty","isEmpty","safeDump","err","alert","_this2$_editor","_editor","defaultValue","ha_yaml_editor_templateObject","label","ha_yaml_editor_templateObject2","isValid","stopPropagation","parsed","safeLoad","HassioAddonConfig","type","Boolean","editor","valid","hassio_addon_config_templateObject","_configChanged","hassio_addon_config_templateObject2","hassio_addon_config_templateObject3","_resetTapped","_saveTapped","_configHasChanged","hassio_addon_config_templateObject4","hassio_addon_config_get","hassio_addon_config_getPrototypeOf","options","requestUpdate","eventdata","_err$body","showConfirmationDialog","title","text","confirmText","success","response","path","body","message","_err$body2","t1","ironIconClass","customElements","get","HaIcon","_ironIconClass","ha_icon_classCallCheck","ha_icon_getPrototypeOf","ha_icon_assertThisInitialized","ha_icon_inherits","node","eventName","methodName","ha_icon_get","_iconsetName","define","HaLabelBadge","ha_label_badge_templateObject","classMap","big","icon","image","ha_label_badge_templateObject2","ha_label_badge_templateObject3","ha_label_badge_templateObject4","description","ha_label_badge_templateObject5","_templateObject6","ha_label_badge_get","ha_label_badge_getPrototypeOf","getElementById","style","backgroundImage","PERMIS_DESC","rating","host_network","homeassistant_api","full_access","hassio_api","docker_api","host_pid","apparmor","auth_api","ingress","hassio_addon_info_templateObject","_computeUpdateAvailable","hassio_addon_info_templateObject2","last_version","version","available","hassio_addon_info_templateObject3","changelog","hassio_addon_info_templateObject4","_openChangelog","hassio_addon_info_templateObject5","_protectionToggled","hassio_addon_info_templateObject6","_computeIsRunning","_templateObject7","_templateObject8","_templateObject9","url","logo","_templateObject10","green","includes","Number","yellow","red","_showMoreInfo","_templateObject11","_templateObject12","_templateObject13","_computeHassioApi","_templateObject14","hassio_role","_templateObject15","_templateObject16","_templateObject17","_computeApparmorClassName","_templateObject18","_templateObject19","_templateObject20","_startOnBootToggled","boot","_autoUpdateToggled","auto_update","_templateObject21","_panelToggled","ingress_panel","_computeCannotIngressSidebar","_templateObject22","_computeUsesProtectedOptions","_templateObject23","_templateObject24","_templateObject25","_uninstallClicked","build","_templateObject26","_templateObject27","_templateObject28","_computeShowWebUI","_templateObject29","_pathWebui","_computeShowIngressUI","_templateObject30","_openIngress","_templateObject31","_templateObject32","_installing","_installClicked","long_description","_templateObject33","_templateObject34","id","target","showHassioMarkdownDialog","content","_this$addon","state","detached","webui","replace","document","location","hostname","navigate","_computeHA92plus","_this$hass$config$ver2","_slicedToArray","config","split","major","minor","_err$body3","_context3","protected","setHassioAddonSecurity","_err$body4","_context4","_err$body5","_context5","fetchHassioAddonChangelog","_err$body6","_context6","installHassioAddon","_err$body7","_context7","confirm","uninstallHassioAddon","HassioAddonLogs","hassio_addon_logs_get","hassio_addon_logs_getPrototypeOf","_loadData","hassio_addon_logs_templateObject","hassio_addon_logs_templateObject2","_refresh","ANSI_HTML_STYLE","hassio_addon_logs_templateObject3","fetchHassioAddonLogs","_logContent","lastChild","removeChild","appendChild","parseTextToColoredPre","HassioAddonNetwork","hassio_addon_network_get","hassio_addon_network_getPrototypeOf","_setNetworkConfig","_config","hassio_addon_network_templateObject2","hassio_addon_network_templateObject3","hassio_addon_network_templateObject4","container","host","hassio_addon_network_templateObject","hassio_addon_network_templateObject5","network","network_description","items","sort","a","b","forEach","parseInt","String","networkconfiguration","hassio_addon_view_templateObject2","hassio_addon_view_templateObject3","hassio_addon_view_templateObject4","hassio_addon_view_templateObject5","hassio_addon_view_templateObject","hassio_addon_view_templateObject6","_routeDataChanged","route","addEventListener","_apiCalled","history","back","routeData","addoninfo","substr","fetchHassioAddonInfo","worker","HaMarkdown","markdownWorker","_render","walker","renderMarkdown","breaks","gfm","tables","allowSvg","_resize","createTreeWalker","nextNode","currentNode","HTMLAnchorElement","rel","addMethods","methods","module","exports","w","Worker","p","MwcSwitch","_decorate","_MwcSwitch","HaSwitch","_MwcSwitch2","_classCallCheck","_assertThisInitialized","_inherits","setProperty","_slot","assignedNodes","hapticType","haptic","window","ripple","interactionNode","_haChangeHandler","static","mdcFoundation","handleChange","checked","formElement"],"mappings":"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","file":"chunk.43e40fd69686ad51301d.js","sourcesContent":["import \"web-animations-js/web-animations-next-lite.min\";\n\nimport \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport \"@polymer/paper-dropdown-menu/paper-dropdown-menu\";\nimport \"@polymer/paper-item/paper-item\";\nimport \"@polymer/paper-listbox/paper-listbox\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n PropertyValues,\n TemplateResult,\n} from \"lit-element\";\n\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioAddonDetails,\n setHassioAddonOption,\n HassioAddonSetOptionParams,\n} from \"../../../src/data/hassio/addon\";\nimport {\n HassioHardwareAudioDevice,\n fetchHassioHardwareAudio,\n} from \"../../../src/data/hassio/hardware\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\n\n@customElement(\"hassio-addon-audio\")\nclass HassioAddonAudio extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public addon!: HassioAddonDetails;\n @property() private _error?: string;\n @property() private _inputDevices?: HassioHardwareAudioDevice[];\n @property() private _outputDevices?: HassioHardwareAudioDevice[];\n @property() private _selectedInput!: null | string;\n @property() private _selectedOutput!: null | string;\n\n protected render(): TemplateResult {\n return html`\n \n
\n ${this._error\n ? html`\n
${this._error}
\n `\n : \"\"}\n\n \n \n ${this._inputDevices &&\n this._inputDevices.map((item) => {\n return html`\n ${item.name}\n `;\n })}\n \n \n \n \n ${this._outputDevices &&\n this._outputDevices.map((item) => {\n return html`\n ${item.name}\n `;\n })}\n \n \n
\n
\n Save\n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n :host,\n paper-card,\n paper-dropdown-menu {\n display: block;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n paper-item {\n width: 450px;\n }\n .card-actions {\n text-align: right;\n }\n `,\n ];\n }\n\n protected update(changedProperties: PropertyValues): void {\n super.update(changedProperties);\n if (changedProperties.has(\"addon\")) {\n this._addonChanged();\n }\n }\n\n private _setInputDevice(ev): void {\n const device = ev.detail.item.getAttribute(\"device\");\n if (device) {\n this._selectedInput = device;\n }\n }\n\n private _setOutputDevice(ev): void {\n const device = ev.detail.item.getAttribute(\"device\");\n if (device) {\n this._selectedOutput = device;\n }\n }\n\n private async _addonChanged(): Promise {\n this._selectedInput = this.addon.audio_input;\n this._selectedOutput = this.addon.audio_output;\n if (this._outputDevices) {\n return;\n }\n\n const noDevice: HassioHardwareAudioDevice[] = [\n { device: undefined, name: \"-\" },\n ];\n\n try {\n const { audio } = await fetchHassioHardwareAudio(this.hass);\n const inupt = Object.keys(audio.input).map((key) => ({\n device: key,\n name: audio.input[key],\n }));\n const output = Object.keys(audio.output).map((key) => ({\n device: key,\n name: audio.output[key],\n }));\n\n this._inputDevices = noDevice.concat(inupt);\n this._outputDevices = noDevice.concat(output);\n } catch {\n this._error = \"Failed to fetch audio hardware\";\n this._inputDevices = noDevice;\n this._outputDevices = noDevice;\n }\n }\n\n private async _saveSettings(): Promise {\n this._error = undefined;\n const data: HassioAddonSetOptionParams = {\n audio_input: this._selectedInput || null,\n audio_output: this._selectedOutput || null,\n };\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n } catch {\n this._error = \"Failed to set addon audio device\";\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addon-audio\": HassioAddonAudio;\n }\n}\n","interface LoadedCodeMirror {\n codeMirror: any;\n codeMirrorCss: any;\n}\n\nlet loaded: Promise;\n\nexport const loadCodeMirror = async (): Promise => {\n if (!loaded) {\n loaded = import(/* webpackChunkName: \"codemirror\" */ \"./codemirror\");\n }\n return loaded;\n};\n","import { loadCodeMirror } from \"../resources/codemirror.ondemand\";\nimport { fireEvent } from \"../common/dom/fire_event\";\nimport {\n UpdatingElement,\n property,\n customElement,\n PropertyValues,\n} from \"lit-element\";\nimport { Editor } from \"codemirror\";\n\ndeclare global {\n interface HASSDomEvents {\n \"editor-save\": undefined;\n }\n}\n\n@customElement(\"ha-code-editor\")\nexport class HaCodeEditor extends UpdatingElement {\n public codemirror?: Editor;\n @property() public mode?: string;\n @property() public autofocus = false;\n @property() public rtl = false;\n @property() public error = false;\n @property() private _value = \"\";\n\n public set value(value: string) {\n this._value = value;\n }\n\n public get value(): string {\n return this.codemirror ? this.codemirror.getValue() : this._value;\n }\n\n public get hasComments(): boolean {\n return this.shadowRoot!.querySelector(\"span.cm-comment\") ? true : false;\n }\n\n public connectedCallback() {\n super.connectedCallback();\n if (!this.codemirror) {\n return;\n }\n this.codemirror.refresh();\n if (this.autofocus !== false) {\n this.codemirror.focus();\n }\n }\n\n protected update(changedProps: PropertyValues): void {\n super.update(changedProps);\n\n if (!this.codemirror) {\n return;\n }\n\n if (changedProps.has(\"mode\")) {\n this.codemirror.setOption(\"mode\", this.mode);\n }\n if (changedProps.has(\"autofocus\")) {\n this.codemirror.setOption(\"autofocus\", this.autofocus !== false);\n }\n if (changedProps.has(\"_value\") && this._value !== this.value) {\n this.codemirror.setValue(this._value);\n }\n if (changedProps.has(\"rtl\")) {\n this.codemirror.setOption(\"gutters\", this._calcGutters());\n this._setScrollBarDirection();\n }\n if (changedProps.has(\"error\")) {\n this.classList.toggle(\"error-state\", this.error);\n }\n }\n\n protected firstUpdated(changedProps: PropertyValues): void {\n super.firstUpdated(changedProps);\n this._load();\n }\n\n private async _load(): Promise {\n const loaded = await loadCodeMirror();\n\n const codeMirror = loaded.codeMirror;\n\n const shadowRoot = this.attachShadow({ mode: \"open\" });\n\n shadowRoot!.innerHTML = `\n `;\n\n this.codemirror = codeMirror(shadowRoot, {\n value: this._value,\n lineNumbers: true,\n tabSize: 2,\n mode: this.mode,\n autofocus: this.autofocus !== false,\n viewportMargin: Infinity,\n extraKeys: {\n Tab: \"indentMore\",\n \"Shift-Tab\": \"indentLess\",\n },\n gutters: this._calcGutters(),\n });\n this._setScrollBarDirection();\n this.codemirror!.on(\"changes\", () => this._onChange());\n }\n\n private _onChange(): void {\n const newValue = this.value;\n if (newValue === this._value) {\n return;\n }\n this._value = newValue;\n fireEvent(this, \"value-changed\", { value: this._value });\n }\n\n private _calcGutters(): string[] {\n return this.rtl ? [\"rtl-gutter\", \"CodeMirror-linenumbers\"] : [];\n }\n\n private _setScrollBarDirection(): void {\n if (this.codemirror) {\n this.codemirror.getWrapperElement().classList.toggle(\"rtl\", this.rtl);\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-code-editor\": HaCodeEditor;\n }\n}\n","export const afterNextRender = (cb: () => void): void => {\n requestAnimationFrame(() => setTimeout(cb, 0));\n};\n\nexport const nextRender = () => {\n return new Promise((resolve) => {\n afterNextRender(resolve);\n });\n};\n","import { safeDump, safeLoad } from \"js-yaml\";\nimport \"./ha-code-editor\";\nimport { LitElement, property, customElement, html, query } from \"lit-element\";\nimport { fireEvent } from \"../common/dom/fire_event\";\nimport { afterNextRender } from \"../common/util/render-status\";\n// tslint:disable-next-line\nimport { HaCodeEditor } from \"./ha-code-editor\";\n\nconst isEmpty = (obj: object) => {\n if (typeof obj !== \"object\") {\n return false;\n }\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n return false;\n }\n }\n return true;\n};\n\n@customElement(\"ha-yaml-editor\")\nexport class HaYamlEditor extends LitElement {\n @property() public value?: any;\n @property() public defaultValue?: any;\n @property() public isValid = true;\n @property() public label?: string;\n @property() private _yaml: string = \"\";\n @query(\"ha-code-editor\") private _editor?: HaCodeEditor;\n\n public setValue(value) {\n try {\n this._yaml = value && !isEmpty(value) ? safeDump(value) : \"\";\n } catch (err) {\n alert(`There was an error converting to YAML: ${err}`);\n }\n afterNextRender(() => {\n if (this._editor?.codemirror) {\n this._editor.codemirror.refresh();\n }\n });\n }\n\n protected firstUpdated() {\n if (this.defaultValue) {\n this.setValue(this.defaultValue);\n }\n }\n\n protected render() {\n if (this._yaml === undefined) {\n return;\n }\n return html`\n ${this.label\n ? html`\n

${this.label}

\n `\n : \"\"}\n \n `;\n }\n\n private _onChange(ev: CustomEvent) {\n ev.stopPropagation();\n const value = ev.detail.value;\n let parsed;\n let isValid = true;\n\n if (value) {\n try {\n parsed = safeLoad(value);\n } catch (err) {\n // Invalid YAML\n isValid = false;\n }\n } else {\n parsed = {};\n }\n\n this.value = parsed;\n this.isValid = isValid;\n\n fireEvent(this, \"value-changed\", { value: parsed, isValid } as any);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-yaml-editor\": HaYamlEditor;\n }\n}\n","import \"@polymer/iron-autogrow-textarea/iron-autogrow-textarea\";\nimport \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n PropertyValues,\n TemplateResult,\n query,\n} from \"lit-element\";\n\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioAddonDetails,\n setHassioAddonOption,\n HassioAddonSetOptionParams,\n} from \"../../../src/data/hassio/addon\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport { fireEvent } from \"../../../src/common/dom/fire_event\";\nimport \"../../../src/components/ha-yaml-editor\";\n// tslint:disable-next-line: no-duplicate-imports\nimport { HaYamlEditor } from \"../../../src/components/ha-yaml-editor\";\nimport { showConfirmationDialog } from \"../../../src/dialogs/generic/show-dialog-box\";\n\n@customElement(\"hassio-addon-config\")\nclass HassioAddonConfig extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public addon!: HassioAddonDetails;\n @property() private _error?: string;\n @property({ type: Boolean }) private _configHasChanged = false;\n\n @query(\"ha-yaml-editor\") private _editor!: HaYamlEditor;\n\n protected render(): TemplateResult {\n const editor = this._editor;\n // If editor not rendered, don't show the error.\n const valid = editor ? editor.isValid : true;\n\n return html`\n \n
\n \n ${this._error\n ? html`\n
${this._error}
\n `\n : \"\"}\n ${valid\n ? \"\"\n : html`\n
Invalid YAML
\n `}\n
\n
\n \n Reset to defaults\n \n \n Save\n \n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n :host {\n display: block;\n }\n paper-card {\n display: block;\n }\n .card-actions {\n display: flex;\n justify-content: space-between;\n }\n .errors {\n color: var(--google-red-500);\n margin-top: 16px;\n }\n iron-autogrow-textarea {\n width: 100%;\n font-family: monospace;\n }\n .syntaxerror {\n color: var(--google-red-500);\n }\n `,\n ];\n }\n\n protected updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n if (changedProperties.has(\"addon\")) {\n this._editor.setValue(this.addon.options);\n }\n }\n\n private _configChanged(): void {\n this._configHasChanged = true;\n this.requestUpdate();\n }\n\n private async _resetTapped(): Promise {\n const confirmed = await showConfirmationDialog(this, {\n title: this.addon.name,\n text: \"Are you sure you want to reset all your options?\",\n confirmText: \"reset options\",\n });\n\n if (!confirmed) {\n return;\n }\n\n this._error = undefined;\n const data: HassioAddonSetOptionParams = {\n options: null,\n };\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n this._configHasChanged = false;\n const eventdata = {\n success: true,\n response: undefined,\n path: \"options\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to reset addon configuration, ${err.body?.message ||\n err}`;\n }\n }\n\n private async _saveTapped(): Promise {\n let data: HassioAddonSetOptionParams;\n this._error = undefined;\n try {\n data = {\n options: this._editor.value,\n };\n } catch (err) {\n this._error = err;\n return;\n }\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n this._configHasChanged = false;\n const eventdata = {\n success: true,\n response: undefined,\n path: \"options\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to save addon configuration, ${err.body?.message ||\n err}`;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addon-config\": HassioAddonConfig;\n }\n}\n","import { Constructor } from \"../types\";\n\nimport \"@polymer/iron-icon/iron-icon\";\n// Not duplicate, this is for typing.\n// tslint:disable-next-line\nimport { IronIconElement } from \"@polymer/iron-icon/iron-icon\";\n\nconst ironIconClass = customElements.get(\"iron-icon\") as Constructor<\n IronIconElement\n>;\n\nlet loaded = false;\n\nexport class HaIcon extends ironIconClass {\n private _iconsetName?: string;\n\n public listen(\n node: EventTarget | null,\n eventName: string,\n methodName: string\n ): void {\n super.listen(node, eventName, methodName);\n\n if (!loaded && this._iconsetName === \"mdi\") {\n loaded = true;\n import(/* webpackChunkName: \"mdi-icons\" */ \"../resources/mdi-icons\");\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-icon\": HaIcon;\n }\n}\n\ncustomElements.define(\"ha-icon\", HaIcon);\n","import {\n html,\n LitElement,\n PropertyValues,\n TemplateResult,\n CSSResult,\n css,\n property,\n} from \"lit-element\";\nimport { classMap } from \"lit-html/directives/class-map\";\nimport \"./ha-icon\";\n\nclass HaLabelBadge extends LitElement {\n @property() public value?: string;\n @property() public icon?: string;\n @property() public label?: string;\n @property() public description?: string;\n @property() public image?: string;\n\n protected render(): TemplateResult {\n return html`\n
\n
\n 4),\n })}\"\n >\n ${this.icon && !this.value && !this.image\n ? html`\n \n `\n : \"\"}\n ${this.value && !this.image\n ? html`\n ${this.value}\n `\n : \"\"}\n
\n ${this.label\n ? html`\n 5,\n })}\"\n >\n ${this.label}\n
\n `\n : \"\"}\n \n ${this.description\n ? html`\n
${this.description}
\n `\n : \"\"}\n \n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n css`\n .badge-container {\n display: inline-block;\n text-align: center;\n vertical-align: top;\n }\n .label-badge {\n position: relative;\n display: block;\n margin: 0 auto;\n width: var(--ha-label-badge-size, 2.5em);\n text-align: center;\n height: var(--ha-label-badge-size, 2.5em);\n line-height: var(--ha-label-badge-size, 2.5em);\n font-size: var(--ha-label-badge-font-size, 1.5em);\n border-radius: 50%;\n border: 0.1em solid var(--ha-label-badge-color, var(--primary-color));\n color: var(--label-badge-text-color, rgb(76, 76, 76));\n\n white-space: nowrap;\n background-color: var(--label-badge-background-color, white);\n background-size: cover;\n transition: border 0.3s ease-in-out;\n }\n .label-badge .value {\n font-size: 90%;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .label-badge .value.big {\n font-size: 70%;\n }\n .label-badge .label {\n position: absolute;\n bottom: -1em;\n /* Make the label as wide as container+border. (parent_borderwidth / font-size) */\n left: -0.2em;\n right: -0.2em;\n line-height: 1em;\n font-size: 0.5em;\n }\n .label-badge .label span {\n box-sizing: border-box;\n max-width: 100%;\n display: inline-block;\n background-color: var(--ha-label-badge-color, var(--primary-color));\n color: var(--ha-label-badge-label-color, white);\n border-radius: 1em;\n padding: 9% 16% 8% 16%; /* mostly apitalized text, not much descenders => bit more top margin */\n font-weight: 500;\n overflow: hidden;\n text-transform: uppercase;\n text-overflow: ellipsis;\n transition: background-color 0.3s ease-in-out;\n text-transform: var(--ha-label-badge-label-text-transform, uppercase);\n }\n .label-badge .label.big span {\n font-size: 90%;\n padding: 10% 12% 7% 12%; /* push smaller text a bit down to center vertically */\n }\n .badge-container .title {\n margin-top: 1em;\n font-size: var(--ha-label-badge-title-font-size, 0.9em);\n width: var(--ha-label-badge-title-width, 5em);\n font-weight: var(--ha-label-badge-title-font-weight, 400);\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: normal;\n }\n `,\n ];\n }\n\n protected updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n if (changedProperties.has(\"image\")) {\n this.shadowRoot!.getElementById(\"badge\")!.style.backgroundImage = this\n .image\n ? `url(${this.image})`\n : \"\";\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-label-badge\": HaLabelBadge;\n }\n}\n\ncustomElements.define(\"ha-label-badge\", HaLabelBadge);\n","import \"@material/mwc-button\";\nimport \"@polymer/iron-icon/iron-icon\";\nimport \"@polymer/paper-card/paper-card\";\nimport \"@polymer/paper-tooltip/paper-tooltip\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n} from \"lit-element\";\nimport { classMap } from \"lit-html/directives/class-map\";\n\nimport \"../../../src/components/buttons/ha-call-api-button\";\nimport \"../../../src/components/buttons/ha-progress-button\";\nimport \"../../../src/components/ha-label-badge\";\nimport \"../../../src/components/ha-markdown\";\nimport \"../../../src/components/ha-switch\";\nimport \"../components/hassio-card-content\";\n\nimport { fireEvent } from \"../../../src/common/dom/fire_event\";\nimport {\n HassioAddonDetails,\n HassioAddonSetOptionParams,\n HassioAddonSetSecurityParams,\n setHassioAddonOption,\n setHassioAddonSecurity,\n uninstallHassioAddon,\n installHassioAddon,\n fetchHassioAddonChangelog,\n} from \"../../../src/data/hassio/addon\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport { navigate } from \"../../../src/common/navigate\";\nimport { showHassioMarkdownDialog } from \"../dialogs/markdown/show-dialog-hassio-markdown\";\n\nconst PERMIS_DESC = {\n rating: {\n title: \"Add-on Security Rating\",\n description:\n \"Hass.io provides a security rating to each of the add-ons, which indicates the risks involved when using this add-on. The more access an add-on requires on your system, the lower the score, thus raising the possible security risks.\\n\\nA score is on a scale from 1 to 6. Where 1 is the lowest score (considered the most insecure and highest risk) and a score of 6 is the highest score (considered the most secure and lowest risk).\",\n },\n host_network: {\n title: \"Host Network\",\n description:\n \"Add-ons usually run in their own isolated network layer, which prevents them from accessing the network of the host operating system. In some cases, this network isolation can limit add-ons in providing their services and therefore, the isolation can be lifted by the add-on author, giving the add-on full access to the network capabilities of the host machine. This gives the add-on more networking capabilities but lowers the security, hence, the security rating of the add-on will be lowered when this option is used by the add-on.\",\n },\n homeassistant_api: {\n title: \"Home Assistant API Access\",\n description:\n \"This add-on is allowed to access your running Home Assistant instance directly via the Home Assistant API. This mode handles authentication for the add-on as well, which enables an add-on to interact with Home Assistant without the need for additional authentication tokens.\",\n },\n full_access: {\n title: \"Full Hardware Access\",\n description:\n \"This add-on is given full access to the hardware of your system, by request of the add-on author. Access is comparable to the privileged mode in Docker. Since this opens up possible security risks, this feature impacts the add-on security score negatively.\\n\\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on.\",\n },\n hassio_api: {\n title: \"Hass.io API Access\",\n description:\n \"The add-on was given access to the Hass.io API, by request of the add-on author. By default, the add-on can access general version information of your system. When the add-on requests 'manager' or 'admin' level access to the API, it will gain access to control multiple parts of your Hass.io system. This permission is indicated by this badge and will impact the security score of the addon negatively.\",\n },\n docker_api: {\n title: \"Full Docker Access\",\n description:\n \"The add-on author has requested the add-on to have management access to the Docker instance running on your system. This mode gives the add-on full access and control to your entire Hass.io system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\\n\\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on.\",\n },\n host_pid: {\n title: \"Host Processes Namespace\",\n description:\n \"Usually, the processes the add-on runs, are isolated from all other system processes. The add-on author has requested the add-on to have access to the system processes running on the host system instance, and allow the add-on to spawn processes on the host system as well. This mode gives the add-on full access and control to your entire Hass.io system, which adds security risks, and could damage your system when misused. Therefore, this feature impacts the add-on security score negatively.\\n\\nThis level of access is not granted automatically and needs to be confirmed by you. To do this, you need to disable the protection mode on the add-on manually. Only disable the protection mode if you know, need AND trust the source of this add-on.\",\n },\n apparmor: {\n title: \"AppArmor\",\n description:\n \"AppArmor ('Application Armor') is a Linux kernel security module that restricts add-ons capabilities like network access, raw socket access, and permission to read, write, or execute specific files.\\n\\nAdd-on authors can provide their security profiles, optimized for the add-on, or request it to be disabled. If AppArmor is disabled, it will raise security risks and therefore, has a negative impact on the security score of the add-on.\",\n },\n auth_api: {\n title: \"Home Assistant Authentication\",\n description:\n \"An add-on can authenticate users against Home Assistant, allowing add-ons to give users the possibility to log into applications running inside add-ons, using their Home Assistant username/password. This badge indicates if the add-on author requests this capability.\",\n },\n ingress: {\n title: \"Ingress\",\n description:\n \"This add-on is using Ingress to embed its interface securely into Home Assistant.\",\n },\n};\n\n@customElement(\"hassio-addon-info\")\nclass HassioAddonInfo extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public addon!: HassioAddonDetails;\n @property() private _error?: string;\n @property({ type: Boolean }) private _installing = false;\n\n protected render(): TemplateResult {\n return html`\n ${this._computeUpdateAvailable\n ? html`\n \n
\n \n ${!this.addon.available\n ? html`\n

\n This update is no longer compatible with your system.\n

\n `\n : \"\"}\n
\n
\n \n Update\n \n ${this.addon.changelog\n ? html`\n \n Changelog\n \n `\n : \"\"}\n
\n
\n `\n : \"\"}\n ${!this.addon.protected\n ? html`\n \n
\n Protection mode on this add-on is disabled! This gives the add-on full access to the entire system, which adds security risks, and could damage your system when used incorrectly. Only disable the protection mode if you know, need AND trust the source of this add-on.\n
\n
\n Enable Protection mode\n
\n \n
\n `\n : \"\"}\n\n \n
\n
\n ${this.addon.name}\n
\n ${this.addon.version\n ? html`\n ${this.addon.version}\n ${this._computeIsRunning\n ? html`\n \n `\n : html`\n \n `}\n `\n : html`\n ${this.addon.last_version}\n `}\n
\n
\n
\n ${this.addon.description}.
\n Visit\n \n ${this.addon.name} page\n for details.\n
\n ${this.addon.logo\n ? html`\n \n \n \n `\n : \"\"}\n
\n \n ${this.addon.host_network\n ? html`\n \n `\n : \"\"}\n ${this.addon.full_access\n ? html`\n \n `\n : \"\"}\n ${this.addon.homeassistant_api\n ? html`\n \n `\n : \"\"}\n ${this._computeHassioApi\n ? html`\n \n `\n : \"\"}\n ${this.addon.docker_api\n ? html`\n \n `\n : \"\"}\n ${this.addon.host_pid\n ? html`\n \n `\n : \"\"}\n ${this.addon.apparmor\n ? html`\n \n `\n : \"\"}\n ${this.addon.auth_api\n ? html`\n \n `\n : \"\"}\n ${this.addon.ingress\n ? html`\n \n `\n : \"\"}\n
\n\n ${this.addon.version\n ? html`\n
\n
Start on boot
\n \n
\n
\n
Auto update
\n \n
\n ${this.addon.ingress\n ? html`\n
\n
Show in sidebar
\n \n ${this._computeCannotIngressSidebar\n ? html`\n \n This option requires Home Assistant 0.92 or\n later.\n \n `\n : \"\"}\n
\n `\n : \"\"}\n ${this._computeUsesProtectedOptions\n ? html`\n
\n
\n Protection mode\n \n \n \n Grant the add-on elevated system access.\n \n \n
\n \n
\n `\n : \"\"}\n `\n : \"\"}\n ${this._error\n ? html`\n
${this._error}
\n `\n : \"\"}\n
\n
\n ${this.addon.version\n ? html`\n \n Uninstall\n \n ${this.addon.build\n ? html`\n \n Rebuild\n \n `\n : \"\"}\n ${this._computeIsRunning\n ? html`\n \n Restart\n \n \n Stop\n \n `\n : html`\n \n Start\n \n `}\n ${this._computeShowWebUI\n ? html`\n \n \n Open web UI\n \n \n `\n : \"\"}\n ${this._computeShowIngressUI\n ? html`\n \n Open web UI\n \n `\n : \"\"}\n `\n : html`\n ${!this.addon.available\n ? html`\n

\n This add-on is not available on your system.\n

\n `\n : \"\"}\n \n Install\n \n `}\n
\n
\n\n ${this.addon.long_description\n ? html`\n \n
\n \n
\n
\n `\n : \"\"}\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n :host {\n display: block;\n }\n paper-card {\n display: block;\n margin-bottom: 16px;\n }\n paper-card.warning {\n background-color: var(--google-red-500);\n color: white;\n --paper-card-header-color: white;\n }\n paper-card.warning mwc-button {\n --mdc-theme-primary: white !important;\n }\n .warning {\n color: var(--google-red-500);\n --mdc-theme-primary: var(--google-red-500);\n }\n .light-color {\n color: var(--secondary-text-color);\n }\n .addon-header {\n font-size: 24px;\n color: var(--paper-card-header-color, --primary-text-color);\n }\n .addon-version {\n float: right;\n font-size: 15px;\n vertical-align: middle;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n .description {\n margin-bottom: 16px;\n }\n .logo img {\n max-height: 60px;\n margin: 16px 0;\n display: block;\n }\n .state {\n display: flex;\n margin: 33px 0;\n }\n .state div {\n width: 180px;\n display: inline-block;\n }\n .state iron-icon {\n width: 16px;\n height: 16px;\n color: var(--secondary-text-color);\n }\n ha-switch {\n display: flex;\n }\n iron-icon.running {\n color: var(--paper-green-400);\n }\n iron-icon.stopped {\n color: var(--google-red-300);\n }\n ha-call-api-button {\n font-weight: 500;\n color: var(--primary-color);\n }\n .right {\n float: right;\n }\n ha-markdown img {\n max-width: 100%;\n }\n protection-enable mwc-button {\n --mdc-theme-primary: white;\n }\n .description a,\n ha-markdown a {\n color: var(--primary-color);\n }\n .red {\n --ha-label-badge-color: var(--label-badge-red, #df4c1e);\n }\n .blue {\n --ha-label-badge-color: var(--label-badge-blue, #039be5);\n }\n .green {\n --ha-label-badge-color: var(--label-badge-green, #0da035);\n }\n .yellow {\n --ha-label-badge-color: var(--label-badge-yellow, #f4b400);\n }\n .security {\n margin-bottom: 16px;\n }\n .card-actions {\n display: flow-root;\n }\n .security h3 {\n margin-bottom: 8px;\n font-weight: normal;\n }\n .security ha-label-badge {\n cursor: pointer;\n margin-right: 4px;\n --iron-icon-height: 45px;\n }\n `,\n ];\n }\n\n private get _computeHassioApi(): boolean {\n return (\n this.addon.hassio_api &&\n (this.addon.hassio_role === \"manager\" ||\n this.addon.hassio_role === \"admin\")\n );\n }\n\n private get _computeApparmorClassName(): string {\n if (this.addon.apparmor === \"profile\") {\n return \"green\";\n }\n if (this.addon.apparmor === \"disable\") {\n return \"red\";\n }\n return \"\";\n }\n\n private _showMoreInfo(ev): void {\n const id = ev.target.getAttribute(\"id\");\n showHassioMarkdownDialog(this, {\n title: PERMIS_DESC[id].title,\n content: PERMIS_DESC[id].description,\n });\n }\n\n private get _computeIsRunning(): boolean {\n return this.addon?.state === \"started\";\n }\n\n private get _computeUpdateAvailable(): boolean | \"\" {\n return (\n this.addon &&\n !this.addon.detached &&\n this.addon.version &&\n this.addon.version !== this.addon.last_version\n );\n }\n\n private get _pathWebui(): string | null {\n return (\n this.addon.webui &&\n this.addon.webui.replace(\"[HOST]\", document.location.hostname)\n );\n }\n\n private get _computeShowWebUI(): boolean | \"\" | null {\n return !this.addon.ingress && this.addon.webui && this._computeIsRunning;\n }\n\n private _openIngress(): void {\n navigate(this, `/hassio/ingress/${this.addon.slug}`);\n }\n\n private get _computeShowIngressUI(): boolean {\n return this.addon.ingress && this._computeIsRunning;\n }\n\n private get _computeCannotIngressSidebar(): boolean {\n return !this.addon.ingress || !this._computeHA92plus;\n }\n\n private get _computeUsesProtectedOptions(): boolean {\n return (\n this.addon.docker_api || this.addon.full_access || this.addon.host_pid\n );\n }\n\n private get _computeHA92plus(): boolean {\n const [major, minor] = this.hass.config.version.split(\".\", 2);\n return Number(major) > 0 || (major === \"0\" && Number(minor) >= 92);\n }\n\n private async _startOnBootToggled(): Promise {\n this._error = undefined;\n const data: HassioAddonSetOptionParams = {\n boot: this.addon.boot === \"auto\" ? \"manual\" : \"auto\",\n };\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"option\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to set addon option, ${err.body?.message || err}`;\n }\n }\n\n private async _autoUpdateToggled(): Promise {\n this._error = undefined;\n const data: HassioAddonSetOptionParams = {\n auto_update: !this.addon.auto_update,\n };\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"option\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to set addon option, ${err.body?.message || err}`;\n }\n }\n\n private async _protectionToggled(): Promise {\n this._error = undefined;\n const data: HassioAddonSetSecurityParams = {\n protected: !this.addon.protected,\n };\n try {\n await setHassioAddonSecurity(this.hass, this.addon.slug, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"security\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to set addon security option, ${err.body?.message ||\n err}`;\n }\n }\n\n private async _panelToggled(): Promise {\n this._error = undefined;\n const data: HassioAddonSetOptionParams = {\n ingress_panel: !this.addon.ingress_panel,\n };\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"option\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to set addon option, ${err.body?.message || err}`;\n }\n }\n\n private async _openChangelog(): Promise {\n this._error = undefined;\n try {\n const content = await fetchHassioAddonChangelog(\n this.hass,\n this.addon.slug\n );\n showHassioMarkdownDialog(this, {\n title: \"Changelog\",\n content,\n });\n } catch (err) {\n this._error = `Failed to get addon changelog, ${err.body?.message ||\n err}`;\n }\n }\n\n private async _installClicked(): Promise {\n this._error = undefined;\n this._installing = true;\n try {\n await installHassioAddon(this.hass, this.addon.slug);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"install\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to install addon, ${err.body?.message || err}`;\n }\n this._installing = false;\n }\n\n private async _uninstallClicked(): Promise {\n if (!confirm(\"Are you sure you want to uninstall this add-on?\")) {\n return;\n }\n this._error = undefined;\n try {\n await uninstallHassioAddon(this.hass, this.addon.slug);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"uninstall\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to uninstall addon, ${err.body?.message || err}`;\n }\n }\n}\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addon-info\": HassioAddonInfo;\n }\n}\n","import \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n query,\n} from \"lit-element\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioAddonDetails,\n fetchHassioAddonLogs,\n} from \"../../../src/data/hassio/addon\";\nimport { ANSI_HTML_STYLE, parseTextToColoredPre } from \"../ansi-to-html\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\n\n@customElement(\"hassio-addon-logs\")\nclass HassioAddonLogs extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public addon!: HassioAddonDetails;\n @property() private _error?: string;\n @query(\"#content\") private _logContent!: any;\n\n public async connectedCallback(): Promise {\n super.connectedCallback();\n await this._loadData();\n }\n\n protected render(): TemplateResult {\n return html`\n \n ${this._error\n ? html`\n
${this._error}
\n `\n : \"\"}\n
\n
\n Refresh\n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n ANSI_HTML_STYLE,\n css`\n :host,\n paper-card {\n display: block;\n }\n pre {\n overflow-x: auto;\n white-space: pre-wrap;\n overflow-wrap: break-word;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n `,\n ];\n }\n\n private async _loadData(): Promise {\n this._error = undefined;\n try {\n const content = await fetchHassioAddonLogs(this.hass, this.addon.slug);\n while (this._logContent.lastChild) {\n this._logContent.removeChild(this._logContent.lastChild as Node);\n }\n this._logContent.appendChild(parseTextToColoredPre(content));\n } catch (err) {\n this._error = `Failed to get addon logs, ${err.body?.message || err}`;\n }\n }\n\n private async _refresh(): Promise {\n await this._loadData();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addon-logs\": HassioAddonLogs;\n }\n}\n","import \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n PropertyValues,\n TemplateResult,\n} from \"lit-element\";\n\nimport { PaperInputElement } from \"@polymer/paper-input/paper-input\";\n\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioAddonDetails,\n HassioAddonSetOptionParams,\n setHassioAddonOption,\n} from \"../../../src/data/hassio/addon\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport { fireEvent } from \"../../../src/common/dom/fire_event\";\n\ninterface NetworkItem {\n description: string;\n container: string;\n host: number | null;\n}\n\ninterface NetworkItemInput extends PaperInputElement {\n container: string;\n}\n\n@customElement(\"hassio-addon-network\")\nclass HassioAddonNetwork extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public addon!: HassioAddonDetails;\n @property() private _error?: string;\n @property() private _config?: NetworkItem[];\n\n public connectedCallback(): void {\n super.connectedCallback();\n this._setNetworkConfig();\n }\n\n protected render(): TemplateResult {\n if (!this._config) {\n return html``;\n }\n\n return html`\n \n
\n ${this._error\n ? html`\n
${this._error}
\n `\n : \"\"}\n\n \n \n \n \n \n \n \n ${this._config!.map((item) => {\n return html`\n \n \n \n \n \n `;\n })}\n \n
ContainerHostDescription
${item.container}\n \n ${item.description}
\n
\n
\n \n Reset to defaults\n \n Save\n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n :host {\n display: block;\n }\n paper-card {\n display: block;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n .card-actions {\n display: flex;\n justify-content: space-between;\n }\n `,\n ];\n }\n\n protected update(changedProperties: PropertyValues): void {\n super.update(changedProperties);\n if (changedProperties.has(\"addon\")) {\n this._setNetworkConfig();\n }\n }\n\n private _setNetworkConfig(): void {\n const network = this.addon.network || {};\n const description = this.addon.network_description || {};\n const items: NetworkItem[] = Object.keys(network).map((key) => {\n return {\n container: key,\n host: network[key],\n description: description[key],\n };\n });\n this._config = items.sort((a, b) => (a.container > b.container ? 1 : -1));\n }\n\n private async _configChanged(ev: Event): Promise {\n const target = ev.target as NetworkItemInput;\n this._config!.forEach((item) => {\n if (\n item.container === target.container &&\n item.host !== parseInt(String(target.value), 10)\n ) {\n item.host = target.value ? parseInt(String(target.value), 10) : null;\n }\n });\n }\n\n private async _resetTapped(): Promise {\n const data: HassioAddonSetOptionParams = {\n network: null,\n };\n\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"option\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to set addon network configuration, ${err.body\n ?.message || err}`;\n }\n }\n\n private async _saveTapped(): Promise {\n this._error = undefined;\n const networkconfiguration = {};\n this._config!.forEach((item) => {\n networkconfiguration[item.container] = parseInt(String(item.host), 10);\n });\n\n const data: HassioAddonSetOptionParams = {\n network: networkconfiguration,\n };\n\n try {\n await setHassioAddonOption(this.hass, this.addon.slug, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"option\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._error = `Failed to set addon network configuration, ${err.body\n ?.message || err}`;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addon-network\": HassioAddonNetwork;\n }\n}\n","import \"@polymer/app-layout/app-header-layout/app-header-layout\";\nimport \"@polymer/app-layout/app-header/app-header\";\nimport \"@polymer/app-layout/app-toolbar/app-toolbar\";\nimport \"@polymer/paper-icon-button/paper-icon-button\";\nimport \"@polymer/paper-spinner/paper-spinner-lite\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n} from \"lit-element\";\n\nimport { HomeAssistant, Route } from \"../../../src/types\";\nimport {\n HassioAddonDetails,\n fetchHassioAddonInfo,\n} from \"../../../src/data/hassio/addon\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\n\nimport \"./hassio-addon-audio\";\nimport \"./hassio-addon-config\";\nimport \"./hassio-addon-info\";\nimport \"./hassio-addon-logs\";\nimport \"./hassio-addon-network\";\n\n@customElement(\"hassio-addon-view\")\nclass HassioAddonView extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public route!: Route;\n @property() public addon?: HassioAddonDetails;\n\n protected render(): TemplateResult {\n if (!this.addon) {\n return html`\n \n `;\n }\n return html`\n \n
\n \n\n ${this.addon && this.addon.version\n ? html`\n \n\n ${this.addon.audio\n ? html`\n \n `\n : \"\"}\n ${this.addon.network\n ? html`\n \n `\n : \"\"}\n\n \n `\n : \"\"}\n
\n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n :host {\n color: var(--primary-text-color);\n --paper-card-header-color: var(--primary-text-color);\n }\n .content {\n padding: 24px 0 32px;\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config {\n margin-bottom: 24px;\n width: 600px;\n }\n hassio-addon-logs {\n max-width: calc(100% - 8px);\n min-width: 600px;\n }\n @media only screen and (max-width: 600px) {\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config,\n hassio-addon-logs {\n max-width: 100%;\n min-width: 100%;\n }\n }\n `,\n ];\n }\n\n protected async firstUpdated(): Promise {\n await this._routeDataChanged(this.route);\n this.addEventListener(\"hass-api-called\", (ev) => this._apiCalled(ev));\n }\n\n private async _apiCalled(ev): Promise {\n const path: string = ev.detail.path;\n\n if (!path) {\n return;\n }\n\n if (path === \"uninstall\") {\n history.back();\n } else {\n await this._routeDataChanged(this.route);\n }\n }\n\n private async _routeDataChanged(routeData: Route): Promise {\n const addon = routeData.path.substr(1);\n try {\n const addoninfo = await fetchHassioAddonInfo(this.hass, addon);\n this.addon = addoninfo;\n } catch {\n this.addon = undefined;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addon-view\": HassioAddonView;\n }\n}\n","import { UpdatingElement, property, customElement } from \"lit-element\";\n// eslint-disable-next-line import/no-webpack-loader-syntax\n// @ts-ignore\n// tslint:disable-next-line: no-implicit-dependencies\nimport markdownWorker from \"workerize-loader!../resources/markdown_worker\";\nimport { fireEvent } from \"../common/dom/fire_event\";\n\nlet worker: any | undefined;\n\n@customElement(\"ha-markdown\")\nclass HaMarkdown extends UpdatingElement {\n @property() public content = \"\";\n @property({ type: Boolean }) public allowSvg = false;\n\n protected update(changedProps) {\n super.update(changedProps);\n\n if (!worker) {\n worker = markdownWorker();\n }\n\n this._render();\n }\n\n private async _render() {\n this.innerHTML = await worker.renderMarkdown(\n this.content,\n {\n breaks: true,\n gfm: true,\n tables: true,\n },\n {\n allowSvg: this.allowSvg,\n }\n );\n\n this._resize();\n\n const walker = document.createTreeWalker(\n this,\n 1 /* SHOW_ELEMENT */,\n null,\n false\n );\n\n while (walker.nextNode()) {\n const node = walker.currentNode;\n\n // Open external links in a new window\n if (\n node instanceof HTMLAnchorElement &&\n node.host !== document.location.host\n ) {\n node.target = \"_blank\";\n\n // protect referrer on external links and deny window.opener access for security reasons\n // (see https://mathiasbynens.github.io/rel-noopener/)\n node.rel = \"noreferrer noopener\";\n\n // Fire a resize event when images loaded to notify content resized\n } else if (node) {\n node.addEventListener(\"load\", this._resize);\n }\n }\n }\n\n private _resize = () => fireEvent(this, \"iron-resize\");\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-markdown\": HaMarkdown;\n }\n}\n","\n\t\t\t\tvar addMethods = require(\"../../node_modules/workerize-loader/dist/rpc-wrapper.js\")\n\t\t\t\tvar methods = [\"renderMarkdown\"]\n\t\t\t\tmodule.exports = function() {\n\t\t\t\t\tvar w = new Worker(__webpack_public_path__ + \"201359fd5a526afe13ef.worker.js\", { name: \"[hash].worker.js\" })\n\t\t\t\t\taddMethods(w, methods)\n\t\t\t\t\t\n\t\t\t\t\treturn w\n\t\t\t\t}\n\t\t\t","import {\n customElement,\n CSSResult,\n css,\n query,\n html,\n property,\n} from \"lit-element\";\nimport \"@material/mwc-switch\";\nimport { style } from \"@material/mwc-switch/mwc-switch-css\";\n// tslint:disable-next-line\nimport { Switch } from \"@material/mwc-switch\";\nimport { Constructor } from \"../types\";\nimport { forwardHaptic } from \"../data/haptics\";\nimport { ripple } from \"@material/mwc-ripple/ripple-directive\";\n// tslint:disable-next-line\nconst MwcSwitch = customElements.get(\"mwc-switch\") as Constructor;\n\n@customElement(\"ha-switch\")\nexport class HaSwitch extends MwcSwitch {\n // Generate a haptic vibration.\n // Only set to true if the new value of the switch is applied right away when toggling.\n // Do not add haptic when a user is required to press save.\n @property({ type: Boolean }) public haptic = false;\n @query(\"slot\") private _slot!: HTMLSlotElement;\n\n protected firstUpdated() {\n super.firstUpdated();\n this.style.setProperty(\n \"--mdc-theme-secondary\",\n \"var(--switch-checked-color)\"\n );\n this.classList.toggle(\n \"slotted\",\n Boolean(this._slot.assignedNodes().length)\n );\n this.addEventListener(\"change\", () => {\n if (this.haptic) {\n forwardHaptic(\"light\");\n }\n });\n }\n\n protected render() {\n return html`\n
\n
\n \n
\n \n
\n
\n \n \n `;\n }\n\n protected static get styles(): CSSResult[] {\n return [\n style,\n css`\n :host {\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n .mdc-switch.mdc-switch--checked .mdc-switch__thumb {\n background-color: var(--switch-checked-button-color);\n border-color: var(--switch-checked-button-color);\n }\n .mdc-switch.mdc-switch--checked .mdc-switch__track {\n background-color: var(--switch-checked-track-color);\n border-color: var(--switch-checked-track-color);\n }\n .mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb {\n background-color: var(--switch-unchecked-button-color);\n border-color: var(--switch-unchecked-button-color);\n }\n .mdc-switch:not(.mdc-switch--checked) .mdc-switch__track {\n background-color: var(--switch-unchecked-track-color);\n border-color: var(--switch-unchecked-track-color);\n }\n :host(.slotted) .mdc-switch {\n margin-right: 24px;\n }\n `,\n ];\n }\n\n private _haChangeHandler(e: Event) {\n this.mdcFoundation.handleChange(e);\n // catch \"click\" event and sync properties\n this.checked = this.formElement.checked;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-switch\": HaSwitch;\n }\n}\n","/**\n * Broadcast haptic feedback requests\n */\n\nimport { fireEvent, HASSDomEvent } from \"../common/dom/fire_event\";\n\n// Allowed types are from iOS HIG.\n// https://developer.apple.com/design/human-interface-guidelines/ios/user-interaction/feedback/#haptics\n// Implementors on platforms other than iOS should attempt to match the patterns (shown in HIG) as closely as possible.\nexport type HapticType =\n | \"success\"\n | \"warning\"\n | \"failure\"\n | \"light\"\n | \"medium\"\n | \"heavy\"\n | \"selection\";\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n haptic: HapticType;\n }\n\n interface GlobalEventHandlersEventMap {\n haptic: HASSDomEvent;\n }\n}\n\nexport const forwardHaptic = (hapticType: HapticType) => {\n fireEvent(window, \"haptic\", hapticType);\n};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/hassio/api/panel/chunk.00de7352e51443687ebb.js b/hassio/api/panel/chunk.715824f4764bdbe425b1.js similarity index 99% rename from hassio/api/panel/chunk.00de7352e51443687ebb.js rename to hassio/api/panel/chunk.715824f4764bdbe425b1.js index 8c96ec828..f1cab76f2 100644 --- a/hassio/api/panel/chunk.00de7352e51443687ebb.js +++ b/hassio/api/panel/chunk.715824f4764bdbe425b1.js @@ -1,3 +1,3 @@ -/*! For license information please see chunk.00de7352e51443687ebb.js.LICENSE */ -(self.webpackJsonp=self.webpackJsonp||[]).push([[4],{167:function(e,t,r){"use strict";r.r(t);r(48),r(53),r(24);var n=r(5),i=r(15),o=r(10);r(55),r(87);function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(){var e=c(['\n ha-paper-dialog {\n min-width: 350px;\n font-size: 14px;\n border-radius: 2px;\n }\n app-toolbar {\n margin: 0;\n padding: 0 16px;\n color: var(--primary-text-color);\n background-color: var(--secondary-background-color);\n }\n app-toolbar [main-title] {\n margin-left: 16px;\n }\n paper-checkbox {\n display: block;\n margin: 4px;\n }\n @media all and (max-width: 450px), all and (max-height: 500px) {\n ha-paper-dialog {\n max-height: 100%;\n }\n ha-paper-dialog::before {\n content: "";\n position: fixed;\n z-index: -1;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n background-color: inherit;\n }\n app-toolbar {\n color: var(--text-primary-color);\n background-color: var(--primary-color);\n }\n }\n ']);return s=function(){return e},e}function l(){var e=c(['\n \n \n \n
',"
\n
\n \n \n \n
\n "]);return l=function(){return e},e}function c(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function p(e){return(p=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function d(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function f(e){var t,r=v(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function h(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function m(e){return e.decorators&&e.decorators.length}function y(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function b(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function v(e){var t=function(e,t){if("object"!==a(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===a(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!m(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),l=this.toElementFinisherExtras((0,i[o])(s)||s);e=l.element,this.addElementPlacement(e,t),l.finisher&&n.push(l.finisher);var c=l.extras;if(c){for(var p=0;p=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n\n :host {\n display: block;\n @apply --layout-relative;\n }\n\n :host(.is-scrolled:not(:first-child))::before {\n content: \'\';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--divider-color);\n }\n\n :host(.can-scroll:not(.scrolled-to-bottom):not(:last-child))::after {\n content: \'\';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--divider-color);\n }\n\n .scrollable {\n padding: 0 24px;\n\n @apply --layout-scroll;\n @apply --paper-dialog-scrollable;\n }\n\n .fit {\n @apply --layout-fit;\n }\n \n\n
\n \n
\n']);return a=function(){return e},e}Object(i.a)({_template:Object(o.a)(a()),is:"paper-dialog-scrollable",properties:{dialogElement:{type:Object}},get scrollTarget(){return this.$.scrollable},ready:function(){this._ensureTarget(),this.classList.add("no-padding")},attached:function(){this._ensureTarget(),requestAnimationFrame(this.updateScrollState.bind(this))},updateScrollState:function(){this.toggleClass("is-scrolled",this.scrollTarget.scrollTop>0),this.toggleClass("can-scroll",this.scrollTarget.offsetHeight=this.scrollTarget.scrollHeight)},_ensureTarget:function(){this.dialogElement=this.dialogElement||this.parentElement,this.dialogElement&&this.dialogElement.behaviors&&this.dialogElement.behaviors.indexOf(n.b)>=0?(this.dialogElement.sizingTarget=this.scrollTarget,this.scrollTarget.classList.remove("fit")):this.dialogElement&&this.scrollTarget.classList.add("fit")}})},55:function(e,t,r){"use strict";r(4),r(12),r(13),r(30),r(35);var n=document.createElement("template");n.setAttribute("style","display: none;"),n.innerHTML='\n \n',document.head.appendChild(n.content);var i=r(72),o=r(31),a=r(7),s=r(6);function l(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n \n \n']);return l=function(){return e},e}Object(a.a)({_template:Object(s.a)(l()),is:"paper-dialog",behaviors:[o.a,i.a],listeners:{"neon-animation-finish":"_onNeonAnimationFinish"},_renderOpened:function(){this.cancelAnimation(),this.playAnimation("entry")},_renderClosed:function(){this.cancelAnimation(),this.playAnimation("exit")},_onNeonAnimationFinish:function(){this.opened?this._finishRenderOpened():this._finishRenderClosed()}});var c=r(59),p=r(8),d=r(67),u={getTabbableNodes:function(e){var t=[];return this._collectTabbableNodes(e,t)?d.a._sortByTabIndex(t):t},_collectTabbableNodes:function(e,t){if(e.nodeType!==Node.ELEMENT_NODE||!d.a._isVisible(e))return!1;var r,n=e,i=d.a._normalizedTabIndex(n),o=i>0;i>=0&&t.push(n),r="content"===n.localName||"slot"===n.localName?Object(p.a)(n).getDistributedNodes():Object(p.a)(n.shadowRoot||n.root||n).children;for(var a=0;a=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),l=this.toElementFinisherExtras((0,i[o])(s)||s);e=l.element,this.addElementPlacement(e,t),l.finisher&&n.push(l.finisher);var c=l.extras;if(c){for(var p=0;p=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n \n \n
',"
\n
\n \n \n \n \n "]);return l=function(){return e},e}function c(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function p(e){return(p=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function d(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function f(e){var t,r=v(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function h(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function m(e){return e.decorators&&e.decorators.length}function y(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function b(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function v(e){var t=function(e,t){if("object"!==a(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===a(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!m(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),l=this.toElementFinisherExtras((0,i[o])(s)||s);e=l.element,this.addElementPlacement(e,t),l.finisher&&n.push(l.finisher);var c=l.extras;if(c){for(var p=0;p=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n\n :host {\n display: block;\n @apply --layout-relative;\n }\n\n :host(.is-scrolled:not(:first-child))::before {\n content: \'\';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--divider-color);\n }\n\n :host(.can-scroll:not(.scrolled-to-bottom):not(:last-child))::after {\n content: \'\';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--divider-color);\n }\n\n .scrollable {\n padding: 0 24px;\n\n @apply --layout-scroll;\n @apply --paper-dialog-scrollable;\n }\n\n .fit {\n @apply --layout-fit;\n }\n \n\n
\n \n
\n']);return a=function(){return e},e}Object(i.a)({_template:Object(o.a)(a()),is:"paper-dialog-scrollable",properties:{dialogElement:{type:Object}},get scrollTarget(){return this.$.scrollable},ready:function(){this._ensureTarget(),this.classList.add("no-padding")},attached:function(){this._ensureTarget(),requestAnimationFrame(this.updateScrollState.bind(this))},updateScrollState:function(){this.toggleClass("is-scrolled",this.scrollTarget.scrollTop>0),this.toggleClass("can-scroll",this.scrollTarget.offsetHeight=this.scrollTarget.scrollHeight)},_ensureTarget:function(){this.dialogElement=this.dialogElement||this.parentElement,this.dialogElement&&this.dialogElement.behaviors&&this.dialogElement.behaviors.indexOf(n.b)>=0?(this.dialogElement.sizingTarget=this.scrollTarget,this.scrollTarget.classList.remove("fit")):this.dialogElement&&this.scrollTarget.classList.add("fit")}})},55:function(e,t,r){"use strict";r(4),r(12),r(13),r(30),r(35);var n=document.createElement("template");n.setAttribute("style","display: none;"),n.innerHTML='\n \n',document.head.appendChild(n.content);var i=r(72),o=r(31),a=r(7),s=r(6);function l(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n \n \n']);return l=function(){return e},e}Object(a.a)({_template:Object(s.a)(l()),is:"paper-dialog",behaviors:[o.a,i.a],listeners:{"neon-animation-finish":"_onNeonAnimationFinish"},_renderOpened:function(){this.cancelAnimation(),this.playAnimation("entry")},_renderClosed:function(){this.cancelAnimation(),this.playAnimation("exit")},_onNeonAnimationFinish:function(){this.opened?this._finishRenderOpened():this._finishRenderClosed()}});var c=r(59),p=r(8),d=r(67),u={getTabbableNodes:function(e){var t=[];return this._collectTabbableNodes(e,t)?d.a._sortByTabIndex(t):t},_collectTabbableNodes:function(e,t){if(e.nodeType!==Node.ELEMENT_NODE||!d.a._isVisible(e))return!1;var r,n=e,i=d.a._normalizedTabIndex(n),o=i>0;i>=0&&t.push(n),r="content"===n.localName||"slot"===n.localName?Object(p.a)(n).getDistributedNodes():Object(p.a)(n.shadowRoot||n.root||n).children;for(var a=0;a=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),l=this.toElementFinisherExtras((0,i[o])(s)||s);e=l.element,this.addElementPlacement(e,t),l.finisher&&n.push(l.finisher);var c=l.extras;if(c){for(var p=0;p=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var 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\n \n \n
${this.title}
\n
\n \n \n \n \n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyleDialog,\n hassioStyle,\n css`\n ha-paper-dialog {\n min-width: 350px;\n font-size: 14px;\n border-radius: 2px;\n }\n app-toolbar {\n margin: 0;\n padding: 0 16px;\n color: var(--primary-text-color);\n background-color: var(--secondary-background-color);\n }\n app-toolbar [main-title] {\n margin-left: 16px;\n }\n paper-checkbox {\n display: block;\n margin: 4px;\n }\n @media all and (max-width: 450px), all and (max-height: 500px) {\n ha-paper-dialog {\n max-height: 100%;\n }\n ha-paper-dialog::before {\n content: \"\";\n position: fixed;\n z-index: -1;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n background-color: inherit;\n }\n app-toolbar {\n color: var(--text-primary-color);\n background-color: var(--primary-color);\n }\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dialog-hassio-markdown\": HassioMarkdownDialog;\n }\n}\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\n\nimport {IronOverlayBehavior} from '@polymer/iron-overlay-behavior/iron-overlay-behavior.js';\nimport {dom} from '@polymer/polymer/lib/legacy/polymer.dom.js';\n\n/**\n Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to\n implement a Material Design dialog.\n\n For example, if `` implements this behavior:\n\n \n

Header

\n
Dialog body
\n
\n Cancel\n Accept\n
\n
\n\n `paper-dialog-shared-styles.html` provide styles for a header, content area,\n and an action area for buttons. Use the `

` tag for the header and the\n `buttons` class for the action area. You can use the `paper-dialog-scrollable`\n element (in its own repository) if you need a scrolling content area.\n\n Use the `dialog-dismiss` and `dialog-confirm` attributes on interactive\n controls to close the dialog. If the user dismisses the dialog with\n `dialog-confirm`, the `closingReason` will update to include `confirmed:\n true`.\n\n ### Accessibility\n\n This element has `role=\"dialog\"` by default. Depending on the context, it may\n be more appropriate to override this attribute with `role=\"alertdialog\"`.\n\n If `modal` is set, the element will prevent the focus from exiting the\n element. It will also ensure that focus remains in the dialog.\n\n @hero hero.svg\n @demo demo/index.html\n @polymerBehavior PaperDialogBehavior\n */\nexport const PaperDialogBehaviorImpl = {\n\n hostAttributes: {'role': 'dialog', 'tabindex': '-1'},\n\n properties: {\n\n /**\n * If `modal` is true, this implies `no-cancel-on-outside-click`,\n * `no-cancel-on-esc-key` and `with-backdrop`.\n */\n modal: {type: Boolean, value: false},\n\n __readied: {type: Boolean, value: false}\n\n },\n\n observers: ['_modalChanged(modal, __readied)'],\n\n listeners: {'tap': '_onDialogClick'},\n\n /**\n * @return {void}\n */\n ready: function() {\n // Only now these properties can be read.\n this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;\n this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;\n this.__prevWithBackdrop = this.withBackdrop;\n this.__readied = true;\n },\n\n _modalChanged: function(modal, readied) {\n // modal implies noCancelOnOutsideClick, noCancelOnEscKey and withBackdrop.\n // We need to wait for the element to be ready before we can read the\n // properties values.\n if (!readied) {\n return;\n }\n\n if (modal) {\n this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;\n this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;\n this.__prevWithBackdrop = this.withBackdrop;\n this.noCancelOnOutsideClick = true;\n this.noCancelOnEscKey = true;\n this.withBackdrop = true;\n } else {\n // If the value was changed to false, let it false.\n this.noCancelOnOutsideClick =\n this.noCancelOnOutsideClick && this.__prevNoCancelOnOutsideClick;\n this.noCancelOnEscKey =\n this.noCancelOnEscKey && this.__prevNoCancelOnEscKey;\n this.withBackdrop = this.withBackdrop && this.__prevWithBackdrop;\n }\n },\n\n _updateClosingReasonConfirmed: function(confirmed) {\n this.closingReason = this.closingReason || {};\n this.closingReason.confirmed = confirmed;\n },\n\n /**\n * Will dismiss the dialog if user clicked on an element with dialog-dismiss\n * or dialog-confirm attribute.\n */\n _onDialogClick: function(event) {\n // Search for the element with dialog-confirm or dialog-dismiss,\n // from the root target until this (excluded).\n var path = dom(event).path;\n for (var i = 0, l = path.indexOf(this); i < l; i++) {\n var target = path[i];\n if (target.hasAttribute &&\n (target.hasAttribute('dialog-dismiss') ||\n target.hasAttribute('dialog-confirm'))) {\n this._updateClosingReasonConfirmed(\n target.hasAttribute('dialog-confirm'));\n this.close();\n event.stopPropagation();\n break;\n }\n }\n }\n\n};\n\n/** @polymerBehavior */\nexport const PaperDialogBehavior =\n [IronOverlayBehavior, PaperDialogBehaviorImpl];\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/iron-flex-layout/iron-flex-layout.js';\nimport '@polymer/paper-styles/default-theme.js';\n\nimport {PaperDialogBehaviorImpl} from '@polymer/paper-dialog-behavior/paper-dialog-behavior.js';\nimport {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js';\nimport {html} from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\nMaterial design:\n[Dialogs](https://www.google.com/design/spec/components/dialogs.html)\n\n`paper-dialog-scrollable` implements a scrolling area used in a Material Design\ndialog. It shows a divider at the top and/or bottom indicating more content,\ndepending on scroll position. Use this together with elements implementing\n`Polymer.PaperDialogBehavior`.\n\n \n

Header

\n \n Lorem ipsum...\n \n
\n OK\n
\n
\n\nIt shows a top divider after scrolling if it is not the first child in its\nparent container, indicating there is more content above. It shows a bottom\ndivider if it is scrollable and it is not the last child in its parent\ncontainer, indicating there is more content below. The bottom divider is hidden\nif it is scrolled to the bottom.\n\nIf `paper-dialog-scrollable` is not a direct child of the element implementing\n`Polymer.PaperDialogBehavior`, remember to set the `dialogElement`:\n\n \n

Header

\n
\n

Sub-header

\n \n Lorem ipsum...\n \n
\n
\n OK\n
\n
\n\n \n\n### Styling\nThe following custom properties and mixins are available for styling:\n\nCustom property | Description | Default\n----------------|-------------|----------\n`--paper-dialog-scrollable` | Mixin for the scrollable content | {}\n\n@group Paper Elements\n@element paper-dialog-scrollable\n@demo demo/index.html\n@hero hero.svg\n*/\nPolymer({\n _template: html`\n \n\n
\n \n
\n`,\n\n is: 'paper-dialog-scrollable',\n\n properties: {\n\n /**\n * The dialog element that implements `Polymer.PaperDialogBehavior`\n * containing this element.\n * @type {?Node}\n */\n dialogElement: {type: Object}\n\n },\n\n /**\n * Returns the scrolling element.\n */\n get scrollTarget() {\n return this.$.scrollable;\n },\n\n ready: function() {\n this._ensureTarget();\n this.classList.add('no-padding');\n },\n\n attached: function() {\n this._ensureTarget();\n requestAnimationFrame(this.updateScrollState.bind(this));\n },\n\n updateScrollState: function() {\n this.toggleClass('is-scrolled', this.scrollTarget.scrollTop > 0);\n this.toggleClass(\n 'can-scroll',\n this.scrollTarget.offsetHeight < this.scrollTarget.scrollHeight);\n this.toggleClass(\n 'scrolled-to-bottom',\n this.scrollTarget.scrollTop + this.scrollTarget.offsetHeight >=\n this.scrollTarget.scrollHeight);\n },\n\n _ensureTarget: function() {\n // Read parentElement instead of parentNode in order to skip shadowRoots.\n this.dialogElement = this.dialogElement || this.parentElement;\n // Check if dialog implements paper-dialog-behavior. If not, fit\n // scrollTarget to host.\n if (this.dialogElement && this.dialogElement.behaviors &&\n this.dialogElement.behaviors.indexOf(PaperDialogBehaviorImpl) >= 0) {\n this.dialogElement.sizingTarget = this.scrollTarget;\n this.scrollTarget.classList.remove('fit');\n } else if (this.dialogElement) {\n this.scrollTarget.classList.add('fit');\n }\n }\n});\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/*\n### Styling\n\nThe following custom properties and mixins are available for styling.\n\nCustom property | Description | Default\n----------------|-------------|----------\n`--paper-dialog-background-color` | Dialog background color | `--primary-background-color`\n`--paper-dialog-color` | Dialog foreground color | `--primary-text-color`\n`--paper-dialog` | Mixin applied to the dialog | `{}`\n`--paper-dialog-title` | Mixin applied to the title (`

`) element | `{}`\n`--paper-dialog-button-color` | Button area foreground color | `--default-primary-color`\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/iron-flex-layout/iron-flex-layout.js';\nimport '@polymer/paper-styles/default-theme.js';\nimport '@polymer/paper-styles/typography.js';\nimport '@polymer/paper-styles/shadow.js';\nconst $_documentContainer = document.createElement('template');\n$_documentContainer.setAttribute('style', 'display: none;');\n\n$_documentContainer.innerHTML = `\n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js';\n\nimport {NeonAnimationRunnerBehavior} from '@polymer/neon-animation/neon-animation-runner-behavior.js';\nimport {PaperDialogBehavior} from '@polymer/paper-dialog-behavior/paper-dialog-behavior.js';\nimport {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js';\nimport {html} from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\nMaterial design:\n[Dialogs](https://www.google.com/design/spec/components/dialogs.html)\n\n`` is a dialog with Material Design styling and optional\nanimations when it is opened or closed. It provides styles for a header, content\narea, and an action area for buttons. You can use the\n`` element (in its own repository) if you need a\nscrolling content area. To autofocus a specific child element after opening the\ndialog, give it the `autofocus` attribute. See `Polymer.PaperDialogBehavior` and\n`Polymer.IronOverlayBehavior` for specifics.\n\nFor example, the following code implements a dialog with a header, scrolling\ncontent area and buttons. Focus will be given to the `dialog-confirm` button\nwhen the dialog is opened.\n\n \n

Header

\n \n Lorem ipsum...\n \n
\n Cancel\n Accept\n
\n
\n\n### Styling\n\nSee the docs for `Polymer.PaperDialogBehavior` for the custom properties\navailable for styling this element.\n\n### Animations\n\nSet the `entry-animation` and/or `exit-animation` attributes to add an animation\nwhen the dialog is opened or closed. See the documentation in\n[PolymerElements/neon-animation](https://github.com/PolymerElements/neon-animation)\nfor more info.\n\nFor example:\n\n \n\n \n

Header

\n
Dialog body
\n
\n\n### Accessibility\n\nSee the docs for `Polymer.PaperDialogBehavior` for accessibility features\nimplemented by this element.\n\n@group Paper Elements\n@element paper-dialog\n@hero hero.svg\n@demo demo/index.html\n*/\nPolymer({\n _template: html`\n \n \n`,\n\n is: 'paper-dialog',\n behaviors: [PaperDialogBehavior, NeonAnimationRunnerBehavior],\n listeners: {'neon-animation-finish': '_onNeonAnimationFinish'},\n\n _renderOpened: function() {\n this.cancelAnimation();\n this.playAnimation('entry');\n },\n\n _renderClosed: function() {\n this.cancelAnimation();\n this.playAnimation('exit');\n },\n\n _onNeonAnimationFinish: function() {\n if (this.opened) {\n this._finishRenderOpened();\n } else {\n this._finishRenderClosed();\n }\n }\n});\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/*\n Fixes issue with not using shadow dom properly in iron-overlay-behavior/icon-focusables-helper.js\n*/\nimport { dom } from \"@polymer/polymer/lib/legacy/polymer.dom.js\";\n\nimport { IronFocusablesHelper } from \"@polymer/iron-overlay-behavior/iron-focusables-helper.js\";\n\nexport const HaIronFocusablesHelper = {\n /**\n * Returns a sorted array of tabbable nodes, including the root node.\n * It searches the tabbable nodes in the light and shadow dom of the chidren,\n * sorting the result by tabindex.\n * @param {!Node} node\n * @return {!Array}\n */\n getTabbableNodes: function(node) {\n var result = [];\n // If there is at least one element with tabindex > 0, we need to sort\n // the final array by tabindex.\n var needsSortByTabIndex = this._collectTabbableNodes(node, result);\n if (needsSortByTabIndex) {\n return IronFocusablesHelper._sortByTabIndex(result);\n }\n return result;\n },\n\n /**\n * Searches for nodes that are tabbable and adds them to the `result` array.\n * Returns if the `result` array needs to be sorted by tabindex.\n * @param {!Node} node The starting point for the search; added to `result`\n * if tabbable.\n * @param {!Array} result\n * @return {boolean}\n * @private\n */\n _collectTabbableNodes: function(node, result) {\n // If not an element or not visible, no need to explore children.\n if (\n node.nodeType !== Node.ELEMENT_NODE ||\n !IronFocusablesHelper._isVisible(node)\n ) {\n return false;\n }\n var element = /** @type {!HTMLElement} */ (node);\n var tabIndex = IronFocusablesHelper._normalizedTabIndex(element);\n var needsSort = tabIndex > 0;\n if (tabIndex >= 0) {\n result.push(element);\n }\n\n // In ShadowDOM v1, tab order is affected by the order of distrubution.\n // E.g. getTabbableNodes(#root) in ShadowDOM v1 should return [#A, #B];\n // in ShadowDOM v0 tab order is not affected by the distrubution order,\n // in fact getTabbableNodes(#root) returns [#B, #A].\n //
\n // \n // \n // \n // \n // \n // \n //
\n // TODO(valdrin) support ShadowDOM v1 when upgrading to Polymer v2.0.\n var children;\n if (element.localName === \"content\" || element.localName === \"slot\") {\n children = dom(element).getDistributedNodes();\n } else {\n // /////////////////////////\n // Use shadow root if possible, will check for distributed nodes.\n // THIS IS THE CHANGED LINE\n children = dom(element.shadowRoot || element.root || element).children;\n // /////////////////////////\n }\n for (var i = 0; i < children.length; i++) {\n // Ensure method is always invoked to collect tabbable children.\n needsSort = this._collectTabbableNodes(children[i], result) || needsSort;\n }\n return needsSort;\n },\n};\n","import \"@polymer/paper-dialog/paper-dialog\";\nimport { mixinBehaviors } from \"@polymer/polymer/lib/legacy/class\";\nimport { HaIronFocusablesHelper } from \"./ha-iron-focusables-helper.js\";\n// tslint:disable-next-line\nimport { PaperDialogElement } from \"@polymer/paper-dialog/paper-dialog\";\n\nconst paperDialogClass = customElements.get(\"paper-dialog\");\n\n// behavior that will override existing iron-overlay-behavior and call the fixed implementation\nconst haTabFixBehaviorImpl = {\n get _focusableNodes() {\n return HaIronFocusablesHelper.getTabbableNodes(this);\n },\n};\n\n// paper-dialog that uses the haTabFixBehaviorImpl behvaior\n// export class HaPaperDialog extends paperDialogClass {}\n// @ts-ignore\nexport class HaPaperDialog\n extends mixinBehaviors([haTabFixBehaviorImpl], paperDialogClass)\n implements PaperDialogElement {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-paper-dialog\": HaPaperDialog;\n }\n}\ncustomElements.define(\"ha-paper-dialog\", HaPaperDialog);\n","import { UpdatingElement, property, customElement } from \"lit-element\";\n// eslint-disable-next-line import/no-webpack-loader-syntax\n// @ts-ignore\n// tslint:disable-next-line: no-implicit-dependencies\nimport markdownWorker from \"workerize-loader!../resources/markdown_worker\";\nimport { fireEvent } from \"../common/dom/fire_event\";\n\nlet worker: any | undefined;\n\n@customElement(\"ha-markdown\")\nclass HaMarkdown extends UpdatingElement {\n @property() public content = \"\";\n @property({ type: Boolean }) public allowSvg = false;\n\n protected update(changedProps) {\n super.update(changedProps);\n\n if (!worker) {\n worker = markdownWorker();\n }\n\n this._render();\n }\n\n private async _render() {\n this.innerHTML = await worker.renderMarkdown(\n this.content,\n {\n breaks: true,\n gfm: true,\n tables: true,\n },\n {\n allowSvg: this.allowSvg,\n }\n );\n\n this._resize();\n\n const walker = document.createTreeWalker(\n this,\n 1 /* SHOW_ELEMENT */,\n null,\n false\n );\n\n while (walker.nextNode()) {\n const node = walker.currentNode;\n\n // Open external links in a new window\n if (\n node instanceof HTMLAnchorElement &&\n node.host !== document.location.host\n ) {\n node.target = \"_blank\";\n\n // protect referrer on external links and deny window.opener access for security reasons\n // (see https://mathiasbynens.github.io/rel-noopener/)\n node.rel = \"noreferrer noopener\";\n\n // Fire a resize event when images loaded to notify content resized\n } else if (node) {\n node.addEventListener(\"load\", this._resize);\n }\n }\n }\n\n private _resize = () => fireEvent(this, \"iron-resize\");\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-markdown\": HaMarkdown;\n }\n}\n","\n\t\t\t\tvar addMethods = require(\"../../node_modules/workerize-loader/dist/rpc-wrapper.js\")\n\t\t\t\tvar methods = [\"renderMarkdown\"]\n\t\t\t\tmodule.exports = function() {\n\t\t\t\t\tvar w = new Worker(__webpack_public_path__ + \"201359fd5a526afe13ef.worker.js\", { name: \"[hash].worker.js\" })\n\t\t\t\t\taddMethods(w, methods)\n\t\t\t\t\t\n\t\t\t\t\treturn w\n\t\t\t\t}\n\t\t\t","export default function addMethods(worker, methods) {\n\tlet c = 0;\n\tlet callbacks = {};\n\tworker.addEventListener('message', (e) => {\n\t\tlet d = e.data;\n\t\tif (d.type!=='RPC') return;\n\t\tif (d.id) {\n\t\t\tlet f = callbacks[d.id];\n\t\t\tif (f) {\n\t\t\t\tdelete callbacks[d.id];\n\t\t\t\tif (d.error) {\n\t\t\t\t\tf[1](Object.assign(Error(d.error.message), d.error));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tf[0](d.result);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tlet evt = document.createEvent('Event');\n\t\t\tevt.initEvent(d.method, false, false);\n\t\t\tevt.data = d.params;\n\t\t\tworker.dispatchEvent(evt);\n\t\t}\n\t});\n\tmethods.forEach( method => {\n\t\tworker[method] = (...params) => new Promise( (a, b) => {\n\t\t\tlet id = ++c;\n\t\t\tcallbacks[id] = [a, b];\n\t\t\tworker.postMessage({ type: 'RPC', id, method, params });\n\t\t});\n\t});\n}\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./hassio/src/dialogs/markdown/dialog-hassio-markdown.ts","webpack:///./node_modules/@polymer/paper-dialog-behavior/paper-dialog-behavior.js","webpack:///./node_modules/@polymer/paper-dialog-scrollable/paper-dialog-scrollable.js","webpack:///./node_modules/@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js","webpack:///./node_modules/@polymer/paper-dialog/paper-dialog.js","webpack:///./src/components/dialog/ha-iron-focusables-helper.js","webpack:///./src/components/dialog/ha-paper-dialog.ts","webpack:///./src/components/ha-markdown.ts","webpack:///./src/resources/markdown_worker.ts","webpack:///../src/rpc-wrapper.js"],"names":["customElement","property","query","params","this","title","content","_dialog","open","html","_templateObject","haStyleDialog","hassioStyle","css","_templateObject2","LitElement","__webpack_require__","d","__webpack_exports__","PaperDialogBehaviorImpl","PaperDialogBehavior","_polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_1__","_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__","hostAttributes","role","tabindex","properties","modal","type","Boolean","value","__readied","observers","listeners","tap","ready","__prevNoCancelOnOutsideClick","noCancelOnOutsideClick","__prevNoCancelOnEscKey","noCancelOnEscKey","__prevWithBackdrop","withBackdrop","_modalChanged","readied","_updateClosingReasonConfirmed","confirmed","closingReason","_onDialogClick","event","path","dom","i","l","indexOf","target","hasAttribute","close","stopPropagation","IronOverlayBehavior","Polymer","_template","is","dialogElement","Object","scrollTarget","$","scrollable","_ensureTarget","classList","add","attached","requestAnimationFrame","updateScrollState","bind","toggleClass","scrollTop","offsetHeight","scrollHeight","parentElement","behaviors","sizingTarget","remove","$_documentContainer","document","createElement","setAttribute","innerHTML","head","appendChild","NeonAnimationRunnerBehavior","neon-animation-finish","_renderOpened","cancelAnimation","playAnimation","_renderClosed","_onNeonAnimationFinish","opened","_finishRenderOpened","_finishRenderClosed","HaIronFocusablesHelper","getTabbableNodes","node","result","_collectTabbableNodes","IronFocusablesHelper","_sortByTabIndex","nodeType","Node","ELEMENT_NODE","_isVisible","children","element","tabIndex","_normalizedTabIndex","needsSort","push","localName","getDistributedNodes","shadowRoot","root","length","paperDialogClass","customElements","get","haTabFixBehaviorImpl","_focusableNodes","HaPaperDialog","_mixinBehaviors","_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","apply","arguments","_inherits","mixinBehaviors","define","worker","HaMarkdown","changedProps","_get","prototype","call","markdownWorker","_render","walker","regeneratorRuntime","async","_context","prev","next","awrap","renderMarkdown","breaks","gfm","tables","allowSvg","sent","_resize","createTreeWalker","nextNode","currentNode","HTMLAnchorElement","host","location","rel","addEventListener","stop","fireEvent","_this2","UpdatingElement","addMethods","methods","module","exports","w","Worker","p","name","c","callbacks","e","data","id","f","error","Error","evt","method","Promise","a","b"],"mappings":"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","file":"chunk.715824f4764bdbe425b1.js","sourcesContent":["import \"@polymer/app-layout/app-toolbar/app-toolbar\";\nimport \"@polymer/paper-dialog-scrollable/paper-dialog-scrollable\";\nimport \"@polymer/paper-icon-button/paper-icon-button\";\nimport { PaperDialogElement } from \"@polymer/paper-dialog\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n query,\n} from \"lit-element\";\n\nimport { hassioStyle } from \"../../resources/hassio-style\";\nimport { haStyleDialog } from \"../../../../src/resources/styles\";\nimport { HassioMarkdownDialogParams } from \"./show-dialog-hassio-markdown\";\n\nimport \"../../../../src/components/dialog/ha-paper-dialog\";\nimport \"../../../../src/components/ha-markdown\";\n\n@customElement(\"dialog-hassio-markdown\")\nclass HassioMarkdownDialog extends LitElement {\n @property() public title!: string;\n @property() public content!: string;\n @query(\"#dialog\") private _dialog!: PaperDialogElement;\n\n public showDialog(params: HassioMarkdownDialogParams) {\n this.title = params.title;\n this.content = params.content;\n this._dialog.open();\n }\n\n protected render(): TemplateResult {\n return html`\n \n \n \n
${this.title}
\n
\n \n \n \n
\n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyleDialog,\n hassioStyle,\n css`\n ha-paper-dialog {\n min-width: 350px;\n font-size: 14px;\n border-radius: 2px;\n }\n app-toolbar {\n margin: 0;\n padding: 0 16px;\n color: var(--primary-text-color);\n background-color: var(--secondary-background-color);\n }\n app-toolbar [main-title] {\n margin-left: 16px;\n }\n paper-checkbox {\n display: block;\n margin: 4px;\n }\n @media all and (max-width: 450px), all and (max-height: 500px) {\n ha-paper-dialog {\n max-height: 100%;\n }\n ha-paper-dialog::before {\n content: \"\";\n position: fixed;\n z-index: -1;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n background-color: inherit;\n }\n app-toolbar {\n color: var(--text-primary-color);\n background-color: var(--primary-color);\n }\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dialog-hassio-markdown\": HassioMarkdownDialog;\n }\n}\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\n\nimport {IronOverlayBehavior} from '@polymer/iron-overlay-behavior/iron-overlay-behavior.js';\nimport {dom} from '@polymer/polymer/lib/legacy/polymer.dom.js';\n\n/**\n Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to\n implement a Material Design dialog.\n\n For example, if `` implements this behavior:\n\n \n

Header

\n
Dialog body
\n
\n Cancel\n Accept\n
\n
\n\n `paper-dialog-shared-styles.html` provide styles for a header, content area,\n and an action area for buttons. Use the `

` tag for the header and the\n `buttons` class for the action area. You can use the `paper-dialog-scrollable`\n element (in its own repository) if you need a scrolling content area.\n\n Use the `dialog-dismiss` and `dialog-confirm` attributes on interactive\n controls to close the dialog. If the user dismisses the dialog with\n `dialog-confirm`, the `closingReason` will update to include `confirmed:\n true`.\n\n ### Accessibility\n\n This element has `role=\"dialog\"` by default. Depending on the context, it may\n be more appropriate to override this attribute with `role=\"alertdialog\"`.\n\n If `modal` is set, the element will prevent the focus from exiting the\n element. It will also ensure that focus remains in the dialog.\n\n @hero hero.svg\n @demo demo/index.html\n @polymerBehavior PaperDialogBehavior\n */\nexport const PaperDialogBehaviorImpl = {\n\n hostAttributes: {'role': 'dialog', 'tabindex': '-1'},\n\n properties: {\n\n /**\n * If `modal` is true, this implies `no-cancel-on-outside-click`,\n * `no-cancel-on-esc-key` and `with-backdrop`.\n */\n modal: {type: Boolean, value: false},\n\n __readied: {type: Boolean, value: false}\n\n },\n\n observers: ['_modalChanged(modal, __readied)'],\n\n listeners: {'tap': '_onDialogClick'},\n\n /**\n * @return {void}\n */\n ready: function() {\n // Only now these properties can be read.\n this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;\n this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;\n this.__prevWithBackdrop = this.withBackdrop;\n this.__readied = true;\n },\n\n _modalChanged: function(modal, readied) {\n // modal implies noCancelOnOutsideClick, noCancelOnEscKey and withBackdrop.\n // We need to wait for the element to be ready before we can read the\n // properties values.\n if (!readied) {\n return;\n }\n\n if (modal) {\n this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;\n this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;\n this.__prevWithBackdrop = this.withBackdrop;\n this.noCancelOnOutsideClick = true;\n this.noCancelOnEscKey = true;\n this.withBackdrop = true;\n } else {\n // If the value was changed to false, let it false.\n this.noCancelOnOutsideClick =\n this.noCancelOnOutsideClick && this.__prevNoCancelOnOutsideClick;\n this.noCancelOnEscKey =\n this.noCancelOnEscKey && this.__prevNoCancelOnEscKey;\n this.withBackdrop = this.withBackdrop && this.__prevWithBackdrop;\n }\n },\n\n _updateClosingReasonConfirmed: function(confirmed) {\n this.closingReason = this.closingReason || {};\n this.closingReason.confirmed = confirmed;\n },\n\n /**\n * Will dismiss the dialog if user clicked on an element with dialog-dismiss\n * or dialog-confirm attribute.\n */\n _onDialogClick: function(event) {\n // Search for the element with dialog-confirm or dialog-dismiss,\n // from the root target until this (excluded).\n var path = dom(event).path;\n for (var i = 0, l = path.indexOf(this); i < l; i++) {\n var target = path[i];\n if (target.hasAttribute &&\n (target.hasAttribute('dialog-dismiss') ||\n target.hasAttribute('dialog-confirm'))) {\n this._updateClosingReasonConfirmed(\n target.hasAttribute('dialog-confirm'));\n this.close();\n event.stopPropagation();\n break;\n }\n }\n }\n\n};\n\n/** @polymerBehavior */\nexport const PaperDialogBehavior =\n [IronOverlayBehavior, PaperDialogBehaviorImpl];\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/iron-flex-layout/iron-flex-layout.js';\nimport '@polymer/paper-styles/default-theme.js';\n\nimport {PaperDialogBehaviorImpl} from '@polymer/paper-dialog-behavior/paper-dialog-behavior.js';\nimport {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js';\nimport {html} from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\nMaterial design:\n[Dialogs](https://www.google.com/design/spec/components/dialogs.html)\n\n`paper-dialog-scrollable` implements a scrolling area used in a Material Design\ndialog. It shows a divider at the top and/or bottom indicating more content,\ndepending on scroll position. Use this together with elements implementing\n`Polymer.PaperDialogBehavior`.\n\n \n

Header

\n \n Lorem ipsum...\n \n
\n OK\n
\n
\n\nIt shows a top divider after scrolling if it is not the first child in its\nparent container, indicating there is more content above. It shows a bottom\ndivider if it is scrollable and it is not the last child in its parent\ncontainer, indicating there is more content below. The bottom divider is hidden\nif it is scrolled to the bottom.\n\nIf `paper-dialog-scrollable` is not a direct child of the element implementing\n`Polymer.PaperDialogBehavior`, remember to set the `dialogElement`:\n\n \n

Header

\n
\n

Sub-header

\n \n Lorem ipsum...\n \n
\n
\n OK\n
\n
\n\n \n\n### Styling\nThe following custom properties and mixins are available for styling:\n\nCustom property | Description | Default\n----------------|-------------|----------\n`--paper-dialog-scrollable` | Mixin for the scrollable content | {}\n\n@group Paper Elements\n@element paper-dialog-scrollable\n@demo demo/index.html\n@hero hero.svg\n*/\nPolymer({\n _template: html`\n \n\n
\n \n
\n`,\n\n is: 'paper-dialog-scrollable',\n\n properties: {\n\n /**\n * The dialog element that implements `Polymer.PaperDialogBehavior`\n * containing this element.\n * @type {?Node}\n */\n dialogElement: {type: Object}\n\n },\n\n /**\n * Returns the scrolling element.\n */\n get scrollTarget() {\n return this.$.scrollable;\n },\n\n ready: function() {\n this._ensureTarget();\n this.classList.add('no-padding');\n },\n\n attached: function() {\n this._ensureTarget();\n requestAnimationFrame(this.updateScrollState.bind(this));\n },\n\n updateScrollState: function() {\n this.toggleClass('is-scrolled', this.scrollTarget.scrollTop > 0);\n this.toggleClass(\n 'can-scroll',\n this.scrollTarget.offsetHeight < this.scrollTarget.scrollHeight);\n this.toggleClass(\n 'scrolled-to-bottom',\n this.scrollTarget.scrollTop + this.scrollTarget.offsetHeight >=\n this.scrollTarget.scrollHeight);\n },\n\n _ensureTarget: function() {\n // Read parentElement instead of parentNode in order to skip shadowRoots.\n this.dialogElement = this.dialogElement || this.parentElement;\n // Check if dialog implements paper-dialog-behavior. If not, fit\n // scrollTarget to host.\n if (this.dialogElement && this.dialogElement.behaviors &&\n this.dialogElement.behaviors.indexOf(PaperDialogBehaviorImpl) >= 0) {\n this.dialogElement.sizingTarget = this.scrollTarget;\n this.scrollTarget.classList.remove('fit');\n } else if (this.dialogElement) {\n this.scrollTarget.classList.add('fit');\n }\n }\n});\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/*\n### Styling\n\nThe following custom properties and mixins are available for styling.\n\nCustom property | Description | Default\n----------------|-------------|----------\n`--paper-dialog-background-color` | Dialog background color | `--primary-background-color`\n`--paper-dialog-color` | Dialog foreground color | `--primary-text-color`\n`--paper-dialog` | Mixin applied to the dialog | `{}`\n`--paper-dialog-title` | Mixin applied to the title (`

`) element | `{}`\n`--paper-dialog-button-color` | Button area foreground color | `--default-primary-color`\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/iron-flex-layout/iron-flex-layout.js';\nimport '@polymer/paper-styles/default-theme.js';\nimport '@polymer/paper-styles/typography.js';\nimport '@polymer/paper-styles/shadow.js';\nconst $_documentContainer = document.createElement('template');\n$_documentContainer.setAttribute('style', 'display: none;');\n\n$_documentContainer.innerHTML = `\n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js';\n\nimport {NeonAnimationRunnerBehavior} from '@polymer/neon-animation/neon-animation-runner-behavior.js';\nimport {PaperDialogBehavior} from '@polymer/paper-dialog-behavior/paper-dialog-behavior.js';\nimport {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js';\nimport {html} from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\nMaterial design:\n[Dialogs](https://www.google.com/design/spec/components/dialogs.html)\n\n`` is a dialog with Material Design styling and optional\nanimations when it is opened or closed. It provides styles for a header, content\narea, and an action area for buttons. You can use the\n`` element (in its own repository) if you need a\nscrolling content area. To autofocus a specific child element after opening the\ndialog, give it the `autofocus` attribute. See `Polymer.PaperDialogBehavior` and\n`Polymer.IronOverlayBehavior` for specifics.\n\nFor example, the following code implements a dialog with a header, scrolling\ncontent area and buttons. Focus will be given to the `dialog-confirm` button\nwhen the dialog is opened.\n\n \n

Header

\n \n Lorem ipsum...\n \n
\n Cancel\n Accept\n
\n
\n\n### Styling\n\nSee the docs for `Polymer.PaperDialogBehavior` for the custom properties\navailable for styling this element.\n\n### Animations\n\nSet the `entry-animation` and/or `exit-animation` attributes to add an animation\nwhen the dialog is opened or closed. See the documentation in\n[PolymerElements/neon-animation](https://github.com/PolymerElements/neon-animation)\nfor more info.\n\nFor example:\n\n \n\n \n

Header

\n
Dialog body
\n
\n\n### Accessibility\n\nSee the docs for `Polymer.PaperDialogBehavior` for accessibility features\nimplemented by this element.\n\n@group Paper Elements\n@element paper-dialog\n@hero hero.svg\n@demo demo/index.html\n*/\nPolymer({\n _template: html`\n \n \n`,\n\n is: 'paper-dialog',\n behaviors: [PaperDialogBehavior, NeonAnimationRunnerBehavior],\n listeners: {'neon-animation-finish': '_onNeonAnimationFinish'},\n\n _renderOpened: function() {\n this.cancelAnimation();\n this.playAnimation('entry');\n },\n\n _renderClosed: function() {\n this.cancelAnimation();\n this.playAnimation('exit');\n },\n\n _onNeonAnimationFinish: function() {\n if (this.opened) {\n this._finishRenderOpened();\n } else {\n this._finishRenderClosed();\n }\n }\n});\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/*\n Fixes issue with not using shadow dom properly in iron-overlay-behavior/icon-focusables-helper.js\n*/\nimport { dom } from \"@polymer/polymer/lib/legacy/polymer.dom.js\";\n\nimport { IronFocusablesHelper } from \"@polymer/iron-overlay-behavior/iron-focusables-helper.js\";\n\nexport const HaIronFocusablesHelper = {\n /**\n * Returns a sorted array of tabbable nodes, including the root node.\n * It searches the tabbable nodes in the light and shadow dom of the chidren,\n * sorting the result by tabindex.\n * @param {!Node} node\n * @return {!Array}\n */\n getTabbableNodes: function(node) {\n var result = [];\n // If there is at least one element with tabindex > 0, we need to sort\n // the final array by tabindex.\n var needsSortByTabIndex = this._collectTabbableNodes(node, result);\n if (needsSortByTabIndex) {\n return IronFocusablesHelper._sortByTabIndex(result);\n }\n return result;\n },\n\n /**\n * Searches for nodes that are tabbable and adds them to the `result` array.\n * Returns if the `result` array needs to be sorted by tabindex.\n * @param {!Node} node The starting point for the search; added to `result`\n * if tabbable.\n * @param {!Array} result\n * @return {boolean}\n * @private\n */\n _collectTabbableNodes: function(node, result) {\n // If not an element or not visible, no need to explore children.\n if (\n node.nodeType !== Node.ELEMENT_NODE ||\n !IronFocusablesHelper._isVisible(node)\n ) {\n return false;\n }\n var element = /** @type {!HTMLElement} */ (node);\n var tabIndex = IronFocusablesHelper._normalizedTabIndex(element);\n var needsSort = tabIndex > 0;\n if (tabIndex >= 0) {\n result.push(element);\n }\n\n // In ShadowDOM v1, tab order is affected by the order of distrubution.\n // E.g. getTabbableNodes(#root) in ShadowDOM v1 should return [#A, #B];\n // in ShadowDOM v0 tab order is not affected by the distrubution order,\n // in fact getTabbableNodes(#root) returns [#B, #A].\n //
\n // \n // \n // \n // \n // \n // \n //
\n // TODO(valdrin) support ShadowDOM v1 when upgrading to Polymer v2.0.\n var children;\n if (element.localName === \"content\" || element.localName === \"slot\") {\n children = dom(element).getDistributedNodes();\n } else {\n // /////////////////////////\n // Use shadow root if possible, will check for distributed nodes.\n // THIS IS THE CHANGED LINE\n children = dom(element.shadowRoot || element.root || element).children;\n // /////////////////////////\n }\n for (var i = 0; i < children.length; i++) {\n // Ensure method is always invoked to collect tabbable children.\n needsSort = this._collectTabbableNodes(children[i], result) || needsSort;\n }\n return needsSort;\n },\n};\n","import \"@polymer/paper-dialog/paper-dialog\";\nimport { mixinBehaviors } from \"@polymer/polymer/lib/legacy/class\";\nimport { HaIronFocusablesHelper } from \"./ha-iron-focusables-helper.js\";\n// tslint:disable-next-line\nimport { PaperDialogElement } from \"@polymer/paper-dialog/paper-dialog\";\n\nconst paperDialogClass = customElements.get(\"paper-dialog\");\n\n// behavior that will override existing iron-overlay-behavior and call the fixed implementation\nconst haTabFixBehaviorImpl = {\n get _focusableNodes() {\n return HaIronFocusablesHelper.getTabbableNodes(this);\n },\n};\n\n// paper-dialog that uses the haTabFixBehaviorImpl behvaior\n// export class HaPaperDialog extends paperDialogClass {}\n// @ts-ignore\nexport class HaPaperDialog\n extends mixinBehaviors([haTabFixBehaviorImpl], paperDialogClass)\n implements PaperDialogElement {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-paper-dialog\": HaPaperDialog;\n }\n}\ncustomElements.define(\"ha-paper-dialog\", HaPaperDialog);\n","import { UpdatingElement, property, customElement } from \"lit-element\";\n// eslint-disable-next-line import/no-webpack-loader-syntax\n// @ts-ignore\n// tslint:disable-next-line: no-implicit-dependencies\nimport markdownWorker from \"workerize-loader!../resources/markdown_worker\";\nimport { fireEvent } from \"../common/dom/fire_event\";\n\nlet worker: any | undefined;\n\n@customElement(\"ha-markdown\")\nclass HaMarkdown extends UpdatingElement {\n @property() public content = \"\";\n @property({ type: Boolean }) public allowSvg = false;\n\n protected update(changedProps) {\n super.update(changedProps);\n\n if (!worker) {\n worker = markdownWorker();\n }\n\n this._render();\n }\n\n private async _render() {\n this.innerHTML = await worker.renderMarkdown(\n this.content,\n {\n breaks: true,\n gfm: true,\n tables: true,\n },\n {\n allowSvg: this.allowSvg,\n }\n );\n\n this._resize();\n\n const walker = document.createTreeWalker(\n this,\n 1 /* SHOW_ELEMENT */,\n null,\n false\n );\n\n while (walker.nextNode()) {\n const node = walker.currentNode;\n\n // Open external links in a new window\n if (\n node instanceof HTMLAnchorElement &&\n node.host !== document.location.host\n ) {\n node.target = \"_blank\";\n\n // protect referrer on external links and deny window.opener access for security reasons\n // (see https://mathiasbynens.github.io/rel-noopener/)\n node.rel = \"noreferrer noopener\";\n\n // Fire a resize event when images loaded to notify content resized\n } else if (node) {\n node.addEventListener(\"load\", this._resize);\n }\n }\n }\n\n private _resize = () => fireEvent(this, \"iron-resize\");\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-markdown\": HaMarkdown;\n }\n}\n","\n\t\t\t\tvar addMethods = require(\"../../node_modules/workerize-loader/dist/rpc-wrapper.js\")\n\t\t\t\tvar methods = [\"renderMarkdown\"]\n\t\t\t\tmodule.exports = function() {\n\t\t\t\t\tvar w = new Worker(__webpack_public_path__ + \"201359fd5a526afe13ef.worker.js\", { name: \"[hash].worker.js\" })\n\t\t\t\t\taddMethods(w, methods)\n\t\t\t\t\t\n\t\t\t\t\treturn w\n\t\t\t\t}\n\t\t\t","export default function addMethods(worker, methods) {\n\tlet c = 0;\n\tlet callbacks = {};\n\tworker.addEventListener('message', (e) => {\n\t\tlet d = e.data;\n\t\tif (d.type!=='RPC') return;\n\t\tif (d.id) {\n\t\t\tlet f = callbacks[d.id];\n\t\t\tif (f) {\n\t\t\t\tdelete callbacks[d.id];\n\t\t\t\tif (d.error) {\n\t\t\t\t\tf[1](Object.assign(Error(d.error.message), d.error));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tf[0](d.result);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tlet evt = document.createEvent('Event');\n\t\t\tevt.initEvent(d.method, false, false);\n\t\t\tevt.data = d.params;\n\t\t\tworker.dispatchEvent(evt);\n\t\t}\n\t});\n\tmethods.forEach( method => {\n\t\tworker[method] = (...params) => new Promise( (a, b) => {\n\t\t\tlet id = ++c;\n\t\t\tcallbacks[id] = [a, b];\n\t\t\tworker.postMessage({ type: 'RPC', id, method, params });\n\t\t});\n\t});\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/hassio/api/panel/chunk.8b198fe00454712c9c14.js.gz b/hassio/api/panel/chunk.8b198fe00454712c9c14.js.gz deleted file mode 100644 index cc766dceb70c82f9f86d1b8f92cc92edb458815b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18369 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 XhdW{S7Dq(G8ub4GVHY7MQg{LYVcf`} diff --git a/hassio/api/panel/chunk.0c4f6887f9b7e7b11ef5.js b/hassio/api/panel/chunk.9d371c8143226d4eaaee.js similarity index 99% rename from hassio/api/panel/chunk.0c4f6887f9b7e7b11ef5.js rename to hassio/api/panel/chunk.9d371c8143226d4eaaee.js index c12b26968..5e2f8e0c3 100644 --- a/hassio/api/panel/chunk.0c4f6887f9b7e7b11ef5.js +++ b/hassio/api/panel/chunk.9d371c8143226d4eaaee.js @@ -1,3 +1,3 @@ -/*! For license information please see chunk.0c4f6887f9b7e7b11ef5.js.LICENSE */ -(self.webpackJsonp=self.webpackJsonp||[]).push([[5],{178:function(e,t,n){"use strict";n.r(t);n(18),n(48),n(22),n(53),n(24),n(40);var o=n(5),r=n(115),i=("".concat(location.protocol,"//").concat(location.host),n(10));n(55);function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(){var e=y(["\n ha-paper-dialog {\n min-width: 350px;\n font-size: 14px;\n border-radius: 2px;\n }\n app-toolbar {\n margin: 0;\n padding: 0 16px;\n color: var(--primary-text-color);\n background-color: var(--secondary-background-color);\n }\n app-toolbar [main-title] {\n margin-left: 16px;\n }\n ha-paper-dialog-scrollable {\n margin: 0;\n }\n paper-checkbox {\n display: block;\n margin: 4px;\n }\n @media all and (max-width: 450px), all and (max-height: 500px) {\n ha-paper-dialog {\n max-height: 100%;\n height: 100%;\n }\n app-toolbar {\n color: var(--text-primary-color);\n background-color: var(--primary-color);\n }\n }\n .details {\n color: var(--secondary-text-color);\n }\n .warning,\n .error {\n color: var(--google-red-500);\n }\n .buttons {\n display: flex;\n flex-direction: column;\n }\n .buttons li {\n list-style-type: none;\n }\n .buttons .icon {\n margin-right: 16px;\n }\n .no-margin-top {\n margin-top: 0;\n }\n "]);return a=function(){return e},e}function l(){var e=y(["\n
  • \n \n Wipe & restore\n \n
  • \n ']);return l=function(){return e},e}function c(){var e=y(['\n

    Error: ',"

    \n "]);return c=function(){return e},e}function d(){var e=y(['\n \n ',"\n \n "]);return p=function(){return e},e}function u(){var e=y(['\n
    Add-on:
    \n \n ',"\n \n "]);return u=function(){return e},e}function h(){var e=y(["\n \n ',"\n \n "]);return h=function(){return e},e}function f(){var e=y(['\n
    Folders:
    \n \n ',"\n \n "]);return f=function(){return e},e}function m(){var e=y(['\n \n \n \n
    ','
    \n
    \n
    \n ',"\n (",")
    \n ","\n
    \n
    Home Assistant:
    \n \n Home Assistant ',"\n \n ","\n ","\n ","\n ",'\n\n
    Actions:
    \n
      \n
    • \n \n \n Download Snapshot\n \n
    • \n
    • \n \n \n Restore Selected\n \n
    • \n ',"\n
    • \n \n Delete Snapshot\n \n
    • \n
    \n \n ']);return m=function(){return e},e}function g(){var e=y([""]);return g=function(){return e},e}function y(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function b(e){return(b=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function v(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function k(e,t){return(k=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function _(e){var t,n=C(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var o={kind:"field"===e.kind?"field":"method",key:n,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(o.decorators=e.decorators),"field"===e.kind&&(o.initializer=e.value),o}function w(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function O(e){return e.decorators&&e.decorators.length}function E(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function x(e,t){var n=e[t];if(void 0!==n&&"function"!=typeof n)throw new TypeError("Expected '"+t+"' to be a function");return n}function C(e){var t=function(e,t){if("object"!==s(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!==s(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===s(t)?t:String(t)}!function(e,t,n,o){var r=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(n){t.forEach(function(t){t.kind===n&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var n=e.prototype;["method","field"].forEach(function(o){t.forEach(function(t){var r=t.placement;if(t.kind===o&&("static"===r||"prototype"===r)){var i="static"===r?e:n;this.defineClassElement(i,t)}},this)},this)},defineClassElement:function(e,t){var n=t.descriptor;if("field"===t.kind){var o=t.initializer;n={enumerable:n.enumerable,writable:n.writable,configurable:n.configurable,value:void 0===o?void 0:o.call(e)}}Object.defineProperty(e,t.key,n)},decorateClass:function(e,t){var n=[],o=[],r={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,r)},this),e.forEach(function(e){if(!O(e))return n.push(e);var t=this.decorateElement(e,r);n.push(t.element),n.push.apply(n,t.extras),o.push.apply(o,t.finishers)},this),!t)return{elements:n,finishers:o};var i=this.decorateConstructor(n,t);return o.push.apply(o,i.finishers),i.finishers=o,i},addElementPlacement:function(e,t,n){var o=t[e.placement];if(!n&&-1!==o.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");o.push(e.key)},decorateElement:function(e,t){for(var n=[],o=[],r=e.decorators,i=r.length-1;i>=0;i--){var s=t[e.placement];s.splice(s.indexOf(e.key),1);var a=this.fromElementDescriptor(e),l=this.toElementFinisherExtras((0,r[i])(a)||a);e=l.element,this.addElementPlacement(e,t),l.finisher&&o.push(l.finisher);var c=l.extras;if(c){for(var d=0;d=0;o--){var r=this.fromClassDescriptor(e),i=this.toClassDescriptor((0,t[o])(r)||r);if(void 0!==i.finisher&&n.push(i.finisher),void 0!==i.elements){e=i.elements;for(var s=0;st.name?1:-1}),this._addons=(n=this.snapshot.addons,n.map(function(e){return{slug:e.slug,name:e.name,version:e.version,checked:!0}})).sort(function(e,t){return e.name>t.name?1:-1}),this._dialogParams=e,t.prev=6,this._dialog.open(),t.next=14;break;case 10:return t.prev=10,t.t0=t.catch(6),t.next=14,regeneratorRuntime.awrap(this.showDialog(e));case 14:case"end":return t.stop()}var n,o,i},null,this,[[6,10]])}},{kind:"method",key:"render",value:function(){var e=this;return this.snapshot?Object(o.e)(m(),this._dialogClosed,this._computeName,"full"===this.snapshot.type?"Full snapshot":"Partial snapshot",this._computeSize,this._formatDatetime(this.snapshot.date),this._restoreHass,function(t){return e._restoreHass=t.target.checked},this.snapshot.homeassistant,this._folders.length?Object(o.e)(f(),this._folders.map(function(t){return Object(o.e)(h(),t.checked,function(n){return e._updateFolders(t,n.target.checked)},t.name)})):"",this._addons.length?Object(o.e)(u(),this._addons.map(function(t){return Object(o.e)(p(),t.checked,function(n){return e._updateAddons(t,n.target.checked)},t.name)})):"",this.snapshot.protected?Object(o.e)(d(),this._passwordInput,this._snapshotPassword):"",this._error?Object(o.e)(c(),this._error):"",this._downloadClicked,this._partialRestoreClicked,"full"===this.snapshot.type?Object(o.e)(l(),this._fullRestoreClicked):"",this._deleteClicked):Object(o.e)(g())}},{kind:"get",static:!0,key:"styles",value:function(){return[i.b,Object(o.c)(a())]}},{kind:"method",key:"_updateFolders",value:function(e,t){this._folders=this._folders.map(function(n){return n.slug===e.slug&&(n.checked=t),n})}},{kind:"method",key:"_updateAddons",value:function(e,t){this._addons=this._addons.map(function(n){return n.slug===e.slug&&(n.checked=t),n})}},{kind:"method",key:"_passwordInput",value:function(e){this._snapshotPassword=e.detail.value}},{kind:"method",key:"_partialRestoreClicked",value:function(){var e=this;if(confirm("Are you sure you want to restore this snapshot?")){var t=this._addons.filter(function(e){return e.checked}).map(function(e){return e.slug}),n=this._folders.filter(function(e){return e.checked}).map(function(e){return e.slug}),o={homeassistant:this._restoreHass,addons:t,folders:n};this.snapshot.protected&&(o.password=this._snapshotPassword),this.hass.callApi("POST","hassio/snapshots/".concat(this.snapshot.slug,"/restore/partial"),o).then(function(){alert("Snapshot restored!"),e._dialog.close()},function(t){e._error=t.body.message})}}},{kind:"method",key:"_fullRestoreClicked",value:function(){var e=this;if(confirm("Are you sure you want to restore this snapshot?")){var t=this.snapshot.protected?{password:this._snapshotPassword}:void 0;this.hass.callApi("POST","hassio/snapshots/".concat(this.snapshot.slug,"/restore/full"),t).then(function(){alert("Snapshot restored!"),e._dialog.close()},function(t){e._error=t.body.message})}}},{kind:"method",key:"_deleteClicked",value:function(){var e=this;confirm("Are you sure you want to delete this snapshot?")&&this.hass.callApi("POST","hassio/snapshots/".concat(this.snapshot.slug,"/remove")).then(function(){e._dialog.close(),e._dialogParams.onDelete()},function(t){e._error=t.body.message})}},{kind:"method",key:"_downloadClicked",value:function(){var e,t,n;return regeneratorRuntime.async(function(o){for(;;)switch(o.prev=o.next){case 0:return o.prev=0,o.next=3,regeneratorRuntime.awrap((r=this.hass,i="/api/hassio/snapshots/".concat(this.snapshot.slug,"/download"),r.callWS({type:"auth/sign_path",path:i})));case 3:e=o.sent,o.next=10;break;case 6:return o.prev=6,o.t0=o.catch(0),alert("Error: ".concat(o.t0.message)),o.abrupt("return");case 10:t=this._computeName.replace(/[^a-z0-9]+/gi,"_"),(n=document.createElement("a")).href=e.path,n.download="Hass_io_".concat(t,".tar"),this._dialog.appendChild(n),n.click(),this._dialog.removeChild(n);case 17:case"end":return o.stop()}var r,i},null,this,[[0,6]])}},{kind:"get",key:"_computeName",value:function(){return this.snapshot?this.snapshot.name||this.snapshot.slug:"Unnamed snapshot"}},{kind:"get",key:"_computeSize",value:function(){return Math.ceil(10*this.snapshot.size)/10+" MB"}},{kind:"method",key:"_formatDatetime",value:function(e){return new Date(e).toLocaleDateString(navigator.language,{weekday:"long",year:"numeric",month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}},{kind:"method",key:"_dialogClosed",value:function(){this._dialogParams=void 0,this.snapshot=void 0,this._snapshotPassword="",this._folders=[],this._addons=[]}}]}},o.a)},31:function(e,t,n){"use strict";n.d(t,"b",function(){return i}),n.d(t,"a",function(){return s});n(4);var o=n(70),r=n(8),i={hostAttributes:{role:"dialog",tabindex:"-1"},properties:{modal:{type:Boolean,value:!1},__readied:{type:Boolean,value:!1}},observers:["_modalChanged(modal, __readied)"],listeners:{tap:"_onDialogClick"},ready:function(){this.__prevNoCancelOnOutsideClick=this.noCancelOnOutsideClick,this.__prevNoCancelOnEscKey=this.noCancelOnEscKey,this.__prevWithBackdrop=this.withBackdrop,this.__readied=!0},_modalChanged:function(e,t){t&&(e?(this.__prevNoCancelOnOutsideClick=this.noCancelOnOutsideClick,this.__prevNoCancelOnEscKey=this.noCancelOnEscKey,this.__prevWithBackdrop=this.withBackdrop,this.noCancelOnOutsideClick=!0,this.noCancelOnEscKey=!0,this.withBackdrop=!0):(this.noCancelOnOutsideClick=this.noCancelOnOutsideClick&&this.__prevNoCancelOnOutsideClick,this.noCancelOnEscKey=this.noCancelOnEscKey&&this.__prevNoCancelOnEscKey,this.withBackdrop=this.withBackdrop&&this.__prevWithBackdrop))},_updateClosingReasonConfirmed:function(e){this.closingReason=this.closingReason||{},this.closingReason.confirmed=e},_onDialogClick:function(e){for(var t=Object(r.a)(e).path,n=0,o=t.indexOf(this);n\n\n :host {\n display: block;\n @apply --layout-relative;\n }\n\n :host(.is-scrolled:not(:first-child))::before {\n content: \'\';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--divider-color);\n }\n\n :host(.can-scroll:not(.scrolled-to-bottom):not(:last-child))::after {\n content: \'\';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--divider-color);\n }\n\n .scrollable {\n padding: 0 24px;\n\n @apply --layout-scroll;\n @apply --paper-dialog-scrollable;\n }\n\n .fit {\n @apply --layout-fit;\n }\n \n\n
    \n \n
    \n']);return s=function(){return e},e}Object(r.a)({_template:Object(i.a)(s()),is:"paper-dialog-scrollable",properties:{dialogElement:{type:Object}},get scrollTarget(){return this.$.scrollable},ready:function(){this._ensureTarget(),this.classList.add("no-padding")},attached:function(){this._ensureTarget(),requestAnimationFrame(this.updateScrollState.bind(this))},updateScrollState:function(){this.toggleClass("is-scrolled",this.scrollTarget.scrollTop>0),this.toggleClass("can-scroll",this.scrollTarget.offsetHeight=this.scrollTarget.scrollHeight)},_ensureTarget:function(){this.dialogElement=this.dialogElement||this.parentElement,this.dialogElement&&this.dialogElement.behaviors&&this.dialogElement.behaviors.indexOf(o.b)>=0?(this.dialogElement.sizingTarget=this.scrollTarget,this.scrollTarget.classList.remove("fit")):this.dialogElement&&this.scrollTarget.classList.add("fit")}})},55:function(e,t,n){"use strict";n(4),n(12),n(13),n(30),n(35);var o=document.createElement("template");o.setAttribute("style","display: none;"),o.innerHTML='\n \n',document.head.appendChild(o.content);var r=n(72),i=n(31),s=n(7),a=n(6);function l(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n \n \n']);return l=function(){return e},e}Object(s.a)({_template:Object(a.a)(l()),is:"paper-dialog",behaviors:[i.a,r.a],listeners:{"neon-animation-finish":"_onNeonAnimationFinish"},_renderOpened:function(){this.cancelAnimation(),this.playAnimation("entry")},_renderClosed:function(){this.cancelAnimation(),this.playAnimation("exit")},_onNeonAnimationFinish:function(){this.opened?this._finishRenderOpened():this._finishRenderClosed()}});var c=n(59),d=n(8),p=n(67),u={getTabbableNodes:function(e){var t=[];return this._collectTabbableNodes(e,t)?p.a._sortByTabIndex(t):t},_collectTabbableNodes:function(e,t){if(e.nodeType!==Node.ELEMENT_NODE||!p.a._isVisible(e))return!1;var n,o=e,r=p.a._normalizedTabIndex(o),i=r>0;r>=0&&t.push(o),n="content"===o.localName||"slot"===o.localName?Object(d.a)(o).getDistributedNodes():Object(d.a)(o.shadowRoot||o.root||o).children;for(var s=0;s\n \n Wipe & restore\n \n \n ']);return l=function(){return e},e}function c(){var e=y(['\n

    Error: ',"

    \n "]);return c=function(){return e},e}function d(){var e=y(['\n \n ',"\n \n "]);return p=function(){return e},e}function u(){var e=y(['\n
    Add-on:
    \n \n ',"\n \n "]);return u=function(){return e},e}function h(){var e=y(["\n \n ',"\n \n "]);return h=function(){return e},e}function f(){var e=y(['\n
    Folders:
    \n \n ',"\n \n "]);return f=function(){return e},e}function m(){var e=y(['\n \n \n \n
    ','
    \n
    \n
    \n ',"\n (",")
    \n ","\n
    \n
    Home Assistant:
    \n \n Home Assistant ',"\n \n ","\n ","\n ","\n ",'\n\n
    Actions:
    \n
      \n
    • \n \n \n Download Snapshot\n \n
    • \n
    • \n \n \n Restore Selected\n \n
    • \n ',"\n
    • \n \n Delete Snapshot\n \n
    • \n
    \n \n ']);return m=function(){return e},e}function g(){var e=y([""]);return g=function(){return e},e}function y(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function b(e){return(b=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function v(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function k(e,t){return(k=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function _(e){var t,n=C(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var o={kind:"field"===e.kind?"field":"method",key:n,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(o.decorators=e.decorators),"field"===e.kind&&(o.initializer=e.value),o}function w(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function O(e){return e.decorators&&e.decorators.length}function E(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function x(e,t){var n=e[t];if(void 0!==n&&"function"!=typeof n)throw new TypeError("Expected '"+t+"' to be a function");return n}function C(e){var t=function(e,t){if("object"!==s(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!==s(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===s(t)?t:String(t)}!function(e,t,n,o){var r=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(n){t.forEach(function(t){t.kind===n&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var n=e.prototype;["method","field"].forEach(function(o){t.forEach(function(t){var r=t.placement;if(t.kind===o&&("static"===r||"prototype"===r)){var i="static"===r?e:n;this.defineClassElement(i,t)}},this)},this)},defineClassElement:function(e,t){var n=t.descriptor;if("field"===t.kind){var o=t.initializer;n={enumerable:n.enumerable,writable:n.writable,configurable:n.configurable,value:void 0===o?void 0:o.call(e)}}Object.defineProperty(e,t.key,n)},decorateClass:function(e,t){var n=[],o=[],r={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,r)},this),e.forEach(function(e){if(!O(e))return n.push(e);var t=this.decorateElement(e,r);n.push(t.element),n.push.apply(n,t.extras),o.push.apply(o,t.finishers)},this),!t)return{elements:n,finishers:o};var i=this.decorateConstructor(n,t);return o.push.apply(o,i.finishers),i.finishers=o,i},addElementPlacement:function(e,t,n){var o=t[e.placement];if(!n&&-1!==o.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");o.push(e.key)},decorateElement:function(e,t){for(var n=[],o=[],r=e.decorators,i=r.length-1;i>=0;i--){var s=t[e.placement];s.splice(s.indexOf(e.key),1);var a=this.fromElementDescriptor(e),l=this.toElementFinisherExtras((0,r[i])(a)||a);e=l.element,this.addElementPlacement(e,t),l.finisher&&o.push(l.finisher);var c=l.extras;if(c){for(var d=0;d=0;o--){var r=this.fromClassDescriptor(e),i=this.toClassDescriptor((0,t[o])(r)||r);if(void 0!==i.finisher&&n.push(i.finisher),void 0!==i.elements){e=i.elements;for(var s=0;st.name?1:-1}),this._addons=(n=this.snapshot.addons,n.map(function(e){return{slug:e.slug,name:e.name,version:e.version,checked:!0}})).sort(function(e,t){return e.name>t.name?1:-1}),this._dialogParams=e,t.prev=6,this._dialog.open(),t.next=14;break;case 10:return t.prev=10,t.t0=t.catch(6),t.next=14,regeneratorRuntime.awrap(this.showDialog(e));case 14:case"end":return t.stop()}var n,o,i},null,this,[[6,10]])}},{kind:"method",key:"render",value:function(){var e=this;return this.snapshot?Object(o.e)(m(),this._dialogClosed,this._computeName,"full"===this.snapshot.type?"Full snapshot":"Partial snapshot",this._computeSize,this._formatDatetime(this.snapshot.date),this._restoreHass,function(t){return e._restoreHass=t.target.checked},this.snapshot.homeassistant,this._folders.length?Object(o.e)(f(),this._folders.map(function(t){return Object(o.e)(h(),t.checked,function(n){return e._updateFolders(t,n.target.checked)},t.name)})):"",this._addons.length?Object(o.e)(u(),this._addons.map(function(t){return Object(o.e)(p(),t.checked,function(n){return e._updateAddons(t,n.target.checked)},t.name)})):"",this.snapshot.protected?Object(o.e)(d(),this._passwordInput,this._snapshotPassword):"",this._error?Object(o.e)(c(),this._error):"",this._downloadClicked,this._partialRestoreClicked,"full"===this.snapshot.type?Object(o.e)(l(),this._fullRestoreClicked):"",this._deleteClicked):Object(o.e)(g())}},{kind:"get",static:!0,key:"styles",value:function(){return[i.c,Object(o.c)(a())]}},{kind:"method",key:"_updateFolders",value:function(e,t){this._folders=this._folders.map(function(n){return n.slug===e.slug&&(n.checked=t),n})}},{kind:"method",key:"_updateAddons",value:function(e,t){this._addons=this._addons.map(function(n){return n.slug===e.slug&&(n.checked=t),n})}},{kind:"method",key:"_passwordInput",value:function(e){this._snapshotPassword=e.detail.value}},{kind:"method",key:"_partialRestoreClicked",value:function(){var e=this;if(confirm("Are you sure you want to restore this snapshot?")){var t=this._addons.filter(function(e){return e.checked}).map(function(e){return e.slug}),n=this._folders.filter(function(e){return e.checked}).map(function(e){return e.slug}),o={homeassistant:this._restoreHass,addons:t,folders:n};this.snapshot.protected&&(o.password=this._snapshotPassword),this.hass.callApi("POST","hassio/snapshots/".concat(this.snapshot.slug,"/restore/partial"),o).then(function(){alert("Snapshot restored!"),e._dialog.close()},function(t){e._error=t.body.message})}}},{kind:"method",key:"_fullRestoreClicked",value:function(){var e=this;if(confirm("Are you sure you want to restore this snapshot?")){var t=this.snapshot.protected?{password:this._snapshotPassword}:void 0;this.hass.callApi("POST","hassio/snapshots/".concat(this.snapshot.slug,"/restore/full"),t).then(function(){alert("Snapshot restored!"),e._dialog.close()},function(t){e._error=t.body.message})}}},{kind:"method",key:"_deleteClicked",value:function(){var e=this;confirm("Are you sure you want to delete this snapshot?")&&this.hass.callApi("POST","hassio/snapshots/".concat(this.snapshot.slug,"/remove")).then(function(){e._dialog.close(),e._dialogParams.onDelete()},function(t){e._error=t.body.message})}},{kind:"method",key:"_downloadClicked",value:function(){var e,t,n;return regeneratorRuntime.async(function(o){for(;;)switch(o.prev=o.next){case 0:return o.prev=0,o.next=3,regeneratorRuntime.awrap((r=this.hass,i="/api/hassio/snapshots/".concat(this.snapshot.slug,"/download"),r.callWS({type:"auth/sign_path",path:i})));case 3:e=o.sent,o.next=10;break;case 6:return o.prev=6,o.t0=o.catch(0),alert("Error: ".concat(o.t0.message)),o.abrupt("return");case 10:t=this._computeName.replace(/[^a-z0-9]+/gi,"_"),(n=document.createElement("a")).href=e.path,n.download="Hass_io_".concat(t,".tar"),this._dialog.appendChild(n),n.click(),this._dialog.removeChild(n);case 17:case"end":return o.stop()}var r,i},null,this,[[0,6]])}},{kind:"get",key:"_computeName",value:function(){return this.snapshot?this.snapshot.name||this.snapshot.slug:"Unnamed snapshot"}},{kind:"get",key:"_computeSize",value:function(){return Math.ceil(10*this.snapshot.size)/10+" MB"}},{kind:"method",key:"_formatDatetime",value:function(e){return new Date(e).toLocaleDateString(navigator.language,{weekday:"long",year:"numeric",month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}},{kind:"method",key:"_dialogClosed",value:function(){this._dialogParams=void 0,this.snapshot=void 0,this._snapshotPassword="",this._folders=[],this._addons=[]}}]}},o.a)},31:function(e,t,n){"use strict";n.d(t,"b",function(){return i}),n.d(t,"a",function(){return s});n(4);var o=n(70),r=n(8),i={hostAttributes:{role:"dialog",tabindex:"-1"},properties:{modal:{type:Boolean,value:!1},__readied:{type:Boolean,value:!1}},observers:["_modalChanged(modal, __readied)"],listeners:{tap:"_onDialogClick"},ready:function(){this.__prevNoCancelOnOutsideClick=this.noCancelOnOutsideClick,this.__prevNoCancelOnEscKey=this.noCancelOnEscKey,this.__prevWithBackdrop=this.withBackdrop,this.__readied=!0},_modalChanged:function(e,t){t&&(e?(this.__prevNoCancelOnOutsideClick=this.noCancelOnOutsideClick,this.__prevNoCancelOnEscKey=this.noCancelOnEscKey,this.__prevWithBackdrop=this.withBackdrop,this.noCancelOnOutsideClick=!0,this.noCancelOnEscKey=!0,this.withBackdrop=!0):(this.noCancelOnOutsideClick=this.noCancelOnOutsideClick&&this.__prevNoCancelOnOutsideClick,this.noCancelOnEscKey=this.noCancelOnEscKey&&this.__prevNoCancelOnEscKey,this.withBackdrop=this.withBackdrop&&this.__prevWithBackdrop))},_updateClosingReasonConfirmed:function(e){this.closingReason=this.closingReason||{},this.closingReason.confirmed=e},_onDialogClick:function(e){for(var t=Object(r.a)(e).path,n=0,o=t.indexOf(this);n\n\n :host {\n display: block;\n @apply --layout-relative;\n }\n\n :host(.is-scrolled:not(:first-child))::before {\n content: \'\';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--divider-color);\n }\n\n :host(.can-scroll:not(.scrolled-to-bottom):not(:last-child))::after {\n content: \'\';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 1px;\n background: var(--divider-color);\n }\n\n .scrollable {\n padding: 0 24px;\n\n @apply --layout-scroll;\n @apply --paper-dialog-scrollable;\n }\n\n .fit {\n @apply --layout-fit;\n }\n \n\n
    \n \n
    \n']);return s=function(){return e},e}Object(r.a)({_template:Object(i.a)(s()),is:"paper-dialog-scrollable",properties:{dialogElement:{type:Object}},get scrollTarget(){return this.$.scrollable},ready:function(){this._ensureTarget(),this.classList.add("no-padding")},attached:function(){this._ensureTarget(),requestAnimationFrame(this.updateScrollState.bind(this))},updateScrollState:function(){this.toggleClass("is-scrolled",this.scrollTarget.scrollTop>0),this.toggleClass("can-scroll",this.scrollTarget.offsetHeight=this.scrollTarget.scrollHeight)},_ensureTarget:function(){this.dialogElement=this.dialogElement||this.parentElement,this.dialogElement&&this.dialogElement.behaviors&&this.dialogElement.behaviors.indexOf(o.b)>=0?(this.dialogElement.sizingTarget=this.scrollTarget,this.scrollTarget.classList.remove("fit")):this.dialogElement&&this.scrollTarget.classList.add("fit")}})},55:function(e,t,n){"use strict";n(4),n(12),n(13),n(30),n(35);var o=document.createElement("template");o.setAttribute("style","display: none;"),o.innerHTML='\n \n',document.head.appendChild(o.content);var r=n(72),i=n(31),s=n(7),a=n(6);function l(){var e=function(e,t){t||(t=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}(['\n \n \n']);return l=function(){return e},e}Object(s.a)({_template:Object(a.a)(l()),is:"paper-dialog",behaviors:[i.a,r.a],listeners:{"neon-animation-finish":"_onNeonAnimationFinish"},_renderOpened:function(){this.cancelAnimation(),this.playAnimation("entry")},_renderClosed:function(){this.cancelAnimation(),this.playAnimation("exit")},_onNeonAnimationFinish:function(){this.opened?this._finishRenderOpened():this._finishRenderClosed()}});var c=n(59),d=n(8),p=n(67),u={getTabbableNodes:function(e){var t=[];return this._collectTabbableNodes(e,t)?p.a._sortByTabIndex(t):t},_collectTabbableNodes:function(e,t){if(e.nodeType!==Node.ELEMENT_NODE||!p.a._isVisible(e))return!1;var n,o=e,r=p.a._normalizedTabIndex(o),i=r>0;r>=0&&t.push(o),n="content"===o.localName||"slot"===o.localName?Object(d.a)(o).getDistributedNodes():Object(d.a)(o.shadowRoot||o.root||o).children;for(var s=0;s8ideD@!(-@g0sHu~cDU*d|C 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 T9{%U9R(Sni^2mfiH){X@OO7kf literal 0 HcmV?d00001 diff --git a/hassio/api/panel/chunk.0c4f6887f9b7e7b11ef5.js.map b/hassio/api/panel/chunk.9d371c8143226d4eaaee.js.map similarity index 99% rename from hassio/api/panel/chunk.0c4f6887f9b7e7b11ef5.js.map rename to hassio/api/panel/chunk.9d371c8143226d4eaaee.js.map index bab813b83..455df3899 100644 --- a/hassio/api/panel/chunk.0c4f6887f9b7e7b11ef5.js.map +++ b/hassio/api/panel/chunk.9d371c8143226d4eaaee.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./src/data/auth.ts","webpack:///./hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts","webpack:///./node_modules/@polymer/paper-dialog-behavior/paper-dialog-behavior.js","webpack:///./node_modules/@polymer/paper-dialog-scrollable/paper-dialog-scrollable.js","webpack:///./node_modules/@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js","webpack:///./node_modules/@polymer/paper-dialog/paper-dialog.js","webpack:///./src/components/dialog/ha-iron-focusables-helper.js","webpack:///./src/components/dialog/ha-paper-dialog.ts"],"names":["concat","location","protocol","host","customElement","property","query","params","regeneratorRuntime","async","_context","prev","next","awrap","fetchHassioSnapshotInfo","this","hass","slug","snapshot","sent","_folders","folders","list","includes","push","name","checked","sort","a","b","_addons","addons","map","addon","version","_dialogParams","_dialog","open","t0","showDialog","stop","_this2","html","_templateObject2","_dialogClosed","_computeName","type","_computeSize","_formatDatetime","date","_restoreHass","ev","target","homeassistant","length","_templateObject3","item","_templateObject4","_updateFolders","_templateObject5","_templateObject6","_updateAddons","_templateObject7","_passwordInput","_snapshotPassword","_error","_templateObject8","_downloadClicked","_partialRestoreClicked","_templateObject9","_fullRestoreClicked","_deleteClicked","_templateObject","haStyleDialog","css","_templateObject10","value","folder","detail","_this3","confirm","filter","data","password","callApi","then","alert","close","error","body","message","_this4","undefined","_this5","onDelete","signedPath","_context2","path","callWS","abrupt","replace","document","createElement","href","download","appendChild","click","removeChild","Math","ceil","size","datetime","Date","toLocaleDateString","navigator","language","weekday","year","month","day","hour","minute","LitElement","__webpack_require__","d","__webpack_exports__","PaperDialogBehaviorImpl","PaperDialogBehavior","_polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_1__","_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__","hostAttributes","role","tabindex","properties","modal","Boolean","__readied","observers","listeners","tap","ready","__prevNoCancelOnOutsideClick","noCancelOnOutsideClick","__prevNoCancelOnEscKey","noCancelOnEscKey","__prevWithBackdrop","withBackdrop","_modalChanged","readied","_updateClosingReasonConfirmed","confirmed","closingReason","_onDialogClick","event","dom","i","l","indexOf","hasAttribute","stopPropagation","IronOverlayBehavior","Polymer","_template","is","dialogElement","Object","scrollTarget","$","scrollable","_ensureTarget","classList","add","attached","requestAnimationFrame","updateScrollState","bind","toggleClass","scrollTop","offsetHeight","scrollHeight","parentElement","behaviors","sizingTarget","remove","$_documentContainer","setAttribute","innerHTML","head","content","NeonAnimationRunnerBehavior","neon-animation-finish","_renderOpened","cancelAnimation","playAnimation","_renderClosed","_onNeonAnimationFinish","opened","_finishRenderOpened","_finishRenderClosed","HaIronFocusablesHelper","getTabbableNodes","node","result","_collectTabbableNodes","IronFocusablesHelper","_sortByTabIndex","nodeType","Node","ELEMENT_NODE","_isVisible","children","element","tabIndex","_normalizedTabIndex","needsSort","localName","getDistributedNodes","shadowRoot","root","paperDialogClass","customElements","get","haTabFixBehaviorImpl","_focusableNodes","HaPaperDialog","_mixinBehaviors","_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","apply","arguments","_inherits","mixinBehaviors","define"],"mappings":"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","file":"chunk.0c4f6887f9b7e7b11ef5.js","sourcesContent":["import { HomeAssistant } from \"../types\";\n\nexport interface AuthProvider {\n name: string;\n id: string;\n type: string;\n}\n\nexport interface Credential {\n type: string;\n}\n\nexport interface SignedPath {\n path: string;\n}\n\nexport const hassUrl = `${location.protocol}//${location.host}`;\n\nexport const getSignedPath = (\n hass: HomeAssistant,\n path: string\n): Promise => hass.callWS({ type: \"auth/sign_path\", path });\n\nexport const fetchAuthProviders = () =>\n fetch(\"/auth/providers\", {\n credentials: \"same-origin\",\n });\n","import \"@material/mwc-button\";\nimport \"@polymer/app-layout/app-toolbar/app-toolbar\";\nimport \"@polymer/iron-icon/iron-icon\";\nimport \"@polymer/paper-dialog-scrollable/paper-dialog-scrollable\";\nimport \"@polymer/paper-icon-button/paper-icon-button\";\nimport \"@polymer/paper-input/paper-input\";\nimport { PaperDialogElement } from \"@polymer/paper-dialog\";\nimport { PaperCheckboxElement } from \"@polymer/paper-checkbox/paper-checkbox\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n query,\n} from \"lit-element\";\n\nimport {\n fetchHassioSnapshotInfo,\n HassioSnapshotDetail,\n} from \"../../../../src/data/hassio/snapshot\";\nimport { getSignedPath } from \"../../../../src/data/auth\";\nimport { HassioSnapshotDialogParams } from \"./show-dialog-hassio-snapshot\";\nimport { haStyleDialog } from \"../../../../src/resources/styles\";\nimport { HomeAssistant } from \"../../../../src/types\";\nimport { PolymerChangedEvent } from \"../../../../src/polymer-types\";\n\nimport \"../../../../src/components/dialog/ha-paper-dialog\";\n\nconst _computeFolders = (folders) => {\n const list: Array<{ slug: string; name: string; checked: boolean }> = [];\n if (folders.includes(\"homeassistant\")) {\n list.push({\n slug: \"homeassistant\",\n name: \"Home Assistant configuration\",\n checked: true,\n });\n }\n if (folders.includes(\"ssl\")) {\n list.push({ slug: \"ssl\", name: \"SSL\", checked: true });\n }\n if (folders.includes(\"share\")) {\n list.push({ slug: \"share\", name: \"Share\", checked: true });\n }\n if (folders.includes(\"addons/local\")) {\n list.push({ slug: \"addons/local\", name: \"Local add-ons\", checked: true });\n }\n return list;\n};\n\nconst _computeAddons = (addons) => {\n return addons.map((addon) => ({\n slug: addon.slug,\n name: addon.name,\n version: addon.version,\n checked: true,\n }));\n};\n\ninterface AddonItem {\n slug: string;\n name: string;\n version: string;\n checked: boolean | null | undefined;\n}\n\ninterface FolderItem {\n slug: string;\n name: string;\n checked: boolean | null | undefined;\n}\n\n@customElement(\"dialog-hassio-snapshot\")\nclass HassioSnapshotDialog extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() private _error?: string;\n @property() private snapshot?: HassioSnapshotDetail;\n @property() private _folders!: FolderItem[];\n @property() private _addons!: AddonItem[];\n @property() private _dialogParams?: HassioSnapshotDialogParams;\n @property() private _snapshotPassword!: string;\n @property() private _restoreHass: boolean | null | undefined = true;\n @query(\"#dialog\") private _dialog!: PaperDialogElement;\n\n public async showDialog(params: HassioSnapshotDialogParams) {\n this.snapshot = await fetchHassioSnapshotInfo(this.hass, params.slug);\n this._folders = _computeFolders(\n this.snapshot.folders\n ).sort((a: FolderItem, b: FolderItem) => (a.name > b.name ? 1 : -1));\n this._addons = _computeAddons(\n this.snapshot.addons\n ).sort((a: AddonItem, b: AddonItem) => (a.name > b.name ? 1 : -1));\n\n this._dialogParams = params;\n\n try {\n this._dialog.open();\n } catch {\n await this.showDialog(params);\n }\n }\n\n protected render(): TemplateResult {\n if (!this.snapshot) {\n return html``;\n }\n return html`\n \n \n \n
    ${this._computeName}
    \n
    \n
    \n ${this.snapshot.type === \"full\"\n ? \"Full snapshot\"\n : \"Partial snapshot\"}\n (${this._computeSize})
    \n ${this._formatDatetime(this.snapshot.date)}\n
    \n
    Home Assistant:
    \n \n (this._restoreHass = (ev.target as PaperCheckboxElement).checked)}\"\n >\n Home Assistant ${this.snapshot.homeassistant}\n \n ${this._folders.length\n ? html`\n
    Folders:
    \n \n ${this._folders.map((item) => {\n return html`\n \n this._updateFolders(\n item,\n (ev.target as PaperCheckboxElement).checked\n )}\"\n >\n ${item.name}\n \n `;\n })}\n \n `\n : \"\"}\n ${this._addons.length\n ? html`\n
    Add-on:
    \n \n ${this._addons.map((item) => {\n return html`\n \n this._updateAddons(\n item,\n (ev.target as PaperCheckboxElement).checked\n )}\"\n >\n ${item.name}\n \n `;\n })}\n \n `\n : \"\"}\n ${this.snapshot.protected\n ? html`\n \n `\n : \"\"}\n ${this._error\n ? html`\n

    Error: ${this._error}

    \n `\n : \"\"}\n\n
    Actions:
    \n
      \n
    • \n \n \n Download Snapshot\n \n
    • \n
    • \n \n \n Restore Selected\n \n
    • \n ${this.snapshot.type === \"full\"\n ? html`\n
    • \n \n \n Wipe & restore\n \n
    • \n `\n : \"\"}\n
    • \n \n \n Delete Snapshot\n \n
    • \n
    \n \n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyleDialog,\n css`\n ha-paper-dialog {\n min-width: 350px;\n font-size: 14px;\n border-radius: 2px;\n }\n app-toolbar {\n margin: 0;\n padding: 0 16px;\n color: var(--primary-text-color);\n background-color: var(--secondary-background-color);\n }\n app-toolbar [main-title] {\n margin-left: 16px;\n }\n ha-paper-dialog-scrollable {\n margin: 0;\n }\n paper-checkbox {\n display: block;\n margin: 4px;\n }\n @media all and (max-width: 450px), all and (max-height: 500px) {\n ha-paper-dialog {\n max-height: 100%;\n height: 100%;\n }\n app-toolbar {\n color: var(--text-primary-color);\n background-color: var(--primary-color);\n }\n }\n .details {\n color: var(--secondary-text-color);\n }\n .warning,\n .error {\n color: var(--google-red-500);\n }\n .buttons {\n display: flex;\n flex-direction: column;\n }\n .buttons li {\n list-style-type: none;\n }\n .buttons .icon {\n margin-right: 16px;\n }\n .no-margin-top {\n margin-top: 0;\n }\n `,\n ];\n }\n\n private _updateFolders(item: FolderItem, value: boolean | null | undefined) {\n this._folders = this._folders.map((folder) => {\n if (folder.slug === item.slug) {\n folder.checked = value;\n }\n return folder;\n });\n }\n\n private _updateAddons(item: AddonItem, value: boolean | null | undefined) {\n this._addons = this._addons.map((addon) => {\n if (addon.slug === item.slug) {\n addon.checked = value;\n }\n return addon;\n });\n }\n\n private _passwordInput(ev: PolymerChangedEvent) {\n this._snapshotPassword = ev.detail.value;\n }\n\n private _partialRestoreClicked() {\n if (!confirm(\"Are you sure you want to restore this snapshot?\")) {\n return;\n }\n\n const addons = this._addons\n .filter((addon) => addon.checked)\n .map((addon) => addon.slug);\n\n const folders = this._folders\n .filter((folder) => folder.checked)\n .map((folder) => folder.slug);\n\n const data: {\n homeassistant: boolean | null | undefined;\n addons: any;\n folders: any;\n password?: string;\n } = {\n homeassistant: this._restoreHass,\n addons,\n folders,\n };\n\n if (this.snapshot!.protected) {\n data.password = this._snapshotPassword;\n }\n\n this.hass\n .callApi(\n \"POST\",\n\n `hassio/snapshots/${this.snapshot!.slug}/restore/partial`,\n data\n )\n .then(\n () => {\n alert(\"Snapshot restored!\");\n this._dialog.close();\n },\n (error) => {\n this._error = error.body.message;\n }\n );\n }\n\n private _fullRestoreClicked() {\n if (!confirm(\"Are you sure you want to restore this snapshot?\")) {\n return;\n }\n\n const data = this.snapshot!.protected\n ? { password: this._snapshotPassword }\n : undefined;\n\n this.hass\n .callApi(\n \"POST\",\n `hassio/snapshots/${this.snapshot!.slug}/restore/full`,\n data\n )\n .then(\n () => {\n alert(\"Snapshot restored!\");\n this._dialog.close();\n },\n (error) => {\n this._error = error.body.message;\n }\n );\n }\n\n private _deleteClicked() {\n if (!confirm(\"Are you sure you want to delete this snapshot?\")) {\n return;\n }\n\n this.hass\n\n .callApi(\"POST\", `hassio/snapshots/${this.snapshot!.slug}/remove`)\n .then(\n () => {\n this._dialog.close();\n this._dialogParams!.onDelete();\n },\n (error) => {\n this._error = error.body.message;\n }\n );\n }\n\n private async _downloadClicked() {\n let signedPath: { path: string };\n try {\n signedPath = await getSignedPath(\n this.hass,\n `/api/hassio/snapshots/${this.snapshot!.slug}/download`\n );\n } catch (err) {\n alert(`Error: ${err.message}`);\n return;\n }\n\n const name = this._computeName.replace(/[^a-z0-9]+/gi, \"_\");\n const a = document.createElement(\"a\");\n a.href = signedPath.path;\n a.download = `Hass_io_${name}.tar`;\n this._dialog.appendChild(a);\n a.click();\n this._dialog.removeChild(a);\n }\n\n private get _computeName() {\n return this.snapshot\n ? this.snapshot.name || this.snapshot.slug\n : \"Unnamed snapshot\";\n }\n\n private get _computeSize() {\n return Math.ceil(this.snapshot!.size * 10) / 10 + \" MB\";\n }\n\n private _formatDatetime(datetime) {\n return new Date(datetime).toLocaleDateString(navigator.language, {\n weekday: \"long\",\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n }\n\n private _dialogClosed() {\n this._dialogParams = undefined;\n this.snapshot = undefined;\n this._snapshotPassword = \"\";\n this._folders = [];\n this._addons = [];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dialog-hassio-snapshot\": HassioSnapshotDialog;\n }\n}\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\n\nimport {IronOverlayBehavior} from '@polymer/iron-overlay-behavior/iron-overlay-behavior.js';\nimport {dom} from '@polymer/polymer/lib/legacy/polymer.dom.js';\n\n/**\n Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to\n implement a Material Design dialog.\n\n For example, if `` implements this behavior:\n\n \n

    Header

    \n
    Dialog body
    \n
    \n Cancel\n Accept\n
    \n
    \n\n `paper-dialog-shared-styles.html` provide styles for a header, content area,\n and an action area for buttons. Use the `

    ` tag for the header and the\n `buttons` class for the action area. You can use the `paper-dialog-scrollable`\n element (in its own repository) if you need a scrolling content area.\n\n Use the `dialog-dismiss` and `dialog-confirm` attributes on interactive\n controls to close the dialog. If the user dismisses the dialog with\n `dialog-confirm`, the `closingReason` will update to include `confirmed:\n true`.\n\n ### Accessibility\n\n This element has `role=\"dialog\"` by default. Depending on the context, it may\n be more appropriate to override this attribute with `role=\"alertdialog\"`.\n\n If `modal` is set, the element will prevent the focus from exiting the\n element. It will also ensure that focus remains in the dialog.\n\n @hero hero.svg\n @demo demo/index.html\n @polymerBehavior PaperDialogBehavior\n */\nexport const PaperDialogBehaviorImpl = {\n\n hostAttributes: {'role': 'dialog', 'tabindex': '-1'},\n\n properties: {\n\n /**\n * If `modal` is true, this implies `no-cancel-on-outside-click`,\n * `no-cancel-on-esc-key` and `with-backdrop`.\n */\n modal: {type: Boolean, value: false},\n\n __readied: {type: Boolean, value: false}\n\n },\n\n observers: ['_modalChanged(modal, __readied)'],\n\n listeners: {'tap': '_onDialogClick'},\n\n /**\n * @return {void}\n */\n ready: function() {\n // Only now these properties can be read.\n this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;\n this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;\n this.__prevWithBackdrop = this.withBackdrop;\n this.__readied = true;\n },\n\n _modalChanged: function(modal, readied) {\n // modal implies noCancelOnOutsideClick, noCancelOnEscKey and withBackdrop.\n // We need to wait for the element to be ready before we can read the\n // properties values.\n if (!readied) {\n return;\n }\n\n if (modal) {\n this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;\n this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;\n this.__prevWithBackdrop = this.withBackdrop;\n this.noCancelOnOutsideClick = true;\n this.noCancelOnEscKey = true;\n this.withBackdrop = true;\n } else {\n // If the value was changed to false, let it false.\n this.noCancelOnOutsideClick =\n this.noCancelOnOutsideClick && this.__prevNoCancelOnOutsideClick;\n this.noCancelOnEscKey =\n this.noCancelOnEscKey && this.__prevNoCancelOnEscKey;\n this.withBackdrop = this.withBackdrop && this.__prevWithBackdrop;\n }\n },\n\n _updateClosingReasonConfirmed: function(confirmed) {\n this.closingReason = this.closingReason || {};\n this.closingReason.confirmed = confirmed;\n },\n\n /**\n * Will dismiss the dialog if user clicked on an element with dialog-dismiss\n * or dialog-confirm attribute.\n */\n _onDialogClick: function(event) {\n // Search for the element with dialog-confirm or dialog-dismiss,\n // from the root target until this (excluded).\n var path = dom(event).path;\n for (var i = 0, l = path.indexOf(this); i < l; i++) {\n var target = path[i];\n if (target.hasAttribute &&\n (target.hasAttribute('dialog-dismiss') ||\n target.hasAttribute('dialog-confirm'))) {\n this._updateClosingReasonConfirmed(\n target.hasAttribute('dialog-confirm'));\n this.close();\n event.stopPropagation();\n break;\n }\n }\n }\n\n};\n\n/** @polymerBehavior */\nexport const PaperDialogBehavior =\n [IronOverlayBehavior, PaperDialogBehaviorImpl];\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/iron-flex-layout/iron-flex-layout.js';\nimport '@polymer/paper-styles/default-theme.js';\n\nimport {PaperDialogBehaviorImpl} from '@polymer/paper-dialog-behavior/paper-dialog-behavior.js';\nimport {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js';\nimport {html} from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\nMaterial design:\n[Dialogs](https://www.google.com/design/spec/components/dialogs.html)\n\n`paper-dialog-scrollable` implements a scrolling area used in a Material Design\ndialog. It shows a divider at the top and/or bottom indicating more content,\ndepending on scroll position. Use this together with elements implementing\n`Polymer.PaperDialogBehavior`.\n\n \n

    Header

    \n \n Lorem ipsum...\n \n
    \n OK\n
    \n
    \n\nIt shows a top divider after scrolling if it is not the first child in its\nparent container, indicating there is more content above. It shows a bottom\ndivider if it is scrollable and it is not the last child in its parent\ncontainer, indicating there is more content below. The bottom divider is hidden\nif it is scrolled to the bottom.\n\nIf `paper-dialog-scrollable` is not a direct child of the element implementing\n`Polymer.PaperDialogBehavior`, remember to set the `dialogElement`:\n\n \n

    Header

    \n
    \n

    Sub-header

    \n \n Lorem ipsum...\n \n
    \n
    \n OK\n
    \n
    \n\n \n\n### Styling\nThe following custom properties and mixins are available for styling:\n\nCustom property | Description | Default\n----------------|-------------|----------\n`--paper-dialog-scrollable` | Mixin for the scrollable content | {}\n\n@group Paper Elements\n@element paper-dialog-scrollable\n@demo demo/index.html\n@hero hero.svg\n*/\nPolymer({\n _template: html`\n \n\n
    \n \n
    \n`,\n\n is: 'paper-dialog-scrollable',\n\n properties: {\n\n /**\n * The dialog element that implements `Polymer.PaperDialogBehavior`\n * containing this element.\n * @type {?Node}\n */\n dialogElement: {type: Object}\n\n },\n\n /**\n * Returns the scrolling element.\n */\n get scrollTarget() {\n return this.$.scrollable;\n },\n\n ready: function() {\n this._ensureTarget();\n this.classList.add('no-padding');\n },\n\n attached: function() {\n this._ensureTarget();\n requestAnimationFrame(this.updateScrollState.bind(this));\n },\n\n updateScrollState: function() {\n this.toggleClass('is-scrolled', this.scrollTarget.scrollTop > 0);\n this.toggleClass(\n 'can-scroll',\n this.scrollTarget.offsetHeight < this.scrollTarget.scrollHeight);\n this.toggleClass(\n 'scrolled-to-bottom',\n this.scrollTarget.scrollTop + this.scrollTarget.offsetHeight >=\n this.scrollTarget.scrollHeight);\n },\n\n _ensureTarget: function() {\n // Read parentElement instead of parentNode in order to skip shadowRoots.\n this.dialogElement = this.dialogElement || this.parentElement;\n // Check if dialog implements paper-dialog-behavior. If not, fit\n // scrollTarget to host.\n if (this.dialogElement && this.dialogElement.behaviors &&\n this.dialogElement.behaviors.indexOf(PaperDialogBehaviorImpl) >= 0) {\n this.dialogElement.sizingTarget = this.scrollTarget;\n this.scrollTarget.classList.remove('fit');\n } else if (this.dialogElement) {\n this.scrollTarget.classList.add('fit');\n }\n }\n});\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/*\n### Styling\n\nThe following custom properties and mixins are available for styling.\n\nCustom property | Description | Default\n----------------|-------------|----------\n`--paper-dialog-background-color` | Dialog background color | `--primary-background-color`\n`--paper-dialog-color` | Dialog foreground color | `--primary-text-color`\n`--paper-dialog` | Mixin applied to the dialog | `{}`\n`--paper-dialog-title` | Mixin applied to the title (`

    `) element | `{}`\n`--paper-dialog-button-color` | Button area foreground color | `--default-primary-color`\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/iron-flex-layout/iron-flex-layout.js';\nimport '@polymer/paper-styles/default-theme.js';\nimport '@polymer/paper-styles/typography.js';\nimport '@polymer/paper-styles/shadow.js';\nconst $_documentContainer = document.createElement('template');\n$_documentContainer.setAttribute('style', 'display: none;');\n\n$_documentContainer.innerHTML = `\n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js';\n\nimport {NeonAnimationRunnerBehavior} from '@polymer/neon-animation/neon-animation-runner-behavior.js';\nimport {PaperDialogBehavior} from '@polymer/paper-dialog-behavior/paper-dialog-behavior.js';\nimport {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js';\nimport {html} from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\nMaterial design:\n[Dialogs](https://www.google.com/design/spec/components/dialogs.html)\n\n`` is a dialog with Material Design styling and optional\nanimations when it is opened or closed. It provides styles for a header, content\narea, and an action area for buttons. You can use the\n`` element (in its own repository) if you need a\nscrolling content area. To autofocus a specific child element after opening the\ndialog, give it the `autofocus` attribute. See `Polymer.PaperDialogBehavior` and\n`Polymer.IronOverlayBehavior` for specifics.\n\nFor example, the following code implements a dialog with a header, scrolling\ncontent area and buttons. Focus will be given to the `dialog-confirm` button\nwhen the dialog is opened.\n\n \n

    Header

    \n \n Lorem ipsum...\n \n
    \n Cancel\n Accept\n
    \n
    \n\n### Styling\n\nSee the docs for `Polymer.PaperDialogBehavior` for the custom properties\navailable for styling this element.\n\n### Animations\n\nSet the `entry-animation` and/or `exit-animation` attributes to add an animation\nwhen the dialog is opened or closed. See the documentation in\n[PolymerElements/neon-animation](https://github.com/PolymerElements/neon-animation)\nfor more info.\n\nFor example:\n\n \n\n \n

    Header

    \n
    Dialog body
    \n
    \n\n### Accessibility\n\nSee the docs for `Polymer.PaperDialogBehavior` for accessibility features\nimplemented by this element.\n\n@group Paper Elements\n@element paper-dialog\n@hero hero.svg\n@demo demo/index.html\n*/\nPolymer({\n _template: html`\n \n \n`,\n\n is: 'paper-dialog',\n behaviors: [PaperDialogBehavior, NeonAnimationRunnerBehavior],\n listeners: {'neon-animation-finish': '_onNeonAnimationFinish'},\n\n _renderOpened: function() {\n this.cancelAnimation();\n this.playAnimation('entry');\n },\n\n _renderClosed: function() {\n this.cancelAnimation();\n this.playAnimation('exit');\n },\n\n _onNeonAnimationFinish: function() {\n if (this.opened) {\n this._finishRenderOpened();\n } else {\n this._finishRenderClosed();\n }\n }\n});\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/*\n Fixes issue with not using shadow dom properly in iron-overlay-behavior/icon-focusables-helper.js\n*/\nimport { dom } from \"@polymer/polymer/lib/legacy/polymer.dom.js\";\n\nimport { IronFocusablesHelper } from \"@polymer/iron-overlay-behavior/iron-focusables-helper.js\";\n\nexport const HaIronFocusablesHelper = {\n /**\n * Returns a sorted array of tabbable nodes, including the root node.\n * It searches the tabbable nodes in the light and shadow dom of the chidren,\n * sorting the result by tabindex.\n * @param {!Node} node\n * @return {!Array}\n */\n getTabbableNodes: function(node) {\n var result = [];\n // If there is at least one element with tabindex > 0, we need to sort\n // the final array by tabindex.\n var needsSortByTabIndex = this._collectTabbableNodes(node, result);\n if (needsSortByTabIndex) {\n return IronFocusablesHelper._sortByTabIndex(result);\n }\n return result;\n },\n\n /**\n * Searches for nodes that are tabbable and adds them to the `result` array.\n * Returns if the `result` array needs to be sorted by tabindex.\n * @param {!Node} node The starting point for the search; added to `result`\n * if tabbable.\n * @param {!Array} result\n * @return {boolean}\n * @private\n */\n _collectTabbableNodes: function(node, result) {\n // If not an element or not visible, no need to explore children.\n if (\n node.nodeType !== Node.ELEMENT_NODE ||\n !IronFocusablesHelper._isVisible(node)\n ) {\n return false;\n }\n var element = /** @type {!HTMLElement} */ (node);\n var tabIndex = IronFocusablesHelper._normalizedTabIndex(element);\n var needsSort = tabIndex > 0;\n if (tabIndex >= 0) {\n result.push(element);\n }\n\n // In ShadowDOM v1, tab order is affected by the order of distrubution.\n // E.g. getTabbableNodes(#root) in ShadowDOM v1 should return [#A, #B];\n // in ShadowDOM v0 tab order is not affected by the distrubution order,\n // in fact getTabbableNodes(#root) returns [#B, #A].\n //
    \n // \n // \n // \n // \n // \n // \n //
    \n // TODO(valdrin) support ShadowDOM v1 when upgrading to Polymer v2.0.\n var children;\n if (element.localName === \"content\" || element.localName === \"slot\") {\n children = dom(element).getDistributedNodes();\n } else {\n // /////////////////////////\n // Use shadow root if possible, will check for distributed nodes.\n // THIS IS THE CHANGED LINE\n children = dom(element.shadowRoot || element.root || element).children;\n // /////////////////////////\n }\n for (var i = 0; i < children.length; i++) {\n // Ensure method is always invoked to collect tabbable children.\n needsSort = this._collectTabbableNodes(children[i], result) || needsSort;\n }\n return needsSort;\n },\n};\n","import \"@polymer/paper-dialog/paper-dialog\";\nimport { mixinBehaviors } from \"@polymer/polymer/lib/legacy/class\";\nimport { HaIronFocusablesHelper } from \"./ha-iron-focusables-helper.js\";\n// tslint:disable-next-line\nimport { PaperDialogElement } from \"@polymer/paper-dialog/paper-dialog\";\n\nconst paperDialogClass = customElements.get(\"paper-dialog\");\n\n// behavior that will override existing iron-overlay-behavior and call the fixed implementation\nconst haTabFixBehaviorImpl = {\n get _focusableNodes() {\n return HaIronFocusablesHelper.getTabbableNodes(this);\n },\n};\n\n// paper-dialog that uses the haTabFixBehaviorImpl behvaior\n// export class HaPaperDialog extends paperDialogClass {}\n// @ts-ignore\nexport class HaPaperDialog\n extends mixinBehaviors([haTabFixBehaviorImpl], paperDialogClass)\n implements PaperDialogElement {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-paper-dialog\": HaPaperDialog;\n }\n}\ncustomElements.define(\"ha-paper-dialog\", HaPaperDialog);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./src/data/auth.ts","webpack:///./hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts","webpack:///./node_modules/@polymer/paper-dialog-behavior/paper-dialog-behavior.js","webpack:///./node_modules/@polymer/paper-dialog-scrollable/paper-dialog-scrollable.js","webpack:///./node_modules/@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js","webpack:///./node_modules/@polymer/paper-dialog/paper-dialog.js","webpack:///./src/components/dialog/ha-iron-focusables-helper.js","webpack:///./src/components/dialog/ha-paper-dialog.ts"],"names":["concat","location","protocol","host","customElement","property","query","params","regeneratorRuntime","async","_context","prev","next","awrap","fetchHassioSnapshotInfo","this","hass","slug","snapshot","sent","_folders","folders","list","includes","push","name","checked","sort","a","b","_addons","addons","map","addon","version","_dialogParams","_dialog","open","t0","showDialog","stop","_this2","html","_templateObject2","_dialogClosed","_computeName","type","_computeSize","_formatDatetime","date","_restoreHass","ev","target","homeassistant","length","_templateObject3","item","_templateObject4","_updateFolders","_templateObject5","_templateObject6","_updateAddons","_templateObject7","_passwordInput","_snapshotPassword","_error","_templateObject8","_downloadClicked","_partialRestoreClicked","_templateObject9","_fullRestoreClicked","_deleteClicked","_templateObject","haStyleDialog","css","_templateObject10","value","folder","detail","_this3","confirm","filter","data","password","callApi","then","alert","close","error","body","message","_this4","undefined","_this5","onDelete","signedPath","_context2","path","callWS","abrupt","replace","document","createElement","href","download","appendChild","click","removeChild","Math","ceil","size","datetime","Date","toLocaleDateString","navigator","language","weekday","year","month","day","hour","minute","LitElement","__webpack_require__","d","__webpack_exports__","PaperDialogBehaviorImpl","PaperDialogBehavior","_polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_1__","_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__","hostAttributes","role","tabindex","properties","modal","Boolean","__readied","observers","listeners","tap","ready","__prevNoCancelOnOutsideClick","noCancelOnOutsideClick","__prevNoCancelOnEscKey","noCancelOnEscKey","__prevWithBackdrop","withBackdrop","_modalChanged","readied","_updateClosingReasonConfirmed","confirmed","closingReason","_onDialogClick","event","dom","i","l","indexOf","hasAttribute","stopPropagation","IronOverlayBehavior","Polymer","_template","is","dialogElement","Object","scrollTarget","$","scrollable","_ensureTarget","classList","add","attached","requestAnimationFrame","updateScrollState","bind","toggleClass","scrollTop","offsetHeight","scrollHeight","parentElement","behaviors","sizingTarget","remove","$_documentContainer","setAttribute","innerHTML","head","content","NeonAnimationRunnerBehavior","neon-animation-finish","_renderOpened","cancelAnimation","playAnimation","_renderClosed","_onNeonAnimationFinish","opened","_finishRenderOpened","_finishRenderClosed","HaIronFocusablesHelper","getTabbableNodes","node","result","_collectTabbableNodes","IronFocusablesHelper","_sortByTabIndex","nodeType","Node","ELEMENT_NODE","_isVisible","children","element","tabIndex","_normalizedTabIndex","needsSort","localName","getDistributedNodes","shadowRoot","root","paperDialogClass","customElements","get","haTabFixBehaviorImpl","_focusableNodes","HaPaperDialog","_mixinBehaviors","_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","apply","arguments","_inherits","mixinBehaviors","define"],"mappings":"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","file":"chunk.9d371c8143226d4eaaee.js","sourcesContent":["import { HomeAssistant } from \"../types\";\n\nexport interface AuthProvider {\n name: string;\n id: string;\n type: string;\n}\n\nexport interface Credential {\n type: string;\n}\n\nexport interface SignedPath {\n path: string;\n}\n\nexport const hassUrl = `${location.protocol}//${location.host}`;\n\nexport const getSignedPath = (\n hass: HomeAssistant,\n path: string\n): Promise => hass.callWS({ type: \"auth/sign_path\", path });\n\nexport const fetchAuthProviders = () =>\n fetch(\"/auth/providers\", {\n credentials: \"same-origin\",\n });\n","import \"@material/mwc-button\";\nimport \"@polymer/app-layout/app-toolbar/app-toolbar\";\nimport \"@polymer/iron-icon/iron-icon\";\nimport \"@polymer/paper-dialog-scrollable/paper-dialog-scrollable\";\nimport \"@polymer/paper-icon-button/paper-icon-button\";\nimport \"@polymer/paper-input/paper-input\";\nimport { PaperDialogElement } from \"@polymer/paper-dialog\";\nimport { PaperCheckboxElement } from \"@polymer/paper-checkbox/paper-checkbox\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n query,\n} from \"lit-element\";\n\nimport {\n fetchHassioSnapshotInfo,\n HassioSnapshotDetail,\n} from \"../../../../src/data/hassio/snapshot\";\nimport { getSignedPath } from \"../../../../src/data/auth\";\nimport { HassioSnapshotDialogParams } from \"./show-dialog-hassio-snapshot\";\nimport { haStyleDialog } from \"../../../../src/resources/styles\";\nimport { HomeAssistant } from \"../../../../src/types\";\nimport { PolymerChangedEvent } from \"../../../../src/polymer-types\";\n\nimport \"../../../../src/components/dialog/ha-paper-dialog\";\n\nconst _computeFolders = (folders) => {\n const list: Array<{ slug: string; name: string; checked: boolean }> = [];\n if (folders.includes(\"homeassistant\")) {\n list.push({\n slug: \"homeassistant\",\n name: \"Home Assistant configuration\",\n checked: true,\n });\n }\n if (folders.includes(\"ssl\")) {\n list.push({ slug: \"ssl\", name: \"SSL\", checked: true });\n }\n if (folders.includes(\"share\")) {\n list.push({ slug: \"share\", name: \"Share\", checked: true });\n }\n if (folders.includes(\"addons/local\")) {\n list.push({ slug: \"addons/local\", name: \"Local add-ons\", checked: true });\n }\n return list;\n};\n\nconst _computeAddons = (addons) => {\n return addons.map((addon) => ({\n slug: addon.slug,\n name: addon.name,\n version: addon.version,\n checked: true,\n }));\n};\n\ninterface AddonItem {\n slug: string;\n name: string;\n version: string;\n checked: boolean | null | undefined;\n}\n\ninterface FolderItem {\n slug: string;\n name: string;\n checked: boolean | null | undefined;\n}\n\n@customElement(\"dialog-hassio-snapshot\")\nclass HassioSnapshotDialog extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() private _error?: string;\n @property() private snapshot?: HassioSnapshotDetail;\n @property() private _folders!: FolderItem[];\n @property() private _addons!: AddonItem[];\n @property() private _dialogParams?: HassioSnapshotDialogParams;\n @property() private _snapshotPassword!: string;\n @property() private _restoreHass: boolean | null | undefined = true;\n @query(\"#dialog\") private _dialog!: PaperDialogElement;\n\n public async showDialog(params: HassioSnapshotDialogParams) {\n this.snapshot = await fetchHassioSnapshotInfo(this.hass, params.slug);\n this._folders = _computeFolders(\n this.snapshot.folders\n ).sort((a: FolderItem, b: FolderItem) => (a.name > b.name ? 1 : -1));\n this._addons = _computeAddons(\n this.snapshot.addons\n ).sort((a: AddonItem, b: AddonItem) => (a.name > b.name ? 1 : -1));\n\n this._dialogParams = params;\n\n try {\n this._dialog.open();\n } catch {\n await this.showDialog(params);\n }\n }\n\n protected render(): TemplateResult {\n if (!this.snapshot) {\n return html``;\n }\n return html`\n \n \n \n
    ${this._computeName}
    \n
    \n
    \n ${this.snapshot.type === \"full\"\n ? \"Full snapshot\"\n : \"Partial snapshot\"}\n (${this._computeSize})
    \n ${this._formatDatetime(this.snapshot.date)}\n
    \n
    Home Assistant:
    \n \n (this._restoreHass = (ev.target as PaperCheckboxElement).checked)}\"\n >\n Home Assistant ${this.snapshot.homeassistant}\n \n ${this._folders.length\n ? html`\n
    Folders:
    \n \n ${this._folders.map((item) => {\n return html`\n \n this._updateFolders(\n item,\n (ev.target as PaperCheckboxElement).checked\n )}\"\n >\n ${item.name}\n \n `;\n })}\n \n `\n : \"\"}\n ${this._addons.length\n ? html`\n
    Add-on:
    \n \n ${this._addons.map((item) => {\n return html`\n \n this._updateAddons(\n item,\n (ev.target as PaperCheckboxElement).checked\n )}\"\n >\n ${item.name}\n \n `;\n })}\n \n `\n : \"\"}\n ${this.snapshot.protected\n ? html`\n \n `\n : \"\"}\n ${this._error\n ? html`\n

    Error: ${this._error}

    \n `\n : \"\"}\n\n
    Actions:
    \n
      \n
    • \n \n \n Download Snapshot\n \n
    • \n
    • \n \n \n Restore Selected\n \n
    • \n ${this.snapshot.type === \"full\"\n ? html`\n
    • \n \n \n Wipe & restore\n \n
    • \n `\n : \"\"}\n
    • \n \n \n Delete Snapshot\n \n
    • \n
    \n \n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyleDialog,\n css`\n ha-paper-dialog {\n min-width: 350px;\n font-size: 14px;\n border-radius: 2px;\n }\n app-toolbar {\n margin: 0;\n padding: 0 16px;\n color: var(--primary-text-color);\n background-color: var(--secondary-background-color);\n }\n app-toolbar [main-title] {\n margin-left: 16px;\n }\n ha-paper-dialog-scrollable {\n margin: 0;\n }\n paper-checkbox {\n display: block;\n margin: 4px;\n }\n @media all and (max-width: 450px), all and (max-height: 500px) {\n ha-paper-dialog {\n max-height: 100%;\n height: 100%;\n }\n app-toolbar {\n color: var(--text-primary-color);\n background-color: var(--primary-color);\n }\n }\n .details {\n color: var(--secondary-text-color);\n }\n .warning,\n .error {\n color: var(--google-red-500);\n }\n .buttons {\n display: flex;\n flex-direction: column;\n }\n .buttons li {\n list-style-type: none;\n }\n .buttons .icon {\n margin-right: 16px;\n }\n .no-margin-top {\n margin-top: 0;\n }\n `,\n ];\n }\n\n private _updateFolders(item: FolderItem, value: boolean | null | undefined) {\n this._folders = this._folders.map((folder) => {\n if (folder.slug === item.slug) {\n folder.checked = value;\n }\n return folder;\n });\n }\n\n private _updateAddons(item: AddonItem, value: boolean | null | undefined) {\n this._addons = this._addons.map((addon) => {\n if (addon.slug === item.slug) {\n addon.checked = value;\n }\n return addon;\n });\n }\n\n private _passwordInput(ev: PolymerChangedEvent) {\n this._snapshotPassword = ev.detail.value;\n }\n\n private _partialRestoreClicked() {\n if (!confirm(\"Are you sure you want to restore this snapshot?\")) {\n return;\n }\n\n const addons = this._addons\n .filter((addon) => addon.checked)\n .map((addon) => addon.slug);\n\n const folders = this._folders\n .filter((folder) => folder.checked)\n .map((folder) => folder.slug);\n\n const data: {\n homeassistant: boolean | null | undefined;\n addons: any;\n folders: any;\n password?: string;\n } = {\n homeassistant: this._restoreHass,\n addons,\n folders,\n };\n\n if (this.snapshot!.protected) {\n data.password = this._snapshotPassword;\n }\n\n this.hass\n .callApi(\n \"POST\",\n\n `hassio/snapshots/${this.snapshot!.slug}/restore/partial`,\n data\n )\n .then(\n () => {\n alert(\"Snapshot restored!\");\n this._dialog.close();\n },\n (error) => {\n this._error = error.body.message;\n }\n );\n }\n\n private _fullRestoreClicked() {\n if (!confirm(\"Are you sure you want to restore this snapshot?\")) {\n return;\n }\n\n const data = this.snapshot!.protected\n ? { password: this._snapshotPassword }\n : undefined;\n\n this.hass\n .callApi(\n \"POST\",\n `hassio/snapshots/${this.snapshot!.slug}/restore/full`,\n data\n )\n .then(\n () => {\n alert(\"Snapshot restored!\");\n this._dialog.close();\n },\n (error) => {\n this._error = error.body.message;\n }\n );\n }\n\n private _deleteClicked() {\n if (!confirm(\"Are you sure you want to delete this snapshot?\")) {\n return;\n }\n\n this.hass\n\n .callApi(\"POST\", `hassio/snapshots/${this.snapshot!.slug}/remove`)\n .then(\n () => {\n this._dialog.close();\n this._dialogParams!.onDelete();\n },\n (error) => {\n this._error = error.body.message;\n }\n );\n }\n\n private async _downloadClicked() {\n let signedPath: { path: string };\n try {\n signedPath = await getSignedPath(\n this.hass,\n `/api/hassio/snapshots/${this.snapshot!.slug}/download`\n );\n } catch (err) {\n alert(`Error: ${err.message}`);\n return;\n }\n\n const name = this._computeName.replace(/[^a-z0-9]+/gi, \"_\");\n const a = document.createElement(\"a\");\n a.href = signedPath.path;\n a.download = `Hass_io_${name}.tar`;\n this._dialog.appendChild(a);\n a.click();\n this._dialog.removeChild(a);\n }\n\n private get _computeName() {\n return this.snapshot\n ? this.snapshot.name || this.snapshot.slug\n : \"Unnamed snapshot\";\n }\n\n private get _computeSize() {\n return Math.ceil(this.snapshot!.size * 10) / 10 + \" MB\";\n }\n\n private _formatDatetime(datetime) {\n return new Date(datetime).toLocaleDateString(navigator.language, {\n weekday: \"long\",\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n }\n\n private _dialogClosed() {\n this._dialogParams = undefined;\n this.snapshot = undefined;\n this._snapshotPassword = \"\";\n this._folders = [];\n this._addons = [];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dialog-hassio-snapshot\": HassioSnapshotDialog;\n }\n}\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\n\nimport {IronOverlayBehavior} from '@polymer/iron-overlay-behavior/iron-overlay-behavior.js';\nimport {dom} from '@polymer/polymer/lib/legacy/polymer.dom.js';\n\n/**\n Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to\n implement a Material Design dialog.\n\n For example, if `` implements this behavior:\n\n \n

    Header

    \n
    Dialog body
    \n
    \n Cancel\n Accept\n
    \n
    \n\n `paper-dialog-shared-styles.html` provide styles for a header, content area,\n and an action area for buttons. Use the `

    ` tag for the header and the\n `buttons` class for the action area. You can use the `paper-dialog-scrollable`\n element (in its own repository) if you need a scrolling content area.\n\n Use the `dialog-dismiss` and `dialog-confirm` attributes on interactive\n controls to close the dialog. If the user dismisses the dialog with\n `dialog-confirm`, the `closingReason` will update to include `confirmed:\n true`.\n\n ### Accessibility\n\n This element has `role=\"dialog\"` by default. Depending on the context, it may\n be more appropriate to override this attribute with `role=\"alertdialog\"`.\n\n If `modal` is set, the element will prevent the focus from exiting the\n element. It will also ensure that focus remains in the dialog.\n\n @hero hero.svg\n @demo demo/index.html\n @polymerBehavior PaperDialogBehavior\n */\nexport const PaperDialogBehaviorImpl = {\n\n hostAttributes: {'role': 'dialog', 'tabindex': '-1'},\n\n properties: {\n\n /**\n * If `modal` is true, this implies `no-cancel-on-outside-click`,\n * `no-cancel-on-esc-key` and `with-backdrop`.\n */\n modal: {type: Boolean, value: false},\n\n __readied: {type: Boolean, value: false}\n\n },\n\n observers: ['_modalChanged(modal, __readied)'],\n\n listeners: {'tap': '_onDialogClick'},\n\n /**\n * @return {void}\n */\n ready: function() {\n // Only now these properties can be read.\n this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;\n this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;\n this.__prevWithBackdrop = this.withBackdrop;\n this.__readied = true;\n },\n\n _modalChanged: function(modal, readied) {\n // modal implies noCancelOnOutsideClick, noCancelOnEscKey and withBackdrop.\n // We need to wait for the element to be ready before we can read the\n // properties values.\n if (!readied) {\n return;\n }\n\n if (modal) {\n this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;\n this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;\n this.__prevWithBackdrop = this.withBackdrop;\n this.noCancelOnOutsideClick = true;\n this.noCancelOnEscKey = true;\n this.withBackdrop = true;\n } else {\n // If the value was changed to false, let it false.\n this.noCancelOnOutsideClick =\n this.noCancelOnOutsideClick && this.__prevNoCancelOnOutsideClick;\n this.noCancelOnEscKey =\n this.noCancelOnEscKey && this.__prevNoCancelOnEscKey;\n this.withBackdrop = this.withBackdrop && this.__prevWithBackdrop;\n }\n },\n\n _updateClosingReasonConfirmed: function(confirmed) {\n this.closingReason = this.closingReason || {};\n this.closingReason.confirmed = confirmed;\n },\n\n /**\n * Will dismiss the dialog if user clicked on an element with dialog-dismiss\n * or dialog-confirm attribute.\n */\n _onDialogClick: function(event) {\n // Search for the element with dialog-confirm or dialog-dismiss,\n // from the root target until this (excluded).\n var path = dom(event).path;\n for (var i = 0, l = path.indexOf(this); i < l; i++) {\n var target = path[i];\n if (target.hasAttribute &&\n (target.hasAttribute('dialog-dismiss') ||\n target.hasAttribute('dialog-confirm'))) {\n this._updateClosingReasonConfirmed(\n target.hasAttribute('dialog-confirm'));\n this.close();\n event.stopPropagation();\n break;\n }\n }\n }\n\n};\n\n/** @polymerBehavior */\nexport const PaperDialogBehavior =\n [IronOverlayBehavior, PaperDialogBehaviorImpl];\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/iron-flex-layout/iron-flex-layout.js';\nimport '@polymer/paper-styles/default-theme.js';\n\nimport {PaperDialogBehaviorImpl} from '@polymer/paper-dialog-behavior/paper-dialog-behavior.js';\nimport {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js';\nimport {html} from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\nMaterial design:\n[Dialogs](https://www.google.com/design/spec/components/dialogs.html)\n\n`paper-dialog-scrollable` implements a scrolling area used in a Material Design\ndialog. It shows a divider at the top and/or bottom indicating more content,\ndepending on scroll position. Use this together with elements implementing\n`Polymer.PaperDialogBehavior`.\n\n \n

    Header

    \n \n Lorem ipsum...\n \n
    \n OK\n
    \n
    \n\nIt shows a top divider after scrolling if it is not the first child in its\nparent container, indicating there is more content above. It shows a bottom\ndivider if it is scrollable and it is not the last child in its parent\ncontainer, indicating there is more content below. The bottom divider is hidden\nif it is scrolled to the bottom.\n\nIf `paper-dialog-scrollable` is not a direct child of the element implementing\n`Polymer.PaperDialogBehavior`, remember to set the `dialogElement`:\n\n \n

    Header

    \n
    \n

    Sub-header

    \n \n Lorem ipsum...\n \n
    \n
    \n OK\n
    \n
    \n\n \n\n### Styling\nThe following custom properties and mixins are available for styling:\n\nCustom property | Description | Default\n----------------|-------------|----------\n`--paper-dialog-scrollable` | Mixin for the scrollable content | {}\n\n@group Paper Elements\n@element paper-dialog-scrollable\n@demo demo/index.html\n@hero hero.svg\n*/\nPolymer({\n _template: html`\n \n\n
    \n \n
    \n`,\n\n is: 'paper-dialog-scrollable',\n\n properties: {\n\n /**\n * The dialog element that implements `Polymer.PaperDialogBehavior`\n * containing this element.\n * @type {?Node}\n */\n dialogElement: {type: Object}\n\n },\n\n /**\n * Returns the scrolling element.\n */\n get scrollTarget() {\n return this.$.scrollable;\n },\n\n ready: function() {\n this._ensureTarget();\n this.classList.add('no-padding');\n },\n\n attached: function() {\n this._ensureTarget();\n requestAnimationFrame(this.updateScrollState.bind(this));\n },\n\n updateScrollState: function() {\n this.toggleClass('is-scrolled', this.scrollTarget.scrollTop > 0);\n this.toggleClass(\n 'can-scroll',\n this.scrollTarget.offsetHeight < this.scrollTarget.scrollHeight);\n this.toggleClass(\n 'scrolled-to-bottom',\n this.scrollTarget.scrollTop + this.scrollTarget.offsetHeight >=\n this.scrollTarget.scrollHeight);\n },\n\n _ensureTarget: function() {\n // Read parentElement instead of parentNode in order to skip shadowRoots.\n this.dialogElement = this.dialogElement || this.parentElement;\n // Check if dialog implements paper-dialog-behavior. If not, fit\n // scrollTarget to host.\n if (this.dialogElement && this.dialogElement.behaviors &&\n this.dialogElement.behaviors.indexOf(PaperDialogBehaviorImpl) >= 0) {\n this.dialogElement.sizingTarget = this.scrollTarget;\n this.scrollTarget.classList.remove('fit');\n } else if (this.dialogElement) {\n this.scrollTarget.classList.add('fit');\n }\n }\n});\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/*\n### Styling\n\nThe following custom properties and mixins are available for styling.\n\nCustom property | Description | Default\n----------------|-------------|----------\n`--paper-dialog-background-color` | Dialog background color | `--primary-background-color`\n`--paper-dialog-color` | Dialog foreground color | `--primary-text-color`\n`--paper-dialog` | Mixin applied to the dialog | `{}`\n`--paper-dialog-title` | Mixin applied to the title (`

    `) element | `{}`\n`--paper-dialog-button-color` | Button area foreground color | `--default-primary-color`\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/iron-flex-layout/iron-flex-layout.js';\nimport '@polymer/paper-styles/default-theme.js';\nimport '@polymer/paper-styles/typography.js';\nimport '@polymer/paper-styles/shadow.js';\nconst $_documentContainer = document.createElement('template');\n$_documentContainer.setAttribute('style', 'display: none;');\n\n$_documentContainer.innerHTML = `\n \n`;\n\ndocument.head.appendChild($_documentContainer.content);\n","/**\n@license\nCopyright (c) 2015 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\nimport '@polymer/polymer/polymer-legacy.js';\nimport '@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js';\n\nimport {NeonAnimationRunnerBehavior} from '@polymer/neon-animation/neon-animation-runner-behavior.js';\nimport {PaperDialogBehavior} from '@polymer/paper-dialog-behavior/paper-dialog-behavior.js';\nimport {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn.js';\nimport {html} from '@polymer/polymer/lib/utils/html-tag.js';\n\n/**\nMaterial design:\n[Dialogs](https://www.google.com/design/spec/components/dialogs.html)\n\n`` is a dialog with Material Design styling and optional\nanimations when it is opened or closed. It provides styles for a header, content\narea, and an action area for buttons. You can use the\n`` element (in its own repository) if you need a\nscrolling content area. To autofocus a specific child element after opening the\ndialog, give it the `autofocus` attribute. See `Polymer.PaperDialogBehavior` and\n`Polymer.IronOverlayBehavior` for specifics.\n\nFor example, the following code implements a dialog with a header, scrolling\ncontent area and buttons. Focus will be given to the `dialog-confirm` button\nwhen the dialog is opened.\n\n \n

    Header

    \n \n Lorem ipsum...\n \n
    \n Cancel\n Accept\n
    \n
    \n\n### Styling\n\nSee the docs for `Polymer.PaperDialogBehavior` for the custom properties\navailable for styling this element.\n\n### Animations\n\nSet the `entry-animation` and/or `exit-animation` attributes to add an animation\nwhen the dialog is opened or closed. See the documentation in\n[PolymerElements/neon-animation](https://github.com/PolymerElements/neon-animation)\nfor more info.\n\nFor example:\n\n \n\n \n

    Header

    \n
    Dialog body
    \n
    \n\n### Accessibility\n\nSee the docs for `Polymer.PaperDialogBehavior` for accessibility features\nimplemented by this element.\n\n@group Paper Elements\n@element paper-dialog\n@hero hero.svg\n@demo demo/index.html\n*/\nPolymer({\n _template: html`\n \n \n`,\n\n is: 'paper-dialog',\n behaviors: [PaperDialogBehavior, NeonAnimationRunnerBehavior],\n listeners: {'neon-animation-finish': '_onNeonAnimationFinish'},\n\n _renderOpened: function() {\n this.cancelAnimation();\n this.playAnimation('entry');\n },\n\n _renderClosed: function() {\n this.cancelAnimation();\n this.playAnimation('exit');\n },\n\n _onNeonAnimationFinish: function() {\n if (this.opened) {\n this._finishRenderOpened();\n } else {\n this._finishRenderClosed();\n }\n }\n});\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n/*\n Fixes issue with not using shadow dom properly in iron-overlay-behavior/icon-focusables-helper.js\n*/\nimport { dom } from \"@polymer/polymer/lib/legacy/polymer.dom.js\";\n\nimport { IronFocusablesHelper } from \"@polymer/iron-overlay-behavior/iron-focusables-helper.js\";\n\nexport const HaIronFocusablesHelper = {\n /**\n * Returns a sorted array of tabbable nodes, including the root node.\n * It searches the tabbable nodes in the light and shadow dom of the chidren,\n * sorting the result by tabindex.\n * @param {!Node} node\n * @return {!Array}\n */\n getTabbableNodes: function(node) {\n var result = [];\n // If there is at least one element with tabindex > 0, we need to sort\n // the final array by tabindex.\n var needsSortByTabIndex = this._collectTabbableNodes(node, result);\n if (needsSortByTabIndex) {\n return IronFocusablesHelper._sortByTabIndex(result);\n }\n return result;\n },\n\n /**\n * Searches for nodes that are tabbable and adds them to the `result` array.\n * Returns if the `result` array needs to be sorted by tabindex.\n * @param {!Node} node The starting point for the search; added to `result`\n * if tabbable.\n * @param {!Array} result\n * @return {boolean}\n * @private\n */\n _collectTabbableNodes: function(node, result) {\n // If not an element or not visible, no need to explore children.\n if (\n node.nodeType !== Node.ELEMENT_NODE ||\n !IronFocusablesHelper._isVisible(node)\n ) {\n return false;\n }\n var element = /** @type {!HTMLElement} */ (node);\n var tabIndex = IronFocusablesHelper._normalizedTabIndex(element);\n var needsSort = tabIndex > 0;\n if (tabIndex >= 0) {\n result.push(element);\n }\n\n // In ShadowDOM v1, tab order is affected by the order of distrubution.\n // E.g. getTabbableNodes(#root) in ShadowDOM v1 should return [#A, #B];\n // in ShadowDOM v0 tab order is not affected by the distrubution order,\n // in fact getTabbableNodes(#root) returns [#B, #A].\n //
    \n // \n // \n // \n // \n // \n // \n //
    \n // TODO(valdrin) support ShadowDOM v1 when upgrading to Polymer v2.0.\n var children;\n if (element.localName === \"content\" || element.localName === \"slot\") {\n children = dom(element).getDistributedNodes();\n } else {\n // /////////////////////////\n // Use shadow root if possible, will check for distributed nodes.\n // THIS IS THE CHANGED LINE\n children = dom(element.shadowRoot || element.root || element).children;\n // /////////////////////////\n }\n for (var i = 0; i < children.length; i++) {\n // Ensure method is always invoked to collect tabbable children.\n needsSort = this._collectTabbableNodes(children[i], result) || needsSort;\n }\n return needsSort;\n },\n};\n","import \"@polymer/paper-dialog/paper-dialog\";\nimport { mixinBehaviors } from \"@polymer/polymer/lib/legacy/class\";\nimport { HaIronFocusablesHelper } from \"./ha-iron-focusables-helper.js\";\n// tslint:disable-next-line\nimport { PaperDialogElement } from \"@polymer/paper-dialog/paper-dialog\";\n\nconst paperDialogClass = customElements.get(\"paper-dialog\");\n\n// behavior that will override existing iron-overlay-behavior and call the fixed implementation\nconst haTabFixBehaviorImpl = {\n get _focusableNodes() {\n return HaIronFocusablesHelper.getTabbableNodes(this);\n },\n};\n\n// paper-dialog that uses the haTabFixBehaviorImpl behvaior\n// export class HaPaperDialog extends paperDialogClass {}\n// @ts-ignore\nexport class HaPaperDialog\n extends mixinBehaviors([haTabFixBehaviorImpl], paperDialogClass)\n implements PaperDialogElement {}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-paper-dialog\": HaPaperDialog;\n }\n}\ncustomElements.define(\"ha-paper-dialog\", HaPaperDialog);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/hassio/api/panel/chunk.c1c599e0ec49ba4de253.js b/hassio/api/panel/chunk.c1c599e0ec49ba4de253.js new file mode 100644 index 000000000..018cc459e --- /dev/null +++ b/hassio/api/panel/chunk.c1c599e0ec49ba4de253.js @@ -0,0 +1,2 @@ +(self.webpackJsonp=self.webpackJsonp||[]).push([[10],{10:function(e,t,r){"use strict";r.d(t,"a",function(){return s}),r.d(t,"b",function(){return c}),r.d(t,"c",function(){return l});var n=r(5);function i(){var e=a(["\n /* prevent clipping of positioned elements */\n paper-dialog-scrollable {\n --paper-dialog-scrollable: {\n -webkit-overflow-scrolling: auto;\n }\n }\n\n /* force smooth scrolling for iOS 10 */\n paper-dialog-scrollable.can-scroll {\n --paper-dialog-scrollable: {\n -webkit-overflow-scrolling: touch;\n }\n }\n\n .paper-dialog-buttons {\n align-items: flex-end;\n padding: 8px;\n }\n\n .paper-dialog-buttons .warning {\n --mdc-theme-primary: var(--google-red-500);\n }\n\n @media all and (max-width: 450px), all and (max-height: 500px) {\n paper-dialog,\n ha-paper-dialog {\n margin: 0;\n width: 100% !important;\n max-height: calc(100% - 64px);\n\n position: fixed !important;\n bottom: 0px;\n left: 0px;\n right: 0px;\n overflow: scroll;\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n }\n }\n"]);return i=function(){return e},e}function o(){var e=a(["\n :host {\n @apply --paper-font-body1;\n }\n\n app-header-layout,\n ha-app-layout {\n background-color: var(--primary-background-color);\n }\n\n app-header,\n app-toolbar {\n background-color: var(--app-header-background-color);\n font-weight: 400;\n color: var(--app-header-text-color, white);\n }\n\n app-toolbar ha-menu-button + [main-title],\n app-toolbar ha-paper-icon-button-arrow-prev + [main-title],\n app-toolbar paper-icon-button + [main-title] {\n margin-left: 24px;\n }\n\n h1 {\n @apply --paper-font-title;\n }\n\n button.link {\n background: none;\n color: inherit;\n border: none;\n padding: 0;\n font: inherit;\n text-align: left;\n text-decoration: underline;\n cursor: pointer;\n }\n\n .card-actions a {\n text-decoration: none;\n }\n\n .card-actions .warning {\n --mdc-theme-primary: var(--google-red-500);\n }\n"]);return o=function(){return e},e}function a(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var s={"paper-spinner-color":"var(--primary-color)","error-state-color":"var(--error-color)","state-icon-unavailable-color":"var(--disabled-text-color)","sidebar-text-color":"var(--primary-text-color)","sidebar-background-color":"var(--paper-listbox-background-color);","sidebar-selected-text-color":"var(--primary-color)","sidebar-selected-icon-color":"var(--primary-color)","switch-checked-color":"var(--primary-color)","switch-checked-button-color":"var(--switch-checked-color, var(--paper-grey-50))","switch-checked-track-color":"var(--switch-checked-color, #000000)","switch-unchecked-button-color":"var(--switch-unchecked-color, var(--paper-grey-50))","switch-unchecked-track-color":"var(--switch-unchecked-color, #000000)","slider-color":"var(--primary-color)","slider-secondary-color":"var(--light-primary-color)","slider-bar-color":"var(--disabled-text-color)","label-badge-grey":"var(--paper-grey-500)","paper-card-background-color":"var(--card-background-color)","paper-listbox-background-color":"var(--card-background-color)","paper-item-icon-color":"var(--state-icon-color)","paper-item-icon-active-color":"var(--state-icon-active-color)","table-row-background-color":"var(--primary-background-color)","table-row-alternative-background-color":"var(--secondary-background-color)","paper-slider-knob-color":"var(--slider-color)","paper-slider-knob-start-color":"var(--slider-color)","paper-slider-pin-color":"var(--slider-color)","paper-slider-active-color":"var(--slider-color)","paper-slider-secondary-color":"var(--slider-secondary-color)","paper-slider-container-color":"var(--slider-bar-color)","data-table-background-color":"var(--card-background-color)","mdc-theme-primary":"var(--primary-color)","mdc-theme-secondary":"var(--accent-color)","mdc-theme-background":"var(--primary-background-color)","mdc-theme-surface":"var(--paper-card-background-color, var(--card-background-color))","mdc-theme-on-primary":"var(--text-primary-color)","mdc-theme-on-secondary":"var(--text-primary-color)","mdc-theme-on-surface":"var(--primary-text-color)","app-header-text-color":"var(--text-primary-color)","app-header-background-color":"var(--primary-color)"},c=Object(n.c)(o()),l=Object(n.c)(i())},101:function(e,t){},104:function(e,t,r){"use strict";var n=r(5),i=(r(91),r(105),r(47));function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(){var e=c(['\n :host {\n display: block;\n height: 100%;\n background-color: var(--primary-background-color);\n }\n\n .toolbar {\n display: flex;\n align-items: center;\n font-size: 20px;\n height: 65px;\n padding: 0 16px;\n pointer-events: none;\n background-color: var(--app-header-background-color);\n font-weight: 400;\n color: var(--app-header-text-color, white);\n border-bottom: var(--app-header-border-bottom, none);\n box-sizing: border-box;\n }\n\n ha-menu-button,\n ha-paper-icon-button-arrow-prev,\n ::slotted([slot="toolbar-icon"]) {\n pointer-events: auto;\n }\n\n ha-paper-icon-button-arrow-prev.hidden {\n visibility: hidden;\n }\n\n [main-title] {\n margin: 0 0 0 24px;\n line-height: 20px;\n flex-grow: 1;\n }\n\n .content {\n position: relative;\n width: 100%;\n height: calc(100% - 65px);\n overflow-y: auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n }\n ']);return a=function(){return e},e}function s(){var e=c(['\n
    \n \n \n
    \n
    \n ']);return s=function(){return e},e}function c(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function l(e){return(l=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function d(e,t){return(d=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function f(e){var t,r=v(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function p(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function h(e){return e.decorators&&e.decorators.length}function m(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function y(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function v(e){var t=function(e,t){if("object"!==o(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===o(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!h(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n "]);return s=function(){return e},e}function c(){var e=u(["\n \n "]);return c=function(){return e},e}function l(){var e=u(["\n \n ",'\n \n
    \n \n
    \n ']);return l=function(){return e},e}function u(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function d(e){return(d=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function f(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function p(e,t){return(p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function h(e){var t,r=g(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function m(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function y(e){return e.decorators&&e.decorators.length}function v(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function b(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function g(e){var t=function(e,t){if("object"!==o(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===o(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!y(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n .container {\n position: relative;\n display: inline-block;\n }\n\n mwc-button {\n transition: all 1s;\n }\n\n .success mwc-button {\n --mdc-theme-primary: white;\n background-color: var(--google-green-500);\n transition: none;\n }\n\n .error mwc-button {\n --mdc-theme-primary: white;\n background-color: var(--google-red-500);\n transition: none;\n }\n\n .progress {\n @apply --layout;\n @apply --layout-center-center;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n \n
    \n \n \n \n \n
    \n ']);return a=function(){return e},e}function s(e,t){for(var r=0;r\n\n \n\n \n\n \n"),document.head.appendChild(a.content);var s=function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e._themes||(e._themes={});var o=t.default_theme;("default"===r||r&&t.themes[r])&&(o=r);var a=Object.assign({},e._themes);if("default"!==o){var s=Object.assign({},i.a,{},t.themes[o]);Object.keys(s).forEach(function(t){var r="--".concat(t);if(e._themes[r]="",a[r]=s[t],!t.startsWith("rgb")){var n="rgb-".concat(t);if(void 0===s[n]){var i="--".concat(n);e._themes[i]="";var o,c,l,u=(o=s[t],c=o.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(e,t,r,n){return t+t+r+r+n+n}),(l=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(c))?"".concat(parseInt(l[1],16),", ").concat(parseInt(l[2],16),", ").concat(parseInt(l[3],16)):null);null!==u&&(a[i]=u)}}})}if(e.updateStyles?e.updateStyles(a):window.ShadyCSS&&window.ShadyCSS.styleSubtree(e,a),n){var c=document.querySelector("meta[name=theme-color]");if(c){c.hasAttribute("default-content")||c.setAttribute("default-content",c.getAttribute("content"));var l=a["--primary-color"]||c.getAttribute("default-content");c.setAttribute("content",l)}}},c=r(11);r(18),r(104);function l(e){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u(){var e=f(["\n .content {\n height: calc(100% - 64px);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n }\n "]);return u=function(){return e},e}function d(){var e=f(['\n \n
    \n

    ',"

    \n \n go back\n \n
    \n
    \n "]);return d=function(){return e},e}function f(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function p(e){return(p=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m(e,t){return(m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function y(e){var t,r=k(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function v(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function b(e){return e.decorators&&e.decorators.length}function g(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function w(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function k(e){var t=function(e,t){if("object"!==l(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==l(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===l(t)?t:String(t)}(function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!b(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n \n
    \n You don\'t have any add-ons installed yet. Head over to\n \n

    Add-ons

    \n
    \n ',"\n
    \n
    \n "]);return te=function(){return e},e}function re(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function ne(e,t){return he(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var r=[],n=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(c){i=!0,o=c}finally{try{n||null==s.return||s.return()}finally{if(i)throw o}}return r}(e,t)||pe()}function ie(e){return(ie=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function oe(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function ae(e,t){return(ae=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function se(e){var t,r=fe(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function ce(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function le(e){return e.decorators&&e.decorators.length}function ue(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function de(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function fe(e){var t=function(e,t){if("object"!==Q(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Q(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Q(t)?t:String(t)}function pe(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function he(e){if(Array.isArray(e))return e}(function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!le(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a0||"0"===r&&Number(i)>=105;return Object(n.e)(te(),this.addons?this.addons.sort(function(e,t){return e.name>t.name?1:-1}).map(function(t){return Object(n.e)(Z(),t,e._addonTapped,e.hass,t.name,t.description,t.installed!==t.version,t.installed!==t.version?"hassio:arrow-up-bold-circle":"hassio:puzzle","started"!==t.state?"Add-on is stopped":t.installed!==t.version?"New version available":"Add-on is running",t.installed&&t.installed!==t.version?"started"===t.state?"update":"update stopped":t.installed&&"started"===t.state?"running":"stopped",o&&t.icon?"/api/hassio/addons/".concat(t.slug,"/icon"):void 0)}):Object(n.e)(ee(),this._openStore))}},{kind:"get",static:!0,key:"styles",value:function(){return[i.b,K.a,Object(n.c)(X())]}},{kind:"method",key:"_addonTapped",value:function(e){Object(E.a)(this,"/hassio/addon/".concat(e.currentTarget.addon.slug))}},{kind:"method",key:"_openStore",value:function(){Object(E.a)(this,"/hassio/store")}}]}},n.a),r(22),r(50);function me(){var e=Oe(["\n .icon {\n --iron-icon-height: 48px;\n --iron-icon-width: 48px;\n float: right;\n margin: 0 0 2px 10px;\n }\n .update-heading {\n font-size: var(--paper-font-subhead_-_font-size);\n font-weight: 500;\n margin-bottom: 0.5em;\n }\n .warning {\n color: var(--secondary-text-color);\n }\n .card-content {\n height: calc(100% - 47px);\n box-sizing: border-box;\n }\n .card-actions {\n text-align: right;\n }\n .errors {\n color: var(--google-red-500);\n padding: 16px;\n }\n a {\n text-decoration: none;\n }\n "]);return me=function(){return e},e}function ye(e){return(ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ve(){var e=Oe(['\n
    \n \n
    \n ']);return ve=function(){return e},e}function be(){var e=Oe(['\n \n
    \n ','\n
    '," ",'
    \n
    \n You are currently running version ','\n
    \n
    \n
    \n "]);return we=function(){return e},e}function ke(){var e=Oe(['\n
    \n ',"\n

    \n ",'\n

    \n
    \n ',"\n ","\n ","\n
    \n
    \n "]);return ke=function(){return e},e}function Ee(){var e=Oe([""]);return Ee=function(){return e},e}function Oe(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function je(e){return(je=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function Pe(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function xe(e,t){return(xe=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function _e(e){var t,r=Ae(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function Se(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function Ce(e){return e.decorators&&e.decorators.length}function De(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function Te(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Ae(e){var t=function(e,t){if("object"!==ye(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==ye(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ye(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!Ce(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a1?"Updates Available 🎉":"Update Available 🎉",this._renderUpdateCard("Home Assistant Core",this.hassInfo.version,this.hassInfo.last_version,"hassio/homeassistant/update","https://".concat(this.hassInfo.last_version.includes("b")?"rc":"www",".home-assistant.io/latest-release-notes/"),"hassio:home-assistant"),this._renderUpdateCard("Supervisor",this.supervisorInfo.version,this.supervisorInfo.last_version,"hassio/supervisor/update","https://github.com//home-assistant/hassio/releases/tag/".concat(this.supervisorInfo.last_version)),this.hassOsInfo?this._renderUpdateCard("Operating System",this.hassOsInfo.version,this.hassOsInfo.version_latest,"hassio/hassos/update","https://github.com//home-assistant/hassos/releases/tag/".concat(this.hassOsInfo.version_latest)):""):Object(n.e)(Ee())}},{kind:"method",key:"_renderUpdateCard",value:function(e,t,r,i,o,a){return r===t?Object(n.e)(ge()):Object(n.e)(be(),a?Object(n.e)(ve(),a):"",e,r,t,o,this.hass,i,this._apiCalled)}},{kind:"method",key:"_apiCalled",value:function(e){if(e.detail.success)this._error="";else{var t=e.detail.response;"object"===ye(t.body)?this._error=t.body.message||"Unknown error":this._error=t.body}}},{kind:"get",static:!0,key:"styles",value:function(){return[i.b,K.a,Object(n.c)(me())]}}]}},n.a);function ze(e){return(ze="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Re(){var e=Fe(["\n .content {\n margin: 0 auto;\n }\n "]);return Re=function(){return e},e}function Ie(){var e=Fe(['\n
    \n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n
    \n \n
    \n \n ']);return $e=function(){return e},e}function Ke(){var e=nt(['\n \n
    \n You don\'t have any snapshots yet.\n
    \n
    \n ']);return Ke=function(){return e},e}function Qe(){var e=nt(['\n

    ',"

    \n "]);return Qe=function(){return e},e}function Xe(){var e=nt(['\n \n

    \n Create snapshot\n

    \n

    \n Snapshots allow you to easily backup and restore all data of your Home\n Assistant instance.\n

    \n
    \n \n
    \n \n Type:\n \n \n Full snapshot\n \n \n Partial snapshot\n \n \n ','\n Security:\n \n
    \n \n Create\n \n
    \n \n
    \n\n

    Available snapshots

    \n
    \n ',"\n
    \n
    \n "]);return rt=function(){return e},e}function nt(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function it(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function ot(e,t){return(ot=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function at(e){var t,r=dt(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function st(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function ct(e){return e.decorators&&e.decorators.length}function lt(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function ut(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function dt(e){var t=function(e,t){if("object"!==Je(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Je(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Je(t)?t:String(t)}function ft(e,t,r){return(ft="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=pt(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function pt(e){return(pt=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!ct(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n \n

    \n ','\n

    \n

    \n Maintained by ','
    \n ','\n

    \n
    \n ',"\n
    \n
    \n "]);return gt=function(){return e},e}function wt(){var e=kt(['\n
    \n

    \n No results found in "','"\n

    \n
    \n ']);return wt=function(){return e},e}function kt(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Et(e){return(Et=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function Ot(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function jt(e,t){return(jt=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function Pt(e){var t,r=Dt(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function xt(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function _t(e){return e.decorators&&e.decorators.length}function St(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function Ct(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Dt(e){var t=function(e,t){if("object"!==mt(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==mt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===mt(t)?t:String(t)}function Tt(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function At(e){if(Array.isArray(e))return e}var zt=function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!_t(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a0||"0"===t&&Number(r)>=105}},{kind:"get",static:!0,key:"styles",value:function(){return[K.a,Object(n.c)(yt())]}}]}},n.a);customElements.define("hassio-addon-repository",zt);var Rt=r(135);function It(e){return(It="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ft(){var e=Ht(["\n .add {\n padding: 12px 16px;\n }\n iron-icon {\n color: var(--secondary-text-color);\n margin-right: 16px;\n display: inline-block;\n }\n paper-input {\n width: calc(100% - 49px);\n display: inline-block;\n margin-top: -4px;\n }\n "]);return Ft=function(){return e},e}function Lt(){var e=Ht(['\n \n
    \n \n
    \n
    \n \n Remove\n \n
    \n
    \n ']);return Lt=function(){return e},e}function Nt(){var e=Ht(['\n
    \n

    \n Repositories\n

    \n

    \n Configure which add-on repositories to fetch data from:\n

    \n
    \n ','\n\n \n
    \n \n \n
    \n
    \n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n "]);return Zt=function(){return e},e}function er(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function tr(e){return(tr=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function rr(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function nr(e,t){return(nr=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function ir(e){var t,r=lr(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function or(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function ar(e){return e.decorators&&e.decorators.length}function sr(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function cr(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function lr(e){var t=function(e,t){if("object"!==Qt(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Qt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Qt(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!ar(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n ']);return fr=function(){return e},e}function pr(){var e=hr(['\n
    \n \n \n ',"\n \n
    \n "]);return pr=function(){return e},e}function hr(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function mr(e){return(mr=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function yr(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function vr(e,t){return(vr=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function br(e){var t,r=Or(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function gr(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function wr(e){return e.decorators&&e.decorators.length}function kr(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function Er(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Or(e){var t=function(e,t){if("object"!==ur(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==ur(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ur(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!wr(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n "]);return xr=function(){return e},e}function _r(){var e=Cr(["\n \n\n \n\n ","\n "]);return _r=function(){return e},e}function Sr(){var e=Cr(["\n \n "]);return Sr=function(){return e},e}function Cr(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Dr(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Tr(e,t){return(Tr=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function Ar(e){var t,r=Lr(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function zr(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function Rr(e){return e.decorators&&e.decorators.length}function Ir(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function Fr(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Lr(e){var t=function(e,t){if("object"!==jr(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==jr(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===jr(t)?t:String(t)}function Nr(e,t,r){return(Nr="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Hr(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function Hr(e){return(Hr=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Ur=function(e,t){return"local"===e.slug?-1:"local"===t.slug?1:"core"===e.slug?-1:"core"===t.slug?1:e.name.toUpperCase()=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;aUpdate
    \n ']);return Wr=function(){return e},e}function Jr(){var e=en(['\n Import from USB\n ']);return Jr=function(){return e},e}function Yr(){var e=en(['\n Shutdown\n ']);return Yr=function(){return e},e}function $r(){var e=en(['\n Reboot\n ']);return $r=function(){return e},e}function Kr(){var e=en(['\n
    Error: ',"
    \n "]);return Kr=function(){return e},e}function Qr(){var e=en(["\n \n Change hostname\n \n ']);return Qr=function(){return e},e}function Xr(){var e=en(["\n \n Deployment\n ","\n \n "]);return Xr=function(){return e},e}function Zr(){var e=en(['\n \n
    \n

    Host system

    \n \n \n \n \n \n \n \n \n \n \n ","\n \n
    Hostname',"
    System","
    \n \n Hardware\n \n ',"\n ",'\n
    \n
    \n ',"\n ","\n ","\n ","\n
    \n
    \n "]);return Zr=function(){return e},e}function en(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function tn(e){return(tn=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function rn(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function nn(e,t){return(nn=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function on(e){var t,r=un(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function an(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function sn(e){return e.decorators&&e.decorators.length}function cn(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function ln(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function un(e){var t=function(e,t){if("object"!==Vr(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Vr(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Vr(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!sn(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a1&&void 0!==arguments[1]?arguments[1]:"",n="";return Object.keys(e).forEach(function(i){"object"!==Vr(e[i])?n+="".concat(r,"- ").concat(i,": ").concat(e[i],"\n"):(n+="".concat(r,"- ").concat(i,":\n"),Array.isArray(e[i])?e[i].length&&(n+="".concat(r," - ")+e[i].join("\n".concat(r," - "))+"\n"):n+=t._objectToMarkdown(e[i]," ".concat(r)))}),n}},{kind:"method",key:"_changeHostnameClicked",value:function(){var e=this.hostInfo.hostname,t=prompt("Please enter a new hostname:",e);t&&t!==e&&this.hass.callApi("POST","hassio/host/options",{hostname:t})}}]}},n.a);function dn(e){return(dn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function fn(){var e=gn(["\n paper-card {\n height: 100%;\n width: 100%;\n }\n .card-content {\n color: var(--primary-text-color);\n box-sizing: border-box;\n height: calc(100% - 47px);\n }\n .info {\n width: 100%;\n }\n .info td:nth-child(2) {\n text-align: right;\n }\n .errors {\n color: var(--google-red-500);\n margin-top: 16px;\n }\n "]);return fn=function(){return e},e}function pn(){var e=gn(["\n Join beta channel\n ']);return pn=function(){return e},e}function hn(){var e=gn(["\n Update\n ']);return mn=function(){return e},e}function yn(){var e=gn(['\n
    Error: ',"
    \n "]);return yn=function(){return e},e}function vn(){var e=gn(["\n \n Channel\n ","\n \n "]);return vn=function(){return e},e}function bn(){var e=gn(['\n \n
    \n

    Supervisor

    \n \n \n \n \n \n \n \n \n \n \n ","\n \n
    Version',"
    Latest version","
    \n ",'\n
    \n
    \n Reload\n ',"\n ","\n ","\n
    \n
    \n "]);return bn=function(){return e},e}function gn(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function wn(e){return(wn=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function kn(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function En(e,t){return(En=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function On(e){var t,r=Sn(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function jn(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function Pn(e){return e.decorators&&e.decorators.length}function xn(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function _n(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Sn(e){var t=function(e,t){if("object"!==dn(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==dn(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===dn(t)?t:String(t)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!Pn(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a',"
    \n "]);return An=function(){return e},e}function zn(){var e=Rn(["\n \n ",'\n
    \n
    \n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n

    Information

    \n
    \n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n \n \n \n \n Dashboard\n Snapshots\n Add-on store\n System\n \n \n =0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a200?n.scrollTop=0:t._currentAnimationId===i&&(n.scrollTop=(r=c,-s*(r/=200)*(r-2)+a),requestAnimationFrame(e.bind(t)))}.call(t)}},{kind:"method",key:"refreshClicked",value:function(){"snapshots"===this._page?this.shadowRoot.querySelector("hassio-snapshots").refreshData():this.shadowRoot.querySelector("hassio-addon-store").refreshData()}},{kind:"get",key:"_page",value:function(){return this.route.path.substr(1)}},{kind:"get",static:!0,key:"styles",value:function(){return[i.b,Object(n.c)(mi())]}}]}},n.a),r(119));function Di(e){return(Di="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ti(e,t){return Bi(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var r=[],n=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(c){i=!0,o=c}finally{try{n||null==s.return||s.return()}finally{if(i)throw o}}return r}(e,t)||Ui()}function Ai(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function zi(e,t){return(zi=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function Ri(e){var t,r=Hi(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function Ii(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function Fi(e){return e.decorators&&e.decorators.length}function Li(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function Ni(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function Hi(e){var t=function(e,t){if("object"!==Di(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Di(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Di(t)?t:String(t)}function Ui(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function Bi(e){if(Array.isArray(e))return e}function Mi(e,t,r){return(Mi="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Gi(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function Gi(e){return(Gi=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}customElements.get("paper-icon-button").prototype._keyBindings={};var Vi;!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!Fi(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a2&&void 0!==arguments[2]&&arguments[2];r?history.replaceState(null,"",t):history.pushState(null,"",t),Object(n.a)(window,"location-changed",{replace:r})}},41:function(e,t,r){"use strict";var n=r(5),i=(r(22),r(8)),o=r(34),a=[60,60,24,7],s=["second","minute","hour","day"];var c=r(17);function l(e){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u(e,t){for(var r=0;r2&&void 0!==arguments[2]?arguments[2]:{},i=((n.compareTime||new Date).getTime()-e.getTime())/1e3,o=i>=0?"past":"future";i=Math.abs(i);for(var c=0;c\n \n
    \n
    \n ']);return _=function(){return e},e}function S(){var e=D(['\n
    \n ']);return S=function(){return e},e}function C(){var e=D(["\n ","\n ",'\n
    \n
    \n ','\n
    \n
    \n ',"\n ","\n ","\n
    \n
    \n "]);return C=function(){return e},e}function D(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function T(e){return(T=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function A(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function z(e,t){return(z=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function R(e){var t,r=H(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function I(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function F(e){return e.decorators&&e.decorators.length}function L(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function N(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function H(e){var t=function(e,t){if("object"!==O(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==O(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===O(t)?t:String(t)}customElements.define("ha-relative-time",E);!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!F(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a\n ']);return a=function(){return e},e}function s(e,t){return!t||"object"!==o(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function l(e,t){for(var r=0;r
    \n ']);return u=function(){return e},e}function d(){var e=f(["\n \n ","\n "]);return d=function(){return e},e}function f(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function p(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function h(e,t){return(h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function m(e){var t,r=w(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function y(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function v(e){return e.decorators&&e.decorators.length}function b(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function g(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function w(e){var t=function(e,t){if("object"!==c(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===c(t)?t:String(t)}function k(e,t,r){return(k="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=E(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}function E(e){return(E=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}!function(e,t,r,n){var i=function(){var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!v(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(s)||s);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var u=0;u=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var a=0;a0},Object(o.a)("_ntf",a,s,e,t))}},{kind:"method",key:"_toggleMenu",value:function(){Object(i.a)(this,"hass-toggle-menu")}},{kind:"get",static:!0,key:"styles",value:function(){return Object(n.c)(l())}}]}},n.a)}}]); +//# sourceMappingURL=chunk.c1c599e0ec49ba4de253.js.map \ No newline at end of file diff --git a/hassio/api/panel/chunk.c1c599e0ec49ba4de253.js.gz b/hassio/api/panel/chunk.c1c599e0ec49ba4de253.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..96736f488cb333b7d3a9fa4e8144ff4cc3fc45b0 GIT binary patch literal 31047 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

    &b536Hov67$bP94p4d8wuu>xD%u zH!@X}l{vBgcaixH7}Jn(nduXGFY$f`)sivilgiL>mV9;1IN+mN)!z^|mgwVdD_+ z!E<0eCB8o(-WMk!pW8(vpfOD?&iN;~>6*!*XG-7EpUO`$pz#90lJI|Y>{MVRKR;)C z_Eov)U2}a#!>b`uepiFU4`XjkkqEnbj#PHcKPK3$jTmdxDYhIH*)E`L4s1=l8Aj{M zHf;y9eOlhe{z`}*!d{$T$esj;yUMdR#O)YvjuR4Nt)!oWEzl&@+9G|$uYJgaQghu) zSMw}_ppd-J>_e9KA!w{eo-yFEI!C*JRUKIGk?L+DDzl!K?^zS+%RazR5sS{y@@Pyr zWslWO-L{bBRrhmo67xe~CX~-^O^ZKGm>~#uy@H}F^Ply%p&-3M<4d}WQ!CVYk~WdesVYDMm#jqNDuj%V&_`4Ot0P<&(Cl@h6Q=eSQq zOXr|x*ACJ6h<}!8`8N7c0lHA%4(U*ewqf@*NKgFKx~m3U5Z}8kO(OCMW4R?=+90firc3(VnA`<59XQ z&Ec-Yc@Lu0Z}LR%orAc;W~m}EuSC0i-f_J9>@r#~H(Stuzr`HdQwu|6Afa7W8tE~0 z1+NJSDY?$~=pG}}f+b`!MlL*pf3)>u2X1utVX&v!U(Q)Fz_Uem&YD@|Gil@S(Y}1n zZfg2$jUT{DkL`X92alxn`Z%E5w8#=l?p)Pra(5AZHE6O2JUD|eu5Vm^B=wAse1R@f L+WKWBfdTy=xd+;U literal 0 HcmV?d00001 diff --git a/hassio/api/panel/chunk.c1c599e0ec49ba4de253.js.map b/hassio/api/panel/chunk.c1c599e0ec49ba4de253.js.map new file mode 100644 index 000000000..e06f24f5b --- /dev/null +++ b/hassio/api/panel/chunk.c1c599e0ec49ba4de253.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/resources/styles.ts","webpack:///./src/layouts/hass-subpage.ts","webpack:///./src/components/ha-paper-icon-button-arrow-prev.ts","webpack:///./src/layouts/hass-loading-screen.ts","webpack:///./src/common/dom/fire_event.ts","webpack:///./src/components/buttons/ha-progress-button.js","webpack:///./src/data/hassio/snapshot.ts","webpack:///./src/data/hassio/hardware.ts","webpack:///./hassio/src/dialogs/markdown/show-dialog-hassio-markdown.ts","webpack:///./hassio/src/ansi-to-html.ts","webpack:///./src/dialogs/generic/show-dialog-box.ts","webpack:///./hassio/src/resources/hassio-style.ts","webpack:///./src/resources/ha-style.ts","webpack:///./src/common/dom/apply_themes_on_element.ts","webpack:///./src/layouts/hass-error-screen.ts","webpack:///./src/layouts/hass-router-page.ts","webpack:///./src/data/hassio/host.ts","webpack:///./src/dialogs/make-dialog-manager.ts","webpack:///./src/mixins/provide-hass-lit-mixin.ts","webpack:///./hassio/src/dashboard/hassio-addons.ts","webpack:///./hassio/src/dashboard/hassio-update.ts","webpack:///./hassio/src/dashboard/hassio-dashboard.ts","webpack:///./hassio/src/snapshots/hassio-snapshots.ts","webpack:///./hassio/src/dialogs/snapshot/show-dialog-hassio-snapshot.ts","webpack:///./hassio/src/addon-store/hassio-addon-repository.ts","webpack:///./hassio/src/components/hassio-filter-addons.ts","webpack:///./hassio/src/addon-store/hassio-repositories-editor.ts","webpack:///./src/layouts/loading-screen.ts","webpack:///./hassio/src/components/hassio-search-input.ts","webpack:///./hassio/src/addon-store/hassio-addon-store.ts","webpack:///./hassio/src/system/hassio-host-info.ts","webpack:///./hassio/src/system/hassio-supervisor-info.ts","webpack:///./hassio/src/system/hassio-supervisor-log.ts","webpack:///./hassio/src/system/hassio-system.ts","webpack:///./hassio/src/hassio-tabs-router.ts","webpack:///./hassio/src/hassio-pages-with-tabs.ts","webpack:///./src/common/dom/scroll-to-target.ts","webpack:///./hassio/src/hassio-main.ts","webpack:///./src/data/hassio/addon.ts","webpack:///./src/common/navigate.ts","webpack:///./src/common/datetime/relative_time.ts","webpack:///./src/mixins/localize-mixin.js","webpack:///./src/components/ha-relative-time.js","webpack:///./hassio/src/components/hassio-card-content.ts","webpack:///./src/data/hassio/common.ts","webpack:///./src/components/buttons/ha-call-api-button.js","webpack:///./src/data/hassio/supervisor.ts","webpack:///./src/data/persistent_notification.ts","webpack:///./src/components/ha-menu-button.ts","webpack:///./src/common/entity/compute_domain.ts"],"names":["derivedStyles","paper-spinner-color","error-state-color","state-icon-unavailable-color","sidebar-text-color","sidebar-background-color","sidebar-selected-text-color","sidebar-selected-icon-color","switch-checked-color","switch-checked-button-color","switch-checked-track-color","switch-unchecked-button-color","switch-unchecked-track-color","slider-color","slider-secondary-color","slider-bar-color","label-badge-grey","paper-card-background-color","paper-listbox-background-color","paper-item-icon-color","paper-item-icon-active-color","table-row-background-color","table-row-alternative-background-color","paper-slider-knob-color","paper-slider-knob-start-color","paper-slider-pin-color","paper-slider-active-color","paper-slider-secondary-color","paper-slider-container-color","data-table-background-color","mdc-theme-primary","mdc-theme-secondary","mdc-theme-background","mdc-theme-surface","mdc-theme-on-primary","mdc-theme-on-secondary","mdc-theme-on-surface","app-header-text-color","app-header-background-color","haStyle","css","_templateObject","haStyleDialog","_templateObject2","customElement","property","type","Boolean","html","this","hassio","_backTapped","classMap","hidden","showBackButton","header","history","back","LitElement","paperIconButtonClass","customElements","get","HaPaperIconButtonArrowPrev","_paperIconButtonClass","_getPrototypeOf2","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_getPrototypeOf","call","apply","concat","_assertThisInitialized","_inherits","key","value","_this2","_get","prototype","setTimeout","icon","window","getComputedStyle","direction","define","rootnav","hass","narrow","_templateObject3","_handleBack","_templateObject4","__webpack_require__","d","__webpack_exports__","fireEvent","node","detail","options","event","Event","bubbles","undefined","cancelable","composed","dispatchEvent","HaProgressButton","PolymerElement","Object","progress","disabled","className","classList","$","container","add","remove","addEventListener","ev","buttonTapped","stopPropagation","tempClass","fetchHassioSnapshots","fetchHassioSnapshotInfo","reloadHassioSnapshots","createHassioFullSnapshot","createHassioPartialSnapshot","_common__WEBPACK_IMPORTED_MODULE_0__","regeneratorRuntime","async","_context","prev","next","t0","hassioApiResultExtractor","awrap","callApi","t1","sent","abrupt","snapshots","stop","snapshot","_context2","_context3","data","_context4","_context5","fetchHassioHardwareAudio","fetchHassioHardwareInfo","showHassioMarkdownDialog","_src_common_dom_fire_event__WEBPACK_IMPORTED_MODULE_0__","element","dialogParams","dialogTag","dialogImport","e","then","bind","ANSI_HTML_STYLE","parseTextToColoredPre","text","match","pre","document","createElement","re","i","state","bold","italic","underline","strikethrough","foregroundColor","backgroundColor","addSpan","content","span","appendChild","createTextNode","exec","j","index","substring","split","forEach","colorCode","parseInt","showAlertDialog","showConfirmationDialog","_common_dom_fire_event__WEBPACK_IMPORTED_MODULE_0__","loadGenericDialog","Promise","all","showDialogHelper","extra","resolve","origCancel","cancel","origConfirm","confirm","assign","prompt","out","confirmation","hassioStyle","documentContainer","setAttribute","innerHTML","entries","map","_ref","_ref2","_slicedToArray","join","cssText","head","applyThemesOnElement","themes","localTheme","updateMeta","_themes","themeName","default_theme","styles","theme","keys","prefixedKey","startsWith","rgbKey","prefixedRgbKey","hex","checkHex","result","rgbValue","replace","_m","r","g","b","updateStyles","ShadyCSS","styleSubtree","meta","querySelector","hasAttribute","getAttribute","themeColor","error","HassRouterPage","hass_router_page_decorate","_initialize","_UpdatingElement","_UpdatingElement2","hass_router_page_classCallCheck","hass_router_page_getPrototypeOf","hass_router_page_assertThisInitialized","hass_router_page_inherits","F","kind","decorators","memoizeOne","route","dividerPos","path","indexOf","prefix","substr","changedProps","routerOptions","routes","initialLoad","_initialLoadDone","has","defaultPage","navigate","newPage","subpathStart","extractPage","routeOptions","beforeRender","_currentPage","lastChild","removeChild","loadProm","load","err","console","errorEl","showLoading","created","createLoadingScreen","_currentLoadProm","_createPanel","updatePageEl","_this3","preloadAll","values","hass_router_page_typeof","requestUpdate","oldRoute","updateComplete","_this4","tag","_pageEl","_changedProps","_computeTail","page","panelEl","_cache","cacheAll","cache","UpdatingElement","fetchHassioHostInfo","response","fetchHassioHassOsInfo","LOADED","showDialog","root","dialogEl","provideHass","_this$hass$config$ver2","hassio_addons_slicedToArray","config","version","major","minor","ha105pluss","Number","hassio_addons_templateObject","addons","sort","a","name","addon","_addonTapped","description","installed","slug","hassio_addons_templateObject2","_openStore","currentTarget","hassio_update_decorate","_LitElement","_LitElement2","HassioUpdate","hassio_update_classCallCheck","hassio_update_getPrototypeOf","hassio_update_assertThisInitialized","hassio_update_inherits","updatesAvailable","hassInfo","supervisorInfo","hassOsInfo","filter","last_version","version_latest","hassio_update_templateObject2","_error","hassio_update_templateObject3","_renderUpdateCard","includes","hassio_update_templateObject","curVersion","lastVersion","apiPath","releaseNotesUrl","hassio_update_templateObject4","_templateObject5","_templateObject6","_apiCalled","success","hassio_update_typeof","body","message","static","_templateObject7","hassio_dashboard_templateObject","hassio_dashboard_templateObject2","HassioSnapshots","checked","_updateSnapshots","hassio_snapshots_templateObject","_snapshotName","_handleTextValueChanged","_snapshotType","_handleRadioValueChanged","hassio_snapshots_templateObject2","_folderList","folder","idx","hassio_snapshots_templateObject3","_folderChecked","_addonList","hassio_snapshots_templateObject4","_addonChecked","_snapshotHasPassword","_handleCheckboxValueChanged","hassio_snapshots_templateObject5","_snapshotPassword","hassio_snapshots_templateObject6","_creatingSnapshot","_createSnapshot","_snapshots","hassio_snapshots_templateObject7","_templateObject8","_snapshotClicked","_computeDetails","date","hassio_snapshots_get","hassio_snapshots_getPrototypeOf","input","curIdx","folders","_data","Date","toLocaleDateString","navigator","language","weekday","year","month","day","password","finish","onDelete","_templateObject9","HassioAddonRepositoryEl","Fuse","caseSensitive","minMatchCharLength","threshold","search","filterAndSort","toUpperCase","repo","_getAddons","_computeHA105plus","hassio_addon_repository_templateObject","hassio_addon_repository_templateObject2","maintainer","url","hassio_addon_repository_templateObject3","available","hassio_addon_repository_slicedToArray","hassio_addon_repository_templateObject4","HassioRepositoriesEditor","repos","_sortedRepos","hassio_repositories_editor_templateObject","repeat","hassio_repositories_editor_templateObject2","computeRemoveRepoData","_repoUrl","_urlChanged","computeAddRepoData","hassio_repositories_editor_get","hassio_repositories_editor_getPrototypeOf","repoList","addons_repositories","source","list","push","hassio_repositories_editor_templateObject3","loading_screen_templateObject","loading_screen_templateObject2","hassio_search_input_templateObject","_filterInputChanged","hassio_search_input_templateObject2","_clearSearch","String","_filterChanged","target","hassio_search_input_templateObject3","sortRepos","HassioAddonStore","_repos","_addons","_filter","reloadHassioAddons","_loadData","hassio_addon_store_templateObject","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_loop","repository","hassio_addon_store_templateObject3","_iterator","Symbol","iterator","done","hassio_addon_store_templateObject2","hassio_addon_store_get","hassio_addon_store_getPrototypeOf","apiCalled","addonsInfo","fetchHassioAddonsInfo","repositories","alert","hassio_addon_store_templateObject4","hassio_host_info_templateObject","hostInfo","hostname","operating_system","deployment","hassio_host_info_templateObject2","_showHardware","features","hassio_host_info_templateObject3","_changeHostnameClicked","_errors","hassio_host_info_templateObject4","hassio_host_info_templateObject5","hassio_host_info_templateObject6","hassio_host_info_templateObject7","hassio_host_info_templateObject8","hassio_host_info_templateObject9","hassio_host_info_typeof","_objectToMarkdown","title","t2","obj","indent","isArray","curHostname","hassio_supervisor_info_templateObject","channel","hassio_supervisor_info_templateObject2","hassio_supervisor_info_templateObject3","hassio_supervisor_info_templateObject4","hassio_supervisor_info_templateObject5","hassio_supervisor_info_templateObject6","_joinBeta","hassio_supervisor_info_templateObject7","hassio_supervisor_info_typeof","eventdata","_err$body","setSupervisorOption","HassioSupervisorLog","query","hassio_supervisor_log_get","hassio_supervisor_log_getPrototypeOf","hassio_supervisor_log_templateObject","hassio_supervisor_log_templateObject2","_refresh","hassio_supervisor_log_templateObject3","fetchSupervisorLogs","_logContent","hassio_system_templateObject","hassio_system_templateObject2","dashboard","store","system","el","setProperties","HAS_REFRESH_BUTTON","_page","hassio_pages_with_tabs_templateObject","hassio_pages_with_tabs_templateObject2","refreshClicked","handlePageSelected","scroller","animationId","startTime","currentScrollTop","deltaScrollTop","item","shadowRoot","scrollTarget","Math","random","now","scrollTop","_currentAnimationId","updateFrame","t","elapsedTime","requestAnimationFrame","refreshData","hassio_pages_with_tabs_templateObject3","_keyBindings","superClass","HassioMain","_fetchData","ingress","hassio_main_get","hassio_main_getPrototypeOf","parentElement","selectedTheme","parent","customPanel","dockedSidebar","_e$detail","nodeName","routeTail","_supervisorInfo","_hostInfo","_hassInfo","_hassOsInfo","panel","_redirectIngress","fetchHassioSupervisorInfo","fetchHassioHomeAssistantInfo","hassio_main_slicedToArray","addonSlug","awaitAlert","createSessionPromise","alertParams","action","createHassioSession","fetchHassioAddonInfo","ingress_url","location","_this5","tries","tryUpdate","min","_superClass","_temp","provide_hass_lit_mixin_classCallCheck","provide_hass_lit_mixin_getPrototypeOf","_defineProperty","provide_hass_lit_mixin_assertThisInitialized","provide_hass_lit_mixin_inherits","__provideHass","provide_hass_lit_mixin_get","fetchHassioAddonChangelog","fetchHassioAddonLogs","setHassioAddonOption","setHassioAddonSecurity","installHassioAddon","uninstallHassioAddon","_context6","_context7","_context8","_context9","_dom_fire_event__WEBPACK_IMPORTED_MODULE_0__","_node","replaceState","pushState","tests","langKey","dedupingMixin","_class","_possibleConstructorReturn","localize","Function","computed","HaRelativeTime","ha_relative_time_classCallCheck","ha_relative_time_getPrototypeOf","updateRelative","ha_relative_time_assertThisInitialized","LocalizeMixin","datetime","observer","datetimeObj","parsedDateTime","updateInterval","setInterval","clearInterval","newVal","dom","dateObj","timeDesc","delta","compareTime","getTime","tense","abs","floor","includeTense","relativeTime","showTopbar","topbarClass","iconImage","iconClass","iconTitle","HaCallApiButton","method","_buttonTapped","eventData","resp","progressButton","actionSuccess","actionError","renderRoot","cookie","session","fetchNotifications","conn","sendMessagePromise","subscribeUpdates","subscribeEvents","ntf","setState","HaMenuButton","_attachNotifOnConnect","_subscribeNotifications","_unsubNotifications","hasNotifications","_hasNotifications","states","some","entityId","computeDomain","_toggleMenu","_alwaysVisible","frontendVersion","oldHass","oldNarrow","newNarrow","style","visibility","onChange","connection","notifications","createCollection"],"mappings":"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","file":"chunk.c1c599e0ec49ba4de253.js","sourcesContent":["import { css } from \"lit-element\";\n\nexport const derivedStyles = {\n \"paper-spinner-color\": \"var(--primary-color)\",\n \"error-state-color\": \"var(--error-color)\",\n \"state-icon-unavailable-color\": \"var(--disabled-text-color)\",\n \"sidebar-text-color\": \"var(--primary-text-color)\",\n \"sidebar-background-color\": \"var(--paper-listbox-background-color);\",\n \"sidebar-selected-text-color\": \"var(--primary-color)\",\n \"sidebar-selected-icon-color\": \"var(--primary-color)\",\n \"switch-checked-color\": \"var(--primary-color)\",\n \"switch-checked-button-color\":\n \"var(--switch-checked-color, var(--paper-grey-50))\",\n \"switch-checked-track-color\": \"var(--switch-checked-color, #000000)\",\n \"switch-unchecked-button-color\":\n \"var(--switch-unchecked-color, var(--paper-grey-50))\",\n \"switch-unchecked-track-color\": \"var(--switch-unchecked-color, #000000)\",\n \"slider-color\": \"var(--primary-color)\",\n \"slider-secondary-color\": \"var(--light-primary-color)\",\n \"slider-bar-color\": \"var(--disabled-text-color)\",\n \"label-badge-grey\": \"var(--paper-grey-500)\",\n \"paper-card-background-color\": \"var(--card-background-color)\",\n \"paper-listbox-background-color\": \"var(--card-background-color)\",\n \"paper-item-icon-color\": \"var(--state-icon-color)\",\n \"paper-item-icon-active-color\": \"var(--state-icon-active-color)\",\n \"table-row-background-color\": \"var(--primary-background-color)\",\n \"table-row-alternative-background-color\": \"var(--secondary-background-color)\",\n \"paper-slider-knob-color\": \"var(--slider-color)\",\n \"paper-slider-knob-start-color\": \"var(--slider-color)\",\n \"paper-slider-pin-color\": \"var(--slider-color)\",\n \"paper-slider-active-color\": \"var(--slider-color)\",\n \"paper-slider-secondary-color\": \"var(--slider-secondary-color)\",\n \"paper-slider-container-color\": \"var(--slider-bar-color)\",\n \"data-table-background-color\": \"var(--card-background-color)\",\n \"mdc-theme-primary\": \"var(--primary-color)\",\n \"mdc-theme-secondary\": \"var(--accent-color)\",\n \"mdc-theme-background\": \"var(--primary-background-color)\",\n \"mdc-theme-surface\":\n \"var(--paper-card-background-color, var(--card-background-color))\",\n \"mdc-theme-on-primary\": \"var(--text-primary-color)\",\n \"mdc-theme-on-secondary\": \"var(--text-primary-color)\",\n \"mdc-theme-on-surface\": \"var(--primary-text-color)\",\n \"app-header-text-color\": \"var(--text-primary-color)\",\n \"app-header-background-color\": \"var(--primary-color)\",\n};\n\nexport const haStyle = css`\n :host {\n @apply --paper-font-body1;\n }\n\n app-header-layout,\n ha-app-layout {\n background-color: var(--primary-background-color);\n }\n\n app-header,\n app-toolbar {\n background-color: var(--app-header-background-color);\n font-weight: 400;\n color: var(--app-header-text-color, white);\n }\n\n app-toolbar ha-menu-button + [main-title],\n app-toolbar ha-paper-icon-button-arrow-prev + [main-title],\n app-toolbar paper-icon-button + [main-title] {\n margin-left: 24px;\n }\n\n h1 {\n @apply --paper-font-title;\n }\n\n button.link {\n background: none;\n color: inherit;\n border: none;\n padding: 0;\n font: inherit;\n text-align: left;\n text-decoration: underline;\n cursor: pointer;\n }\n\n .card-actions a {\n text-decoration: none;\n }\n\n .card-actions .warning {\n --mdc-theme-primary: var(--google-red-500);\n }\n`;\n\nexport const haStyleDialog = css`\n /* prevent clipping of positioned elements */\n paper-dialog-scrollable {\n --paper-dialog-scrollable: {\n -webkit-overflow-scrolling: auto;\n }\n }\n\n /* force smooth scrolling for iOS 10 */\n paper-dialog-scrollable.can-scroll {\n --paper-dialog-scrollable: {\n -webkit-overflow-scrolling: touch;\n }\n }\n\n .paper-dialog-buttons {\n align-items: flex-end;\n padding: 8px;\n }\n\n .paper-dialog-buttons .warning {\n --mdc-theme-primary: var(--google-red-500);\n }\n\n @media all and (max-width: 450px), all and (max-height: 500px) {\n paper-dialog,\n ha-paper-dialog {\n margin: 0;\n width: 100% !important;\n max-height: calc(100% - 64px);\n\n position: fixed !important;\n bottom: 0px;\n left: 0px;\n right: 0px;\n overflow: scroll;\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n }\n }\n`;\n","import {\n LitElement,\n property,\n TemplateResult,\n html,\n customElement,\n css,\n CSSResult,\n} from \"lit-element\";\nimport \"../components/ha-menu-button\";\nimport \"../components/ha-paper-icon-button-arrow-prev\";\nimport { classMap } from \"lit-html/directives/class-map\";\n\n@customElement(\"hass-subpage\")\nclass HassSubpage extends LitElement {\n @property()\n public header?: string;\n @property({ type: Boolean })\n public showBackButton = true;\n @property({ type: Boolean })\n public hassio = false;\n\n protected render(): TemplateResult {\n return html`\n

    \n \n\n
    ${this.header}
    \n \n
    \n
    \n `;\n }\n\n private _backTapped(): void {\n history.back();\n }\n\n static get styles(): CSSResult {\n return css`\n :host {\n display: block;\n height: 100%;\n background-color: var(--primary-background-color);\n }\n\n .toolbar {\n display: flex;\n align-items: center;\n font-size: 20px;\n height: 65px;\n padding: 0 16px;\n pointer-events: none;\n background-color: var(--app-header-background-color);\n font-weight: 400;\n color: var(--app-header-text-color, white);\n border-bottom: var(--app-header-border-bottom, none);\n box-sizing: border-box;\n }\n\n ha-menu-button,\n ha-paper-icon-button-arrow-prev,\n ::slotted([slot=\"toolbar-icon\"]) {\n pointer-events: auto;\n }\n\n ha-paper-icon-button-arrow-prev.hidden {\n visibility: hidden;\n }\n\n [main-title] {\n margin: 0 0 0 24px;\n line-height: 20px;\n flex-grow: 1;\n }\n\n .content {\n position: relative;\n width: 100%;\n height: calc(100% - 65px);\n overflow-y: auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n }\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hass-subpage\": HassSubpage;\n }\n}\n","import \"@polymer/paper-icon-button/paper-icon-button\";\nimport { Constructor } from \"../types\";\n// Not duplicate, this is for typing.\n// tslint:disable-next-line\nimport { PaperIconButtonElement } from \"@polymer/paper-icon-button/paper-icon-button\";\n\nconst paperIconButtonClass = customElements.get(\n \"paper-icon-button\"\n) as Constructor;\n\nexport class HaPaperIconButtonArrowPrev extends paperIconButtonClass {\n public hassio?: boolean;\n\n public connectedCallback() {\n super.connectedCallback();\n\n // wait to check for direction since otherwise direction is wrong even though top level is RTL\n setTimeout(() => {\n this.icon =\n window.getComputedStyle(this).direction === \"ltr\"\n ? this.hassio\n ? \"hassio:arrow-left\"\n : \"hass:arrow-left\"\n : this.hassio\n ? \"hassio:arrow-right\"\n : \"hass:arrow-right\";\n }, 100);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-paper-icon-button-arrow-prev\": HaPaperIconButtonArrowPrev;\n }\n}\n\ncustomElements.define(\n \"ha-paper-icon-button-arrow-prev\",\n HaPaperIconButtonArrowPrev\n);\n","import \"@polymer/app-layout/app-toolbar/app-toolbar\";\nimport \"@polymer/paper-spinner/paper-spinner-lite\";\nimport {\n LitElement,\n TemplateResult,\n html,\n CSSResultArray,\n css,\n customElement,\n property,\n} from \"lit-element\";\nimport \"../components/ha-menu-button\";\nimport \"../components/ha-paper-icon-button-arrow-prev\";\nimport { haStyle } from \"../resources/styles\";\nimport { HomeAssistant } from \"../types\";\n\n@customElement(\"hass-loading-screen\")\nclass HassLoadingScreen extends LitElement {\n @property({ type: Boolean }) public rootnav? = false;\n @property() public hass?: HomeAssistant;\n @property() public narrow?: boolean;\n\n protected render(): TemplateResult {\n return html`\n \n ${this.rootnav\n ? html`\n \n `\n : html`\n \n `}\n \n
    \n \n
    \n `;\n }\n\n private _handleBack() {\n history.back();\n }\n\n static get styles(): CSSResultArray {\n return [\n haStyle,\n css`\n :host {\n display: block;\n height: 100%;\n background-color: var(--primary-background-color);\n }\n .content {\n height: calc(100% - 64px);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hass-loading-screen\": HassLoadingScreen;\n }\n}\n","// Polymer legacy event helpers used courtesy of the Polymer project.\n//\n// Copyright (c) 2017 The Polymer Authors. All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\ndeclare global {\n // tslint:disable-next-line\n interface HASSDomEvents {}\n}\n\nexport type ValidHassDomEvent = keyof HASSDomEvents;\n\nexport interface HASSDomEvent extends Event {\n detail: T;\n}\n\n/**\n * Dispatches a custom event with an optional detail value.\n *\n * @param {string} type Name of event type.\n * @param {*=} detail Detail value containing event-specific\n * payload.\n * @param {{ bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * composed: (boolean|undefined) }=}\n * options Object specifying options. These may include:\n * `bubbles` (boolean, defaults to `true`),\n * `cancelable` (boolean, defaults to false), and\n * `node` on which to fire the event (HTMLElement, defaults to `this`).\n * @return {Event} The new event that was fired.\n */\nexport const fireEvent = (\n node: HTMLElement | Window,\n type: HassEvent,\n detail?: HASSDomEvents[HassEvent],\n options?: {\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n }\n) => {\n options = options || {};\n // @ts-ignore\n detail = detail === null || detail === undefined ? {} : detail;\n const event = new Event(type, {\n bubbles: options.bubbles === undefined ? true : options.bubbles,\n cancelable: Boolean(options.cancelable),\n composed: options.composed === undefined ? true : options.composed,\n });\n (event as any).detail = detail;\n node.dispatchEvent(event);\n return event;\n};\n","import \"@material/mwc-button\";\nimport \"@polymer/paper-spinner/paper-spinner\";\nimport { html } from \"@polymer/polymer/lib/utils/html-tag\";\nimport { PolymerElement } from \"@polymer/polymer/polymer-element\";\n\nclass HaProgressButton extends PolymerElement {\n static get template() {\n return html`\n \n
    \n \n \n \n \n
    \n `;\n }\n\n static get properties() {\n return {\n hass: {\n type: Object,\n },\n\n progress: {\n type: Boolean,\n value: false,\n },\n\n disabled: {\n type: Boolean,\n value: false,\n },\n };\n }\n\n tempClass(className) {\n var classList = this.$.container.classList;\n classList.add(className);\n setTimeout(() => {\n classList.remove(className);\n }, 1000);\n }\n\n ready() {\n super.ready();\n this.addEventListener(\"click\", (ev) => this.buttonTapped(ev));\n }\n\n buttonTapped(ev) {\n if (this.progress) ev.stopPropagation();\n }\n\n actionSuccess() {\n this.tempClass(\"success\");\n }\n\n actionError() {\n this.tempClass(\"error\");\n }\n\n computeDisabled(disabled, progress) {\n return disabled || progress;\n }\n}\n\ncustomElements.define(\"ha-progress-button\", HaProgressButton);\n","import { HomeAssistant } from \"../../types\";\nimport { HassioResponse, hassioApiResultExtractor } from \"./common\";\n\nexport interface HassioSnapshot {\n slug: string;\n date: string;\n name: string;\n type: \"full\" | \"partial\";\n protected: boolean;\n}\n\nexport interface HassioSnapshotDetail extends HassioSnapshot {\n size: number;\n homeassistant: string;\n addons: Array<{\n slug: \"ADDON_SLUG\";\n name: \"NAME\";\n version: \"INSTALLED_VERSION\";\n size: \"SIZE_IN_MB\";\n }>;\n repositories: string[];\n folders: string[];\n}\n\nexport interface HassioFullSnapshotCreateParams {\n name: string;\n password?: string;\n}\nexport interface HassioPartialSnapshotCreateParams {\n name: string;\n folders: string[];\n addons: string[];\n password?: string;\n}\n\nexport const fetchHassioSnapshots = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n \"hassio/snapshots\"\n )\n ).snapshots;\n};\n\nexport const fetchHassioSnapshotInfo = async (\n hass: HomeAssistant,\n snapshot: string\n) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n `hassio/snapshots/${snapshot}/info`\n )\n );\n};\n\nexport const reloadHassioSnapshots = async (hass: HomeAssistant) => {\n await hass.callApi>(\"POST\", `hassio/snapshots/reload`);\n};\n\nexport const createHassioFullSnapshot = async (\n hass: HomeAssistant,\n data: HassioFullSnapshotCreateParams\n) => {\n await hass.callApi>(\n \"POST\",\n `hassio/snapshots/new/full`,\n data\n );\n};\n\nexport const createHassioPartialSnapshot = async (\n hass: HomeAssistant,\n data: HassioFullSnapshotCreateParams\n) => {\n await hass.callApi>(\n \"POST\",\n `hassio/snapshots/new/partial`,\n data\n );\n};\n","import { HomeAssistant } from \"../../types\";\nimport { HassioResponse, hassioApiResultExtractor } from \"./common\";\n\nexport interface HassioHardwareAudioDevice {\n device?: string;\n name: string;\n}\n\ninterface HassioHardwareAudioList {\n audio: { input: any; output: any };\n}\n\nexport interface HassioHardwareInfo {\n serial: string[];\n input: string[];\n disk: string[];\n gpio: string[];\n audio: object;\n}\n\nexport const fetchHassioHardwareAudio = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n \"hassio/hardware/audio\"\n )\n );\n};\n\nexport const fetchHassioHardwareInfo = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n \"hassio/hardware/info\"\n )\n );\n};\n","import { fireEvent } from \"../../../../src/common/dom/fire_event\";\n\nexport interface HassioMarkdownDialogParams {\n title: string;\n content: string;\n}\n\nexport const showHassioMarkdownDialog = (\n element: HTMLElement,\n dialogParams: HassioMarkdownDialogParams\n): void => {\n fireEvent(element, \"show-dialog\", {\n dialogTag: \"dialog-hassio-markdown\",\n dialogImport: () =>\n import(\n /* webpackChunkName: \"dialog-hassio-markdown\" */ \"./dialog-hassio-markdown\"\n ),\n dialogParams,\n });\n};\n","import { css } from \"lit-element\";\n\ninterface State {\n bold: boolean;\n italic: boolean;\n underline: boolean;\n strikethrough: boolean;\n foregroundColor: null | string;\n backgroundColor: null | string;\n}\n\nexport const ANSI_HTML_STYLE = css`\n .bold {\n font-weight: bold;\n }\n .italic {\n font-style: italic;\n }\n .underline {\n text-decoration: underline;\n }\n .strikethrough {\n text-decoration: line-through;\n }\n .underline.strikethrough {\n text-decoration: underline line-through;\n }\n .fg-red {\n color: rgb(222, 56, 43);\n }\n .fg-green {\n color: rgb(57, 181, 74);\n }\n .fg-yellow {\n color: rgb(255, 199, 6);\n }\n .fg-blue {\n color: rgb(0, 111, 184);\n }\n .fg-magenta {\n color: rgb(118, 38, 113);\n }\n .fg-cyan {\n color: rgb(44, 181, 233);\n }\n .fg-white {\n color: rgb(204, 204, 204);\n }\n .bg-black {\n background-color: rgb(0, 0, 0);\n }\n .bg-red {\n background-color: rgb(222, 56, 43);\n }\n .bg-green {\n background-color: rgb(57, 181, 74);\n }\n .bg-yellow {\n background-color: rgb(255, 199, 6);\n }\n .bg-blue {\n background-color: rgb(0, 111, 184);\n }\n .bg-magenta {\n background-color: rgb(118, 38, 113);\n }\n .bg-cyan {\n background-color: rgb(44, 181, 233);\n }\n .bg-white {\n background-color: rgb(204, 204, 204);\n }\n`;\n\nexport function parseTextToColoredPre(text) {\n const pre = document.createElement(\"pre\");\n const re = /\\033(?:\\[(.*?)[@-~]|\\].*?(?:\\007|\\033\\\\))/g;\n let i = 0;\n\n const state: State = {\n bold: false,\n italic: false,\n underline: false,\n strikethrough: false,\n foregroundColor: null,\n backgroundColor: null,\n };\n\n const addSpan = (content) => {\n const span = document.createElement(\"span\");\n if (state.bold) {\n span.classList.add(\"bold\");\n }\n if (state.italic) {\n span.classList.add(\"italic\");\n }\n if (state.underline) {\n span.classList.add(\"underline\");\n }\n if (state.strikethrough) {\n span.classList.add(\"strikethrough\");\n }\n if (state.foregroundColor !== null) {\n span.classList.add(`fg-${state.foregroundColor}`);\n }\n if (state.backgroundColor !== null) {\n span.classList.add(`bg-${state.backgroundColor}`);\n }\n span.appendChild(document.createTextNode(content));\n pre.appendChild(span);\n };\n\n /* eslint-disable no-cond-assign */\n let match;\n // tslint:disable-next-line\n while ((match = re.exec(text)) !== null) {\n const j = match!.index;\n addSpan(text.substring(i, j));\n i = j + match[0].length;\n\n if (match[1] === undefined) {\n continue;\n }\n\n match[1].split(\";\").forEach((colorCode: string) => {\n switch (parseInt(colorCode, 10)) {\n case 0:\n // reset\n state.bold = false;\n state.italic = false;\n state.underline = false;\n state.strikethrough = false;\n state.foregroundColor = null;\n state.backgroundColor = null;\n break;\n case 1:\n state.bold = true;\n break;\n case 3:\n state.italic = true;\n break;\n case 4:\n state.underline = true;\n break;\n case 9:\n state.strikethrough = true;\n break;\n case 22:\n state.bold = false;\n break;\n case 23:\n state.italic = false;\n break;\n case 24:\n state.underline = false;\n break;\n case 29:\n state.strikethrough = false;\n break;\n case 30:\n // foreground black\n state.foregroundColor = null;\n break;\n case 31:\n state.foregroundColor = \"red\";\n break;\n case 32:\n state.foregroundColor = \"green\";\n break;\n case 33:\n state.foregroundColor = \"yellow\";\n break;\n case 34:\n state.foregroundColor = \"blue\";\n break;\n case 35:\n state.foregroundColor = \"magenta\";\n break;\n case 36:\n state.foregroundColor = \"cyan\";\n break;\n case 37:\n state.foregroundColor = \"white\";\n break;\n case 39:\n // foreground reset\n state.foregroundColor = null;\n break;\n case 40:\n state.backgroundColor = \"black\";\n break;\n case 41:\n state.backgroundColor = \"red\";\n break;\n case 42:\n state.backgroundColor = \"green\";\n break;\n case 43:\n state.backgroundColor = \"yellow\";\n break;\n case 44:\n state.backgroundColor = \"blue\";\n break;\n case 45:\n state.backgroundColor = \"magenta\";\n break;\n case 46:\n state.backgroundColor = \"cyan\";\n break;\n case 47:\n state.backgroundColor = \"white\";\n break;\n case 49:\n // background reset\n state.backgroundColor = null;\n break;\n }\n });\n }\n addSpan(text.substring(i));\n\n return pre;\n}\n","import { fireEvent } from \"../../common/dom/fire_event\";\n\ninterface BaseDialogParams {\n confirmText?: string;\n text?: string;\n title?: string;\n}\n\nexport interface AlertDialogParams extends BaseDialogParams {\n confirm?: () => void;\n}\n\nexport interface ConfirmationDialogParams extends BaseDialogParams {\n dismissText?: string;\n confirm?: () => void;\n cancel?: () => void;\n}\n\nexport interface PromptDialogParams extends BaseDialogParams {\n inputLabel?: string;\n inputType?: string;\n defaultValue?: string;\n confirm?: (out?: string) => void;\n}\n\nexport interface DialogParams\n extends ConfirmationDialogParams,\n PromptDialogParams {\n confirm?: (out?: string) => void;\n confirmation?: boolean;\n prompt?: boolean;\n}\n\nexport const loadGenericDialog = () =>\n import(/* webpackChunkName: \"confirmation\" */ \"./dialog-box\");\n\nconst showDialogHelper = (\n element: HTMLElement,\n dialogParams: DialogParams,\n extra?: {\n confirmation?: DialogParams[\"confirmation\"];\n prompt?: DialogParams[\"prompt\"];\n }\n) =>\n new Promise((resolve) => {\n const origCancel = dialogParams.cancel;\n const origConfirm = dialogParams.confirm;\n\n fireEvent(element, \"show-dialog\", {\n dialogTag: \"dialog-box\",\n dialogImport: loadGenericDialog,\n dialogParams: {\n ...dialogParams,\n ...extra,\n cancel: () => {\n resolve(extra?.prompt ? null : false);\n if (origCancel) {\n origCancel();\n }\n },\n confirm: (out) => {\n resolve(extra?.prompt ? out : true);\n if (origConfirm) {\n origConfirm(out);\n }\n },\n },\n });\n });\n\nexport const showAlertDialog = (\n element: HTMLElement,\n dialogParams: AlertDialogParams\n) => showDialogHelper(element, dialogParams);\n\nexport const showConfirmationDialog = (\n element: HTMLElement,\n dialogParams: ConfirmationDialogParams\n) =>\n showDialogHelper(element, dialogParams, { confirmation: true }) as Promise<\n boolean\n >;\n\nexport const showPromptDialog = (\n element: HTMLElement,\n dialogParams: PromptDialogParams\n) =>\n showDialogHelper(element, dialogParams, { prompt: true }) as Promise<\n null | string\n >;\n","import { css } from \"lit-element\";\n\nexport const hassioStyle = css`\n .content {\n margin: 8px;\n }\n h1 {\n color: var(--primary-text-color);\n font-size: 2em;\n margin-bottom: 8px;\n font-family: var(--paper-font-headline_-_font-family);\n -webkit-font-smoothing: var(--paper-font-headline_-_-webkit-font-smoothing);\n font-size: var(--paper-font-headline_-_font-size);\n font-weight: var(--paper-font-headline_-_font-weight);\n letter-spacing: var(--paper-font-headline_-_letter-spacing);\n line-height: var(--paper-font-headline_-_line-height);\n padding-left: 8px;\n }\n .description {\n margin-top: 4px;\n padding-left: 8px;\n }\n .card-group {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n grid-gap: 8px;\n }\n @media screen and (min-width: 640px) {\n .card-group {\n grid-template-columns: repeat(auto-fit, minmax(300px, 0.5fr));\n }\n }\n @media screen and (min-width: 1020px) {\n .card-group {\n grid-template-columns: repeat(auto-fit, minmax(300px, 0.333fr));\n }\n }\n @media screen and (min-width: 1300px) {\n .card-group {\n grid-template-columns: repeat(auto-fit, minmax(300px, 0.25fr));\n }\n }\n ha-call-api-button {\n font-weight: 500;\n color: var(--primary-color);\n }\n .error {\n color: var(--error-color);\n margin-top: 16px;\n }\n`;\n","import \"@polymer/paper-styles/paper-styles\";\nimport \"@polymer/polymer/lib/elements/custom-style\";\nimport { haStyle, haStyleDialog, derivedStyles } from \"./styles\";\n\nconst documentContainer = document.createElement(\"template\");\ndocumentContainer.setAttribute(\"style\", \"display: none;\");\n\ndocumentContainer.innerHTML = `\n \n\n \n\n \n\n \n`;\n\ndocument.head.appendChild(documentContainer.content);\n","import { derivedStyles } from \"../../resources/styles\";\n\nconst hexToRgb = (hex: string): string | null => {\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n const checkHex = hex.replace(shorthandRegex, (_m, r, g, b) => {\n return r + r + g + g + b + b;\n });\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(checkHex);\n return result\n ? `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(\n result[3],\n 16\n )}`\n : null;\n};\n\n/**\n * Apply a theme to an element by setting the CSS variables on it.\n *\n * element: Element to apply theme on.\n * themes: HASS Theme information\n * localTheme: selected theme.\n * updateMeta: boolean if we should update the theme-color meta element.\n */\nexport const applyThemesOnElement = (\n element,\n themes,\n localTheme,\n updateMeta = false\n) => {\n if (!element._themes) {\n element._themes = {};\n }\n let themeName = themes.default_theme;\n if (localTheme === \"default\" || (localTheme && themes.themes[localTheme])) {\n themeName = localTheme;\n }\n const styles = { ...element._themes };\n if (themeName !== \"default\") {\n const theme = { ...derivedStyles, ...themes.themes[themeName] };\n Object.keys(theme).forEach((key) => {\n const prefixedKey = `--${key}`;\n element._themes[prefixedKey] = \"\";\n styles[prefixedKey] = theme[key];\n if (key.startsWith(\"rgb\")) {\n return;\n }\n const rgbKey = `rgb-${key}`;\n if (theme[rgbKey] !== undefined) {\n return;\n }\n const prefixedRgbKey = `--${rgbKey}`;\n element._themes[prefixedRgbKey] = \"\";\n const rgbValue = hexToRgb(theme[key]);\n if (rgbValue !== null) {\n styles[prefixedRgbKey] = rgbValue;\n }\n });\n }\n if (element.updateStyles) {\n element.updateStyles(styles);\n } else if (window.ShadyCSS) {\n // implement updateStyles() method of Polymer elements\n window.ShadyCSS.styleSubtree(/** @type {!HTMLElement} */ element, styles);\n }\n\n if (!updateMeta) {\n return;\n }\n\n const meta = document.querySelector(\"meta[name=theme-color]\");\n if (meta) {\n if (!meta.hasAttribute(\"default-content\")) {\n meta.setAttribute(\"default-content\", meta.getAttribute(\"content\")!);\n }\n const themeColor =\n styles[\"--primary-color\"] || meta.getAttribute(\"default-content\");\n meta.setAttribute(\"content\", themeColor);\n }\n};\n","import {\n LitElement,\n CSSResultArray,\n css,\n TemplateResult,\n html,\n property,\n customElement,\n} from \"lit-element\";\nimport \"@material/mwc-button\";\nimport \"./hass-subpage\";\n\n@customElement(\"hass-error-screen\")\nclass HassErrorScreen extends LitElement {\n @property()\n public error?: string;\n\n protected render(): TemplateResult {\n return html`\n \n
    \n

    ${this.error}

    \n \n go back\n \n
    \n
    \n `;\n }\n\n private _backTapped(): void {\n history.back();\n }\n\n static get styles(): CSSResultArray {\n return [\n css`\n .content {\n height: calc(100% - 64px);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hass-error-screen\": HassErrorScreen;\n }\n}\n","import { UpdatingElement, property, PropertyValues } from \"lit-element\";\nimport \"./hass-error-screen\";\nimport \"./hass-loading-screen\";\nimport { Route } from \"../types\";\nimport { navigate } from \"../common/navigate\";\nimport memoizeOne from \"memoize-one\";\n\nconst extractPage = (path: string, defaultPage: string) => {\n if (path === \"\") {\n return defaultPage;\n }\n const subpathStart = path.indexOf(\"/\", 1);\n return subpathStart === -1\n ? path.substr(1)\n : path.substr(1, subpathStart - 1);\n};\n\nexport interface RouteOptions {\n // HTML tag of the route page.\n tag: string;\n // Function to load the page.\n load?: () => Promise;\n cache?: boolean;\n}\n\nexport interface RouterOptions {\n // The default route to show if path does not define a page.\n defaultPage?: string;\n // If all routes should be preloaded\n preloadAll?: boolean;\n // If a route has been shown, should we keep the element in memory\n cacheAll?: boolean;\n // Should we show a loading spinner while we load the element for the route\n showLoading?: boolean;\n // Promise that resolves when the initial data is loaded which is needed to show any route.\n initialLoad?: () => Promise;\n // Hook that is called before rendering a new route. Allowing redirects.\n // If string returned, that page will be rendered instead.\n beforeRender?: (page: string) => string | undefined;\n routes: {\n // If it's a string, it is another route whose options should be adopted.\n [route: string]: RouteOptions | string;\n };\n}\n\n// Time to wait for code to load before we show loading screen.\nconst LOADING_SCREEN_THRESHOLD = 400; // ms\n\nexport class HassRouterPage extends UpdatingElement {\n @property() public route?: Route;\n\n protected routerOptions!: RouterOptions;\n\n protected _currentPage = \"\";\n private _currentLoadProm?: Promise;\n private _cache = {};\n private _initialLoadDone = false;\n private _computeTail = memoizeOne((route: Route) => {\n const dividerPos = route.path.indexOf(\"/\", 1);\n return dividerPos === -1\n ? {\n prefix: route.prefix + route.path,\n path: \"\",\n }\n : {\n prefix: route.prefix + route.path.substr(0, dividerPos),\n path: route.path.substr(dividerPos),\n };\n });\n\n protected update(changedProps: PropertyValues) {\n super.update(changedProps);\n\n const routerOptions = this.routerOptions || { routes: {} };\n\n if (routerOptions && routerOptions.initialLoad && !this._initialLoadDone) {\n return;\n }\n\n if (!changedProps.has(\"route\")) {\n // Do not update if we have a currentLoadProm, because that means\n // that there is still an old panel shown and we're moving to a new one.\n if (this.lastChild && !this._currentLoadProm) {\n this.updatePageEl(this.lastChild, changedProps);\n }\n return;\n }\n\n const route = this.route;\n const defaultPage = routerOptions.defaultPage;\n\n if (route && route.path === \"\" && defaultPage !== undefined) {\n navigate(this, `${route.prefix}/${defaultPage}`, true);\n }\n\n let newPage = route\n ? extractPage(route.path, defaultPage || \"\")\n : \"not_found\";\n let routeOptions = routerOptions.routes[newPage];\n\n // Handle redirects\n while (typeof routeOptions === \"string\") {\n newPage = routeOptions;\n routeOptions = routerOptions.routes[newPage];\n }\n\n if (routerOptions.beforeRender) {\n const result = routerOptions.beforeRender(newPage);\n if (result !== undefined) {\n newPage = result;\n routeOptions = routerOptions.routes[newPage];\n\n // Handle redirects\n while (typeof routeOptions === \"string\") {\n newPage = routeOptions;\n routeOptions = routerOptions.routes[newPage];\n }\n\n // Update the url if we know where we're mounted.\n if (route) {\n navigate(this, `${route.prefix}/${result}`, true);\n }\n }\n }\n\n if (this._currentPage === newPage) {\n if (this.lastChild) {\n this.updatePageEl(this.lastChild, changedProps);\n }\n return;\n }\n\n if (!routeOptions) {\n this._currentPage = \"\";\n if (this.lastChild) {\n this.removeChild(this.lastChild);\n }\n return;\n }\n\n this._currentPage = newPage;\n const loadProm = routeOptions.load\n ? routeOptions.load()\n : Promise.resolve();\n\n // Check when loading the page source failed.\n loadProm.catch((err) => {\n // tslint:disable-next-line\n console.error(\"Error loading page\", newPage, err);\n\n // Verify that we're still trying to show the same page.\n if (this._currentPage !== newPage) {\n return;\n }\n\n // Removes either loading screen or the panel\n this.removeChild(this.lastChild!);\n\n // Show error screen\n const errorEl = document.createElement(\"hass-error-screen\");\n errorEl.error = `Error while loading page ${newPage}.`;\n this.appendChild(errorEl);\n });\n\n // If we don't show loading screen, just show the panel.\n // It will be automatically upgraded when loading done.\n if (!routerOptions.showLoading) {\n this._createPanel(routerOptions, newPage, routeOptions);\n return;\n }\n\n // We are only going to show the loading screen after some time.\n // That way we won't have a double fast flash on fast connections.\n let created = false;\n\n setTimeout(() => {\n if (created || this._currentPage !== newPage) {\n return;\n }\n\n // Show a loading screen.\n if (this.lastChild) {\n this.removeChild(this.lastChild);\n }\n this.appendChild(this.createLoadingScreen());\n }, LOADING_SCREEN_THRESHOLD);\n\n this._currentLoadProm = loadProm.then(\n () => {\n this._currentLoadProm = undefined;\n // Check if we're still trying to show the same page.\n if (this._currentPage !== newPage) {\n return;\n }\n\n created = true;\n this._createPanel(\n routerOptions,\n newPage,\n // @ts-ignore TS forgot this is not a string.\n routeOptions\n );\n },\n () => {\n this._currentLoadProm = undefined;\n }\n );\n }\n\n protected firstUpdated(changedProps: PropertyValues) {\n super.firstUpdated(changedProps);\n\n const options = this.routerOptions;\n\n if (!options) {\n return;\n }\n\n if (options.preloadAll) {\n Object.values(options.routes).forEach(\n (route) => typeof route === \"object\" && route.load && route.load()\n );\n }\n\n if (options.initialLoad) {\n setTimeout(() => {\n if (!this._initialLoadDone) {\n this.appendChild(this.createLoadingScreen());\n }\n }, LOADING_SCREEN_THRESHOLD);\n\n options.initialLoad().then(() => {\n this._initialLoadDone = true;\n this.requestUpdate(\"route\");\n });\n }\n }\n\n protected createLoadingScreen() {\n return document.createElement(\"hass-loading-screen\");\n }\n\n /**\n * Rebuild the current panel.\n *\n * Promise will resolve when rebuilding is done and DOM updated.\n */\n protected async rebuild(): Promise {\n const oldRoute = this.route;\n\n if (oldRoute === undefined) {\n return;\n }\n\n this.route = undefined;\n await this.updateComplete;\n // Make sure that the parent didn't override this in the meanwhile.\n if (this.route === undefined) {\n this.route = oldRoute;\n }\n }\n\n /**\n * Promise that resolves when the page has rendered.\n */\n protected get pageRendered(): Promise {\n return this.updateComplete.then(() => this._currentLoadProm);\n }\n\n protected createElement(tag: string) {\n return document.createElement(tag);\n }\n\n protected updatePageEl(_pageEl, _changedProps?: PropertyValues) {\n // default we do nothing\n }\n\n protected get routeTail(): Route {\n return this._computeTail(this.route!);\n }\n\n private _createPanel(\n routerOptions: RouterOptions,\n page: string,\n routeOptions: RouteOptions\n ) {\n if (this.lastChild) {\n this.removeChild(this.lastChild);\n }\n\n const panelEl = this._cache[page] || this.createElement(routeOptions.tag);\n this.updatePageEl(panelEl);\n this.appendChild(panelEl);\n\n if (routerOptions.cacheAll || routeOptions.cache) {\n this._cache[page] = panelEl;\n }\n }\n}\n","import { HomeAssistant } from \"../../types\";\nimport { HassioResponse, hassioApiResultExtractor } from \"./common\";\n\nexport type HassioHostInfo = any;\n\nexport interface HassioHassOSInfo {\n version: string;\n version_cli: string;\n version_latest: string;\n version_cli_latest: string;\n board: \"ova\" | \"rpi\";\n}\n\nexport const fetchHassioHostInfo = async (hass: HomeAssistant) => {\n const response = await hass.callApi>(\n \"GET\",\n \"hassio/host/info\"\n );\n return hassioApiResultExtractor(response);\n};\n\nexport const fetchHassioHassOsInfo = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n \"hassio/hassos/info\"\n )\n );\n};\n","import { HASSDomEvent, ValidHassDomEvent } from \"../common/dom/fire_event\";\nimport { ProvideHassElement } from \"../mixins/provide-hass-lit-mixin\";\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n \"show-dialog\": ShowDialogParams;\n \"close-dialog\": undefined;\n }\n // for add event listener\n interface HTMLElementEventMap {\n \"show-dialog\": HASSDomEvent>;\n }\n}\n\ninterface HassDialog extends HTMLElement {\n showDialog(params: T);\n}\n\ninterface ShowDialogParams {\n dialogTag: keyof HTMLElementTagNameMap;\n dialogImport: () => Promise;\n dialogParams: T;\n}\n\nconst LOADED = {};\n\nexport const showDialog = async (\n element: HTMLElement & ProvideHassElement,\n root: ShadowRoot | HTMLElement,\n dialogImport: () => Promise,\n dialogTag: string,\n dialogParams: unknown\n) => {\n if (!(dialogTag in LOADED)) {\n LOADED[dialogTag] = dialogImport().then(() => {\n const dialogEl = document.createElement(dialogTag) as HassDialog;\n element.provideHass(dialogEl);\n root.appendChild(dialogEl);\n return dialogEl;\n });\n }\n const dialogElement = await LOADED[dialogTag];\n dialogElement.showDialog(dialogParams);\n};\n\nexport const makeDialogManager = (\n element: HTMLElement & ProvideHassElement,\n root: ShadowRoot | HTMLElement\n) => {\n element.addEventListener(\n \"show-dialog\",\n async (e: HASSDomEvent>) => {\n const { dialogTag, dialogImport, dialogParams } = e.detail;\n showDialog(element, root, dialogImport, dialogTag, dialogParams);\n }\n );\n};\n","import { UpdatingElement, PropertyValues } from \"lit-element\";\nimport { HomeAssistant, Constructor } from \"../types\";\n\nexport interface ProvideHassElement {\n provideHass(element: HTMLElement);\n}\n\n/* tslint:disable-next-line:variable-name */\nexport const ProvideHassLitMixin = >(\n superClass: T\n) =>\n class extends superClass {\n protected hass!: HomeAssistant;\n /* tslint:disable-next-line:variable-name */\n private __provideHass: HTMLElement[] = [];\n\n public provideHass(el) {\n this.__provideHass.push(el);\n el.hass = this.hass;\n }\n\n protected updated(changedProps: PropertyValues) {\n super.updated(changedProps);\n\n if (changedProps.has(\"hass\")) {\n this.__provideHass.forEach((el) => {\n (el as any).hass = this.hass;\n });\n }\n }\n };\n","import \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n} from \"lit-element\";\n\nimport { HomeAssistant } from \"../../../src/types\";\nimport { HassioAddonInfo } from \"../../../src/data/hassio/addon\";\nimport { navigate } from \"../../../src/common/navigate\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport \"../components/hassio-card-content\";\n\n@customElement(\"hassio-addons\")\nclass HassioAddons extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public addons?: HassioAddonInfo[];\n\n protected render(): TemplateResult {\n const [major, minor] = this.hass.config.version.split(\".\", 2);\n const ha105pluss =\n Number(major) > 0 || (major === \"0\" && Number(minor) >= 105);\n return html`\n
    \n

    Add-ons

    \n
    \n ${!this.addons\n ? html`\n \n
    \n You don't have any add-ons installed yet. Head over to\n the add-on store\n to get started!\n
    \n
    \n `\n : this.addons\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map(\n (addon) => html`\n \n
    \n \n
    \n
    \n `\n )}\n
    \n
    \n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n paper-card {\n cursor: pointer;\n }\n `,\n ];\n }\n\n private _addonTapped(ev: any): void {\n navigate(this, `/hassio/addon/${ev.currentTarget.addon.slug}`);\n }\n\n private _openStore(): void {\n navigate(this, \"/hassio/store\");\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-addons\": HassioAddons;\n }\n}\n","import {\n LitElement,\n TemplateResult,\n html,\n CSSResult,\n css,\n property,\n customElement,\n} from \"lit-element\";\nimport \"@polymer/iron-icon/iron-icon\";\n\nimport { HomeAssistant } from \"../../../src/types\";\nimport { HassioHassOSInfo } from \"../../../src/data/hassio/host\";\nimport {\n HassioHomeAssistantInfo,\n HassioSupervisorInfo,\n} from \"../../../src/data/hassio/supervisor\";\n\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\n\nimport \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport \"../../../src/components/buttons/ha-call-api-button\";\nimport \"../components/hassio-card-content\";\n\n@customElement(\"hassio-update\")\nexport class HassioUpdate extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public hassInfo: HassioHomeAssistantInfo;\n @property() public hassOsInfo?: HassioHassOSInfo;\n @property() public supervisorInfo: HassioSupervisorInfo;\n @property() private _error?: string;\n\n protected render(): TemplateResult {\n const updatesAvailable: number = [\n this.hassInfo,\n this.supervisorInfo,\n this.hassOsInfo,\n ].filter((value) => {\n return (\n !!value &&\n (value.last_version\n ? value.version !== value.last_version\n : value.version !== value.version_latest)\n );\n }).length;\n\n if (!updatesAvailable) {\n return html``;\n }\n\n return html`\n
    \n ${this._error\n ? html`\n
    Error: ${this._error}
    \n `\n : \"\"}\n

    \n ${updatesAvailable > 1\n ? \"Updates Available 🎉\"\n : \"Update Available 🎉\"}\n

    \n
    \n ${this._renderUpdateCard(\n \"Home Assistant Core\",\n this.hassInfo.version,\n this.hassInfo.last_version,\n \"hassio/homeassistant/update\",\n `https://${\n this.hassInfo.last_version.includes(\"b\") ? \"rc\" : \"www\"\n }.home-assistant.io/latest-release-notes/`,\n \"hassio:home-assistant\"\n )}\n ${this._renderUpdateCard(\n \"Supervisor\",\n this.supervisorInfo.version,\n this.supervisorInfo.last_version,\n \"hassio/supervisor/update\",\n `https://github.com//home-assistant/hassio/releases/tag/${this.supervisorInfo.last_version}`\n )}\n ${this.hassOsInfo\n ? this._renderUpdateCard(\n \"Operating System\",\n this.hassOsInfo.version,\n this.hassOsInfo.version_latest,\n \"hassio/hassos/update\",\n `https://github.com//home-assistant/hassos/releases/tag/${this.hassOsInfo.version_latest}`\n )\n : \"\"}\n
    \n
    \n `;\n }\n\n private _renderUpdateCard(\n name: string,\n curVersion: string,\n lastVersion: string,\n apiPath: string,\n releaseNotesUrl: string,\n icon?: string\n ): TemplateResult {\n if (lastVersion === curVersion) {\n return html``;\n }\n return html`\n \n
    \n ${icon\n ? html`\n
    \n \n
    \n `\n : \"\"}\n
    ${name} ${lastVersion}
    \n
    \n You are currently running version ${curVersion}\n
    \n
    \n
    \n \n Release notes\n \n \n Update\n \n
    \n
    \n `;\n }\n\n private _apiCalled(ev) {\n if (ev.detail.success) {\n this._error = \"\";\n return;\n }\n\n const response = ev.detail.response;\n\n typeof response.body === \"object\"\n ? (this._error = response.body.message || \"Unknown error\")\n : (this._error = response.body);\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n .icon {\n --iron-icon-height: 48px;\n --iron-icon-width: 48px;\n float: right;\n margin: 0 0 2px 10px;\n }\n .update-heading {\n font-size: var(--paper-font-subhead_-_font-size);\n font-weight: 500;\n margin-bottom: 0.5em;\n }\n .warning {\n color: var(--secondary-text-color);\n }\n .card-content {\n height: calc(100% - 47px);\n box-sizing: border-box;\n }\n .card-actions {\n text-align: right;\n }\n .errors {\n color: var(--google-red-500);\n padding: 16px;\n }\n a {\n text-decoration: none;\n }\n `,\n ];\n }\n}\n","import {\n LitElement,\n TemplateResult,\n html,\n CSSResult,\n css,\n property,\n customElement,\n} from \"lit-element\";\nimport \"./hassio-addons\";\nimport \"./hassio-update\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport { HassioHassOSInfo } from \"../../../src/data/hassio/host\";\nimport {\n HassioSupervisorInfo,\n HassioHomeAssistantInfo,\n} from \"../../../src/data/hassio/supervisor\";\n\n@customElement(\"hassio-dashboard\")\nclass HassioDashboard extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public supervisorInfo!: HassioSupervisorInfo;\n @property() public hassInfo!: HassioHomeAssistantInfo;\n @property() public hassOsInfo!: HassioHassOSInfo;\n\n protected render(): TemplateResult {\n return html`\n
    \n \n \n
    \n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n css`\n .content {\n margin: 0 auto;\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-dashboard\": HassioDashboard;\n }\n}\n","import {\n LitElement,\n TemplateResult,\n html,\n CSSResultArray,\n css,\n property,\n PropertyValues,\n customElement,\n} from \"lit-element\";\nimport \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport \"@polymer/paper-checkbox/paper-checkbox\";\nimport \"@polymer/paper-input/paper-input\";\nimport \"@polymer/paper-radio-button/paper-radio-button\";\nimport \"@polymer/paper-radio-group/paper-radio-group\";\n\nimport \"../components/hassio-card-content\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\n\nimport { showHassioSnapshotDialog } from \"../dialogs/snapshot/show-dialog-hassio-snapshot\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioSnapshot,\n fetchHassioSnapshots,\n reloadHassioSnapshots,\n HassioFullSnapshotCreateParams,\n HassioPartialSnapshotCreateParams,\n createHassioFullSnapshot,\n createHassioPartialSnapshot,\n} from \"../../../src/data/hassio/snapshot\";\nimport { HassioSupervisorInfo } from \"../../../src/data/hassio/supervisor\";\nimport { PolymerChangedEvent } from \"../../../src/polymer-types\";\nimport { fireEvent } from \"../../../src/common/dom/fire_event\";\n\n// Not duplicate, used for typing\n// tslint:disable-next-line\nimport { PaperInputElement } from \"@polymer/paper-input/paper-input\";\n// tslint:disable-next-line\nimport { PaperRadioGroupElement } from \"@polymer/paper-radio-group/paper-radio-group\";\n// tslint:disable-next-line\nimport { PaperCheckboxElement } from \"@polymer/paper-checkbox/paper-checkbox\";\n\ninterface CheckboxItem {\n slug: string;\n name: string;\n checked: boolean;\n}\n\n@customElement(\"hassio-snapshots\")\nclass HassioSnapshots extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public supervisorInfo!: HassioSupervisorInfo;\n @property() private _snapshotName = \"\";\n @property() private _snapshotPassword = \"\";\n @property() private _snapshotHasPassword = false;\n @property() private _snapshotType: HassioSnapshot[\"type\"] = \"full\";\n @property() private _snapshots?: HassioSnapshot[] = [];\n @property() private _addonList: CheckboxItem[] = [];\n @property() private _folderList: CheckboxItem[] = [\n {\n slug: \"homeassistant\",\n name: \"Home Assistant configuration\",\n checked: true,\n },\n { slug: \"ssl\", name: \"SSL\", checked: true },\n { slug: \"share\", name: \"Share\", checked: true },\n { slug: \"addons/local\", name: \"Local add-ons\", checked: true },\n ];\n @property() private _creatingSnapshot = false;\n @property() private _error = \"\";\n\n public async refreshData() {\n await reloadHassioSnapshots(this.hass);\n await this._updateSnapshots();\n }\n\n protected render(): TemplateResult {\n return html`\n
    \n

    \n Create snapshot\n

    \n

    \n Snapshots allow you to easily backup and restore all data of your Home\n Assistant instance.\n

    \n
    \n \n
    \n \n Type:\n \n \n Full snapshot\n \n \n Partial snapshot\n \n \n ${this._snapshotType === \"full\"\n ? undefined\n : html`\n Folders:\n ${this._folderList.map(\n (folder, idx) => html`\n \n ${folder.name}\n \n `\n )}\n Add-ons:\n ${this._addonList.map(\n (addon, idx) => html`\n \n ${addon.name}\n \n `\n )}\n `}\n Security:\n \n Password protection\n \n ${this._snapshotHasPassword\n ? html`\n \n `\n : undefined}\n ${this._error !== \"\"\n ? html`\n

    ${this._error}

    \n `\n : undefined}\n
    \n
    \n \n Create\n \n
    \n
    \n
    \n\n

    Available snapshots

    \n
    \n ${this._snapshots === undefined\n ? undefined\n : this._snapshots.length === 0\n ? html`\n \n
    \n You don't have any snapshots yet.\n
    \n
    \n `\n : this._snapshots.map(\n (snapshot) => html`\n \n
    \n \n
    \n \n `\n )}\n
    \n
    \n `;\n }\n\n protected firstUpdated(changedProps: PropertyValues) {\n super.firstUpdated(changedProps);\n this._updateSnapshots();\n }\n\n protected updated(changedProps: PropertyValues) {\n if (changedProps.has(\"supervisorInfo\")) {\n this._addonList = this.supervisorInfo.addons\n .map((addon) => ({\n slug: addon.slug,\n name: addon.name,\n checked: true,\n }))\n .sort((a, b) => (a.name < b.name ? -1 : 1));\n }\n }\n\n private _handleTextValueChanged(ev: PolymerChangedEvent) {\n const input = ev.currentTarget as PaperInputElement;\n this[`_${input.name}`] = ev.detail.value;\n }\n\n private _handleCheckboxValueChanged(ev) {\n const input = ev.currentTarget as PaperCheckboxElement;\n this[`_${input.name}`] = input.checked;\n }\n\n private _handleRadioValueChanged(ev: PolymerChangedEvent) {\n const input = ev.currentTarget as PaperRadioGroupElement;\n this[`_${input.getAttribute(\"name\")}`] = ev.detail.value;\n }\n\n private _folderChecked(ev) {\n const { idx, checked } = ev.currentTarget!;\n this._folderList = this._folderList.map((folder, curIdx) =>\n curIdx === idx ? { ...folder, checked } : folder\n );\n }\n\n private _addonChecked(ev) {\n const { idx, checked } = ev.currentTarget!;\n this._addonList = this._addonList.map((addon, curIdx) =>\n curIdx === idx ? { ...addon, checked } : addon\n );\n }\n\n private async _updateSnapshots() {\n try {\n this._snapshots = await fetchHassioSnapshots(this.hass);\n this._snapshots.sort((a, b) => (a.date < b.date ? 1 : -1));\n } catch (err) {\n this._error = err.message;\n }\n }\n\n private async _createSnapshot() {\n this._error = \"\";\n if (this._snapshotHasPassword && !this._snapshotPassword.length) {\n this._error = \"Please enter a password.\";\n return;\n }\n this._creatingSnapshot = true;\n await this.updateComplete;\n\n const name =\n this._snapshotName ||\n new Date().toLocaleDateString(navigator.language, {\n weekday: \"long\",\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n\n try {\n if (this._snapshotType === \"full\") {\n const data: HassioFullSnapshotCreateParams = { name };\n if (this._snapshotHasPassword) {\n data.password = this._snapshotPassword;\n }\n await createHassioFullSnapshot(this.hass, data);\n } else {\n const addons = this._addonList\n .filter((addon) => addon.checked)\n .map((addon) => addon.slug);\n const folders = this._folderList\n .filter((folder) => folder.checked)\n .map((folder) => folder.slug);\n\n const data: HassioPartialSnapshotCreateParams = {\n name,\n folders,\n addons,\n };\n if (this._snapshotHasPassword) {\n data.password = this._snapshotPassword;\n }\n await createHassioPartialSnapshot(this.hass, data);\n }\n this._updateSnapshots();\n fireEvent(this, \"hass-api-called\", { success: true, response: null });\n } catch (err) {\n this._error = err.message;\n } finally {\n this._creatingSnapshot = false;\n }\n }\n\n private _computeDetails(snapshot: HassioSnapshot) {\n const type =\n snapshot.type === \"full\" ? \"Full snapshot\" : \"Partial snapshot\";\n return snapshot.protected ? `${type}, password protected` : type;\n }\n\n private _snapshotClicked(ev) {\n showHassioSnapshotDialog(this, {\n slug: ev.currentTarget!.snapshot.slug,\n onDelete: () => this._updateSnapshots(),\n });\n }\n\n static get styles(): CSSResultArray {\n return [\n haStyle,\n hassioStyle,\n css`\n paper-radio-group {\n display: block;\n }\n paper-radio-button {\n padding: 0 0 2px 2px;\n }\n paper-radio-button,\n paper-checkbox,\n paper-input[type=\"password\"] {\n display: block;\n margin: 4px 0 4px 48px;\n }\n .pointer {\n cursor: pointer;\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-snapshots\": HassioSnapshots;\n }\n}\n","import { fireEvent } from \"../../../../src/common/dom/fire_event\";\n\nexport interface HassioSnapshotDialogParams {\n slug: string;\n onDelete: () => void;\n}\n\nexport const showHassioSnapshotDialog = (\n element: HTMLElement,\n dialogParams: HassioSnapshotDialogParams\n): void => {\n fireEvent(element, \"show-dialog\", {\n dialogTag: \"dialog-hassio-snapshot\",\n dialogImport: () =>\n import(\n /* webpackChunkName: \"dialog-hassio-snapshot\" */ \"./dialog-hassio-snapshot\"\n ),\n dialogParams,\n });\n};\n","import {\n css,\n TemplateResult,\n html,\n LitElement,\n property,\n CSSResultArray,\n} from \"lit-element\";\nimport \"@polymer/paper-card/paper-card\";\nimport memoizeOne from \"memoize-one\";\n\nimport \"../components/hassio-card-content\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioAddonInfo,\n HassioAddonRepository,\n} from \"../../../src/data/hassio/addon\";\nimport { navigate } from \"../../../src/common/navigate\";\nimport { filterAndSort } from \"../components/hassio-filter-addons\";\n\nclass HassioAddonRepositoryEl extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public repo!: HassioAddonRepository;\n @property() public addons!: HassioAddonInfo[];\n @property() public filter!: string;\n\n private _getAddons = memoizeOne(\n (addons: HassioAddonInfo[], filter?: string) => {\n if (filter) {\n return filterAndSort(addons, filter);\n }\n return addons.sort((a, b) =>\n a.name.toUpperCase() < b.name.toUpperCase() ? -1 : 1\n );\n }\n );\n\n protected render(): TemplateResult {\n const repo = this.repo;\n const addons = this._getAddons(this.addons, this.filter);\n const ha105pluss = this._computeHA105plus;\n\n if (this.filter && addons.length < 1) {\n return html`\n
    \n

    \n No results found in \"${repo.name}\"\n

    \n
    \n `;\n }\n return html`\n
    \n

    \n ${repo.name}\n

    \n

    \n Maintained by ${repo.maintainer}
    \n ${repo.url}\n

    \n
    \n ${addons.map(\n (addon) => html`\n \n
    \n \n
    \n \n `\n )}\n
    \n
    \n `;\n }\n\n private _addonTapped(ev) {\n navigate(this, `/hassio/addon/${ev.currentTarget.addon.slug}`);\n }\n\n private get _computeHA105plus(): boolean {\n const [major, minor] = this.hass.config.version.split(\".\", 2);\n return Number(major) > 0 || (major === \"0\" && Number(minor) >= 105);\n }\n\n static get styles(): CSSResultArray {\n return [\n hassioStyle,\n css`\n paper-card {\n cursor: pointer;\n }\n .not_available {\n opacity: 0.6;\n }\n a.repo {\n color: var(--primary-text-color);\n }\n `,\n ];\n }\n}\n\ncustomElements.define(\"hassio-addon-repository\", HassioAddonRepositoryEl);\n","import { HassioAddonInfo } from \"../../../src/data/hassio/addon\";\nimport * as Fuse from \"fuse.js\";\n\nexport function filterAndSort(addons: HassioAddonInfo[], filter: string) {\n const options: Fuse.FuseOptions = {\n keys: [\"name\", \"description\", \"slug\"],\n caseSensitive: false,\n minMatchCharLength: 2,\n threshold: 0.2,\n };\n const fuse = new Fuse(addons, options);\n return fuse.search(filter);\n}\n","import {\n LitElement,\n html,\n CSSResultArray,\n css,\n property,\n TemplateResult,\n customElement,\n PropertyValues,\n} from \"lit-element\";\nimport \"@polymer/iron-icon/iron-icon\";\nimport \"@polymer/paper-card/paper-card\";\nimport \"@polymer/paper-input/paper-input\";\nimport memoizeOne from \"memoize-one\";\n\nimport \"../../../src/components/buttons/ha-call-api-button\";\nimport \"../components/hassio-card-content\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport { HassioAddonRepository } from \"../../../src/data/hassio/addon\";\nimport { PolymerChangedEvent } from \"../../../src/polymer-types\";\nimport { repeat } from \"lit-html/directives/repeat\";\n\n@customElement(\"hassio-repositories-editor\")\nclass HassioRepositoriesEditor extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public repos!: HassioAddonRepository[];\n @property() private _repoUrl = \"\";\n\n private _sortedRepos = memoizeOne((repos: HassioAddonRepository[]) =>\n repos\n .filter((repo) => repo.slug !== \"core\" && repo.slug !== \"local\")\n .sort((a, b) => (a.name < b.name ? -1 : 1))\n );\n\n protected render(): TemplateResult {\n const repos = this._sortedRepos(this.repos);\n return html`\n
    \n

    \n Repositories\n

    \n

    \n Configure which add-on repositories to fetch data from:\n

    \n
    \n ${// Use repeat so that the fade-out from call-service-api-button\n // stays with the correct repo after we add/delete one.\n repeat(\n repos,\n (repo) => repo.slug,\n (repo) => html`\n \n
    \n \n
    \n
    \n \n Remove\n \n
    \n
    \n `\n )}\n\n \n
    \n \n \n
    \n
    \n \n Add\n \n
    \n
    \n
    \n
    \n `;\n }\n\n protected updated(changedProps: PropertyValues) {\n super.updated(changedProps);\n\n if (changedProps.has(\"repos\")) {\n this._repoUrl = \"\";\n }\n }\n\n private _urlChanged(ev: PolymerChangedEvent) {\n this._repoUrl = ev.detail.value;\n }\n\n private computeRemoveRepoData(repoList, url) {\n const list = repoList\n .filter((repo) => repo.url !== url)\n .map((repo) => repo.source);\n return { addons_repositories: list };\n }\n\n private computeAddRepoData(repoList, url) {\n const list = repoList ? repoList.map((repo) => repo.source) : [];\n list.push(url);\n return { addons_repositories: list };\n }\n\n static get styles(): CSSResultArray {\n return [\n hassioStyle,\n css`\n .add {\n padding: 12px 16px;\n }\n iron-icon {\n color: var(--secondary-text-color);\n margin-right: 16px;\n display: inline-block;\n }\n paper-input {\n width: calc(100% - 49px);\n display: inline-block;\n margin-top: -4px;\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-repositories-editor\": HassioRepositoriesEditor;\n }\n}\n","import \"@polymer/paper-spinner/paper-spinner-lite\";\nimport {\n LitElement,\n TemplateResult,\n html,\n css,\n customElement,\n CSSResult,\n} from \"lit-element\";\n\n@customElement(\"loading-screen\")\nclass LoadingScreen extends LitElement {\n protected render(): TemplateResult {\n return html`\n \n `;\n }\n\n static get styles(): CSSResult {\n return css`\n :host {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"loading-screen\": LoadingScreen;\n }\n}\n","import { TemplateResult, html } from \"lit-html\";\nimport {\n css,\n CSSResult,\n customElement,\n LitElement,\n property,\n} from \"lit-element\";\nimport { fireEvent } from \"../../../src/common/dom/fire_event\";\nimport \"@polymer/iron-icon/iron-icon\";\nimport \"@polymer/paper-input/paper-input\";\nimport \"@polymer/paper-icon-button/paper-icon-button\";\nimport \"@material/mwc-button\";\n\n@customElement(\"hassio-search-input\")\nclass HassioSearchInput extends LitElement {\n @property() private filter?: string;\n\n protected render(): TemplateResult {\n return html`\n
    \n \n \n ${this.filter &&\n html`\n \n `}\n \n
    \n `;\n }\n\n private async _filterChanged(value: string) {\n fireEvent(this, \"value-changed\", { value: String(value) });\n }\n\n private async _filterInputChanged(e) {\n this._filterChanged(e.target.value);\n }\n\n private async _clearSearch() {\n this._filterChanged(\"\");\n }\n\n static get styles(): CSSResult {\n return css`\n paper-input {\n flex: 1 1 auto;\n margin: 0 16px;\n }\n .search-container {\n display: inline-flex;\n width: 100%;\n align-items: center;\n }\n .prefix {\n margin: 8px;\n }\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-search-input\": HassioSearchInput;\n }\n}\n","import \"./hassio-addon-repository\";\nimport \"./hassio-repositories-editor\";\nimport { TemplateResult, html } from \"lit-html\";\nimport {\n LitElement,\n CSSResult,\n css,\n property,\n PropertyValues,\n} from \"lit-element\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport {\n HassioAddonRepository,\n HassioAddonInfo,\n fetchHassioAddonsInfo,\n reloadHassioAddons,\n} from \"../../../src/data/hassio/addon\";\nimport \"../../../src/layouts/loading-screen\";\nimport \"../components/hassio-search-input\";\n\nconst sortRepos = (a: HassioAddonRepository, b: HassioAddonRepository) => {\n if (a.slug === \"local\") {\n return -1;\n }\n if (b.slug === \"local\") {\n return 1;\n }\n if (a.slug === \"core\") {\n return -1;\n }\n if (b.slug === \"core\") {\n return 1;\n }\n return a.name.toUpperCase() < b.name.toUpperCase() ? -1 : 1;\n};\n\nclass HassioAddonStore extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() private _addons?: HassioAddonInfo[];\n @property() private _repos?: HassioAddonRepository[];\n @property() private _filter?: string;\n\n public async refreshData() {\n this._repos = undefined;\n this._addons = undefined;\n this._filter = undefined;\n await reloadHassioAddons(this.hass);\n await this._loadData();\n }\n\n protected render(): TemplateResult {\n if (!this._addons || !this._repos) {\n return html`\n \n `;\n }\n const repos: TemplateResult[] = [];\n\n for (const repo of this._repos) {\n const addons = this._addons!.filter(\n (addon) => addon.repository === repo.slug\n );\n\n if (addons.length === 0) {\n continue;\n }\n\n repos.push(html`\n \n `);\n }\n\n return html`\n \n\n \n\n ${repos}\n `;\n }\n\n protected firstUpdated(changedProps: PropertyValues) {\n super.firstUpdated(changedProps);\n this.addEventListener(\"hass-api-called\", (ev) => this.apiCalled(ev));\n this._loadData();\n }\n\n private apiCalled(ev) {\n if (ev.detail.success) {\n this._loadData();\n }\n }\n\n private async _loadData() {\n try {\n const addonsInfo = await fetchHassioAddonsInfo(this.hass);\n this._repos = addonsInfo.repositories;\n this._repos.sort(sortRepos);\n this._addons = addonsInfo.addons;\n } catch (err) {\n alert(\"Failed to fetch add-on info\");\n }\n }\n\n private async _filterChanged(e) {\n this._filter = e.detail.value;\n }\n\n static get styles(): CSSResult {\n return css`\n hassio-addon-repository {\n margin-top: 24px;\n }\n `;\n }\n}\n\ncustomElements.define(\"hassio-addon-store\", HassioAddonStore);\n","import \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n} from \"lit-element\";\n\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport {\n HassioHostInfo as HassioHostInfoType,\n HassioHassOSInfo,\n} from \"../../../src/data/hassio/host\";\nimport { fetchHassioHardwareInfo } from \"../../../src/data/hassio/hardware\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport { showHassioMarkdownDialog } from \"../dialogs/markdown/show-dialog-hassio-markdown\";\n\nimport \"../../../src/components/buttons/ha-call-api-button\";\n\n@customElement(\"hassio-host-info\")\nclass HassioHostInfo extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public hostInfo!: HassioHostInfoType;\n @property() public hassOsInfo!: HassioHassOSInfo;\n @property() private _errors?: string;\n\n public render(): TemplateResult | void {\n return html`\n \n
    \n

    Host system

    \n \n \n \n \n \n \n \n \n \n \n ${this.hostInfo.deployment\n ? html`\n \n \n \n \n `\n : \"\"}\n \n
    Hostname${this.hostInfo.hostname}
    System${this.hostInfo.operating_system}
    Deployment${this.hostInfo.deployment}
    \n \n Hardware\n \n ${this.hostInfo.features.includes(\"hostname\")\n ? html`\n \n Change hostname\n \n `\n : \"\"}\n ${this._errors\n ? html`\n
    Error: ${this._errors}
    \n `\n : \"\"}\n
    \n
    \n ${this.hostInfo.features.includes(\"reboot\")\n ? html`\n Reboot\n `\n : \"\"}\n ${this.hostInfo.features.includes(\"shutdown\")\n ? html`\n Shutdown\n `\n : \"\"}\n ${this.hostInfo.features.includes(\"hassos\")\n ? html`\n Import from USB\n `\n : \"\"}\n ${this.hostInfo.version !== this.hostInfo.version_latest\n ? html`\n Update\n `\n : \"\"}\n
    \n
    \n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n paper-card {\n height: 100%;\n width: 100%;\n }\n .card-content {\n color: var(--primary-text-color);\n box-sizing: border-box;\n height: calc(100% - 47px);\n }\n .info {\n width: 100%;\n }\n .info td:nth-child(2) {\n text-align: right;\n }\n .errors {\n color: var(--google-red-500);\n margin-top: 16px;\n }\n mwc-button.info {\n max-width: calc(50% - 12px);\n }\n table.info {\n margin-bottom: 10px;\n }\n .warning {\n --mdc-theme-primary: var(--google-red-500);\n }\n `,\n ];\n }\n\n protected firstUpdated(): void {\n this.addEventListener(\"hass-api-called\", (ev) => this._apiCalled(ev));\n }\n\n private _apiCalled(ev): void {\n if (ev.detail.success) {\n this._errors = undefined;\n return;\n }\n\n const response = ev.detail.response;\n\n this._errors =\n typeof response.body === \"object\"\n ? response.body.message || \"Unknown error\"\n : response.body;\n }\n\n private async _showHardware(): Promise {\n try {\n const content = this._objectToMarkdown(\n await fetchHassioHardwareInfo(this.hass)\n );\n showHassioMarkdownDialog(this, {\n title: \"Hardware\",\n content,\n });\n } catch (err) {\n showHassioMarkdownDialog(this, {\n title: \"Hardware\",\n content: \"Error getting hardware info\",\n });\n }\n }\n\n private _objectToMarkdown(obj, indent = \"\"): string {\n let data = \"\";\n Object.keys(obj).forEach((key) => {\n if (typeof obj[key] !== \"object\") {\n data += `${indent}- ${key}: ${obj[key]}\\n`;\n } else {\n data += `${indent}- ${key}:\\n`;\n if (Array.isArray(obj[key])) {\n if (obj[key].length) {\n data +=\n `${indent} - ` + obj[key].join(`\\n${indent} - `) + \"\\n\";\n }\n } else {\n data += this._objectToMarkdown(obj[key], ` ${indent}`);\n }\n }\n });\n\n return data;\n }\n\n private _changeHostnameClicked(): void {\n const curHostname = this.hostInfo.hostname;\n const hostname = prompt(\"Please enter a new hostname:\", curHostname);\n if (hostname && hostname !== curHostname) {\n this.hass.callApi(\"POST\", \"hassio/host/options\", { hostname });\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-host-info\": HassioHostInfo;\n }\n}\n","import \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n} from \"lit-element\";\n\nimport { fireEvent } from \"../../../src/common/dom/fire_event\";\nimport {\n HassioSupervisorInfo as HassioSupervisorInfoType,\n setSupervisorOption,\n SupervisorOptions,\n} from \"../../../src/data/hassio/supervisor\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\n\nimport \"../../../src/components/buttons/ha-call-api-button\";\n\n@customElement(\"hassio-supervisor-info\")\nclass HassioSupervisorInfo extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public supervisorInfo!: HassioSupervisorInfoType;\n @property() private _errors?: string;\n\n public render(): TemplateResult | void {\n return html`\n \n
    \n

    Supervisor

    \n \n \n \n \n \n \n \n \n \n \n ${this.supervisorInfo.channel !== \"stable\"\n ? html`\n \n \n \n \n `\n : \"\"}\n \n
    Version${this.supervisorInfo.version}
    Latest version${this.supervisorInfo.last_version}
    Channel${this.supervisorInfo.channel}
    \n ${this._errors\n ? html`\n
    Error: ${this._errors}
    \n `\n : \"\"}\n
    \n
    \n Reload\n ${this.supervisorInfo.version !== this.supervisorInfo.last_version\n ? html`\n Update\n `\n : \"\"}\n ${this.supervisorInfo.channel === \"beta\"\n ? html`\n Leave beta channel\n `\n : \"\"}\n ${this.supervisorInfo.channel === \"stable\"\n ? html`\n Join beta channel\n `\n : \"\"}\n
    \n
    \n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n paper-card {\n height: 100%;\n width: 100%;\n }\n .card-content {\n color: var(--primary-text-color);\n box-sizing: border-box;\n height: calc(100% - 47px);\n }\n .info {\n width: 100%;\n }\n .info td:nth-child(2) {\n text-align: right;\n }\n .errors {\n color: var(--google-red-500);\n margin-top: 16px;\n }\n `,\n ];\n }\n\n protected firstUpdated(): void {\n this.addEventListener(\"hass-api-called\", (ev) => this._apiCalled(ev));\n }\n\n private _apiCalled(ev): void {\n if (ev.detail.success) {\n this._errors = undefined;\n return;\n }\n\n const response = ev.detail.response;\n\n this._errors =\n typeof response.body === \"object\"\n ? response.body.message || \"Unknown error\"\n : response.body;\n }\n\n private async _joinBeta() {\n if (\n !confirm(`WARNING:\nBeta releases are for testers and early adopters and can contain unstable code changes. Make sure you have backups of your data before you activate this feature.\n\nThis inludes beta releases for:\n- Home Assistant (Release Candidates)\n- Hass.io supervisor\n- Host system`)\n ) {\n return;\n }\n try {\n const data: SupervisorOptions = { channel: \"beta\" };\n await setSupervisorOption(this.hass, data);\n const eventdata = {\n success: true,\n response: undefined,\n path: \"option\",\n };\n fireEvent(this, \"hass-api-called\", eventdata);\n } catch (err) {\n this._errors = `Error joining beta channel, ${err.body?.message || err}`;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-supervisor-info\": HassioSupervisorInfo;\n }\n}\n","import \"@material/mwc-button\";\nimport \"@polymer/paper-card/paper-card\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n query,\n} from \"lit-element\";\n\nimport { ANSI_HTML_STYLE, parseTextToColoredPre } from \"../ansi-to-html\";\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport { HomeAssistant } from \"../../../src/types\";\nimport { fetchSupervisorLogs } from \"../../../src/data/hassio/supervisor\";\n\n@customElement(\"hassio-supervisor-log\")\nclass HassioSupervisorLog extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() private _error?: string;\n @query(\"#content\") private _logContent!: HTMLDivElement;\n\n public async connectedCallback(): Promise {\n super.connectedCallback();\n await this._loadData();\n }\n\n public render(): TemplateResult | void {\n return html`\n \n ${this._error\n ? html`\n
    ${this._error}
    \n `\n : \"\"}\n
    \n
    \n Refresh\n
    \n
    \n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n ANSI_HTML_STYLE,\n css`\n paper-card {\n width: 100%;\n }\n pre {\n white-space: pre-wrap;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n `,\n ];\n }\n\n private async _loadData(): Promise {\n this._error = undefined;\n try {\n const content = await fetchSupervisorLogs(this.hass);\n while (this._logContent.lastChild) {\n this._logContent.removeChild(this._logContent.lastChild as Node);\n }\n this._logContent.appendChild(parseTextToColoredPre(content));\n } catch (err) {\n this._error = `Failed to get supervisor logs, ${err.body?.message ||\n err}`;\n }\n }\n\n private async _refresh(): Promise {\n await this._loadData();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-supervisor-log\": HassioSupervisorLog;\n }\n}\n","import \"@polymer/paper-menu-button/paper-menu-button\";\nimport {\n css,\n CSSResult,\n customElement,\n html,\n LitElement,\n property,\n TemplateResult,\n} from \"lit-element\";\n\nimport { hassioStyle } from \"../resources/hassio-style\";\nimport { haStyle } from \"../../../src/resources/styles\";\nimport {\n HassioHostInfo,\n HassioHassOSInfo,\n} from \"../../../src/data/hassio/host\";\nimport { HassioSupervisorInfo } from \"../../../src/data/hassio/supervisor\";\nimport { HomeAssistant } from \"../../../src/types\";\n\nimport \"./hassio-host-info\";\nimport \"./hassio-supervisor-info\";\nimport \"./hassio-supervisor-log\";\n\n@customElement(\"hassio-system\")\nclass HassioSystem extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public supervisorInfo!: HassioSupervisorInfo;\n @property() public hostInfo!: HassioHostInfo;\n @property() public hassOsInfo!: HassioHassOSInfo;\n\n public render(): TemplateResult | void {\n return html`\n
    \n

    Information

    \n
    \n \n \n
    \n

    System log

    \n \n
    \n `;\n }\n\n static get styles(): CSSResult[] {\n return [\n haStyle,\n hassioStyle,\n css`\n .content {\n margin: 8px;\n color: var(--primary-text-color);\n }\n .title {\n margin-top: 24px;\n color: var(--primary-text-color);\n font-size: 2em;\n padding-left: 8px;\n margin-bottom: 8px;\n }\n hassio-supervisor-log {\n width: 100%;\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-system\": HassioSystem;\n }\n}\n","import {\n HassRouterPage,\n RouterOptions,\n} from \"../../src/layouts/hass-router-page\";\nimport { customElement, property } from \"lit-element\";\nimport { PolymerElement } from \"@polymer/polymer\";\nimport { HomeAssistant } from \"../../src/types\";\n// Don't codesplit it, that way the dashboard always loads fast.\nimport \"./dashboard/hassio-dashboard\";\n// Don't codesplit the others, because it breaks the UI when pushed to a Pi\nimport \"./snapshots/hassio-snapshots\";\nimport \"./addon-store/hassio-addon-store\";\nimport \"./system/hassio-system\";\nimport { HassioHostInfo, HassioHassOSInfo } from \"../../src/data/hassio/host\";\nimport {\n HassioSupervisorInfo,\n HassioHomeAssistantInfo,\n} from \"../../src/data/hassio/supervisor\";\n\n@customElement(\"hassio-tabs-router\")\nclass HassioTabsRouter extends HassRouterPage {\n @property() public hass!: HomeAssistant;\n @property() public supervisorInfo: HassioSupervisorInfo;\n @property() public hostInfo: HassioHostInfo;\n @property() public hassInfo: HassioHomeAssistantInfo;\n @property() public hassOsInfo!: HassioHassOSInfo;\n\n protected routerOptions: RouterOptions = {\n routes: {\n dashboard: {\n tag: \"hassio-dashboard\",\n },\n snapshots: {\n tag: \"hassio-snapshots\",\n },\n store: {\n tag: \"hassio-addon-store\",\n },\n system: {\n tag: \"hassio-system\",\n },\n },\n };\n\n protected updatePageEl(el) {\n if (\"setProperties\" in el) {\n // As long as we have Polymer pages\n (el as PolymerElement).setProperties({\n hass: this.hass,\n supervisorInfo: this.supervisorInfo,\n hostInfo: this.hostInfo,\n hassInfo: this.hassInfo,\n hassOsInfo: this.hassOsInfo,\n });\n } else {\n el.hass = this.hass;\n el.supervisorInfo = this.supervisorInfo;\n el.hostInfo = this.hostInfo;\n el.hassInfo = this.hassInfo;\n el.hassOsInfo = this.hassOsInfo;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-tabs-router\": HassioTabsRouter;\n }\n}\n","import {\n LitElement,\n TemplateResult,\n html,\n CSSResultArray,\n css,\n customElement,\n property,\n} from \"lit-element\";\nimport \"@polymer/app-layout/app-header-layout/app-header-layout\";\nimport \"@polymer/app-layout/app-header/app-header\";\nimport \"@polymer/app-layout/app-toolbar/app-toolbar\";\nimport \"@polymer/paper-icon-button/paper-icon-button\";\nimport \"@polymer/paper-tabs/paper-tab\";\nimport \"@polymer/paper-tabs/paper-tabs\";\n\nimport \"../../src/components/ha-menu-button\";\nimport \"../../src/resources/ha-style\";\nimport \"./hassio-tabs-router\";\n\nimport scrollToTarget from \"../../src/common/dom/scroll-to-target\";\n\nimport { haStyle } from \"../../src/resources/styles\";\nimport { HomeAssistant, Route } from \"../../src/types\";\nimport { navigate } from \"../../src/common/navigate\";\nimport { HassioHostInfo, HassioHassOSInfo } from \"../../src/data/hassio/host\";\nimport {\n HassioSupervisorInfo,\n HassioHomeAssistantInfo,\n} from \"../../src/data/hassio/supervisor\";\n\nconst HAS_REFRESH_BUTTON = [\"store\", \"snapshots\"];\n\n@customElement(\"hassio-pages-with-tabs\")\nclass HassioPagesWithTabs extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public narrow!: boolean;\n @property() public route!: Route;\n @property() public supervisorInfo!: HassioSupervisorInfo;\n @property() public hostInfo!: HassioHostInfo;\n @property() public hassInfo!: HassioHomeAssistantInfo;\n @property() public hassOsInfo!: HassioHassOSInfo;\n\n protected render(): TemplateResult {\n const page = this._page;\n return html`\n \n \n \n \n
    Hass.io
    \n ${HAS_REFRESH_BUTTON.includes(page)\n ? html`\n \n `\n : undefined}\n
    \n \n Dashboard\n Snapshots\n Add-on store\n System\n \n
    \n \n
    \n `;\n }\n\n private handlePageSelected(ev) {\n const newPage = ev.detail.item.getAttribute(\"page-name\");\n if (newPage !== this._page) {\n navigate(this, `/hassio/${newPage}`);\n }\n\n scrollToTarget(\n this,\n // @ts-ignore\n this.shadowRoot!.querySelector(\"app-header-layout\").header.scrollTarget\n );\n }\n\n private refreshClicked() {\n if (this._page === \"snapshots\") {\n // @ts-ignore\n this.shadowRoot.querySelector(\"hassio-snapshots\").refreshData();\n } else {\n // @ts-ignore\n this.shadowRoot.querySelector(\"hassio-addon-store\").refreshData();\n }\n }\n\n private get _page() {\n return this.route.path.substr(1);\n }\n\n static get styles(): CSSResultArray {\n return [\n haStyle,\n css`\n :host {\n color: var(--primary-text-color);\n --paper-card-header-color: var(--primary-text-color);\n }\n paper-tabs {\n margin-left: 12px;\n --paper-tabs-selection-bar-color: var(--text-primary-color, #fff);\n text-transform: uppercase;\n }\n `,\n ];\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-pages-with-tabs\": HassioPagesWithTabs;\n }\n}\n","/**\n * Scroll to a specific y coordinate.\n *\n * Copied from paper-scroll-header-panel.\n *\n * @method scroll\n * @param {number} top The coordinate to scroll to, along the y-axis.\n * @param {boolean} smooth true if the scroll position should be smoothly adjusted.\n */\nexport default function scrollToTarget(element, target) {\n // the scroll event will trigger _updateScrollState directly,\n // However, _updateScrollState relies on the previous `scrollTop` to update the states.\n // Calling _updateScrollState will ensure that the states are synced correctly.\n const top = 0;\n const scroller = target;\n const easingFn = function easeOutQuad(t, b, c, d) {\n /* eslint-disable no-param-reassign, space-infix-ops, no-mixed-operators */\n t /= d;\n return -c * t * (t - 2) + b;\n /* eslint-enable no-param-reassign, space-infix-ops, no-mixed-operators */\n };\n const animationId = Math.random();\n const duration = 200;\n const startTime = Date.now();\n const currentScrollTop = scroller.scrollTop;\n const deltaScrollTop = top - currentScrollTop;\n element._currentAnimationId = animationId;\n (function updateFrame() {\n const now = Date.now();\n const elapsedTime = now - startTime;\n if (elapsedTime > duration) {\n scroller.scrollTop = top;\n } else if (element._currentAnimationId === animationId) {\n scroller.scrollTop = easingFn(\n elapsedTime,\n currentScrollTop,\n deltaScrollTop,\n duration\n );\n requestAnimationFrame(updateFrame.bind(element));\n }\n }.call(element));\n}\n","import { customElement, PropertyValues, property } from \"lit-element\";\nimport { PolymerElement } from \"@polymer/polymer\";\nimport \"@polymer/paper-icon-button\";\n\nimport \"../../src/resources/ha-style\";\nimport { applyThemesOnElement } from \"../../src/common/dom/apply_themes_on_element\";\nimport { fireEvent } from \"../../src/common/dom/fire_event\";\nimport {\n HassRouterPage,\n RouterOptions,\n} from \"../../src/layouts/hass-router-page\";\nimport { HomeAssistant } from \"../../src/types\";\nimport {\n fetchHassioSupervisorInfo,\n fetchHassioHomeAssistantInfo,\n HassioSupervisorInfo,\n HassioHomeAssistantInfo,\n createHassioSession,\n HassioPanelInfo,\n} from \"../../src/data/hassio/supervisor\";\nimport {\n fetchHassioHostInfo,\n fetchHassioHassOsInfo,\n HassioHostInfo,\n HassioHassOSInfo,\n} from \"../../src/data/hassio/host\";\nimport { fetchHassioAddonInfo } from \"../../src/data/hassio/addon\";\nimport { makeDialogManager } from \"../../src/dialogs/make-dialog-manager\";\nimport { ProvideHassLitMixin } from \"../../src/mixins/provide-hass-lit-mixin\";\n// Don't codesplit it, that way the dashboard always loads fast.\nimport \"./hassio-pages-with-tabs\";\nimport { navigate } from \"../../src/common/navigate\";\nimport {\n showAlertDialog,\n AlertDialogParams,\n} from \"../../src/dialogs/generic/show-dialog-box\";\n\n// The register callback of the IronA11yKeysBehavior inside paper-icon-button\n// is not called, causing _keyBindings to be uninitiliazed for paper-icon-button,\n// causing an exception when added to DOM. When transpiled to ES5, this will\n// break the build.\ncustomElements.get(\"paper-icon-button\").prototype._keyBindings = {};\n\n@customElement(\"hassio-main\")\nclass HassioMain extends ProvideHassLitMixin(HassRouterPage) {\n @property() public hass!: HomeAssistant;\n @property() public panel!: HassioPanelInfo;\n @property() public narrow!: boolean;\n\n protected routerOptions: RouterOptions = {\n // Hass.io has a page with tabs, so we route all non-matching routes to it.\n defaultPage: \"dashboard\",\n initialLoad: () => this._fetchData(),\n showLoading: true,\n routes: {\n dashboard: {\n tag: \"hassio-pages-with-tabs\",\n cache: true,\n },\n snapshots: \"dashboard\",\n store: \"dashboard\",\n system: \"dashboard\",\n addon: {\n tag: \"hassio-addon-view\",\n load: () =>\n import(\n /* webpackChunkName: \"hassio-addon-view\" */ \"./addon-view/hassio-addon-view\"\n ),\n },\n ingress: {\n tag: \"hassio-ingress-view\",\n load: () =>\n import(\n /* webpackChunkName: \"hassio-ingress-view\" */ \"./ingress-view/hassio-ingress-view\"\n ),\n },\n },\n };\n @property() private _supervisorInfo: HassioSupervisorInfo;\n @property() private _hostInfo: HassioHostInfo;\n @property() private _hassOsInfo?: HassioHassOSInfo;\n @property() private _hassInfo: HassioHomeAssistantInfo;\n\n protected firstUpdated(changedProps: PropertyValues) {\n super.firstUpdated(changedProps);\n\n applyThemesOnElement(\n this.parentElement,\n this.hass.themes,\n this.hass.selectedTheme,\n true\n );\n this.addEventListener(\"hass-api-called\", (ev) => this._apiCalled(ev));\n // Paulus - March 17, 2019\n // We went to a single hass-toggle-menu event in HA 0.90. However, the\n // supervisor UI can also run under older versions of Home Assistant.\n // So here we are going to translate toggle events into the appropriate\n // open and close events. These events are a no-op in newer versions of\n // Home Assistant.\n this.addEventListener(\"hass-toggle-menu\", () => {\n fireEvent(\n (window.parent as any).customPanel,\n // @ts-ignore\n this.hass.dockedSidebar ? \"hass-close-menu\" : \"hass-open-menu\"\n );\n });\n // Paulus - March 19, 2019\n // We changed the navigate event to fire directly on the window, as that's\n // where we are listening for it. However, the older panel_custom will\n // listen on this element for navigation events, so we need to forward them.\n window.addEventListener(\"location-changed\", (ev) =>\n // @ts-ignore\n fireEvent(this, ev.type, ev.detail, {\n bubbles: false,\n })\n );\n\n // Forward haptic events to parent window.\n window.addEventListener(\"haptic\", (ev) => {\n // @ts-ignore\n fireEvent(window.parent, ev.type, ev.detail, {\n bubbles: false,\n });\n });\n\n makeDialogManager(this, document.body);\n }\n\n protected updatePageEl(el) {\n // the tabs page does its own routing so needs full route.\n const route =\n el.nodeName === \"HASSIO-PAGES-WITH-TABS\" ? this.route : this.routeTail;\n\n if (\"setProperties\" in el) {\n // As long as we have Polymer pages\n (el as PolymerElement).setProperties({\n hass: this.hass,\n narrow: this.narrow,\n supervisorInfo: this._supervisorInfo,\n hostInfo: this._hostInfo,\n hassInfo: this._hassInfo,\n hassOsInfo: this._hassOsInfo,\n route,\n });\n } else {\n el.hass = this.hass;\n el.narrow = this.narrow;\n el.supervisorInfo = this._supervisorInfo;\n el.hostInfo = this._hostInfo;\n el.hassInfo = this._hassInfo;\n el.hassOsInfo = this._hassOsInfo;\n el.route = route;\n }\n }\n\n private async _fetchData() {\n if (this.panel.config && this.panel.config.ingress) {\n await this._redirectIngress(this.panel.config.ingress);\n return;\n }\n\n const [supervisorInfo, hostInfo, hassInfo] = await Promise.all([\n fetchHassioSupervisorInfo(this.hass),\n fetchHassioHostInfo(this.hass),\n fetchHassioHomeAssistantInfo(this.hass),\n ]);\n this._supervisorInfo = supervisorInfo;\n this._hostInfo = hostInfo;\n this._hassInfo = hassInfo;\n\n if (this._hostInfo.features && this._hostInfo.features.includes(\"hassos\")) {\n this._hassOsInfo = await fetchHassioHassOsInfo(this.hass);\n }\n }\n\n private async _redirectIngress(addonSlug: string) {\n // When we trigger a navigation, we sleep to make sure we don't\n // show the hassio dashboard before navigating away.\n const awaitAlert = async (\n alertParams: AlertDialogParams,\n action: () => void\n ) => {\n await new Promise((resolve) => {\n alertParams.confirm = resolve;\n showAlertDialog(this, alertParams);\n });\n action();\n await new Promise((resolve) => setTimeout(resolve, 1000));\n };\n\n const createSessionPromise = createHassioSession(this.hass).then(\n () => true,\n () => false\n );\n\n let addon;\n\n try {\n addon = await fetchHassioAddonInfo(this.hass, addonSlug);\n } catch (err) {\n await awaitAlert(\n {\n text: \"Unable to fetch add-on info to start Ingress\",\n title: \"Hass.io\",\n },\n () => history.back()\n );\n\n return;\n }\n\n if (!addon.ingress_url) {\n await awaitAlert(\n {\n text: \"Add-on does not support Ingress\",\n title: addon.name,\n },\n () => history.back()\n );\n\n return;\n }\n\n if (addon.state !== \"started\") {\n await awaitAlert(\n {\n text: \"Add-on is not running. Please start it first\",\n title: addon.name,\n },\n () => navigate(this, `/hassio/addon/${addon.slug}`, true)\n );\n\n return;\n }\n\n if (!(await createSessionPromise)) {\n await awaitAlert(\n {\n text: \"Unable to create an Ingress session\",\n title: addon.name,\n },\n () => history.back()\n );\n\n return;\n }\n\n location.assign(addon.ingress_url);\n // await a promise that doesn't resolve, so we show the loading screen\n // while we load the next page.\n await new Promise(() => undefined);\n }\n\n private _apiCalled(ev) {\n if (!ev.detail.success) {\n return;\n }\n\n let tries = 1;\n\n const tryUpdate = () => {\n this._fetchData().catch(() => {\n tries += 1;\n setTimeout(tryUpdate, Math.min(tries, 5) * 1000);\n });\n };\n\n tryUpdate();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-main\": HassioMain;\n }\n}\n","import { HomeAssistant } from \"../../types\";\nimport { HassioResponse, hassioApiResultExtractor } from \"./common\";\n\nexport interface HassioAddonInfo {\n name: string;\n slug: string;\n description: string;\n repository: \"core\" | \"local\" | string;\n version: string;\n state: \"none\" | \"started\" | \"stopped\";\n installed: string | undefined;\n detached: boolean;\n available: boolean;\n build: boolean;\n url: string | null;\n icon: boolean;\n logo: boolean;\n}\n\nexport interface HassioAddonDetails extends HassioAddonInfo {\n name: string;\n slug: string;\n description: string;\n long_description: null | string;\n auto_update: boolean;\n url: null | string;\n detached: boolean;\n available: boolean;\n arch: \"armhf\" | \"aarch64\" | \"i386\" | \"amd64\";\n machine: any;\n homeassistant: string;\n last_version: string;\n boot: \"auto\" | \"manual\";\n build: boolean;\n options: object;\n network: null | object;\n network_description: null | object;\n host_network: boolean;\n host_pid: boolean;\n host_ipc: boolean;\n host_dbus: boolean;\n privileged: any;\n apparmor: \"disable\" | \"default\" | \"profile\";\n devices: string[];\n auto_uart: boolean;\n icon: boolean;\n logo: boolean;\n changelog: boolean;\n hassio_api: boolean;\n hassio_role: \"default\" | \"homeassistant\" | \"manager\" | \"admin\";\n homeassistant_api: boolean;\n auth_api: boolean;\n full_access: boolean;\n protected: boolean;\n rating: \"1-6\";\n stdin: boolean;\n webui: null | string;\n gpio: boolean;\n kernel_modules: boolean;\n devicetree: boolean;\n docker_api: boolean;\n audio: boolean;\n audio_input: null | string;\n audio_output: null | string;\n services_role: string[];\n discovery: string[];\n ip_address: string;\n ingress: boolean;\n ingress_panel: boolean;\n ingress_entry: null | string;\n ingress_url: null | string;\n}\n\nexport interface HassioAddonsInfo {\n addons: HassioAddonInfo[];\n repositories: HassioAddonRepository[];\n}\n\nexport interface HassioAddonSetSecurityParams {\n protected?: boolean;\n}\n\nexport interface HassioAddonRepository {\n slug: string;\n name: string;\n source: string;\n url: string;\n maintainer: string;\n}\n\nexport interface HassioAddonSetOptionParams {\n audio_input?: string | null;\n audio_output?: string | null;\n options?: object | null;\n boot?: \"auto\" | \"manual\";\n auto_update?: boolean;\n ingress_panel?: boolean;\n network?: object | null;\n}\n\nexport const reloadHassioAddons = async (hass: HomeAssistant) => {\n await hass.callApi>(\"POST\", `hassio/addons/reload`);\n};\n\nexport const fetchHassioAddonsInfo = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\"GET\", `hassio/addons`)\n );\n};\n\nexport const fetchHassioAddonInfo = async (\n hass: HomeAssistant,\n slug: string\n) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n `hassio/addons/${slug}/info`\n )\n );\n};\n\nexport const fetchHassioAddonChangelog = async (\n hass: HomeAssistant,\n slug: string\n) => {\n return hass.callApi(\"GET\", `hassio/addons/${slug}/changelog`);\n};\n\nexport const fetchHassioAddonLogs = async (\n hass: HomeAssistant,\n slug: string\n) => {\n return hass.callApi(\"GET\", `hassio/addons/${slug}/logs`);\n};\n\nexport const setHassioAddonOption = async (\n hass: HomeAssistant,\n slug: string,\n data: HassioAddonSetOptionParams\n) => {\n await hass.callApi>(\n \"POST\",\n `hassio/addons/${slug}/options`,\n data\n );\n};\n\nexport const setHassioAddonSecurity = async (\n hass: HomeAssistant,\n slug: string,\n data: HassioAddonSetSecurityParams\n) => {\n await hass.callApi>(\n \"POST\",\n `hassio/addons/${slug}/security`,\n data\n );\n};\n\nexport const installHassioAddon = async (hass: HomeAssistant, slug: string) => {\n return hass.callApi>(\n \"POST\",\n `hassio/addons/${slug}/install`\n );\n};\n\nexport const uninstallHassioAddon = async (\n hass: HomeAssistant,\n slug: string\n) => {\n await hass.callApi>(\n \"POST\",\n `hassio/addons/${slug}/uninstall`\n );\n};\n","import { fireEvent } from \"./dom/fire_event\";\n\ndeclare global {\n // for fire event\n interface HASSDomEvents {\n \"location-changed\": {\n replace: boolean;\n };\n }\n}\n\nexport const navigate = (\n _node: any,\n path: string,\n replace: boolean = false\n) => {\n if (__DEMO__) {\n if (replace) {\n history.replaceState(null, \"\", `${location.pathname}#${path}`);\n } else {\n window.location.hash = path;\n }\n } else {\n if (replace) {\n history.replaceState(null, \"\", path);\n } else {\n history.pushState(null, \"\", path);\n }\n }\n fireEvent(window, \"location-changed\", {\n replace,\n });\n};\n","import { LocalizeFunc } from \"../translations/localize\";\n\n/**\n * Calculate a string representing a date object as relative time from now.\n *\n * Example output: 5 minutes ago, in 3 days.\n */\nconst tests = [60, 60, 24, 7];\nconst langKey = [\"second\", \"minute\", \"hour\", \"day\"];\n\nexport default function relativeTime(\n dateObj: Date,\n localize: LocalizeFunc,\n options: {\n compareTime?: Date;\n includeTense?: boolean;\n } = {}\n): string {\n const compareTime = options.compareTime || new Date();\n let delta = (compareTime.getTime() - dateObj.getTime()) / 1000;\n const tense = delta >= 0 ? \"past\" : \"future\";\n delta = Math.abs(delta);\n\n let timeDesc;\n\n for (let i = 0; i < tests.length; i++) {\n if (delta < tests[i]) {\n delta = Math.floor(delta);\n timeDesc = localize(\n `ui.components.relative_time.duration.${langKey[i]}`,\n \"count\",\n delta\n );\n break;\n }\n\n delta /= tests[i];\n }\n\n if (timeDesc === undefined) {\n delta = Math.floor(delta);\n timeDesc = localize(\n \"ui.components.relative_time.duration.week\",\n \"count\",\n delta\n );\n }\n\n return options.includeTense === false\n ? timeDesc\n : localize(`ui.components.relative_time.${tense}`, \"time\", timeDesc);\n}\n","import { dedupingMixin } from \"@polymer/polymer/lib/utils/mixin\";\n/**\n * Polymer Mixin to enable a localize function powered by language/resources from hass object.\n *\n * @polymerMixin\n */\nexport default dedupingMixin(\n (superClass) =>\n class extends superClass {\n static get properties() {\n return {\n hass: Object,\n\n /**\n * Translates a string to the current `language`. Any parameters to the\n * string should be passed in order, as follows:\n * `localize(stringKey, param1Name, param1Value, param2Name, param2Value)`\n */\n localize: {\n type: Function,\n computed: \"__computeLocalize(hass.localize)\",\n },\n };\n }\n\n __computeLocalize(localize) {\n return localize;\n }\n }\n);\n","import { dom } from \"@polymer/polymer/lib/legacy/polymer.dom\";\nimport { PolymerElement } from \"@polymer/polymer/polymer-element\";\n\nimport relativeTime from \"../common/datetime/relative_time\";\n\nimport LocalizeMixin from \"../mixins/localize-mixin\";\n\n/*\n * @appliesMixin LocalizeMixin\n */\nclass HaRelativeTime extends LocalizeMixin(PolymerElement) {\n static get properties() {\n return {\n hass: Object,\n datetime: {\n type: String,\n observer: \"datetimeChanged\",\n },\n\n datetimeObj: {\n type: Object,\n observer: \"datetimeObjChanged\",\n },\n\n parsedDateTime: Object,\n };\n }\n\n constructor() {\n super();\n this.updateRelative = this.updateRelative.bind(this);\n }\n\n connectedCallback() {\n super.connectedCallback();\n // update every 60 seconds\n this.updateInterval = setInterval(this.updateRelative, 60000);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n clearInterval(this.updateInterval);\n }\n\n datetimeChanged(newVal) {\n this.parsedDateTime = newVal ? new Date(newVal) : null;\n\n this.updateRelative();\n }\n\n datetimeObjChanged(newVal) {\n this.parsedDateTime = newVal;\n\n this.updateRelative();\n }\n\n updateRelative() {\n const root = dom(this);\n if (!this.parsedDateTime) {\n root.innerHTML = this.localize(\"ui.components.relative_time.never\");\n } else {\n root.innerHTML = relativeTime(this.parsedDateTime, this.localize);\n }\n }\n}\n\ncustomElements.define(\"ha-relative-time\", HaRelativeTime);\n","import {\n LitElement,\n TemplateResult,\n html,\n CSSResult,\n css,\n property,\n customElement,\n} from \"lit-element\";\nimport \"@polymer/iron-icon/iron-icon\";\n\nimport \"../../../src/components/ha-relative-time\";\nimport { HomeAssistant } from \"../../../src/types\";\n\n@customElement(\"hassio-card-content\")\nclass HassioCardContent extends LitElement {\n @property() public hass!: HomeAssistant;\n @property() public title!: string;\n @property() public description?: string;\n @property({ type: Boolean }) public available: boolean = true;\n @property({ type: Boolean }) public showTopbar: boolean = false;\n @property() public topbarClass?: string;\n @property() public datetime?: string;\n @property() public iconTitle?: string;\n @property() public iconClass?: string;\n @property() public icon = \"hass:help-circle\";\n @property() public iconImage?: string;\n\n protected render(): TemplateResult {\n return html`\n ${this.showTopbar\n ? html`\n
    \n `\n : \"\"}\n ${this.iconImage\n ? html`\n
    \n \n
    \n
    \n `\n : html`\n \n `}\n
    \n
    \n ${this.title}\n
    \n
    \n ${this.description}\n ${/* treat as available when undefined */\n this.available === false ? \" (Not available)\" : \"\"}\n ${this.datetime\n ? html`\n \n `\n : undefined}\n
    \n
    \n `;\n }\n\n static get styles(): CSSResult {\n return css`\n iron-icon {\n margin-right: 24px;\n margin-left: 8px;\n margin-top: 12px;\n float: left;\n color: var(--secondary-text-color);\n }\n iron-icon.update {\n color: var(--paper-orange-400);\n }\n iron-icon.running,\n iron-icon.installed {\n color: var(--paper-green-400);\n }\n iron-icon.hassupdate,\n iron-icon.snapshot {\n color: var(--paper-item-icon-color);\n }\n iron-icon.not_available {\n color: var(--google-red-500);\n }\n .title {\n color: var(--primary-text-color);\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n .addition {\n color: var(--secondary-text-color);\n overflow: hidden;\n position: relative;\n height: 2.4em;\n line-height: 1.2em;\n }\n ha-relative-time {\n display: block;\n }\n .icon_image img {\n max-height: 40px;\n max-width: 40px;\n margin-top: 4px;\n margin-right: 16px;\n float: left;\n }\n .icon_image.stopped,\n .icon_image.not_available {\n filter: grayscale(1);\n }\n .dot {\n position: absolute;\n background-color: var(--paper-orange-400);\n width: 12px;\n height: 12px;\n top: 8px;\n right: 8px;\n border-radius: 50%;\n }\n .topbar {\n position: absolute;\n width: 100%;\n height: 2px;\n top: 0;\n left: 0;\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n }\n .topbar.installed {\n background-color: var(--primary-color);\n }\n .topbar.update {\n background-color: var(--accent-color);\n }\n .topbar.unavailable {\n background-color: var(--error-color);\n }\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"hassio-card-content\": HassioCardContent;\n }\n}\n","export interface HassioResponse {\n data: T;\n result: \"ok\";\n}\n\nexport const hassioApiResultExtractor = (response: HassioResponse) =>\n response.data;\n","import { LitElement, html } from \"lit-element\";\n\nimport \"./ha-progress-button\";\nimport { fireEvent } from \"../../common/dom/fire_event\";\n\nclass HaCallApiButton extends LitElement {\n render() {\n return html`\n \n `;\n }\n\n constructor() {\n super();\n this.method = \"POST\";\n this.data = {};\n this.disabled = false;\n this.progress = false;\n }\n\n static get properties() {\n return {\n hass: {},\n progress: Boolean,\n path: String,\n method: String,\n data: {},\n disabled: Boolean,\n };\n }\n\n get progressButton() {\n return this.renderRoot.querySelector(\"ha-progress-button\");\n }\n\n async _buttonTapped() {\n this.progress = true;\n const eventData = {\n method: this.method,\n path: this.path,\n data: this.data,\n };\n\n try {\n const resp = await this.hass.callApi(this.method, this.path, this.data);\n this.progress = false;\n this.progressButton.actionSuccess();\n eventData.success = true;\n eventData.response = resp;\n } catch (err) {\n this.progress = false;\n this.progressButton.actionError();\n eventData.success = false;\n eventData.response = err;\n }\n\n fireEvent(this, \"hass-api-called\", eventData);\n }\n}\n\ncustomElements.define(\"ha-call-api-button\", HaCallApiButton);\n","import { HomeAssistant, PanelInfo } from \"../../types\";\nimport { HassioResponse, hassioApiResultExtractor } from \"./common\";\n\nexport type HassioHomeAssistantInfo = any;\nexport type HassioSupervisorInfo = any;\n\nexport type HassioPanelInfo = PanelInfo<\n | undefined\n | {\n ingress?: string;\n }\n>;\n\nexport interface CreateSessionResponse {\n session: string;\n}\n\nexport interface SupervisorOptions {\n channel: \"beta\" | \"dev\" | \"stable\";\n}\n\nexport const fetchHassioHomeAssistantInfo = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n \"hassio/homeassistant/info\"\n )\n );\n};\n\nexport const fetchHassioSupervisorInfo = async (hass: HomeAssistant) => {\n return hassioApiResultExtractor(\n await hass.callApi>(\n \"GET\",\n \"hassio/supervisor/info\"\n )\n );\n};\n\nexport const fetchSupervisorLogs = async (hass: HomeAssistant) => {\n return hass.callApi(\"GET\", \"hassio/supervisor/logs\");\n};\n\nexport const createHassioSession = async (hass: HomeAssistant) => {\n const response = await hass.callApi>(\n \"POST\",\n \"hassio/ingress/session\"\n );\n document.cookie = `ingress_session=${response.data.session};path=/api/hassio_ingress/`;\n};\n\nexport const setSupervisorOption = async (\n hass: HomeAssistant,\n data: SupervisorOptions\n) => {\n await hass.callApi>(\n \"POST\",\n \"hassio/supervisor/options\",\n data\n );\n};\n","import {\n createCollection,\n Connection,\n HassEntity,\n} from \"home-assistant-js-websocket\";\n\nexport interface PersitentNotificationEntity extends HassEntity {\n notification_id?: string;\n created_at?: string;\n title?: string;\n message?: string;\n}\n\nexport interface PersistentNotification {\n created_at: string;\n message: string;\n notification_id: string;\n title: string;\n status: \"read\" | \"unread\";\n}\n\nconst fetchNotifications = (conn) =>\n conn.sendMessagePromise({\n type: \"persistent_notification/get\",\n });\n\nconst subscribeUpdates = (conn, store) =>\n conn.subscribeEvents(\n () => fetchNotifications(conn).then((ntf) => store.setState(ntf, true)),\n \"persistent_notifications_updated\"\n );\n\nexport const subscribeNotifications = (\n conn: Connection,\n onChange: (notifications: PersistentNotification[]) => void\n) =>\n createCollection(\n \"_ntf\",\n fetchNotifications,\n subscribeUpdates,\n conn,\n onChange\n );\n","import \"@polymer/paper-icon-button/paper-icon-button\";\nimport {\n property,\n TemplateResult,\n LitElement,\n html,\n customElement,\n CSSResult,\n css,\n} from \"lit-element\";\n\nimport { fireEvent } from \"../common/dom/fire_event\";\nimport { HomeAssistant } from \"../types\";\nimport { UnsubscribeFunc } from \"home-assistant-js-websocket\";\nimport { subscribeNotifications } from \"../data/persistent_notification\";\nimport { computeDomain } from \"../common/entity/compute_domain\";\n\n@customElement(\"ha-menu-button\")\nclass HaMenuButton extends LitElement {\n @property({ type: Boolean }) public hassio = false;\n @property() public narrow!: boolean;\n @property() public hass!: HomeAssistant;\n @property() private _hasNotifications = false;\n private _alwaysVisible = false;\n private _attachNotifOnConnect = false;\n private _unsubNotifications?: UnsubscribeFunc;\n\n public connectedCallback() {\n super.connectedCallback();\n if (this._attachNotifOnConnect) {\n this._attachNotifOnConnect = false;\n this._subscribeNotifications();\n }\n }\n\n public disconnectedCallback() {\n super.disconnectedCallback();\n if (this._unsubNotifications) {\n this._attachNotifOnConnect = true;\n this._unsubNotifications();\n this._unsubNotifications = undefined;\n }\n }\n\n protected render(): TemplateResult {\n const hasNotifications =\n (this.narrow || this.hass.dockedSidebar === \"always_hidden\") &&\n (this._hasNotifications ||\n Object.keys(this.hass.states).some(\n (entityId) => computeDomain(entityId) === \"configurator\"\n ));\n return html`\n \n ${hasNotifications\n ? html`\n
    \n `\n : \"\"}\n `;\n }\n\n protected firstUpdated(changedProps) {\n super.firstUpdated(changedProps);\n if (!this.hassio) {\n return;\n }\n // This component is used on Hass.io too, but Hass.io might run the UI\n // on older frontends too, that don't have an always visible menu button\n // in the sidebar.\n this._alwaysVisible =\n (Number((window.parent as any).frontendVersion) || 0) < 20190710;\n }\n\n protected updated(changedProps) {\n super.updated(changedProps);\n\n if (!changedProps.has(\"narrow\") && !changedProps.has(\"hass\")) {\n return;\n }\n\n const oldHass = changedProps.get(\"hass\") as HomeAssistant | undefined;\n const oldNarrow =\n changedProps.get(\"narrow\") ||\n (oldHass && oldHass.dockedSidebar === \"always_hidden\");\n const newNarrow =\n this.narrow || this.hass.dockedSidebar === \"always_hidden\";\n\n if (oldNarrow === newNarrow) {\n return;\n }\n\n this.style.visibility =\n newNarrow || this._alwaysVisible ? \"initial\" : \"hidden\";\n\n if (!newNarrow) {\n this._hasNotifications = false;\n if (this._unsubNotifications) {\n this._unsubNotifications();\n this._unsubNotifications = undefined;\n }\n return;\n }\n\n this._subscribeNotifications();\n }\n\n private _subscribeNotifications() {\n this._unsubNotifications = subscribeNotifications(\n this.hass.connection,\n (notifications) => {\n this._hasNotifications = notifications.length > 0;\n }\n );\n }\n\n private _toggleMenu(): void {\n fireEvent(this, \"hass-toggle-menu\");\n }\n\n static get styles(): CSSResult {\n return css`\n :host {\n position: relative;\n }\n .dot {\n pointer-events: none;\n position: absolute;\n background-color: var(--accent-color);\n width: 12px;\n height: 12px;\n top: 5px;\n right: 2px;\n border-radius: 50%;\n border: 2px solid var(--app-header-background-color);\n }\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ha-menu-button\": HaMenuButton;\n }\n}\n","export const computeDomain = (entityId: string): string => {\n return entityId.substr(0, entityId.indexOf(\".\"));\n};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/hassio/api/panel/entrypoint.js b/hassio/api/panel/entrypoint.js index 13395c856..3b200386e 100644 --- a/hassio/api/panel/entrypoint.js +++ b/hassio/api/panel/entrypoint.js @@ -1,2 +1,2 @@ -!function(e){function n(n){for(var t,o,a=n[0],i=n[1],c=0,u=[];cpUre~>bpZ64rqn4un~M49Pm+NqK1B#%7%GV8N<%+MT39nsG*yKNA4B3y}cvoWmQ z+@$P6+?pZSKYmQ|`3%UZ3gl`QKeWU?eI-4Mu2Rq|5nb;|iF zEoGgf`fNkinM_lu(rU$l>*Z>())`@o4au|hD(7mosHHB`N)@R@-}4Pwro}4D>wH<} zm98MqiYg_nKviftRjV{#WLc?mkP^_w5>+iA=d~`^<*JmrNEbZSgsnD&SF3E97iwAQ zx`slfInN1OqpCFrC{~=8RhF;nqR`m_aUepKs$#tc4k}+)GS`q5fr1dLl4qRDVyVlz zT&(l7T5zOfNXfKf=ZB0~zo)cJam>Sb17=yblSWL5zguvF$GdDD?0hN(LGv9^BWoORpgF?-lCDzOH_ zy$HM3N-a#^woJ7k-M^>Wi1no9WigNKHWj-S23wf~c_M@`N$C2Y5iI4dF?VD$T~HnS30n3JfMO$$1CZDKOFbF#r}IVY5`J~8r$ zLca>kL2|^2_oGc=apT~>J#=13=5Zj#Jsrk=dS@FQ@nIOzY0-hdB7O)Ff{f2W&xZJk zM%d)@Mh$epoI*~wpNV3_9@_B$QYZ3s0;7L*Xj&aBI!s-2ZTBRM8-wa>auk4nmGJmi zKWQ{(7{=NrHf-s~kCzdvp>7OZ2kXdo27`8;tXkOMlnSo;VbtxOH7@DRB(2Gf2oP-@ z{p*OY*2LR?d54Mkx4fIpzGU%JUWPT%_879iSlzck2Fku9On&$Qx(nM??1oS7 z`e*RRa!Y5S&OlfMK-p?$uA?48S>}OC>}ZOJD<+uD!cX#O=}~AZ>(ROE*o;H{)1VFm z7W*%`?is-w*|(m&jQE5C5Op>>)Qxd@3^LH`TkWF8;L#=;^*Q#mF`v9fLsB(HkA5*n z>GneMAx7pi@6HRfKYQSK)S6s;A2y#M4p$4oFT;o=7=31fIr}0d7sl^;?}I?laT4T} zJTN7^zLrxACEZR(VVFcp*ER}by1gbu3I6gc$;9C+={iT7t;M?N1gAs1d)b}u(S&`U zv|$GQtN4YMCl4;Bi9djOI#PTBahhH3ed3?wH)Tso+0(JG8@VY9%Zl!=Qcq+SUy(?Q z%gR41no&AT(A<|lAN+j_1j{aIi~;xifB)srg1k1B)%Vf)wTYtI8h=~MW7FPmqJP@T zdds3tn(np(*VNmoL112`i-`mE2!X=GwWZTFN z^!92Jd7Ha~-$Xg*5`*7{U1^ZOT(56006C`5ikG% literal 1532 zcmVTlpT8i;mVf;~tL??Pd43d;NE7j$qwmq-5KMmKi#m z*{#{lW_@(*yM5>{=!G(W5WMgKxS-KNL%+*p!yK9nVe59H!9R4gP|s#H!YTSoq_mH^ zeN(%ThIAMKiqpWXIIVL&6i+!YJ_k)5x~<+(3$C|1@aG5~j>fvK@TyjLk~lTFW^H~I zvokY44MTBO0+cvozUVT`p3jEjr4?8FnKqaR#LLQfUm7#coUmKi6&M%462eg*Ak|a; z+%`eX&~`A&OQGRDz!V*t4#FpE8XcY{Gh&OE-9U>M285&|vW6*98Py*^yGU7(4t~>u zzlEezwmCXN3l*uov>iA>dRJd(gsI3i2Qa-8al)C2w3^LSgc84S&NgN5ASBvo1!QDW zhD@toVLhkKM8`Q%`(A&D$o#}}lBH!_Ez(+T%1o~76cV{6EY1lm*J{nzRkevZ&*HVL zmuNo8$tIC;ELB`)9C(#xi%pdfw#Z4G@rI&g1`?wlVJSvc#+$4L&X=oY8YgO_;w51jYLr=$E>|iotGb32 zk~uOq7}bUYtTN8mWwOlb)v8Jsh=ZewELSnFE0t`}SqY%B3^@p~T=Rr;xk{^by+J2HeYbw@q+)^DsewrHNKhZCbBqruaK zKea|yLicUUR14Dnd+Lp_pRBxT=4srfW;a6PC=;(wgb+INQ~xu9t=u*GmgEzGGU?^; zBJC}>=aX-$qK*#Gb@CPj`7_!3PM_33Zevm`<0|a|CMyvqfKG3FFL{L5N_X2=RLYG_fhM2 z(7#r{sN~Us4Qb@|pkJ;O7eN>&XS$2ri~7ba#m0WQ7Pg}_W&V-T-C66U&f+T?@#_5K zpH)pL9VTe@%bySKu?2!{7d2Xg{r$iH@@GNb>C#k>!Reh2g4$?zUCTq$KIXwcO=+BA zK__*0-GOcD!pmGA%>S-U_i#N5cL!tK9)}_iZmoRmus>iD!}@(_+$T~}yGFK+?4T+x zE>X6*-Mc(kay}9dxR)E92h;5+s|s~5*Zo;I=KOAtl;NEwUs=(X4p{Ra-Q4^*=uB@F i`~|sa?mz$hvp@y=cr*>_z3-xfJpLaYKMO#X3jhEs$?=N- diff --git a/hassio/api/panel/entrypoint.js.map b/hassio/api/panel/entrypoint.js.map index 1437adc21..f54915eb4 100644 --- a/hassio/api/panel/entrypoint.js.map +++ b/hassio/api/panel/entrypoint.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./hassio/src/entrypoint.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","6","__webpack_require__","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","0","1","2","3","4","5","7","8","9","10","11","12","13","14","15","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","self","oldJsonpFunction","slice","s","window","loadES5Adapter","then","styleEl","innerHTML"],"mappings":"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","file":"entrypoint.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t6: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"chunk.\" + {\"0\":\"87b1d37fc9b8a6f7e2a6\",\"1\":\"e46c606dd9100816af4e\",\"2\":\"92a11ac1b80e0d7839d2\",\"3\":\"170381dce1aef5f33cec\",\"4\":\"00de7352e51443687ebb\",\"5\":\"0c4f6887f9b7e7b11ef5\",\"7\":\"8b198fe00454712c9c14\",\"8\":\"0b82745c7bdffe5c1404\",\"9\":\"990ee58006b248f55d23\",\"10\":\"0ab510fdc29f68beec88\",\"11\":\"b60200a57d6f63941b30\",\"12\":\"b2dce600432c76a53d8c\",\"13\":\"8527374a266cecf93aa9\",\"14\":\"f49e500cf58ea310d452\",\"15\":\"d4931d72592ad48ba2be\"}[chunkId] + \".js\"\n \t}\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 \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\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 = \"/api/hassio/app/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = self[\"webpackJsonp\"] = self[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","window.loadES5Adapter().then(() => {\n // eslint-disable-next-line\n import(/* webpackChunkName: \"roboto\" */ \"../../src/resources/roboto\");\n // eslint-disable-next-line\n import(/* webpackChunkName: \"hassio-icons\" */ \"./resources/hassio-icons\");\n // eslint-disable-next-line\n import(/* webpackChunkName: \"hassio-main\" */ \"./hassio-main\");\n});\n\nconst styleEl = document.createElement(\"style\");\nstyleEl.innerHTML = `\nbody {\n font-family: Roboto, sans-serif;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-weight: 400;\n margin: 0;\n padding: 0;\n height: 100vh;\n}\n`;\ndocument.head.appendChild(styleEl);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./hassio/src/entrypoint.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","6","__webpack_require__","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","0","1","2","3","4","5","7","8","9","10","11","12","13","14","15","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","self","oldJsonpFunction","slice","s","window","loadES5Adapter","then","styleEl","innerHTML"],"mappings":"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","file":"entrypoint.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t6: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"chunk.\" + {\"0\":\"87b1d37fc9b8a6f7e2a6\",\"1\":\"e46c606dd9100816af4e\",\"2\":\"92a11ac1b80e0d7839d2\",\"3\":\"429840c83fad61bc51a8\",\"4\":\"715824f4764bdbe425b1\",\"5\":\"9d371c8143226d4eaaee\",\"7\":\"43e40fd69686ad51301d\",\"8\":\"0b82745c7bdffe5c1404\",\"9\":\"990ee58006b248f55d23\",\"10\":\"c1c599e0ec49ba4de253\",\"11\":\"b60200a57d6f63941b30\",\"12\":\"b2dce600432c76a53d8c\",\"13\":\"8527374a266cecf93aa9\",\"14\":\"f49e500cf58ea310d452\",\"15\":\"d4931d72592ad48ba2be\"}[chunkId] + \".js\"\n \t}\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 \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\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 = \"/api/hassio/app/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = self[\"webpackJsonp\"] = self[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","window.loadES5Adapter().then(() => {\n // eslint-disable-next-line\n import(/* webpackChunkName: \"roboto\" */ \"../../src/resources/roboto\");\n // eslint-disable-next-line\n import(/* webpackChunkName: \"hassio-icons\" */ \"./resources/hassio-icons\");\n // eslint-disable-next-line\n import(/* webpackChunkName: \"hassio-main\" */ \"./hassio-main\");\n});\n\nconst styleEl = document.createElement(\"style\");\nstyleEl.innerHTML = `\nbody {\n font-family: Roboto, sans-serif;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-weight: 400;\n margin: 0;\n padding: 0;\n height: 100vh;\n}\n`;\ndocument.head.appendChild(styleEl);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/hassio/api/panel/manifest.json b/hassio/api/panel/manifest.json index 027b27f4b..4dd856e56 100644 --- a/hassio/api/panel/manifest.json +++ b/hassio/api/panel/manifest.json @@ -5,22 +5,22 @@ "vendors~hassio-icons~hassio-main.js.map": "/api/hassio/app/chunk.e46c606dd9100816af4e.js.map", "codemirror.js": "/api/hassio/app/chunk.92a11ac1b80e0d7839d2.js", "codemirror.js.map": "/api/hassio/app/chunk.92a11ac1b80e0d7839d2.js.map", - "confirmation.js": "/api/hassio/app/chunk.170381dce1aef5f33cec.js", - "confirmation.js.map": "/api/hassio/app/chunk.170381dce1aef5f33cec.js.map", - "dialog-hassio-markdown.js": "/api/hassio/app/chunk.00de7352e51443687ebb.js", - "dialog-hassio-markdown.js.map": "/api/hassio/app/chunk.00de7352e51443687ebb.js.map", - "dialog-hassio-snapshot.js": "/api/hassio/app/chunk.0c4f6887f9b7e7b11ef5.js", - "dialog-hassio-snapshot.js.map": "/api/hassio/app/chunk.0c4f6887f9b7e7b11ef5.js.map", + "confirmation.js": "/api/hassio/app/chunk.429840c83fad61bc51a8.js", + "confirmation.js.map": "/api/hassio/app/chunk.429840c83fad61bc51a8.js.map", + "dialog-hassio-markdown.js": "/api/hassio/app/chunk.715824f4764bdbe425b1.js", + "dialog-hassio-markdown.js.map": "/api/hassio/app/chunk.715824f4764bdbe425b1.js.map", + "dialog-hassio-snapshot.js": "/api/hassio/app/chunk.9d371c8143226d4eaaee.js", + "dialog-hassio-snapshot.js.map": "/api/hassio/app/chunk.9d371c8143226d4eaaee.js.map", "entrypoint.js": "/api/hassio/app/entrypoint.js", "entrypoint.js.map": "/api/hassio/app/entrypoint.js.map", - "hassio-addon-view.js": "/api/hassio/app/chunk.8b198fe00454712c9c14.js", - "hassio-addon-view.js.map": "/api/hassio/app/chunk.8b198fe00454712c9c14.js.map", + "hassio-addon-view.js": "/api/hassio/app/chunk.43e40fd69686ad51301d.js", + "hassio-addon-view.js.map": "/api/hassio/app/chunk.43e40fd69686ad51301d.js.map", "hassio-icons.js": "/api/hassio/app/chunk.0b82745c7bdffe5c1404.js", "hassio-icons.js.map": "/api/hassio/app/chunk.0b82745c7bdffe5c1404.js.map", "hassio-ingress-view.js": "/api/hassio/app/chunk.990ee58006b248f55d23.js", "hassio-ingress-view.js.map": "/api/hassio/app/chunk.990ee58006b248f55d23.js.map", - "hassio-main.js": "/api/hassio/app/chunk.0ab510fdc29f68beec88.js", - "hassio-main.js.map": "/api/hassio/app/chunk.0ab510fdc29f68beec88.js.map", + "hassio-main.js": "/api/hassio/app/chunk.c1c599e0ec49ba4de253.js", + "hassio-main.js.map": "/api/hassio/app/chunk.c1c599e0ec49ba4de253.js.map", "mdi-icons.js": "/api/hassio/app/chunk.b60200a57d6f63941b30.js", "mdi-icons.js.map": "/api/hassio/app/chunk.b60200a57d6f63941b30.js.map", "roboto.js": "/api/hassio/app/chunk.b2dce600432c76a53d8c.js", @@ -33,10 +33,10 @@ "vendors~hassio-main.js.map": "/api/hassio/app/chunk.d4931d72592ad48ba2be.js.map", "201359fd5a526afe13ef.worker.js": "/api/hassio/app/201359fd5a526afe13ef.worker.js", "201359fd5a526afe13ef.worker.js.map": "/api/hassio/app/201359fd5a526afe13ef.worker.js.map", - "chunk.00de7352e51443687ebb.js.LICENSE": "/api/hassio/app/chunk.00de7352e51443687ebb.js.LICENSE", - "chunk.0c4f6887f9b7e7b11ef5.js.LICENSE": "/api/hassio/app/chunk.0c4f6887f9b7e7b11ef5.js.LICENSE", - "chunk.170381dce1aef5f33cec.js.LICENSE": "/api/hassio/app/chunk.170381dce1aef5f33cec.js.LICENSE", + "chunk.429840c83fad61bc51a8.js.LICENSE": "/api/hassio/app/chunk.429840c83fad61bc51a8.js.LICENSE", + "chunk.715824f4764bdbe425b1.js.LICENSE": "/api/hassio/app/chunk.715824f4764bdbe425b1.js.LICENSE", "chunk.87b1d37fc9b8a6f7e2a6.js.LICENSE": "/api/hassio/app/chunk.87b1d37fc9b8a6f7e2a6.js.LICENSE", + "chunk.9d371c8143226d4eaaee.js.LICENSE": "/api/hassio/app/chunk.9d371c8143226d4eaaee.js.LICENSE", "chunk.d4931d72592ad48ba2be.js.LICENSE": "/api/hassio/app/chunk.d4931d72592ad48ba2be.js.LICENSE", "chunk.e46c606dd9100816af4e.js.LICENSE": "/api/hassio/app/chunk.e46c606dd9100816af4e.js.LICENSE", "chunk.f49e500cf58ea310d452.js.LICENSE": "/api/hassio/app/chunk.f49e500cf58ea310d452.js.LICENSE" diff --git a/home-assistant-polymer b/home-assistant-polymer index e0376c803..cb0d91d12 160000 --- a/home-assistant-polymer +++ b/home-assistant-polymer @@ -1 +1 @@ -Subproject commit e0376c803fe4cee7406261667143345b536c8103 +Subproject commit cb0d91d1247b3be89c283cd44cf0245e0dbffe92