diff --git a/package.json b/package.json
index d000f29c21..3951a3b4d8 100644
--- a/package.json
+++ b/package.json
@@ -102,7 +102,7 @@
"fuse.js": "^6.0.0",
"google-timezones-json": "^1.0.2",
"hls.js": "^1.0.11",
- "home-assistant-js-websocket": "^5.12.0",
+ "home-assistant-js-websocket": "^6.0.0",
"idb-keyval": "^5.1.3",
"intl-messageformat": "^9.9.1",
"js-yaml": "^4.1.0",
diff --git a/setup.py b/setup.py
index 8ec5a8641a..cdca384673 100644
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup(
name="home-assistant-frontend",
- version="20211220.0",
+ version="20211227.0",
description="The Home Assistant frontend",
url="https://github.com/home-assistant/frontend",
author="The Home Assistant Authors",
diff --git a/src/components/ha-gauge.ts b/src/components/ha-gauge.ts
index fd3a378e42..9ce1259669 100644
--- a/src/components/ha-gauge.ts
+++ b/src/components/ha-gauge.ts
@@ -8,6 +8,10 @@ import { FrontendLocaleData } from "../data/translation";
import { getValueInPercentage, normalize } from "../util/calculate";
import { isSafari } from "../util/is_safari";
+// Safari version 15.2 and up behaves differently than other Safari versions.
+// https://github.com/home-assistant/frontend/issues/10766
+const isSafari152 = isSafari && /Version\/15\.[^0-1]/.test(navigator.userAgent);
+
const getAngle = (value: number, min: number, max: number) => {
const percentage = getValueInPercentage(normalize(value, min, max), min, max);
return (percentage * 180) / 100;
@@ -113,7 +117,9 @@ export class Gauge extends LitElement {
: undefined
)}
transform=${ifDefined(
- isSafari ? `rotate(${this._angle} 50 50)` : undefined
+ isSafari
+ ? `rotate(${this._angle}${isSafari152 ? "" : " 50 50"})`
+ : undefined
)}
>
`
@@ -126,7 +132,9 @@ export class Gauge extends LitElement {
: undefined
)}
transform=${ifDefined(
- isSafari ? `rotate(${this._angle} 50 50)` : undefined
+ isSafari
+ ? `rotate(${this._angle}${isSafari152 ? "" : " 50 50"})`
+ : undefined
)}
>`
}
diff --git a/src/layouts/home-assistant.ts b/src/layouts/home-assistant.ts
index e3bf2f9d8b..c6070d520c 100644
--- a/src/layouts/home-assistant.ts
+++ b/src/layouts/home-assistant.ts
@@ -34,8 +34,6 @@ const panelUrl = (path: string) => {
export class HomeAssistantAppEl extends QuickBarMixin(HassElement) {
@state() private _route: Route;
- @state() private _error = false;
-
private _panelUrl: string;
private _haVersion?: string;
@@ -44,8 +42,6 @@ export class HomeAssistantAppEl extends QuickBarMixin(HassElement) {
private _visiblePromiseResolve?: () => void;
- private _visibleLaunchScreen = true;
-
constructor() {
super();
const path = curPath();
@@ -62,27 +58,22 @@ export class HomeAssistantAppEl extends QuickBarMixin(HassElement) {
this._panelUrl = panelUrl(path);
}
- protected render() {
- if (this._isHassComplete() && this.hass) {
- return html`
-
- `;
- }
-
- return "";
+ protected renderHass() {
+ return html`
+
+ `;
}
update(changedProps) {
- super.update(changedProps);
-
- // Remove launch screen if main gui is loaded
- if (this._isHassComplete() && this._visibleLaunchScreen) {
- this._visibleLaunchScreen = false;
+ if (this.hass?.states && this.hass.config && this.hass.services) {
+ this.render = this.renderHass;
+ this.update = super.update;
removeLaunchScreen();
}
+ super.update(changedProps);
}
protected firstUpdated(changedProps) {
@@ -129,10 +120,9 @@ export class HomeAssistantAppEl extends QuickBarMixin(HassElement) {
});
// Render launch screen info box (loading data / error message)
- if (!this._isHassComplete() && this._visibleLaunchScreen) {
- renderLaunchScreenInfoBox(
- html``
- );
+ // if Home Assistant is not loaded yet.
+ if (this.render !== this.renderHass) {
+ this._renderInitInfo(false);
}
}
@@ -188,7 +178,7 @@ export class HomeAssistantAppEl extends QuickBarMixin(HassElement) {
if (window.hassConnection) {
result = await window.hassConnection;
} else {
- // In the edge case that
+ // In the edge case that core.ts loads before app.ts
result = await new Promise((resolve) => {
window.hassConnectionReady = resolve;
});
@@ -198,7 +188,7 @@ export class HomeAssistantAppEl extends QuickBarMixin(HassElement) {
this._haVersion = conn.haVersion;
this.initializeHass(auth, conn);
} catch (err: any) {
- this._error = true;
+ this._renderInitInfo(true);
}
}
@@ -255,12 +245,10 @@ export class HomeAssistantAppEl extends QuickBarMixin(HassElement) {
}
}
- private _isHassComplete(): boolean {
- if (this.hass?.states && this.hass.config && this.hass.services) {
- return true;
- }
-
- return false;
+ private _renderInitInfo(error: boolean) {
+ renderLaunchScreenInfoBox(
+ html``
+ );
}
}
diff --git a/src/panels/config/server_control/ha-config-server-control.ts b/src/panels/config/server_control/ha-config-server-control.ts
index 35f011311e..5102f5e1f0 100644
--- a/src/panels/config/server_control/ha-config-server-control.ts
+++ b/src/panels/config/server_control/ha-config-server-control.ts
@@ -5,7 +5,6 @@ import "@polymer/paper-input/paper-input";
import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit";
import { customElement, property, state } from "lit/decorators";
import { componentsWithService } from "../../../common/config/components_with_service";
-import { isComponentLoaded } from "../../../common/config/is_component_loaded";
import "../../../components/buttons/ha-call-service-button";
import "../../../components/ha-card";
import { checkCoreConfig } from "../../../data/core";
@@ -158,20 +157,6 @@ export class HaConfigServerControl extends LitElement {
"ui.panel.config.server_control.section.server_management.restart"
)}
- ${!isComponentLoaded(this.hass, "hassio")
- ? html`${this.hass.localize(
- "ui.panel.config.server_control.section.server_management.stop"
- )}
- `
- : ""}
diff --git a/src/translations/en.json b/src/translations/en.json
index 6395157249..d2155fe09c 100755
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -1419,7 +1419,7 @@
},
"server_control": {
"caption": "Server Controls",
- "description": "Restart and stop the Home Assistant server",
+ "description": "Validate and restart the Home Assistant server",
"section": {
"validation": {
"heading": "Configuration validation",
diff --git a/src/util/launch-screen.ts b/src/util/launch-screen.ts
index eb873a65db..965732d470 100644
--- a/src/util/launch-screen.ts
+++ b/src/util/launch-screen.ts
@@ -7,9 +7,9 @@ export const removeLaunchScreen = () => {
}
};
-export const renderLaunchScreenInfoBox = (element: TemplateResult) => {
+export const renderLaunchScreenInfoBox = (content: TemplateResult) => {
const infoBoxElement = document.getElementById("ha-launch-screen-info-box");
if (infoBoxElement) {
- render(element, infoBoxElement);
+ render(content, infoBoxElement);
}
};
diff --git a/yarn.lock b/yarn.lock
index f7d31e3124..b311bced0a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9113,7 +9113,7 @@ fsevents@^1.2.7:
gulp-rename: ^2.0.0
gulp-zopfli-green: ^3.0.1
hls.js: ^1.0.11
- home-assistant-js-websocket: ^5.12.0
+ home-assistant-js-websocket: ^6.0.0
html-minifier: ^4.0.0
husky: ^1.3.1
idb-keyval: ^5.1.3
@@ -9184,10 +9184,10 @@ fsevents@^1.2.7:
languageName: unknown
linkType: soft
-"home-assistant-js-websocket@npm:^5.12.0":
- version: 5.12.0
- resolution: "home-assistant-js-websocket@npm:5.12.0"
- checksum: 62171c10e55e3245c9a4fc77dbd2641f234a66b4e3d0adaf8c4364c567473555dbf34f3d737bf3f31e92f2a198051b57f2782fd71f8406784693e64496809501
+"home-assistant-js-websocket@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "home-assistant-js-websocket@npm:6.0.0"
+ checksum: fef904210f66e180457ac2ae003fd29a0613179d3f8e5bb3f37aaaf0d5708a86ed071feb0d3bbf7268fdf454acec49539c8e9c0100ef159a711fcc98fd78cb14
languageName: node
linkType: hard