diff --git a/demo/src/html/index.html.template b/demo/src/html/index.html.template
index 5faafef63d..adcae133fb 100644
--- a/demo/src/html/index.html.template
+++ b/demo/src/html/index.html.template
@@ -63,33 +63,42 @@
align-items: center;
}
#ha-launch-screen svg {
- width: 170px;
+ width: 112px;
flex-shrink: 0;
}
- #ha-launch-screen .ha-launch-screen-spacer {
+ #ha-launch-screen .ha-launch-screen-spacer-top {
flex: 1;
+ margin-top: calc( 2 * max(env(safe-area-inset-bottom), 48px) + 46px );
+ padding-top: 48px;
+ }
+ #ha-launch-screen .ha-launch-screen-spacer-bottom {
+ flex: 1;
+ padding-top: 48px;
}
.ohf-logo {
- color: grey;
- font-size: 12px;
- margin-bottom: 16px;
+ margin: max(env(safe-area-inset-bottom), 48px) 0;
display: flex;
flex-direction: column;
align-items: center;
+ opacity: .66;
+ }
+ @media (prefers-color-scheme: dark) {
+ .ohf-logo {
+ filter: invert(1);
+ }
}
-
+
-
+
- a project from
-

+
diff --git a/package.json b/package.json
index c91c37b4d0..7213ab1680 100644
--- a/package.json
+++ b/package.json
@@ -27,13 +27,13 @@
"dependencies": {
"@babel/runtime": "7.25.0",
"@braintree/sanitize-url": "7.1.0",
- "@codemirror/autocomplete": "6.17.0",
+ "@codemirror/autocomplete": "6.18.0",
"@codemirror/commands": "6.6.0",
"@codemirror/language": "6.10.2",
"@codemirror/legacy-modes": "6.4.0",
"@codemirror/search": "6.5.6",
"@codemirror/state": "6.4.1",
- "@codemirror/view": "6.29.1",
+ "@codemirror/view": "6.30.0",
"@egjs/hammerjs": "2.0.17",
"@formatjs/intl-datetimeformat": "6.12.5",
"@formatjs/intl-displaynames": "6.6.8",
@@ -53,7 +53,7 @@
"@lit-labs/context": "0.4.1",
"@lit-labs/motion": "1.0.7",
"@lit-labs/observers": "2.0.2",
- "@lit-labs/virtualizer": "2.0.13",
+ "@lit-labs/virtualizer": "2.0.14",
"@lrnwebcomponents/simple-tooltip": "8.0.2",
"@material/chips": "=14.0.0-canary.53b3cad2f.0",
"@material/data-table": "=14.0.0-canary.53b3cad2f.0",
@@ -100,7 +100,7 @@
"chart.js": "4.4.3",
"color-name": "2.0.0",
"comlink": "4.4.1",
- "core-js": "3.37.1",
+ "core-js": "3.38.0",
"cropperjs": "1.6.2",
"date-fns": "3.6.0",
"date-fns-tz": "3.1.3",
@@ -117,14 +117,14 @@
"leaflet": "1.9.4",
"leaflet-draw": "1.0.4",
"lit": "2.8.0",
- "luxon": "3.4.4",
+ "luxon": "3.5.0",
"marked": "13.0.3",
"memoize-one": "6.0.0",
"node-vibrant": "3.2.1-alpha.1",
"proxy-polyfill": "0.3.2",
"punycode": "2.3.1",
"qr-scanner": "1.4.2",
- "qrcode": "1.5.3",
+ "qrcode": "1.5.4",
"roboto-fontface": "0.10.0",
"rrule": "2.8.1",
"sortablejs": "1.15.2",
@@ -155,7 +155,7 @@
"@babel/plugin-transform-runtime": "7.24.7",
"@babel/preset-env": "7.25.3",
"@babel/preset-typescript": "7.24.7",
- "@bundle-stats/plugin-webpack-filter": "4.13.4",
+ "@bundle-stats/plugin-webpack-filter": "4.14.0",
"@koa/cors": "5.0.0",
"@lokalise/node-api": "12.7.0",
"@octokit/auth-oauth-device": "7.1.1",
diff --git a/public/static/images/ohf-badge.svg b/public/static/images/ohf-badge.svg
new file mode 100644
index 0000000000..bbe9a15613
--- /dev/null
+++ b/public/static/images/ohf-badge.svg
@@ -0,0 +1,66 @@
+
+
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index 75594e4866..73f1f2caa1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "home-assistant-frontend"
-version = "20240806.1"
+version = "20240809.0"
license = {text = "Apache-2.0"}
description = "The Home Assistant frontend"
readme = "README.md"
diff --git a/src/html/index.html.template b/src/html/index.html.template
index 5a6316452d..94efb29c09 100644
--- a/src/html/index.html.template
+++ b/src/html/index.html.template
@@ -42,30 +42,39 @@
width: 112px;
flex-shrink: 0;
}
- #ha-launch-screen .ha-launch-screen-spacer {
+ #ha-launch-screen .ha-launch-screen-spacer-top {
flex: 1;
+ margin-top: calc( 2 * max(env(safe-area-inset-bottom), 48px) + 46px );
+ padding-top: 48px;
+ }
+ #ha-launch-screen .ha-launch-screen-spacer-bottom {
+ flex: 1;
+ padding-top: 48px;
}
.ohf-logo {
- color: grey;
- font-size: 12px;
- margin-bottom: 16px;
+ margin: max(env(safe-area-inset-bottom), 48px) 0;
display: flex;
flex-direction: column;
align-items: center;
+ opacity: .66;
+ }
+ @media (prefers-color-scheme: dark) {
+ .ohf-logo {
+ filter: invert(1);
+ }
}
-
+
-
+
- a project from
-

+
diff --git a/src/panels/config/automation/action/types/ha-automation-action-service.ts b/src/panels/config/automation/action/types/ha-automation-action-service.ts
index 9c751f82f5..6bb209a0a2 100644
--- a/src/panels/config/automation/action/types/ha-automation-action-service.ts
+++ b/src/panels/config/automation/action/types/ha-automation-action-service.ts
@@ -53,7 +53,7 @@ export class HaServiceAction extends LitElement implements ActionElement {
);
public static get defaultConfig() {
- return { service: "", data: {} };
+ return { action: "", data: {} };
}
protected willUpdate(changedProperties: PropertyValues) {
diff --git a/src/panels/config/automation/ha-automation-picker.ts b/src/panels/config/automation/ha-automation-picker.ts
index a5523eb3f4..e86e7ed568 100644
--- a/src/panels/config/automation/ha-automation-picker.ts
+++ b/src/panels/config/automation/ha-automation-picker.ts
@@ -353,6 +353,7 @@ class HaAutomationPicker extends SubscribeMixin(LitElement) {
},
actions: {
title: "",
+ label: this.hass.localize("ui.panel.config.generic.headers.actions"),
type: "icon-button",
showNarrow: true,
moveable: false,
diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-webhook.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-webhook.ts
index 42690fb608..86bee36fb5 100644
--- a/src/panels/config/automation/trigger/types/ha-automation-trigger-webhook.ts
+++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-webhook.ts
@@ -217,6 +217,7 @@ export class HaWebhookTrigger extends LitElement {
ha-textfield > ha-icon-button {
--mdc-icon-button-size: 24px;
--mdc-icon-size: 18px;
+ color: var(--secondary-text-color);
}
ha-button-menu {
diff --git a/src/panels/config/blueprint/ha-blueprint-overview.ts b/src/panels/config/blueprint/ha-blueprint-overview.ts
index a7b32ea051..a2c99603a2 100644
--- a/src/panels/config/blueprint/ha-blueprint-overview.ts
+++ b/src/panels/config/blueprint/ha-blueprint-overview.ts
@@ -198,6 +198,7 @@ class HaBlueprintOverview extends LitElement {
},
actions: {
title: "",
+ label: this.hass.localize("ui.panel.config.generic.headers.actions"),
type: "overflow-menu",
showNarrow: true,
moveable: false,
diff --git a/src/panels/config/helpers/ha-config-helpers.ts b/src/panels/config/helpers/ha-config-helpers.ts
index ab36243e23..48b6cfd461 100644
--- a/src/panels/config/helpers/ha-config-helpers.ts
+++ b/src/panels/config/helpers/ha-config-helpers.ts
@@ -349,7 +349,7 @@ export class HaConfigHelpers extends SubscribeMixin(LitElement) {
},
actions: {
title: "",
- label: "Actions",
+ label: this.hass.localize("ui.panel.config.generic.headers.actions"),
type: "overflow-menu",
hideable: false,
moveable: false,
diff --git a/src/panels/config/scene/ha-scene-dashboard.ts b/src/panels/config/scene/ha-scene-dashboard.ts
index 179ee15fac..ebb46d16e5 100644
--- a/src/panels/config/scene/ha-scene-dashboard.ts
+++ b/src/panels/config/scene/ha-scene-dashboard.ts
@@ -311,6 +311,9 @@ class HaSceneDashboard extends SubscribeMixin(LitElement) {
},
only_editable: {
title: "",
+ label: this.hass.localize(
+ "ui.panel.config.scene.picker.headers.editable"
+ ),
type: "icon",
showNarrow: true,
template: (scene) =>
@@ -330,6 +333,7 @@ class HaSceneDashboard extends SubscribeMixin(LitElement) {
},
actions: {
title: "",
+ label: this.hass.localize("ui.panel.config.generic.headers.actions"),
type: "overflow-menu",
showNarrow: true,
moveable: false,
diff --git a/src/panels/config/script/ha-script-editor.ts b/src/panels/config/script/ha-script-editor.ts
index 8b42f2b28a..1efff8d02c 100644
--- a/src/panels/config/script/ha-script-editor.ts
+++ b/src/panels/config/script/ha-script-editor.ts
@@ -488,7 +488,9 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
if (value && !Array.isArray(value)) {
config.sequence = [value];
}
- config.sequence = migrateAutomationAction(config.sequence);
+ if (config.sequence) {
+ config.sequence = migrateAutomationAction(config.sequence);
+ }
return config;
}
diff --git a/src/panels/config/script/ha-script-picker.ts b/src/panels/config/script/ha-script-picker.ts
index 8e1767a2c9..df26ed94b0 100644
--- a/src/panels/config/script/ha-script-picker.ts
+++ b/src/panels/config/script/ha-script-picker.ts
@@ -321,6 +321,7 @@ class HaScriptPicker extends SubscribeMixin(LitElement) {
},
actions: {
title: "",
+ label: this.hass.localize("ui.panel.config.generic.headers.actions"),
type: "overflow-menu",
showNarrow: true,
moveable: false,
diff --git a/src/panels/config/voice-assistants/debug/assist-render-pipeline-events.ts b/src/panels/config/voice-assistants/debug/assist-render-pipeline-events.ts
index 90fe7b449a..7572553b55 100644
--- a/src/panels/config/voice-assistants/debug/assist-render-pipeline-events.ts
+++ b/src/panels/config/voice-assistants/debug/assist-render-pipeline-events.ts
@@ -38,7 +38,7 @@ export class AssistPipelineEvents extends LitElement {
`;
}
return html`There where no events in this run.There were no events in this run.`;
}
return html`
diff --git a/src/panels/profile/ha-profile-section-general.ts b/src/panels/profile/ha-profile-section-general.ts
index 054e96eb2d..26fd528f9b 100644
--- a/src/panels/profile/ha-profile-section-general.ts
+++ b/src/panels/profile/ha-profile-section-general.ts
@@ -222,6 +222,7 @@ class HaProfileSectionGeneral extends LitElement {
text: this.hass.localize("ui.panel.profile.logout_text"),
confirmText: this.hass.localize("ui.panel.profile.logout"),
confirm: () => fireEvent(this, "hass-logout"),
+ destructive: true,
});
}
diff --git a/src/translations/en.json b/src/translations/en.json
index 54b7979d1e..7514ba4abf 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -3744,6 +3744,7 @@
"name": "Name",
"last_activated": "Last activated",
"category": "Category",
+ "editable": "[%key:ui::panel::config::helpers::picker::headers::editable%]",
"area": "Area",
"icon": "Icon"
},
diff --git a/yarn.lock b/yarn.lock
index a42abe5cf2..5e2fe653d9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6,12 +6,12 @@ __metadata:
cacheKey: 10
"@75lb/deep-merge@npm:^1.1.1":
- version: 1.1.1
- resolution: "@75lb/deep-merge@npm:1.1.1"
+ version: 1.1.2
+ resolution: "@75lb/deep-merge@npm:1.1.2"
dependencies:
- lodash.assignwith: "npm:^4.2.0"
+ lodash: "npm:^4.17.21"
typical: "npm:^7.1.1"
- checksum: 10/62f127818076123bcab670319cb9ab03cad9485e990870b85da5db57e5a036eb64c8d0a8c473bd3f5603912d31ead5dd3ead7a9604c7576bb349728c603922e0
+ checksum: 10/e64f8488ccd0e0237d1fb9450e5d56583c7b9421e08abcbcb277fbafaf979291c216c892834797b82ba4853329422d51e1564d02a6981debccfb2d49eee19cc1
languageName: node
linkType: hard
@@ -1471,18 +1471,18 @@ __metadata:
languageName: node
linkType: hard
-"@bundle-stats/plugin-webpack-filter@npm:4.13.4":
- version: 4.13.4
- resolution: "@bundle-stats/plugin-webpack-filter@npm:4.13.4"
+"@bundle-stats/plugin-webpack-filter@npm:4.14.0":
+ version: 4.14.0
+ resolution: "@bundle-stats/plugin-webpack-filter@npm:4.14.0"
peerDependencies:
core-js: ^3.0.0
- checksum: 10/2f21d8125043256bc110da3e7742467f6d3e51a9303852845238ea8873198312846385c1c58138d3e15ca297ead228a93bdb138a2e7e78924a7e09a483a565f7
+ checksum: 10/d6fa297120807e9e5e90acab0a745df0d24801cbd353e91ec09377c799679b6f58f5c5b72f90c9d34fd82de4da8aedb391df951e05b750d20c1d744a380a7748
languageName: node
linkType: hard
-"@codemirror/autocomplete@npm:6.17.0":
- version: 6.17.0
- resolution: "@codemirror/autocomplete@npm:6.17.0"
+"@codemirror/autocomplete@npm:6.18.0":
+ version: 6.18.0
+ resolution: "@codemirror/autocomplete@npm:6.18.0"
dependencies:
"@codemirror/language": "npm:^6.0.0"
"@codemirror/state": "npm:^6.0.0"
@@ -1493,7 +1493,7 @@ __metadata:
"@codemirror/state": ^6.0.0
"@codemirror/view": ^6.0.0
"@lezer/common": ^1.0.0
- checksum: 10/b38ef7ad392a88470c5e545b016bf1c443f50840ca4c7af9e19348fe27229aa9118dabc3cff8a0831143a307ab6ba948d7e126c0add7932a7f8044ab5902cda8
+ checksum: 10/29cf0857bc81ef1d7de963863b96d9597cbd90d992578a8d91943b5ca2b97f6e0c7c5f868ee9c2f844c1466f11b40799502e0237ee4c45394335c47af3b4765f
languageName: node
linkType: hard
@@ -1550,14 +1550,14 @@ __metadata:
languageName: node
linkType: hard
-"@codemirror/view@npm:6.29.1, @codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.27.0":
- version: 6.29.1
- resolution: "@codemirror/view@npm:6.29.1"
+"@codemirror/view@npm:6.30.0, @codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.27.0":
+ version: 6.30.0
+ resolution: "@codemirror/view@npm:6.30.0"
dependencies:
"@codemirror/state": "npm:^6.4.0"
style-mod: "npm:^4.1.0"
w3c-keyname: "npm:^2.2.4"
- checksum: 10/69002f500efed9bd864c710a4040ef03136b08351a61a423c653340d1134acdcab78a92a495666a08045b2bf54ff0811274a7e328c4c1ca4456de3f67694e955
+ checksum: 10/6e3c31ef5eb731183ef4ee7bee293d49deae72724d1c01f65fd3e800f0c9cd6e662c411d6a88742599bf2793e5c9491d0a080996e5553a7ce736a148d9f9ad58
languageName: node
linkType: hard
@@ -2213,13 +2213,13 @@ __metadata:
languageName: node
linkType: hard
-"@lit-labs/virtualizer@npm:2.0.13":
- version: 2.0.13
- resolution: "@lit-labs/virtualizer@npm:2.0.13"
+"@lit-labs/virtualizer@npm:2.0.14":
+ version: 2.0.14
+ resolution: "@lit-labs/virtualizer@npm:2.0.14"
dependencies:
- lit: "npm:^3.1.0"
+ lit: "npm:^3.2.0"
tslib: "npm:^2.0.3"
- checksum: 10/dcb1bae7c2ae930b56da2309050719572e7e3ba2b2a7aa32c440ba22bb67c75d4b3a3818c8fc589420a206e0dbc803ada73518c8bb68063f51a7dfef4b39b8a9
+ checksum: 10/6532a7cad1b36f90f7c5809c31833978b58ab409de5cd51f18bed33e611b7b86ffecb630996df98097a5d43d1e601137b077fd0b1553f44cfd7504d62c879c4f
languageName: node
linkType: hard
@@ -6757,10 +6757,10 @@ __metadata:
languageName: node
linkType: hard
-"core-js@npm:3.37.1":
- version: 3.37.1
- resolution: "core-js@npm:3.37.1"
- checksum: 10/25d6bd15fcc6ffd2a0ec0be57a78ff3358b3e1fdffdb6800fc93dcfdb3854037aee41f3d101aed8c37905d107daf98218b3e7ee95cec383710d2a66a5d9e541b
+"core-js@npm:3.38.0":
+ version: 3.38.0
+ resolution: "core-js@npm:3.38.0"
+ checksum: 10/95f5c768ee14aaf79e8fece9e58023a5a6367186184c92e825a842f271d3d91c559cfadee9c75712c463f248c61d636ed5a31a1fff1c904d4f5a2ed69b23f0c2
languageName: node
linkType: hard
@@ -7286,13 +7286,6 @@ __metadata:
languageName: node
linkType: hard
-"encode-utf8@npm:^1.0.3":
- version: 1.0.3
- resolution: "encode-utf8@npm:1.0.3"
- checksum: 10/0204c37cda21bf19bb8f87f7ec6c89a23d43488c2ef1e5cfa40b64ee9568e63e15dc323fa7f50a491e2c6d33843a6b409f6de09afbf6cf371cb8da596cc64b44
- languageName: node
- linkType: hard
-
"encodeurl@npm:^1.0.2, encodeurl@npm:~1.0.2":
version: 1.0.2
resolution: "encodeurl@npm:1.0.2"
@@ -8995,14 +8988,14 @@ __metadata:
"@babel/preset-typescript": "npm:7.24.7"
"@babel/runtime": "npm:7.25.0"
"@braintree/sanitize-url": "npm:7.1.0"
- "@bundle-stats/plugin-webpack-filter": "npm:4.13.4"
- "@codemirror/autocomplete": "npm:6.17.0"
+ "@bundle-stats/plugin-webpack-filter": "npm:4.14.0"
+ "@codemirror/autocomplete": "npm:6.18.0"
"@codemirror/commands": "npm:6.6.0"
"@codemirror/language": "npm:6.10.2"
"@codemirror/legacy-modes": "npm:6.4.0"
"@codemirror/search": "npm:6.5.6"
"@codemirror/state": "npm:6.4.1"
- "@codemirror/view": "npm:6.29.1"
+ "@codemirror/view": "npm:6.30.0"
"@egjs/hammerjs": "npm:2.0.17"
"@formatjs/intl-datetimeformat": "npm:6.12.5"
"@formatjs/intl-displaynames": "npm:6.6.8"
@@ -9023,7 +9016,7 @@ __metadata:
"@lit-labs/context": "npm:0.4.1"
"@lit-labs/motion": "npm:1.0.7"
"@lit-labs/observers": "npm:2.0.2"
- "@lit-labs/virtualizer": "npm:2.0.13"
+ "@lit-labs/virtualizer": "npm:2.0.14"
"@lokalise/node-api": "npm:12.7.0"
"@lrnwebcomponents/simple-tooltip": "npm:8.0.2"
"@material/chips": "npm:=14.0.0-canary.53b3cad2f.0"
@@ -9106,7 +9099,7 @@ __metadata:
chart.js: "npm:4.4.3"
color-name: "npm:2.0.0"
comlink: "npm:4.4.1"
- core-js: "npm:3.37.1"
+ core-js: "npm:3.38.0"
cropperjs: "npm:1.6.2"
date-fns: "npm:3.6.0"
date-fns-tz: "npm:3.1.3"
@@ -9150,7 +9143,7 @@ __metadata:
lit-analyzer: "npm:2.0.3"
lodash.merge: "npm:4.6.2"
lodash.template: "npm:4.5.0"
- luxon: "npm:3.4.4"
+ luxon: "npm:3.5.0"
magic-string: "npm:0.30.11"
map-stream: "npm:0.0.7"
marked: "npm:13.0.3"
@@ -9164,7 +9157,7 @@ __metadata:
proxy-polyfill: "npm:0.3.2"
punycode: "npm:2.3.1"
qr-scanner: "npm:1.4.2"
- qrcode: "npm:1.5.3"
+ qrcode: "npm:1.5.4"
roboto-fontface: "npm:0.10.0"
rollup: "npm:2.79.1"
rollup-plugin-string: "npm:3.0.0"
@@ -10724,13 +10717,6 @@ __metadata:
languageName: node
linkType: hard
-"lodash.assignwith@npm:^4.2.0":
- version: 4.2.0
- resolution: "lodash.assignwith@npm:4.2.0"
- checksum: 10/f313e1c9c36b67d160a15006b03f95da46dc246f35adbcfd10c2b3e93bb92de6f2cf4bad744a83e0324609913b3eaac1b92ab447b1a409cee00962a138df5a6e
- languageName: node
- linkType: hard
-
"lodash.camelcase@npm:^4.3.0":
version: 4.3.0
resolution: "lodash.camelcase@npm:4.3.0"
@@ -10872,10 +10858,10 @@ __metadata:
languageName: node
linkType: hard
-"luxon@npm:3.4.4":
- version: 3.4.4
- resolution: "luxon@npm:3.4.4"
- checksum: 10/c14164bc338987349075a08e63ea3ff902866735f7f5553a355b27be22667919765ff96fde4d3413d0e9a0edc4ff9e2e74ebcb8f86eae0ce8b14b27330d87d6e
+"luxon@npm:3.5.0":
+ version: 3.5.0
+ resolution: "luxon@npm:3.5.0"
+ checksum: 10/48f86e6c1c96815139f8559456a3354a276ba79bcef0ae0d4f2172f7652f3ba2be2237b0e103b8ea0b79b47715354ac9fac04eb1db3485dcc72d5110491dd47f
languageName: node
linkType: hard
@@ -12373,17 +12359,16 @@ __metadata:
languageName: node
linkType: hard
-"qrcode@npm:1.5.3":
- version: 1.5.3
- resolution: "qrcode@npm:1.5.3"
+"qrcode@npm:1.5.4":
+ version: 1.5.4
+ resolution: "qrcode@npm:1.5.4"
dependencies:
dijkstrajs: "npm:^1.0.1"
- encode-utf8: "npm:^1.0.3"
pngjs: "npm:^5.0.0"
yargs: "npm:^15.3.1"
bin:
qrcode: bin/qrcode
- checksum: 10/823642d59a81ba5f406a1e78415fee37fd53856038f49a85c4ca7aa32ba6b8505ab059a832718ac16612bed75aa2a18584faae38cf3c25e2c90fb19b8c55fe46
+ checksum: 10/9a1b61760e4ea334545a0f54bbc11c537aba0a17cf52cab9fa1b07f8a1337eed0bc6f7fde41b197f2c82c249bc48728983bfaf861bb7ecb29dc597b2ae33c424
languageName: node
linkType: hard