diff --git a/homeassistant/components/frontend/mdi_version.py b/homeassistant/components/frontend/mdi_version.py
index 90765572d2c..cf3ee39d8f2 100644
--- a/homeassistant/components/frontend/mdi_version.py
+++ b/homeassistant/components/frontend/mdi_version.py
@@ -1,2 +1,2 @@
""" DO NOT MODIFY. Auto-generated by update_mdi script """
-VERSION = "a1a203680639ff1abcc7b68cdb29c57a"
+VERSION = "2f4adc5d3ad6d2f73bf69ed29b7594fd"
diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py
index 0f962812fbb..c62b6c52b4d 100644
--- a/homeassistant/components/frontend/version.py
+++ b/homeassistant/components/frontend/version.py
@@ -1,2 +1,2 @@
""" DO NOT MODIFY. Auto-generated by build_frontend script """
-VERSION = "78b7312c6b47f942d0009ee5aa898399"
+VERSION = "a4d021cb50ed079fcfda7369ed2f0d4a"
diff --git a/homeassistant/components/frontend/www_static/frontend.html b/homeassistant/components/frontend/www_static/frontend.html
index ff0def0fc7f..7dd6f68c12f 100644
--- a/homeassistant/components/frontend/www_static/frontend.html
+++ b/homeassistant/components/frontend/www_static/frontend.html
@@ -1,7 +1,7 @@
-
[[stateObj.stateDisplay]]

[[stateObj.stateDisplay]]
[[_charCounterStr]][[_charCounterStr]][[errorMessage]][[errorMessage]]
LogbookLogbookHistory-
-
![]()
![]()
[[errorMessage]]
[[_text]]
[[_text]]
{{text}}{{text}}
[[attribute]]
[[getAttributeValue(stateObj, attribute)]]
[[stateObj.attributes.description]]
[[stateObj.attributes.errors]]

[[submitCaption]]Configuring
[[stateObj.attributes.description]]
[[stateObj.attributes.errors]]

[[submitCaption]]Configuring
{{finalTranscript}} [[interimTranscript]] …
{{finalTranscript}} [[interimTranscript]] …
\ No newline at end of file
+var r=window.location.pathname.substr(1).split("/"),a=l(r,2);e=a[0],n=a[1],t.batch(function(){(0,p.navigate)(t,e),n&&d.actions.selectView(t,n)})}history.replaceState(i(e,n),v,o(e,n))}function u(t,e){var n=e.state,i=n.pane,o=n.view;t.evaluate(f.getters.hasCurrentEntityId)?(r(t).ignoreNextDeselectEntity=!0,f.actions.deselectEntity(t)):i===t.evaluate(h.activePane)&&o===t.evaluate(d.getters.currentView)||t.batch(function(){(0,p.navigate)(t,i),void 0!==o&&d.actions.selectView(t,o)})}function s(t){if(_){a(t);var e={ignoreNextDeselectEntity:!1,popstateChangeListener:u.bind(null,t),unwatchNavigationObserver:t.observe(h.activePane,function(t){t!==history.state.pane&&history.pushState(i(t,history.state.view),v,o(t,history.state.view))}),unwatchViewObserver:t.observe(d.getters.currentView,function(t){t!==history.state.view&&history.pushState(i(history.state.pane,t),v,o(history.state.pane,t))}),unwatchMoreInfoObserver:t.observe(f.getters.hasCurrentEntityId,function(t){t?history.pushState(history.state,v,window.location.pathname):e.ignoreNextDeselectEntity?e.ignoreNextDeselectEntity=!1:setTimeout(function(){return history.back()},0)})};y[t.hassId]=e,window.addEventListener("popstate",e.popstateChangeListener)}}function c(t){if(_){var e=r(t);e&&(e.unwatchNavigationObserver(),e.unwatchViewObserver(),e.unwatchMoreInfoObserver(),window.removeEventListener("popstate",e.popstateChangeListener),y[t.hassId]=!1)}}var l=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(s){i=!0,o=s}finally{try{!r&&u["return"]&&u["return"]()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();Object.defineProperty(e,"__esModule",{value:!0}),e.startSync=s,e.stopSync=c;var f=n(50),d=n(60),h=n(52),p=n(51),_=history.pushState&&!0,v="Home Assistant",y={}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function i(t,e){t.dispatch(a["default"].NOTIFICATION_CREATED,{message:e})}Object.defineProperty(e,"__esModule",{value:!0}),e.createNotification=i;var o=n(54),a=r(o)},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=e.notificationMap=["notifications"];e.lastNotificationMessage=[n,function(t){return t.last()}]},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function i(t,e){var n=e.message;return t.set(t.size,n)}function o(){return c.getInitialState()}Object.defineProperty(e,"__esModule",{value:!0});var a=n(3),u=n(54),s=r(u),c=new a.Store({getInitialState:function(){return new a.Immutable.OrderedMap},initialize:function(){this.on(s["default"].NOTIFICATION_CREATED,i),this.on(s["default"].LOG_OUT,o)}});e["default"]=c},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0}),e.localStoragePreferences=void 0;var i=n(171),o=r(i);e.localStoragePreferences=o["default"]},function(t,e,n){"use strict";function r(){if(!("localStorage"in window))return{};var t=window.localStorage,e="___test";try{return t.setItem(e,e),t.removeItem(e),t}catch(n){return{}}}Object.defineProperty(e,"__esModule",{value:!0});var i=n(15),o=n(30),a=n(53),u=r(),s={authToken:{getter:[i.getters.currentAuthToken,i.getters.rememberAuth,function(t,e){return e?t:null}],defaultValue:null},useStreaming:{getter:o.getters.useStreaming,defaultValue:!0},showSidebar:{getter:a.getters.showSidebar,defaultValue:!1}},c={};Object.keys(s).forEach(function(t){t in u||(u[t]=s[t].defaultValue),Object.defineProperty(c,t,{get:function(){try{return JSON.parse(u[t])}catch(e){return s[t].defaultValue}}})}),c.startSync=function(t){Object.keys(s).forEach(function(e){var n=s[e].getter,r=function(t){u[e]=JSON.stringify(t)};t.observe(n,r),r(t.evaluate(n))})},e["default"]=c},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function i(t){var e={};return e.incrementData=function(e,n){var r=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];o(e,t,r,n)},e.replaceData=function(e,n){var r=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];o(e,t,f({},r,{replace:!0}),n)},e.removeData=function(e,n){c(e,t,{id:n})},t.fetch&&(e.fetch=function(e){var n=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return e.dispatch(h["default"].API_FETCH_START,{model:t,params:n,method:"fetch"}),t.fetch(e,n).then(o.bind(null,e,t,n),a.bind(null,e,t,n))}),e.fetchAll=function(e){var n=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return e.dispatch(h["default"].API_FETCH_START,{model:t,params:n,method:"fetchAll"}),t.fetchAll(e,n).then(o.bind(null,e,t,f({},n,{replace:!0})),a.bind(null,e,t,n))},t.save&&(e.save=function(e){var n=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return e.dispatch(h["default"].API_SAVE_START,{params:n}),t.save(e,n).then(u.bind(null,e,t,n),s.bind(null,e,t,n))}),t["delete"]&&(e["delete"]=function(e){var n=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return e.dispatch(h["default"].API_DELETE_START,{params:n}),t["delete"](e,n).then(c.bind(null,e,t,n),l.bind(null,e,t,n))}),e}function o(t,e,n,r){return t.dispatch(h["default"].API_FETCH_SUCCESS,{model:e,params:n,result:r}),r}function a(t,e,n,r){return t.dispatch(h["default"].API_FETCH_FAIL,{model:e,params:n,reason:r}),Promise.reject(r)}function u(t,e,n,r){return t.dispatch(h["default"].API_SAVE_SUCCESS,{model:e,params:n,result:r}),r}function s(t,e,n,r){return t.dispatch(h["default"].API_SAVE_FAIL,{model:e,params:n,reason:r}),Promise.reject(r)}function c(t,e,n,r){return t.dispatch(h["default"].API_DELETE_SUCCESS,{model:e,params:n,result:r}),r}function l(t,e,n,r){return t.dispatch(h["default"].API_DELETE_FAIL,{model:e,params:n,reason:r}),Promise.reject(r)}var f=Object.assign||function(t){for(var e=1;e
t;t+=2){var e=rt[t],n=rt[t+1];e(n),rt[t]=void 0,rt[t+1]=void 0}$=0}function v(){try{var t=n(216);return W=t.runOnLoop||t.runOnContext,f()}catch(e){return p()}}function y(t,e){var n=this,r=n._state;if(r===ut&&!t||r===st&&!e)return this;var i=new this.constructor(g),o=n._result;if(r){var a=arguments[r-1];Z(function(){N(r,i,a,o)})}else A(n,i,t,e);return i}function m(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(g);return T(n,t),n}function g(){}function b(){return new TypeError("You cannot resolve a promise with itself")}function S(){return new TypeError("A promises callback cannot return that same promise.")}function w(t){try{return t.then}catch(e){return ct.error=e,ct}}function O(t,e,n,r){try{t.call(e,n,r)}catch(i){return i}}function M(t,e,n){Z(function(t){var r=!1,i=O(n,e,function(n){r||(r=!0,e!==n?T(t,n):C(t,n))},function(e){r||(r=!0,j(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&i&&(r=!0,j(t,i))},t)}function I(t,e){e._state===ut?C(t,e._result):e._state===st?j(t,e._result):A(e,void 0,function(e){T(t,e)},function(e){j(t,e)})}function E(t,e,n){e.constructor===t.constructor&&n===it&&constructor.resolve===ot?I(t,e):n===ct?j(t,ct.error):void 0===n?C(t,e):u(n)?M(t,e,n):C(t,e)}function T(t,e){t===e?j(t,b()):a(e)?E(t,e,w(e)):C(t,e)}function D(t){t._onerror&&t._onerror(t._result),P(t)}function C(t,e){t._state===at&&(t._result=e,t._state=ut,0!==t._subscribers.length&&Z(P,t))}function j(t,e){t._state===at&&(t._state=st,t._result=e,Z(D,t))}function A(t,e,n,r){var i=t._subscribers,o=i.length;t._onerror=null,i[o]=e,i[o+ut]=n,i[o+st]=r,0===o&&t._state&&Z(P,t)}function P(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,i,o=t._result,a=0;aa;a++)A(r.resolve(t[a]),void 0,e,n);return i}function Y(t){var e=this,n=new e(g);return j(n,t),n}function z(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function U(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function V(t){this._id=pt++,this._state=void 0,this._result=void 0,this._subscribers=[],g!==t&&("function"!=typeof t&&z(),this instanceof V?R(this,t):U())}function G(t,e){this._instanceConstructor=t,this.promise=new t(g),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):j(this.promise,this._validationError())}function F(){var t;if("undefined"!=typeof i)t=i;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;n&&"[object Promise]"===Object.prototype.toString.call(n.resolve())&&!n.cast||(t.Promise=_t)}var B;B=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var W,q,K,J=B,$=0,Z=function(t,e){rt[$]=t,rt[$+1]=e,$+=2,2===$&&(q?q(_):K())},X="undefined"!=typeof window?window:void 0,Q=X||{},tt=Q.MutationObserver||Q.WebKitMutationObserver,et="undefined"!=typeof t&&"[object process]"==={}.toString.call(t),nt="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,rt=new Array(1e3);K=et?l():tt?d():nt?h():void 0===X?v():p();var it=y,ot=m,at=void 0,ut=1,st=2,ct=new k,lt=new k,ft=x,dt=H,ht=Y,pt=0,_t=V;V.all=ft,V.race=dt,V.resolve=ot,V.reject=ht,V._setScheduler=s,V._setAsap=c,V._asap=Z,V.prototype={constructor:V,then:it,"catch":function(t){return this.then(null,t)}};var vt=G;G.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},G.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===at&&t>n;n++)this._eachEntry(e[n],n)},G.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var i=w(t);if(i===it&&t._state!==at)this._settledAt(t._state,e,t._result);else if("function"!=typeof i)this._remaining--,this._result[e]=t;else if(n===_t){var o=new n(g);E(o,t,i),this._willSettleAt(o,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},G.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===at&&(this._remaining--,t===st?j(r,n):this._result[e]=n),0===this._remaining&&C(r,this._result)},G.prototype._willSettleAt=function(t,e){var n=this;A(t,void 0,function(t){n._settledAt(ut,e,t)},function(t){n._settledAt(st,e,t)})};var yt=F,mt={Promise:_t,polyfill:yt};n(214).amd?(r=function(){return mt}.call(e,n,e,o),!(void 0!==r&&(o.exports=r))):"undefined"!=typeof o&&o.exports?o.exports=mt:"undefined"!=typeof this&&(this.ES6Promise=mt),yt()}).call(this)}).call(e,n(215),function(){return this}(),n(69)(t))},function(t,e,n){var r=n(64),i=r(Date,"now"),o=i||function(){return(new Date).getTime()};t.exports=o},function(t,e){function n(t){return"number"==typeof t&&t>-1&&t%1==0&&r>=t}var r=9007199254740991;t.exports=n},function(t,e,n){var r=n(64),i=n(202),o=n(65),a="[object Array]",u=Object.prototype,s=u.toString,c=r(Array,"isArray"),l=c||function(t){return o(t)&&i(t.length)&&s.call(t)==a};t.exports=l},function(t,e,n){function r(t){return null==t?!1:i(t)?l.test(s.call(t)):o(t)&&a.test(t)}var i=n(66),o=n(65),a=/^\[object .+?Constructor\]$/,u=Object.prototype,s=Function.prototype.toString,c=u.hasOwnProperty,l=RegExp("^"+s.call(c).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=r},function(t,e){function n(t){return function(e){return null==e?void 0:e[t]}}t.exports=n},function(t,e,n){var r=n(205),i=r("length");t.exports=i},function(t,e,n){function r(t){return null!=t&&o(i(t))}var i=n(206),o=n(210);t.exports=r},function(t,e){function n(t,e){return t="number"==typeof t||r.test(t)?+t:-1,e=null==e?i:e,t>-1&&t%1==0&&e>t}var r=/^\d+$/,i=9007199254740991;t.exports=n},function(t,e,n){function r(t,e,n){if(!a(n))return!1;var r=typeof e;if("number"==r?i(n)&&o(e,n.length):"string"==r&&e in n){var u=n[e];return t===t?t===u:u!==u}return!1}var i=n(207),o=n(208),a=n(211);t.exports=r},function(t,e){function n(t){return"number"==typeof t&&t>-1&&t%1==0&&r>=t}var r=9007199254740991;t.exports=n},function(t,e){function n(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}t.exports=n},function(t,e,n){function r(t,e,n){n&&i(t,e,n)&&(e=n=void 0),t=+t||0,n=null==n?1:+n||0,null==e?(e=t,t=0):e=+e||0;for(var r=-1,u=a(o((e-t)/(n||1)),0),s=Array(u);++r1)for(var n=1;n