From 9ac3f745b3519687301eb4ee49e07b9ea6d73922 Mon Sep 17 00:00:00 2001
From: Philip Allgaier
Date: Thu, 6 Jul 2023 09:42:15 +0200
Subject: [PATCH 001/102] Show "Configured" header on integrations dashboard
for clarity (#17115)
---
.../integrations/ha-config-integrations-dashboard.ts | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/panels/config/integrations/ha-config-integrations-dashboard.ts b/src/panels/config/integrations/ha-config-integrations-dashboard.ts
index 969c44bbbf..d670e5894c 100644
--- a/src/panels/config/integrations/ha-config-integrations-dashboard.ts
+++ b/src/panels/config/integrations/ha-config-integrations-dashboard.ts
@@ -429,6 +429,13 @@ class HaConfigIntegrationsDashboard extends SubscribeMixin(LitElement) {
)}
`
: ""}
+ ${configEntriesInProgress.length ||
+ this._showDisabled ||
+ this._showIgnored
+ ? html`
+ ${this.hass.localize("ui.panel.config.integrations.configured")}
+
`
+ : ""}
${integrations.length
? integrations.map(
From 3d2734eb888034c50271faa93c48e3437436747e Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Thu, 6 Jul 2023 00:46:42 -0700
Subject: [PATCH 002/102] Fix sensor card to not crash when it finds no state
history (#17181)
---
src/panels/lovelace/common/graph/coordinates.ts | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/panels/lovelace/common/graph/coordinates.ts b/src/panels/lovelace/common/graph/coordinates.ts
index b63c61af05..56f5251965 100644
--- a/src/panels/lovelace/common/graph/coordinates.ts
+++ b/src/panels/lovelace/common/graph/coordinates.ts
@@ -119,6 +119,9 @@ export const coordinatesMinimalResponseCompressedState = (
detail: number,
limits?: { min?: number; max?: number }
): number[][] | undefined => {
+ if (!history) {
+ return undefined;
+ }
const numericHistory: NumericEntityHistoryState[] = history.map((item) => ({
state: Number(item.s),
// With minimal response and compressed state, we don't have last_changed,
From 155e9d9e95a85a3bb555f238fadd2c00ca7d3d69 Mon Sep 17 00:00:00 2001
From: puddly <32534428+puddly@users.noreply.github.com>
Date: Thu, 6 Jul 2023 03:55:31 -0400
Subject: [PATCH 003/102] Default the ZHA channel change dialog's preferred
channel to `auto` (#17178)
---
.../integration-panels/zha/dialog-zha-change-channel.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/panels/config/integrations/integration-panels/zha/dialog-zha-change-channel.ts b/src/panels/config/integrations/integration-panels/zha/dialog-zha-change-channel.ts
index ab3f5b77d4..13e4bc0d46 100644
--- a/src/panels/config/integrations/integration-panels/zha/dialog-zha-change-channel.ts
+++ b/src/panels/config/integrations/integration-panels/zha/dialog-zha-change-channel.ts
@@ -45,7 +45,7 @@ class DialogZHAChangeChannel extends LitElement implements HassDialog {
public async showDialog(params: ZHAChangeChannelDialogParams): Promise
{
this._params = params;
- this._newChannel = params.currentChannel;
+ this._newChannel = "auto";
}
public closeDialog(): void {
From e1be4751a1cc3985611ac93330ef7ebb2d92752e Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 6 Jul 2023 16:07:56 -0400
Subject: [PATCH 004/102] Update typescript-eslint monorepo to v5.61.0 (#17195)
---
package.json | 4 +-
yarn.lock | 109 ++++++++++++++++++++++++---------------------------
2 files changed, 53 insertions(+), 60 deletions(-)
diff --git a/package.json b/package.json
index 6790976198..1009f92b03 100644
--- a/package.json
+++ b/package.json
@@ -184,8 +184,8 @@
"@types/sortablejs": "1.15.1",
"@types/tar": "6.1.5",
"@types/webspeechapi": "0.0.29",
- "@typescript-eslint/eslint-plugin": "5.60.1",
- "@typescript-eslint/parser": "5.60.1",
+ "@typescript-eslint/eslint-plugin": "5.61.0",
+ "@typescript-eslint/parser": "5.61.0",
"@web/dev-server": "0.1.38",
"@web/dev-server-rollup": "0.4.1",
"babel-loader": "9.1.2",
diff --git a/yarn.lock b/yarn.lock
index 955781a689..7d184fb0cb 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4695,16 +4695,16 @@ __metadata:
languageName: node
linkType: hard
-"@typescript-eslint/eslint-plugin@npm:5.60.1":
- version: 5.60.1
- resolution: "@typescript-eslint/eslint-plugin@npm:5.60.1"
+"@typescript-eslint/eslint-plugin@npm:5.61.0":
+ version: 5.61.0
+ resolution: "@typescript-eslint/eslint-plugin@npm:5.61.0"
dependencies:
"@eslint-community/regexpp": ^4.4.0
- "@typescript-eslint/scope-manager": 5.60.1
- "@typescript-eslint/type-utils": 5.60.1
- "@typescript-eslint/utils": 5.60.1
+ "@typescript-eslint/scope-manager": 5.61.0
+ "@typescript-eslint/type-utils": 5.61.0
+ "@typescript-eslint/utils": 5.61.0
debug: ^4.3.4
- grapheme-splitter: ^1.0.4
+ graphemer: ^1.4.0
ignore: ^5.2.0
natural-compare-lite: ^1.4.0
semver: ^7.3.7
@@ -4715,43 +4715,43 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
- checksum: 6ea3fdc64b216ee709318bfce1573cd8d90836150f0075aaa8755c347541af9ec026043e538a3264d28d1b32ff49b1fd7c6163826b8513f19f0957fefccf7752
+ checksum: d9e891fb43ccb75322fc40d58d02479f98bd3c962db71075438868b13f579643d714a24b5477a827be7ca2e7e9f6058c406241b6696a6395c6fcbd6de76e015c
languageName: node
linkType: hard
-"@typescript-eslint/parser@npm:5.60.1":
- version: 5.60.1
- resolution: "@typescript-eslint/parser@npm:5.60.1"
+"@typescript-eslint/parser@npm:5.61.0":
+ version: 5.61.0
+ resolution: "@typescript-eslint/parser@npm:5.61.0"
dependencies:
- "@typescript-eslint/scope-manager": 5.60.1
- "@typescript-eslint/types": 5.60.1
- "@typescript-eslint/typescript-estree": 5.60.1
+ "@typescript-eslint/scope-manager": 5.61.0
+ "@typescript-eslint/types": 5.61.0
+ "@typescript-eslint/typescript-estree": 5.61.0
debug: ^4.3.4
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
typescript:
optional: true
- checksum: 08f1552ab0da178524a8de3654d2fb7c8ecb9efdad8e771c9cbf4af555c42e77d17b2c182d139a531cc76c3cabd091d1d25024c2c215cb809dca8b147c8a493c
+ checksum: 2422bca03ecc6830700aaa739ec46b8e9ab6c0a47a67f140dc6b62a42a8b98997e73bce52c6a010b8a9b461211c46ba865d5b7f680a7823cf5c245d3b61f7fd5
languageName: node
linkType: hard
-"@typescript-eslint/scope-manager@npm:5.60.1":
- version: 5.60.1
- resolution: "@typescript-eslint/scope-manager@npm:5.60.1"
+"@typescript-eslint/scope-manager@npm:5.61.0":
+ version: 5.61.0
+ resolution: "@typescript-eslint/scope-manager@npm:5.61.0"
dependencies:
- "@typescript-eslint/types": 5.60.1
- "@typescript-eslint/visitor-keys": 5.60.1
- checksum: 32c0786123f12fbb861aba3527471134a2e9978c7f712e0d7650080651870903482aed72a55f81deba9493118c1ca3c57edaaaa75d7acd9892818e3e9cc341ef
+ "@typescript-eslint/types": 5.61.0
+ "@typescript-eslint/visitor-keys": 5.61.0
+ checksum: 6dfbb42c4b7d796ae3c395398bdfd2e5a4ae8aaf1448381278ecc39a1d1045af2cb452da5a00519d265bc1a5997523de22d5021acb4dbe1648502fe61512d3c6
languageName: node
linkType: hard
-"@typescript-eslint/type-utils@npm:5.60.1":
- version: 5.60.1
- resolution: "@typescript-eslint/type-utils@npm:5.60.1"
+"@typescript-eslint/type-utils@npm:5.61.0":
+ version: 5.61.0
+ resolution: "@typescript-eslint/type-utils@npm:5.61.0"
dependencies:
- "@typescript-eslint/typescript-estree": 5.60.1
- "@typescript-eslint/utils": 5.60.1
+ "@typescript-eslint/typescript-estree": 5.61.0
+ "@typescript-eslint/utils": 5.61.0
debug: ^4.3.4
tsutils: ^3.21.0
peerDependencies:
@@ -4759,23 +4759,23 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
- checksum: f8d5f87b5441d5c671f69631efd103f5f45e0cb7dbe0131a5b4234a5208ac845041219e8baaa3adc341e82a602165dd6fabf4fd06964d0109d0875425c8ac918
+ checksum: f0203fd48c6218f004dd73a9a71ba4cf97f015d0f13a7b3c821a3ba7ec814839bae270a1db589184ca7091fe54815a3171d1993e8a25200bf33e131bd6e855d4
languageName: node
linkType: hard
-"@typescript-eslint/types@npm:5.60.1":
- version: 5.60.1
- resolution: "@typescript-eslint/types@npm:5.60.1"
- checksum: 766b6c857493b72a8f515e6a8e409476a317b7a7f0401fbcdf18f417839fca004dcaf06f58eb5ba00777e3ca9c68cd2f56fda79f3a8eb8a418095b5b1f625712
+"@typescript-eslint/types@npm:5.61.0":
+ version: 5.61.0
+ resolution: "@typescript-eslint/types@npm:5.61.0"
+ checksum: d311ca2141f6bcb5f0f8f97ddbc218c9911e0735aaa30f0f2e64d518fb33568410754e1b04bf157175f8783504f8ec62a7ab53a66a18507f43edb1e21fe69e90
languageName: node
linkType: hard
-"@typescript-eslint/typescript-estree@npm:5.60.1":
- version: 5.60.1
- resolution: "@typescript-eslint/typescript-estree@npm:5.60.1"
+"@typescript-eslint/typescript-estree@npm:5.61.0":
+ version: 5.61.0
+ resolution: "@typescript-eslint/typescript-estree@npm:5.61.0"
dependencies:
- "@typescript-eslint/types": 5.60.1
- "@typescript-eslint/visitor-keys": 5.60.1
+ "@typescript-eslint/types": 5.61.0
+ "@typescript-eslint/visitor-keys": 5.61.0
debug: ^4.3.4
globby: ^11.1.0
is-glob: ^4.0.3
@@ -4784,35 +4784,35 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
- checksum: 5bb9d08c3cbc303fc64647878cae37283c4cfa9e3ed00da02ee25dc2e46798a1ad6964c9f04086f0134716671357e6569a65ea0ae75f0f3ff94ae67666385c6f
+ checksum: efe25a1b2774939c02cb9b388cf72efa672811f1c39a87ddd617937f63c2320551ce459ba69c6d022e33322594d40b9f2d2c6bc9937387718adc40dc5e57ea8e
languageName: node
linkType: hard
-"@typescript-eslint/utils@npm:5.60.1":
- version: 5.60.1
- resolution: "@typescript-eslint/utils@npm:5.60.1"
+"@typescript-eslint/utils@npm:5.61.0":
+ version: 5.61.0
+ resolution: "@typescript-eslint/utils@npm:5.61.0"
dependencies:
"@eslint-community/eslint-utils": ^4.2.0
"@types/json-schema": ^7.0.9
"@types/semver": ^7.3.12
- "@typescript-eslint/scope-manager": 5.60.1
- "@typescript-eslint/types": 5.60.1
- "@typescript-eslint/typescript-estree": 5.60.1
+ "@typescript-eslint/scope-manager": 5.61.0
+ "@typescript-eslint/types": 5.61.0
+ "@typescript-eslint/typescript-estree": 5.61.0
eslint-scope: ^5.1.1
semver: ^7.3.7
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
- checksum: 00c1adaa09d5d5be947e98962a78c21ed08c3ac46dd5ddd7b78f6102537d50afd4578a42a3e09a24dd51f5bc493f0b968627b4423647540164b2d2380afa9246
+ checksum: 24efc1964e6c92db96fe0d9a390550e4f27e8f353e51a9b46bda03e6692ea5d40f398d539235a4ff0894e9e45dfcfb51df953ade2ae9d17a1421449625ce6f5a
languageName: node
linkType: hard
-"@typescript-eslint/visitor-keys@npm:5.60.1":
- version: 5.60.1
- resolution: "@typescript-eslint/visitor-keys@npm:5.60.1"
+"@typescript-eslint/visitor-keys@npm:5.61.0":
+ version: 5.61.0
+ resolution: "@typescript-eslint/visitor-keys@npm:5.61.0"
dependencies:
- "@typescript-eslint/types": 5.60.1
+ "@typescript-eslint/types": 5.61.0
eslint-visitor-keys: ^3.3.0
- checksum: 137f6a6f8efb398969087147b59f99f7d0deed044d89d7efce3631bb90bc32e3a13a5cee6a65e1c9830862c5c4402ac1a9b2c9e31fe46d1716602af2813bffae
+ checksum: a8d589f61ddfc380787218da4d347e8f9aef0f82f4a93f1daee46786bda889a90961c7ec1b470db5e3261438a728fdfd956f5bda6ee2de22c4be2d2152d6e270
languageName: node
linkType: hard
@@ -9354,13 +9354,6 @@ __metadata:
languageName: node
linkType: hard
-"grapheme-splitter@npm:^1.0.4":
- version: 1.0.4
- resolution: "grapheme-splitter@npm:1.0.4"
- checksum: 0c22ec54dee1b05cd480f78cf14f732cb5b108edc073572c4ec205df4cd63f30f8db8025afc5debc8835a8ddeacf648a1c7992fe3dcd6ad38f9a476d84906620
- languageName: node
- linkType: hard
-
"graphemer@npm:^1.4.0":
version: 1.4.0
resolution: "graphemer@npm:1.4.0"
@@ -9714,8 +9707,8 @@ __metadata:
"@types/sortablejs": 1.15.1
"@types/tar": 6.1.5
"@types/webspeechapi": 0.0.29
- "@typescript-eslint/eslint-plugin": 5.60.1
- "@typescript-eslint/parser": 5.60.1
+ "@typescript-eslint/eslint-plugin": 5.61.0
+ "@typescript-eslint/parser": 5.61.0
"@vaadin/combo-box": 24.1.2
"@vaadin/vaadin-themable-mixin": 24.1.2
"@vibrant/color": 3.2.1-alpha.1
From 0b31d9b94396813ce50ff191e0ad1300a8681be7 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 6 Jul 2023 19:51:37 -0400
Subject: [PATCH 005/102] Update dependency @octokit/plugin-retry to v5.0.5
(#17196)
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 1009f92b03..3ae3a81725 100644
--- a/package.json
+++ b/package.json
@@ -159,7 +159,7 @@
"@babel/preset-typescript": "7.22.5",
"@koa/cors": "4.0.0",
"@octokit/auth-oauth-device": "5.0.2",
- "@octokit/plugin-retry": "5.0.4",
+ "@octokit/plugin-retry": "5.0.5",
"@octokit/rest": "19.0.13",
"@open-wc/dev-server-hmr": "0.1.4",
"@rollup/plugin-babel": "6.0.3",
diff --git a/yarn.lock b/yarn.lock
index 7d184fb0cb..53d45385ba 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3345,16 +3345,16 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/plugin-retry@npm:5.0.4":
- version: 5.0.4
- resolution: "@octokit/plugin-retry@npm:5.0.4"
+"@octokit/plugin-retry@npm:5.0.5":
+ version: 5.0.5
+ resolution: "@octokit/plugin-retry@npm:5.0.5"
dependencies:
"@octokit/request-error": ^4.0.1
"@octokit/types": ^10.0.0
bottleneck: ^2.15.3
peerDependencies:
"@octokit/core": ">=3"
- checksum: 0c5645613f7ff758ac126da11ba20b4d49e4067676e30808f5ee3ee471adbd2ccfdea2200adfa5a4663b207964b3d60987f4c5e8682fb275bf134b33f2ef5178
+ checksum: c0bf1735e8af38fddccfe69bb1b97f2c194df88cd201309992e19a6d2c82b6d8e0515ca8d81acbc5861a03a49f0178bb026a230d107a53239ed3b7de43cf6e11
languageName: node
linkType: hard
@@ -9670,7 +9670,7 @@ __metadata:
"@mdi/js": 7.2.96
"@mdi/svg": 7.2.96
"@octokit/auth-oauth-device": 5.0.2
- "@octokit/plugin-retry": 5.0.4
+ "@octokit/plugin-retry": 5.0.5
"@octokit/rest": 19.0.13
"@open-wc/dev-server-hmr": 0.1.4
"@polymer/app-layout": 3.1.0
From 6b66b7f1faec34a4661ce45587e93c9d434ea2fe Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 6 Jul 2023 19:57:08 -0400
Subject: [PATCH 006/102] Update dependency hls.js to v1.4.8 (#17197)
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 3ae3a81725..ada7d02931 100644
--- a/package.json
+++ b/package.json
@@ -113,7 +113,7 @@
"deep-freeze": "0.0.1",
"fuse.js": "6.6.2",
"google-timezones-json": "1.1.0",
- "hls.js": "1.4.7",
+ "hls.js": "1.4.8",
"home-assistant-js-websocket": "8.1.0",
"idb-keyval": "6.2.1",
"intl-messageformat": "10.5.0",
diff --git a/yarn.lock b/yarn.lock
index 53d45385ba..95b7400d78 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9595,10 +9595,10 @@ __metadata:
languageName: node
linkType: hard
-"hls.js@npm:1.4.7":
- version: 1.4.7
- resolution: "hls.js@npm:1.4.7"
- checksum: ca58d97d49048fa6f437b834b807d26f5b47750aae57a573f179155e63e39159aa304f3ef13504b42c19969984918b17557e9311a779b0b04641bd6b668b45db
+"hls.js@npm:1.4.8":
+ version: 1.4.8
+ resolution: "hls.js@npm:1.4.8"
+ checksum: abbd3985e5339dea9b0cd244080b914ad9fb6b092e926a41f9bc9affe3383e4ed1ccda32515ef35b78580feb13373cabfdb7d23c3fb1c7ef9cd02f62f3302353
languageName: node
linkType: hard
@@ -9755,7 +9755,7 @@ __metadata:
gulp-merge-json: 2.1.2
gulp-rename: 2.0.0
gulp-zopfli-green: 6.0.1
- hls.js: 1.4.7
+ hls.js: 1.4.8
home-assistant-js-websocket: 8.1.0
html-minifier-terser: 7.2.0
husky: 8.0.3
From 6a22503285706f9995498965080bc198b5799dae Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 7 Jul 2023 11:00:31 -0400
Subject: [PATCH 007/102] Update dependency magic-string to v0.30.1 (#17202)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 14 +++++++-------
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/package.json b/package.json
index ada7d02931..a552f37428 100644
--- a/package.json
+++ b/package.json
@@ -220,7 +220,7 @@
"lint-staged": "13.2.3",
"lit-analyzer": "2.0.0-pre.3",
"lodash.template": "4.5.0",
- "magic-string": "0.30.0",
+ "magic-string": "0.30.1",
"map-stream": "0.0.7",
"merge-stream": "2.0.0",
"mocha": "10.2.0",
diff --git a/yarn.lock b/yarn.lock
index 95b7400d78..a69dd7b4dc 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2021,7 +2021,7 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13":
+"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13, @jridgewell/sourcemap-codec@npm:^1.4.15":
version: 1.4.15
resolution: "@jridgewell/sourcemap-codec@npm:1.4.15"
checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8
@@ -9771,7 +9771,7 @@ __metadata:
lit-analyzer: 2.0.0-pre.3
lodash.template: 4.5.0
luxon: 3.3.0
- magic-string: 0.30.0
+ magic-string: 0.30.1
map-stream: 0.0.7
marked: 4.3.0
memoize-one: 6.0.0
@@ -11663,12 +11663,12 @@ __metadata:
languageName: node
linkType: hard
-"magic-string@npm:0.30.0":
- version: 0.30.0
- resolution: "magic-string@npm:0.30.0"
+"magic-string@npm:0.30.1":
+ version: 0.30.1
+ resolution: "magic-string@npm:0.30.1"
dependencies:
- "@jridgewell/sourcemap-codec": ^1.4.13
- checksum: 7bdf22e27334d8a393858a16f5f840af63a7c05848c000fd714da5aa5eefa09a1bc01d8469362f25cc5c4a14ec01b46557b7fff8751365522acddf21e57c488d
+ "@jridgewell/sourcemap-codec": ^1.4.15
+ checksum: 7bc7e4493e32a77068f3753bf8652d4ab44142122eb7fb9fa871af83bef2cd2c57518a6769701cd5d0379bd624a13bc8c72ca25ac5655b27e5a61adf1fd38db2
languageName: node
linkType: hard
From 3191801fa7c4bb5487dd08346f94bb304a9b669b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 7 Jul 2023 11:04:15 -0400
Subject: [PATCH 008/102] Update babel monorepo to v7.22.6 (#17201)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 10 +--
yarn.lock | 201 +++++++++++++++++++++++++++------------------------
2 files changed, 110 insertions(+), 101 deletions(-)
diff --git a/package.json b/package.json
index a552f37428..18060e79ab 100644
--- a/package.json
+++ b/package.json
@@ -25,7 +25,7 @@
"license": "Apache-2.0",
"type": "module",
"dependencies": {
- "@babel/runtime": "7.22.5",
+ "@babel/runtime": "7.22.6",
"@braintree/sanitize-url": "6.0.2",
"@codemirror/autocomplete": "6.8.1",
"@codemirror/commands": "6.2.4",
@@ -152,10 +152,10 @@
"xss": "1.0.14"
},
"devDependencies": {
- "@babel/core": "7.22.5",
- "@babel/plugin-proposal-decorators": "7.22.5",
- "@babel/plugin-transform-runtime": "7.22.5",
- "@babel/preset-env": "7.22.5",
+ "@babel/core": "7.22.6",
+ "@babel/plugin-proposal-decorators": "7.22.6",
+ "@babel/plugin-transform-runtime": "7.22.6",
+ "@babel/preset-env": "7.22.6",
"@babel/preset-typescript": "7.22.5",
"@koa/cors": "4.0.0",
"@octokit/auth-oauth-device": "5.0.2",
diff --git a/yarn.lock b/yarn.lock
index a69dd7b4dc..b64d9a2ce9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -54,45 +54,45 @@ __metadata:
languageName: node
linkType: hard
-"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/compat-data@npm:7.22.5"
- checksum: eb1a47ebf79ae268b4a16903e977be52629339806e248455eb9973897c503a04b701f36a9de64e19750d6e081d0561e77a514c8dc470babbeba59ae94298ed18
+"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.22.5, @babel/compat-data@npm:^7.22.6":
+ version: 7.22.6
+ resolution: "@babel/compat-data@npm:7.22.6"
+ checksum: b88631143a2ebdb75e5bac47984e950983294f1739c2133f32569c6f2fcee85f83634bb6cf4378afb44fa8eb7877d11e48811d1e6a52afa161f82276ffdc3fb4
languageName: node
linkType: hard
-"@babel/core@npm:7.22.5, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.3":
- version: 7.22.5
- resolution: "@babel/core@npm:7.22.5"
+"@babel/core@npm:7.22.6, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.3":
+ version: 7.22.6
+ resolution: "@babel/core@npm:7.22.6"
dependencies:
"@ampproject/remapping": ^2.2.0
"@babel/code-frame": ^7.22.5
"@babel/generator": ^7.22.5
- "@babel/helper-compilation-targets": ^7.22.5
+ "@babel/helper-compilation-targets": ^7.22.6
"@babel/helper-module-transforms": ^7.22.5
- "@babel/helpers": ^7.22.5
- "@babel/parser": ^7.22.5
+ "@babel/helpers": ^7.22.6
+ "@babel/parser": ^7.22.6
"@babel/template": ^7.22.5
- "@babel/traverse": ^7.22.5
+ "@babel/traverse": ^7.22.6
"@babel/types": ^7.22.5
+ "@nicolo-ribaudo/semver-v6": ^6.3.3
convert-source-map: ^1.7.0
debug: ^4.1.0
gensync: ^1.0.0-beta.2
json5: ^2.2.2
- semver: ^6.3.0
- checksum: 173ae426958c90c7bbd7de622c6f13fcab8aef0fac3f138e2d47bc466d1cd1f86f71ca82ae0acb9032fd8794abed8efb56fea55c031396337eaec0d673b69d56
+ checksum: 6113ff87c0b707f9c2216285cd3e0a02088ecee427a75a6f3f865da7db25a4863ceb34950248df6ad86f6dd5c608b0f7220f972533f1cc27ff6a9b4380d6ef2c
languageName: node
linkType: hard
-"@babel/generator@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/generator@npm:7.22.5"
+"@babel/generator@npm:^7.22.5, @babel/generator@npm:^7.22.7":
+ version: 7.22.7
+ resolution: "@babel/generator@npm:7.22.7"
dependencies:
"@babel/types": ^7.22.5
"@jridgewell/gen-mapping": ^0.3.2
"@jridgewell/trace-mapping": ^0.3.17
jsesc: ^2.5.1
- checksum: efa64da70ca88fe69f05520cf5feed6eba6d30a85d32237671488cc355fdc379fe2c3246382a861d49574c4c2f82a317584f8811e95eb024e365faff3232b49d
+ checksum: cee15558888bdf5564e19cfaf95101b2910fa425f30cc1a25ac9b8621bd62b63544eb1b36ad89c80b5e41915699219f78712cab128d1f7e3da6a21fbf4143927
languageName: node
linkType: hard
@@ -114,24 +114,24 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helper-compilation-targets@npm:7.22.5"
+"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6":
+ version: 7.22.6
+ resolution: "@babel/helper-compilation-targets@npm:7.22.6"
dependencies:
- "@babel/compat-data": ^7.22.5
+ "@babel/compat-data": ^7.22.6
"@babel/helper-validator-option": ^7.22.5
- browserslist: ^4.21.3
+ "@nicolo-ribaudo/semver-v6": ^6.3.3
+ browserslist: ^4.21.9
lru-cache: ^5.1.1
- semver: ^6.3.0
peerDependencies:
"@babel/core": ^7.0.0
- checksum: a479460615acffa0f4fd0a29b740eafb53a93694265207d23a6038ccd18d183a382cacca515e77b7c9b042c3ba80b0aca0da5f1f62215140e81660d2cf721b68
+ checksum: c7788c48099c4f0edf2adeb367a941a930d39ed7453140ceb10d7114c4091922adf56d3cdd832050fd4501f25e872886390629042ddd365d3bce2ecad69ed394
languageName: node
linkType: hard
-"@babel/helper-create-class-features-plugin@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helper-create-class-features-plugin@npm:7.22.5"
+"@babel/helper-create-class-features-plugin@npm:^7.22.5, @babel/helper-create-class-features-plugin@npm:^7.22.6":
+ version: 7.22.6
+ resolution: "@babel/helper-create-class-features-plugin@npm:7.22.6"
dependencies:
"@babel/helper-annotate-as-pure": ^7.22.5
"@babel/helper-environment-visitor": ^7.22.5
@@ -140,11 +140,11 @@ __metadata:
"@babel/helper-optimise-call-expression": ^7.22.5
"@babel/helper-replace-supers": ^7.22.5
"@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
- "@babel/helper-split-export-declaration": ^7.22.5
- semver: ^6.3.0
+ "@babel/helper-split-export-declaration": ^7.22.6
+ "@nicolo-ribaudo/semver-v6": ^6.3.3
peerDependencies:
"@babel/core": ^7.0.0
- checksum: f1e91deae06dbee6dd956c0346bca600adfbc7955427795d9d8825f0439a3c3290c789ba2b4a02a1cdf6c1a1bd163dfa16d3d5e96b02a8efb639d2a774e88ed9
+ checksum: 10412e8a509a607cde6137288d3f12b1f91acd374e29e6dd6a277b67217e9f4c932a0acd89eeda837c8432916df775a8af6321aeb8d8b131ccdbf7688208dda1
languageName: node
linkType: hard
@@ -299,12 +299,12 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-split-export-declaration@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helper-split-export-declaration@npm:7.22.5"
+"@babel/helper-split-export-declaration@npm:^7.22.5, @babel/helper-split-export-declaration@npm:^7.22.6":
+ version: 7.22.6
+ resolution: "@babel/helper-split-export-declaration@npm:7.22.6"
dependencies:
"@babel/types": ^7.22.5
- checksum: d10e05a02f49c1f7c578cea63d2ac55356501bbf58856d97ac9bfde4957faee21ae97c7f566aa309e38a256eef58b58e5b670a7f568b362c00e93dfffe072650
+ checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921
languageName: node
linkType: hard
@@ -341,14 +341,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helpers@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helpers@npm:7.22.5"
+"@babel/helpers@npm:^7.22.6":
+ version: 7.22.6
+ resolution: "@babel/helpers@npm:7.22.6"
dependencies:
"@babel/template": ^7.22.5
- "@babel/traverse": ^7.22.5
+ "@babel/traverse": ^7.22.6
"@babel/types": ^7.22.5
- checksum: a96e785029dff72f171190943df895ab0f76e17bf3881efd630bc5fae91215042d1c2e9ed730e8e4adf4da6f28b24bd1f54ed93b90ffbca34c197351872a084e
+ checksum: 5c1f33241fe7bf7709868c2105134a0a86dca26a0fbd508af10a89312b1f77ca38ebae43e50be3b208613c5eacca1559618af4ca236f0abc55d294800faeff30
languageName: node
linkType: hard
@@ -363,12 +363,12 @@ __metadata:
languageName: node
linkType: hard
-"@babel/parser@npm:^7.18.4, @babel/parser@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/parser@npm:7.22.5"
+"@babel/parser@npm:^7.18.4, @babel/parser@npm:^7.22.5, @babel/parser@npm:^7.22.6, @babel/parser@npm:^7.22.7":
+ version: 7.22.7
+ resolution: "@babel/parser@npm:7.22.7"
bin:
parser: ./bin/babel-parser.js
- checksum: 470ebba516417ce8683b36e2eddd56dcfecb32c54b9bb507e28eb76b30d1c3e618fd0cfeee1f64d8357c2254514e1a19e32885cfb4e73149f4ae875436a6d59c
+ checksum: 02209ddbd445831ee8bf966fdf7c29d189ed4b14343a68eb2479d940e7e3846340d7cc6bd654a5f3d87d19dc84f49f50a58cf9363bee249dc5409ff3ba3dab54
languageName: node
linkType: hard
@@ -396,18 +396,18 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-proposal-decorators@npm:7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-proposal-decorators@npm:7.22.5"
+"@babel/plugin-proposal-decorators@npm:7.22.6":
+ version: 7.22.6
+ resolution: "@babel/plugin-proposal-decorators@npm:7.22.6"
dependencies:
- "@babel/helper-create-class-features-plugin": ^7.22.5
+ "@babel/helper-create-class-features-plugin": ^7.22.6
"@babel/helper-plugin-utils": ^7.22.5
"@babel/helper-replace-supers": ^7.22.5
- "@babel/helper-split-export-declaration": ^7.22.5
+ "@babel/helper-split-export-declaration": ^7.22.6
"@babel/plugin-syntax-decorators": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: b3807b92b6ffcaba7519a9b2bb59e4b5530873234cd170ff5727414939334fbcae17bbe523df846a103e2fc8ed2d2890d0d9408f073cfc1e90c28ab565c358e5
+ checksum: 568399236163108830e8a4b514369ecd0f08c39510f29ee208bfcc9e3847d2144478c30fa259aaa70640f181e749d1169ca06b06bde9af301407c35d5dba8b06
languageName: node
linkType: hard
@@ -749,22 +749,22 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-classes@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-classes@npm:7.22.5"
+"@babel/plugin-transform-classes@npm:^7.22.6":
+ version: 7.22.6
+ resolution: "@babel/plugin-transform-classes@npm:7.22.6"
dependencies:
"@babel/helper-annotate-as-pure": ^7.22.5
- "@babel/helper-compilation-targets": ^7.22.5
+ "@babel/helper-compilation-targets": ^7.22.6
"@babel/helper-environment-visitor": ^7.22.5
"@babel/helper-function-name": ^7.22.5
"@babel/helper-optimise-call-expression": ^7.22.5
"@babel/helper-plugin-utils": ^7.22.5
"@babel/helper-replace-supers": ^7.22.5
- "@babel/helper-split-export-declaration": ^7.22.5
+ "@babel/helper-split-export-declaration": ^7.22.6
globals: ^11.1.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 124b1b79180524cc9d08155cecde92c7f2ab0db02cbe0f8befa187ef3c7320909ce1a6d6daf5ce73e8330f9b40cf9991f424c6e572b8dddc1f14e2758fa80d20
+ checksum: 8380e855c01033dbc7460d9acfbc1fc37c880350fa798c2de8c594ef818ade0e4c96173ec72f05f2a4549d8d37135e18cb62548352d51557b45a0fb4388d2f3f
languageName: node
linkType: hard
@@ -1057,16 +1057,16 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-optional-chaining@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-optional-chaining@npm:7.22.5"
+"@babel/plugin-transform-optional-chaining@npm:^7.22.5, @babel/plugin-transform-optional-chaining@npm:^7.22.6":
+ version: 7.22.6
+ resolution: "@babel/plugin-transform-optional-chaining@npm:7.22.6"
dependencies:
"@babel/helper-plugin-utils": ^7.22.5
"@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
"@babel/plugin-syntax-optional-chaining": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 57b9c05fb22ae881b8a334b184fc6ee966661ed5d1eb4eed8c2fb9a12e68150d90b229efcb1aa777e246999830844fee06d7365f8bb4bb262fdcd23876ff3ea2
+ checksum: 9713f7920ed04090c149fc5ec024dd1638e8b97aa4ae3753b93072d84103b8de380afb96d6cf03e53b285420db4f705f3ac13149c6fd54f322b61dc19e33c54f
languageName: node
linkType: hard
@@ -1141,19 +1141,19 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-runtime@npm:7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-runtime@npm:7.22.5"
+"@babel/plugin-transform-runtime@npm:7.22.6":
+ version: 7.22.6
+ resolution: "@babel/plugin-transform-runtime@npm:7.22.6"
dependencies:
"@babel/helper-module-imports": ^7.22.5
"@babel/helper-plugin-utils": ^7.22.5
+ "@nicolo-ribaudo/semver-v6": ^6.3.3
babel-plugin-polyfill-corejs2: ^0.4.3
babel-plugin-polyfill-corejs3: ^0.8.1
babel-plugin-polyfill-regenerator: ^0.5.0
- semver: ^6.3.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 52cf177045b5f61a6cfc36b45aa7629586dc00a28371a09ef03e877a627f520efd51817ad8cceabaaa25f266e069859b36a5ac5018afeaa7f37aafa9325df4d8
+ checksum: 489e54d9d8a2ff54b50fa2ffb1c0456d93746ea4ac5fd950df17dbdcf04801acd59106828c30766691608044f561cd3d8883bfc0ee22e8db86e09616293c8cbd
languageName: node
linkType: hard
@@ -1274,12 +1274,12 @@ __metadata:
languageName: node
linkType: hard
-"@babel/preset-env@npm:7.22.5, @babel/preset-env@npm:^7.11.0":
- version: 7.22.5
- resolution: "@babel/preset-env@npm:7.22.5"
+"@babel/preset-env@npm:7.22.6, @babel/preset-env@npm:^7.11.0":
+ version: 7.22.6
+ resolution: "@babel/preset-env@npm:7.22.6"
dependencies:
- "@babel/compat-data": ^7.22.5
- "@babel/helper-compilation-targets": ^7.22.5
+ "@babel/compat-data": ^7.22.6
+ "@babel/helper-compilation-targets": ^7.22.6
"@babel/helper-plugin-utils": ^7.22.5
"@babel/helper-validator-option": ^7.22.5
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.22.5
@@ -1310,7 +1310,7 @@ __metadata:
"@babel/plugin-transform-block-scoping": ^7.22.5
"@babel/plugin-transform-class-properties": ^7.22.5
"@babel/plugin-transform-class-static-block": ^7.22.5
- "@babel/plugin-transform-classes": ^7.22.5
+ "@babel/plugin-transform-classes": ^7.22.6
"@babel/plugin-transform-computed-properties": ^7.22.5
"@babel/plugin-transform-destructuring": ^7.22.5
"@babel/plugin-transform-dotall-regex": ^7.22.5
@@ -1335,7 +1335,7 @@ __metadata:
"@babel/plugin-transform-object-rest-spread": ^7.22.5
"@babel/plugin-transform-object-super": ^7.22.5
"@babel/plugin-transform-optional-catch-binding": ^7.22.5
- "@babel/plugin-transform-optional-chaining": ^7.22.5
+ "@babel/plugin-transform-optional-chaining": ^7.22.6
"@babel/plugin-transform-parameters": ^7.22.5
"@babel/plugin-transform-private-methods": ^7.22.5
"@babel/plugin-transform-private-property-in-object": ^7.22.5
@@ -1353,14 +1353,14 @@ __metadata:
"@babel/plugin-transform-unicode-sets-regex": ^7.22.5
"@babel/preset-modules": ^0.1.5
"@babel/types": ^7.22.5
+ "@nicolo-ribaudo/semver-v6": ^6.3.3
babel-plugin-polyfill-corejs2: ^0.4.3
babel-plugin-polyfill-corejs3: ^0.8.1
babel-plugin-polyfill-regenerator: ^0.5.0
- core-js-compat: ^3.30.2
- semver: ^6.3.0
+ core-js-compat: ^3.31.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 6d9d09010ababef2ab48c8830770b2a8f45d6cce51db0924a98b0d95a5b1248a99ee07ee61cb5446d8b05b562db99a8af30b3ed194546419fb9b2889b8fd1ed3
+ checksum: 0e56f737a737de8dab192ac65c5c26a05872094a6b90ed4c23d620e483adf1d6c9a385d6973c8d752f0f54e2a1d6330bdd4cddf474619fc4815fb44ece82bae5
languageName: node
linkType: hard
@@ -1401,12 +1401,12 @@ __metadata:
languageName: node
linkType: hard
-"@babel/runtime@npm:7.22.5, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4":
- version: 7.22.5
- resolution: "@babel/runtime@npm:7.22.5"
+"@babel/runtime@npm:7.22.6, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4":
+ version: 7.22.6
+ resolution: "@babel/runtime@npm:7.22.6"
dependencies:
regenerator-runtime: ^0.13.11
- checksum: 12a50b7de2531beef38840d17af50c55a094253697600cee255311222390c68eed704829308d4fd305e1b3dfbce113272e428e9d9d45b1730e0fede997eaceb1
+ checksum: e585338287c4514a713babf4fdb8fc2a67adcebab3e7723a739fc62c79cfda875b314c90fd25f827afb150d781af97bc16c85bfdbfa2889f06053879a1ddb597
languageName: node
linkType: hard
@@ -1421,21 +1421,21 @@ __metadata:
languageName: node
linkType: hard
-"@babel/traverse@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/traverse@npm:7.22.5"
+"@babel/traverse@npm:^7.22.5, @babel/traverse@npm:^7.22.6":
+ version: 7.22.8
+ resolution: "@babel/traverse@npm:7.22.8"
dependencies:
"@babel/code-frame": ^7.22.5
- "@babel/generator": ^7.22.5
+ "@babel/generator": ^7.22.7
"@babel/helper-environment-visitor": ^7.22.5
"@babel/helper-function-name": ^7.22.5
"@babel/helper-hoist-variables": ^7.22.5
- "@babel/helper-split-export-declaration": ^7.22.5
- "@babel/parser": ^7.22.5
+ "@babel/helper-split-export-declaration": ^7.22.6
+ "@babel/parser": ^7.22.7
"@babel/types": ^7.22.5
debug: ^4.1.0
globals: ^11.1.0
- checksum: 560931422dc1761f2df723778dcb4e51ce0d02e560cf2caa49822921578f49189a5a7d053b78a32dca33e59be886a6b2200a6e24d4ae9b5086ca0ba803815694
+ checksum: a381369bc3eedfd13ed5fef7b884657f1c29024ea7388198149f0edc34bd69ce3966e9f40188d15f56490a5e12ba250ccc485f2882b53d41b054fccefb233e33
languageName: node
linkType: hard
@@ -3183,6 +3183,15 @@ __metadata:
languageName: node
linkType: hard
+"@nicolo-ribaudo/semver-v6@npm:^6.3.3":
+ version: 6.3.3
+ resolution: "@nicolo-ribaudo/semver-v6@npm:6.3.3"
+ bin:
+ semver: bin/semver.js
+ checksum: 8290855b1591477d2298364541fda64fafd4acc110b387067a71c9b05f4105c0a4ac079857ae9cd107c42ee884e8724a406b5116f069575e02d7ab87a35a5272
+ languageName: node
+ linkType: hard
+
"@nodelib/fs.scandir@npm:2.1.5":
version: 2.1.5
resolution: "@nodelib/fs.scandir@npm:2.1.5"
@@ -6371,7 +6380,7 @@ __metadata:
languageName: node
linkType: hard
-"browserslist@npm:^4.14.5, browserslist@npm:^4.21.3, browserslist@npm:^4.21.5":
+"browserslist@npm:^4.14.5, browserslist@npm:^4.21.9":
version: 4.21.9
resolution: "browserslist@npm:4.21.9"
dependencies:
@@ -7144,12 +7153,12 @@ __metadata:
languageName: node
linkType: hard
-"core-js-compat@npm:^3.30.1, core-js-compat@npm:^3.30.2":
- version: 3.31.0
- resolution: "core-js-compat@npm:3.31.0"
+"core-js-compat@npm:^3.30.1, core-js-compat@npm:^3.31.0":
+ version: 3.31.1
+ resolution: "core-js-compat@npm:3.31.1"
dependencies:
- browserslist: ^4.21.5
- checksum: 5c76ac5e4ab39480391f93a5aef14a2cfa188cda7bd6a7b8532de1f8bc5d89099a5025b2640d2ef70a2928614792363dcbcf8bd254aa7b2e11b85aeed7ac460f
+ browserslist: ^4.21.9
+ checksum: 9a16d6992621f4e099169297381a28d5712cdef7df1fa85352a7c285a5885d5d7a117ec2eae9ad715ed88c7cc774787a22cdb8aceababf6775fbc8b0cbeccdb7
languageName: node
linkType: hard
@@ -9606,12 +9615,12 @@ __metadata:
version: 0.0.0-use.local
resolution: "home-assistant-frontend@workspace:."
dependencies:
- "@babel/core": 7.22.5
- "@babel/plugin-proposal-decorators": 7.22.5
- "@babel/plugin-transform-runtime": 7.22.5
- "@babel/preset-env": 7.22.5
+ "@babel/core": 7.22.6
+ "@babel/plugin-proposal-decorators": 7.22.6
+ "@babel/plugin-transform-runtime": 7.22.6
+ "@babel/preset-env": 7.22.6
"@babel/preset-typescript": 7.22.5
- "@babel/runtime": 7.22.5
+ "@babel/runtime": 7.22.6
"@braintree/sanitize-url": 6.0.2
"@codemirror/autocomplete": 6.8.1
"@codemirror/commands": 6.2.4
From 1beab0449f72f2c0a976d9fba4558801cfae4e04 Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Sat, 8 Jul 2023 19:23:30 +0200
Subject: [PATCH 009/102] Fix missing translations of password field in cloud
signup (#17213)
---
src/panels/config/cloud/register/cloud-register.ts | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/panels/config/cloud/register/cloud-register.ts b/src/panels/config/cloud/register/cloud-register.ts
index 790ddcca5a..dfab49cfbe 100644
--- a/src/panels/config/cloud/register/cloud-register.ts
+++ b/src/panels/config/cloud/register/cloud-register.ts
@@ -148,7 +148,9 @@ export class CloudRegister extends LitElement {
Date: Sat, 8 Jul 2023 11:03:21 -0700
Subject: [PATCH 010/102] Don't automatically capitalize climate states
(#17217)
* Don't auto-capitalize climate states
* more states
---
src/components/ha-climate-state.ts | 1 -
src/components/ha-humidifier-state.ts | 1 -
src/components/ha-water_heater-state.js | 1 -
3 files changed, 3 deletions(-)
diff --git a/src/components/ha-climate-state.ts b/src/components/ha-climate-state.ts
index 7a1617e4ee..b90b51fee1 100644
--- a/src/components/ha-climate-state.ts
+++ b/src/components/ha-climate-state.ts
@@ -172,7 +172,6 @@ class HaClimateState extends LitElement {
.state-label {
font-weight: bold;
- text-transform: capitalize;
}
.unit {
diff --git a/src/components/ha-humidifier-state.ts b/src/components/ha-humidifier-state.ts
index fbf9cfe519..45af8a3384 100644
--- a/src/components/ha-humidifier-state.ts
+++ b/src/components/ha-humidifier-state.ts
@@ -119,7 +119,6 @@ class HaHumidifierState extends LitElement {
.state-label {
font-weight: bold;
- text-transform: capitalize;
}
.unit {
diff --git a/src/components/ha-water_heater-state.js b/src/components/ha-water_heater-state.js
index d4dc750640..4f2220fc58 100644
--- a/src/components/ha-water_heater-state.js
+++ b/src/components/ha-water_heater-state.js
@@ -29,7 +29,6 @@ class HaWaterHeaterState extends LocalizeMixin(PolymerElement) {
.state-label {
font-weight: bold;
- text-transform: capitalize;
}
.label {
From 4ea88613bd8eed5fee073017b74a1f05ff612e41 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 8 Jul 2023 20:22:26 -0400
Subject: [PATCH 011/102] Update dependency lit to v2.7.6 (#17220)
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 18060e79ab..920c08a051 100644
--- a/package.json
+++ b/package.json
@@ -120,7 +120,7 @@
"js-yaml": "4.1.0",
"leaflet": "1.9.4",
"leaflet-draw": "1.0.4",
- "lit": "2.7.5",
+ "lit": "2.7.6",
"luxon": "3.3.0",
"marked": "4.3.0",
"memoize-one": "6.0.0",
diff --git a/yarn.lock b/yarn.lock
index b64d9a2ce9..5af89de19f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9776,7 +9776,7 @@ __metadata:
leaflet: 1.9.4
leaflet-draw: 1.0.4
lint-staged: 13.2.3
- lit: 2.7.5
+ lit: 2.7.6
lit-analyzer: 2.0.0-pre.3
lodash.template: 4.5.0
luxon: 3.3.0
@@ -11439,14 +11439,14 @@ __metadata:
languageName: node
linkType: hard
-"lit@npm:2.7.5, lit@npm:^2.0.0, lit@npm:^2.0.0-rc.2, lit@npm:^2.2.1, lit@npm:^2.7.0, lit@npm:^2.7.4, lit@npm:^2.7.5":
- version: 2.7.5
- resolution: "lit@npm:2.7.5"
+"lit@npm:2.7.6, lit@npm:^2.0.0, lit@npm:^2.0.0-rc.2, lit@npm:^2.2.1, lit@npm:^2.7.0, lit@npm:^2.7.4, lit@npm:^2.7.5":
+ version: 2.7.6
+ resolution: "lit@npm:2.7.6"
dependencies:
"@lit/reactive-element": ^1.6.0
lit-element: ^3.3.0
lit-html: ^2.7.0
- checksum: 61a3f87c57136618f47a30b36cdfb592fcba42dcfbdb104d2b5ca291148c2d9a32fcb713bb91090bd08d6897a00e73f8425da6e3626aa080eaf410a32397ae69
+ checksum: 984a7fb9c0fa387f20177a07de22ea1c9cdc01a7dc7cb1c400d1df5b43a8956908460482a3259ea173555c6f0f13457d2ddc5c84d4c365007afd86e7ca58b384
languageName: node
linkType: hard
From 13d686bd67769df62f8e182329e895b496af67e9 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 9 Jul 2023 00:09:31 -0400
Subject: [PATCH 012/102] Update dependency core-js to v3.31.1 (#17224)
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 920c08a051..04ea09eb7f 100644
--- a/package.json
+++ b/package.json
@@ -105,7 +105,7 @@
"app-datepicker": "5.1.1",
"chart.js": "3.3.2",
"comlink": "4.4.1",
- "core-js": "3.31.0",
+ "core-js": "3.31.1",
"cropperjs": "1.5.13",
"date-fns": "2.30.0",
"date-fns-tz": "2.0.0",
diff --git a/yarn.lock b/yarn.lock
index 5af89de19f..3892518a94 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7162,10 +7162,10 @@ __metadata:
languageName: node
linkType: hard
-"core-js@npm:3.31.0":
- version: 3.31.0
- resolution: "core-js@npm:3.31.0"
- checksum: f7cf9b3010f7ca99c026d95b61743baca1a85512742ed2b67e8f65a72ac4f4fe0b90b00057783e886bdd39d3a295f42f845d33e7cba3973ed263df978343ab79
+"core-js@npm:3.31.1":
+ version: 3.31.1
+ resolution: "core-js@npm:3.31.1"
+ checksum: 14519213a63c55cf188bdd2f4dece54583feaf6b90e75d6c65e07f509cd487055bf64898aeda7c97c36029ac1ea2f2ed8e4b02281553f6a257e7143a32a14015
languageName: node
linkType: hard
@@ -9734,7 +9734,7 @@ __metadata:
chai: 4.3.7
chart.js: 3.3.2
comlink: 4.4.1
- core-js: 3.31.0
+ core-js: 3.31.1
cropperjs: 1.5.13
date-fns: 2.30.0
date-fns-tz: 2.0.0
From 487ff4afcf14564a6f15efb00743ff229ef35729 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 9 Jul 2023 17:35:21 -0400
Subject: [PATCH 013/102] Update babel monorepo (#17233)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 8 ++--
yarn.lock | 133 +++++++++++++++++++++++++--------------------------
2 files changed, 70 insertions(+), 71 deletions(-)
diff --git a/package.json b/package.json
index 04ea09eb7f..5bc8f63e8a 100644
--- a/package.json
+++ b/package.json
@@ -152,10 +152,10 @@
"xss": "1.0.14"
},
"devDependencies": {
- "@babel/core": "7.22.6",
- "@babel/plugin-proposal-decorators": "7.22.6",
- "@babel/plugin-transform-runtime": "7.22.6",
- "@babel/preset-env": "7.22.6",
+ "@babel/core": "7.22.8",
+ "@babel/plugin-proposal-decorators": "7.22.7",
+ "@babel/plugin-transform-runtime": "7.22.7",
+ "@babel/preset-env": "7.22.7",
"@babel/preset-typescript": "7.22.5",
"@koa/cors": "4.0.0",
"@octokit/auth-oauth-device": "5.0.2",
diff --git a/yarn.lock b/yarn.lock
index 3892518a94..2178e03aa9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -54,37 +54,37 @@ __metadata:
languageName: node
linkType: hard
-"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.22.5, @babel/compat-data@npm:^7.22.6":
+"@babel/compat-data@npm:^7.22.5, @babel/compat-data@npm:^7.22.6":
version: 7.22.6
resolution: "@babel/compat-data@npm:7.22.6"
checksum: b88631143a2ebdb75e5bac47984e950983294f1739c2133f32569c6f2fcee85f83634bb6cf4378afb44fa8eb7877d11e48811d1e6a52afa161f82276ffdc3fb4
languageName: node
linkType: hard
-"@babel/core@npm:7.22.6, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.3":
- version: 7.22.6
- resolution: "@babel/core@npm:7.22.6"
+"@babel/core@npm:7.22.8, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.3":
+ version: 7.22.8
+ resolution: "@babel/core@npm:7.22.8"
dependencies:
"@ampproject/remapping": ^2.2.0
"@babel/code-frame": ^7.22.5
- "@babel/generator": ^7.22.5
+ "@babel/generator": ^7.22.7
"@babel/helper-compilation-targets": ^7.22.6
"@babel/helper-module-transforms": ^7.22.5
"@babel/helpers": ^7.22.6
- "@babel/parser": ^7.22.6
+ "@babel/parser": ^7.22.7
"@babel/template": ^7.22.5
- "@babel/traverse": ^7.22.6
+ "@babel/traverse": ^7.22.8
"@babel/types": ^7.22.5
"@nicolo-ribaudo/semver-v6": ^6.3.3
convert-source-map: ^1.7.0
debug: ^4.1.0
gensync: ^1.0.0-beta.2
json5: ^2.2.2
- checksum: 6113ff87c0b707f9c2216285cd3e0a02088ecee427a75a6f3f865da7db25a4863ceb34950248df6ad86f6dd5c608b0f7220f972533f1cc27ff6a9b4380d6ef2c
+ checksum: 75ed701c14ad17070382ae1dd166f7534b31f2c71e00995a5f261ee2398ee96335b0736573b8ff24ab6e3e6f5814ee2a48fa11ab90fabcd3dfc70ea87c5f30a6
languageName: node
linkType: hard
-"@babel/generator@npm:^7.22.5, @babel/generator@npm:^7.22.7":
+"@babel/generator@npm:^7.22.7":
version: 7.22.7
resolution: "@babel/generator@npm:7.22.7"
dependencies:
@@ -114,7 +114,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6":
+"@babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6":
version: 7.22.6
resolution: "@babel/helper-compilation-targets@npm:7.22.6"
dependencies:
@@ -161,19 +161,18 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-define-polyfill-provider@npm:^0.4.0":
- version: 0.4.0
- resolution: "@babel/helper-define-polyfill-provider@npm:0.4.0"
+"@babel/helper-define-polyfill-provider@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "@babel/helper-define-polyfill-provider@npm:0.4.1"
dependencies:
- "@babel/helper-compilation-targets": ^7.17.7
- "@babel/helper-plugin-utils": ^7.16.7
+ "@babel/helper-compilation-targets": ^7.22.6
+ "@babel/helper-plugin-utils": ^7.22.5
debug: ^4.1.1
lodash.debounce: ^4.0.8
resolve: ^1.14.2
- semver: ^6.1.2
peerDependencies:
"@babel/core": ^7.4.0-0
- checksum: 5dca4c5e78457c5ced366bea601efa4e8c69bf5d53b0fe540283897575c49b1b88191c8ef062110de9046e886703ed3270fcda3a87f0886cdbb549204d3ff63f
+ checksum: 712b440cdd343ac7c4617225f91b0a9db5a7b1c96356b720e011af64ad6c4da9c66889f8d2962a0a2ae2e4ccb6a9b4a210c4a3c8c8ff103846b3d93b61bc6634
languageName: node
linkType: hard
@@ -246,7 +245,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
+"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
version: 7.22.5
resolution: "@babel/helper-plugin-utils@npm:7.22.5"
checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5
@@ -363,7 +362,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/parser@npm:^7.18.4, @babel/parser@npm:^7.22.5, @babel/parser@npm:^7.22.6, @babel/parser@npm:^7.22.7":
+"@babel/parser@npm:^7.18.4, @babel/parser@npm:^7.22.5, @babel/parser@npm:^7.22.7":
version: 7.22.7
resolution: "@babel/parser@npm:7.22.7"
bin:
@@ -396,9 +395,9 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-proposal-decorators@npm:7.22.6":
- version: 7.22.6
- resolution: "@babel/plugin-proposal-decorators@npm:7.22.6"
+"@babel/plugin-proposal-decorators@npm:7.22.7":
+ version: 7.22.7
+ resolution: "@babel/plugin-proposal-decorators@npm:7.22.7"
dependencies:
"@babel/helper-create-class-features-plugin": ^7.22.6
"@babel/helper-plugin-utils": ^7.22.5
@@ -407,7 +406,7 @@ __metadata:
"@babel/plugin-syntax-decorators": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 568399236163108830e8a4b514369ecd0f08c39510f29ee208bfcc9e3847d2144478c30fa259aaa70640f181e749d1169ca06b06bde9af301407c35d5dba8b06
+ checksum: d9d6f7cc8b3f1450963d3f26909af025836189b81e43c48ad455db5db2319beaf4ad2fda5aa12a1afcf856de11ecd5ee6894a9e906e8de8ee445c79102b50d26
languageName: node
linkType: hard
@@ -675,9 +674,9 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-async-generator-functions@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-async-generator-functions@npm:7.22.5"
+"@babel/plugin-transform-async-generator-functions@npm:^7.22.7":
+ version: 7.22.7
+ resolution: "@babel/plugin-transform-async-generator-functions@npm:7.22.7"
dependencies:
"@babel/helper-environment-visitor": ^7.22.5
"@babel/helper-plugin-utils": ^7.22.5
@@ -685,7 +684,7 @@ __metadata:
"@babel/plugin-syntax-async-generators": ^7.8.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 32890b69ec5627eb46ee8e084bddc6b98d85b66cae5e015f3a23924611a759789d2ff836406605f5293b5c2bad306b20cb1f5b7a46ed549b07bfec634bcd31f9
+ checksum: 57cd2cce3fb696dadf00e88f168683df69e900b92dadeae07429243c43bc21d5ccdc0c2db61cf5c37bd0fbd893fc455466bef6babe4aa5b79d9cb8ba89f40ae7
languageName: node
linkType: hard
@@ -1141,19 +1140,19 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-runtime@npm:7.22.6":
- version: 7.22.6
- resolution: "@babel/plugin-transform-runtime@npm:7.22.6"
+"@babel/plugin-transform-runtime@npm:7.22.7":
+ version: 7.22.7
+ resolution: "@babel/plugin-transform-runtime@npm:7.22.7"
dependencies:
"@babel/helper-module-imports": ^7.22.5
"@babel/helper-plugin-utils": ^7.22.5
"@nicolo-ribaudo/semver-v6": ^6.3.3
- babel-plugin-polyfill-corejs2: ^0.4.3
- babel-plugin-polyfill-corejs3: ^0.8.1
- babel-plugin-polyfill-regenerator: ^0.5.0
+ babel-plugin-polyfill-corejs2: ^0.4.4
+ babel-plugin-polyfill-corejs3: ^0.8.2
+ babel-plugin-polyfill-regenerator: ^0.5.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 489e54d9d8a2ff54b50fa2ffb1c0456d93746ea4ac5fd950df17dbdcf04801acd59106828c30766691608044f561cd3d8883bfc0ee22e8db86e09616293c8cbd
+ checksum: 1b41c44d5c44c98df3885b4f541c4edbef507bbdb1c889eed9878d9aabb29b6f589192ae712454c20ced22c79cfb2911403023daf03d20902434a258632d4773
languageName: node
linkType: hard
@@ -1274,9 +1273,9 @@ __metadata:
languageName: node
linkType: hard
-"@babel/preset-env@npm:7.22.6, @babel/preset-env@npm:^7.11.0":
- version: 7.22.6
- resolution: "@babel/preset-env@npm:7.22.6"
+"@babel/preset-env@npm:7.22.7, @babel/preset-env@npm:^7.11.0":
+ version: 7.22.7
+ resolution: "@babel/preset-env@npm:7.22.7"
dependencies:
"@babel/compat-data": ^7.22.6
"@babel/helper-compilation-targets": ^7.22.6
@@ -1304,7 +1303,7 @@ __metadata:
"@babel/plugin-syntax-top-level-await": ^7.14.5
"@babel/plugin-syntax-unicode-sets-regex": ^7.18.6
"@babel/plugin-transform-arrow-functions": ^7.22.5
- "@babel/plugin-transform-async-generator-functions": ^7.22.5
+ "@babel/plugin-transform-async-generator-functions": ^7.22.7
"@babel/plugin-transform-async-to-generator": ^7.22.5
"@babel/plugin-transform-block-scoped-functions": ^7.22.5
"@babel/plugin-transform-block-scoping": ^7.22.5
@@ -1354,13 +1353,13 @@ __metadata:
"@babel/preset-modules": ^0.1.5
"@babel/types": ^7.22.5
"@nicolo-ribaudo/semver-v6": ^6.3.3
- babel-plugin-polyfill-corejs2: ^0.4.3
- babel-plugin-polyfill-corejs3: ^0.8.1
- babel-plugin-polyfill-regenerator: ^0.5.0
+ babel-plugin-polyfill-corejs2: ^0.4.4
+ babel-plugin-polyfill-corejs3: ^0.8.2
+ babel-plugin-polyfill-regenerator: ^0.5.1
core-js-compat: ^3.31.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 0e56f737a737de8dab192ac65c5c26a05872094a6b90ed4c23d620e483adf1d6c9a385d6973c8d752f0f54e2a1d6330bdd4cddf474619fc4815fb44ece82bae5
+ checksum: eabde70e450dd54f57997b0f92317f69f268e9a1f85b13f5ef5540d2a38cfae5620bd8e48ddffb547c55fbd2f17673276e6eb9411d6b5fb82e3422faf44cb6cf
languageName: node
linkType: hard
@@ -1421,7 +1420,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/traverse@npm:^7.22.5, @babel/traverse@npm:^7.22.6":
+"@babel/traverse@npm:^7.22.5, @babel/traverse@npm:^7.22.6, @babel/traverse@npm:^7.22.8":
version: 7.22.8
resolution: "@babel/traverse@npm:7.22.8"
dependencies:
@@ -6118,39 +6117,39 @@ __metadata:
languageName: node
linkType: hard
-"babel-plugin-polyfill-corejs2@npm:^0.4.3":
- version: 0.4.3
- resolution: "babel-plugin-polyfill-corejs2@npm:0.4.3"
+"babel-plugin-polyfill-corejs2@npm:^0.4.4":
+ version: 0.4.4
+ resolution: "babel-plugin-polyfill-corejs2@npm:0.4.4"
dependencies:
- "@babel/compat-data": ^7.17.7
- "@babel/helper-define-polyfill-provider": ^0.4.0
- semver: ^6.1.1
+ "@babel/compat-data": ^7.22.6
+ "@babel/helper-define-polyfill-provider": ^0.4.1
+ "@nicolo-ribaudo/semver-v6": ^6.3.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 09ba40b9f8ac66a733628b2f12722bb764bdcc4f9600b93d60f1994418a8f84bc4b1ed9ab07c9d288debbf6210413fdff0721a3a43bd89c7f77adf76b0310adc
+ checksum: 0273f3d74ccbf78086a3b14bb11b1fb94933830f51c576a24229d75b3b91c8b357c3a381d4ab3146abf9b052fa4c33ec9368dd010ada9ee355e1d03ff64e1ff0
languageName: node
linkType: hard
-"babel-plugin-polyfill-corejs3@npm:^0.8.1":
- version: 0.8.1
- resolution: "babel-plugin-polyfill-corejs3@npm:0.8.1"
+"babel-plugin-polyfill-corejs3@npm:^0.8.2":
+ version: 0.8.2
+ resolution: "babel-plugin-polyfill-corejs3@npm:0.8.2"
dependencies:
- "@babel/helper-define-polyfill-provider": ^0.4.0
- core-js-compat: ^3.30.1
+ "@babel/helper-define-polyfill-provider": ^0.4.1
+ core-js-compat: ^3.31.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: c23a581973c141a4687126cf964981180ef27e3eb0b34b911161db4f5caf9ba7ff60bee0ebe46d650ba09e03a6a3ac2cd6a6ae5f4f5363a148470e5cd8447df2
+ checksum: 0bc3e9e0114eba18f4fea8a9ff5a6016cae73b74cb091290c3f75fd7b9e34e712ee26f95b52d796f283970d7c6256fb01196e3608e8db03f620e3389d56d37c6
languageName: node
linkType: hard
-"babel-plugin-polyfill-regenerator@npm:^0.5.0":
- version: 0.5.0
- resolution: "babel-plugin-polyfill-regenerator@npm:0.5.0"
+"babel-plugin-polyfill-regenerator@npm:^0.5.1":
+ version: 0.5.1
+ resolution: "babel-plugin-polyfill-regenerator@npm:0.5.1"
dependencies:
- "@babel/helper-define-polyfill-provider": ^0.4.0
+ "@babel/helper-define-polyfill-provider": ^0.4.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: ef2bcffc7c9a5e4426fc2dbf89bf3a46999a8415c21cd741c3ab3cb4b5ab804aaa3d71ef733f0eda1bcc0b91d9d80f98d33983a66dab9b8bed166ec38f8f8ad1
+ checksum: 85a56d28b34586fbe482225fb6a9592fc793a459c5eea987a3427fb723c7aa2f76916348a9fc5e9ca48754ebf6086cfbb9226f4cd0cf9c6257f94553622562ed
languageName: node
linkType: hard
@@ -7153,7 +7152,7 @@ __metadata:
languageName: node
linkType: hard
-"core-js-compat@npm:^3.30.1, core-js-compat@npm:^3.31.0":
+"core-js-compat@npm:^3.31.0":
version: 3.31.1
resolution: "core-js-compat@npm:3.31.1"
dependencies:
@@ -9615,10 +9614,10 @@ __metadata:
version: 0.0.0-use.local
resolution: "home-assistant-frontend@workspace:."
dependencies:
- "@babel/core": 7.22.6
- "@babel/plugin-proposal-decorators": 7.22.6
- "@babel/plugin-transform-runtime": 7.22.6
- "@babel/preset-env": 7.22.6
+ "@babel/core": 7.22.8
+ "@babel/plugin-proposal-decorators": 7.22.7
+ "@babel/plugin-transform-runtime": 7.22.7
+ "@babel/preset-env": 7.22.7
"@babel/preset-typescript": 7.22.5
"@babel/runtime": 7.22.6
"@braintree/sanitize-url": 6.0.2
@@ -14073,7 +14072,7 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0":
+"semver@npm:^6.0.0, semver@npm:^6.3.0":
version: 6.3.0
resolution: "semver@npm:6.3.0"
bin:
From fdf5abd0f946ae16b25a7a16a899af547dae4ee1 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 9 Jul 2023 17:37:14 -0400
Subject: [PATCH 014/102] Update dependency @codemirror/view to v6.14.1
(#17225)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 5bc8f63e8a..7e4a279f46 100644
--- a/package.json
+++ b/package.json
@@ -33,7 +33,7 @@
"@codemirror/legacy-modes": "6.3.2",
"@codemirror/search": "6.5.0",
"@codemirror/state": "6.2.1",
- "@codemirror/view": "6.14.0",
+ "@codemirror/view": "6.14.1",
"@egjs/hammerjs": "2.0.17",
"@formatjs/intl-datetimeformat": "6.10.0",
"@formatjs/intl-displaynames": "6.5.0",
diff --git a/yarn.lock b/yarn.lock
index 2178e03aa9..00d5cede15 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1526,14 +1526,14 @@ __metadata:
languageName: node
linkType: hard
-"@codemirror/view@npm:6.14.0, @codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.6.0":
- version: 6.14.0
- resolution: "@codemirror/view@npm:6.14.0"
+"@codemirror/view@npm:6.14.1, @codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.6.0":
+ version: 6.14.1
+ resolution: "@codemirror/view@npm:6.14.1"
dependencies:
"@codemirror/state": ^6.1.4
style-mod: ^4.0.0
w3c-keyname: ^2.2.4
- checksum: f8fbb8e8cf1bc23de8cd64b1e645112d13f72cd2f1609fb9047d616908c2189ff518b89f21484371e7a37ba1804288452558e96488791f0c850f62b8e28dc163
+ checksum: 19114ee05b3795ebe07a69cf00c36e8351b3500ce105b8412d90e757d459f71370ead3de852f0fda069041803276e6c38e6f1f943f77e85c9b5c279ab7fa1c4a
languageName: node
linkType: hard
@@ -9627,7 +9627,7 @@ __metadata:
"@codemirror/legacy-modes": 6.3.2
"@codemirror/search": 6.5.0
"@codemirror/state": 6.2.1
- "@codemirror/view": 6.14.0
+ "@codemirror/view": 6.14.1
"@egjs/hammerjs": 2.0.17
"@formatjs/intl-datetimeformat": 6.10.0
"@formatjs/intl-displaynames": 6.5.0
From 0974d86bfd0be12e9914e44c678b763f3423b7d7 Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Sun, 9 Jul 2023 15:39:51 -0700
Subject: [PATCH 015/102] Localize the statistics search label (#17223)
* Localize the statistics search label
* switch to common search
---
src/components/search-input.ts | 2 +-
src/layouts/hass-tabs-subpage-data-table.ts | 3 +--
.../developer-tools/statistics/developer-tools-statistics.ts | 1 +
src/translations/en.json | 1 +
4 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/components/search-input.ts b/src/components/search-input.ts
index 0a2c8598d5..2f4298ecaa 100644
--- a/src/components/search-input.ts
+++ b/src/components/search-input.ts
@@ -33,7 +33,7 @@ class SearchInput extends LitElement {
return html`
${!this.narrow
? html`
Date: Sun, 9 Jul 2023 19:40:21 -0400
Subject: [PATCH 016/102] Update dependency @lit-labs/virtualizer to v2.0.4
(#17219)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 7e4a279f46..4838f73498 100644
--- a/package.json
+++ b/package.json
@@ -52,7 +52,7 @@
"@lezer/highlight": "1.1.6",
"@lit-labs/context": "0.3.3",
"@lit-labs/motion": "1.0.3",
- "@lit-labs/virtualizer": "2.0.3",
+ "@lit-labs/virtualizer": "2.0.4",
"@lrnwebcomponents/simple-tooltip": "7.0.11",
"@material/chips": "=14.0.0-canary.53b3cad2f.0",
"@material/data-table": "=14.0.0-canary.53b3cad2f.0",
diff --git a/yarn.lock b/yarn.lock
index 00d5cede15..3dcac07cfd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2104,13 +2104,13 @@ __metadata:
languageName: node
linkType: hard
-"@lit-labs/virtualizer@npm:2.0.3":
- version: 2.0.3
- resolution: "@lit-labs/virtualizer@npm:2.0.3"
+"@lit-labs/virtualizer@npm:2.0.4":
+ version: 2.0.4
+ resolution: "@lit-labs/virtualizer@npm:2.0.4"
dependencies:
lit: ^2.7.0
tslib: ^2.0.3
- checksum: 594b89aca53210a6c0127c331fd05b795074df41aba086b63cb13ad5990e6962b86ca8403fe3a673e3bf46735e2def75d5412afe582702346fbd92a3331d34e1
+ checksum: a830318c50a4bc404829ab5ca3b81fa1bd72cd63bd0195c3e224dfe16cdc0c54335cd6ced222310b4a8aed438ca9ef8481e29e030b7f1a784345ffd7503439a0
languageName: node
linkType: hard
@@ -9647,7 +9647,7 @@ __metadata:
"@lezer/highlight": 1.1.6
"@lit-labs/context": 0.3.3
"@lit-labs/motion": 1.0.3
- "@lit-labs/virtualizer": 2.0.3
+ "@lit-labs/virtualizer": 2.0.4
"@lrnwebcomponents/simple-tooltip": 7.0.11
"@material/chips": =14.0.0-canary.53b3cad2f.0
"@material/data-table": =14.0.0-canary.53b3cad2f.0
From e01ad86da9fd410f1083eec3b081db8983f074e9 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 10 Jul 2023 09:51:30 +0200
Subject: [PATCH 017/102] Bump actions/setup-node from 3.6.0 to 3.7.0 (#17246)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/cast_deployment.yaml | 4 ++--
.github/workflows/ci.yaml | 8 ++++----
.github/workflows/demo_deployment.yaml | 4 ++--
.github/workflows/design_deployment.yaml | 2 +-
.github/workflows/design_preview.yaml | 2 +-
.github/workflows/nightly.yaml | 2 +-
.github/workflows/release.yaml | 2 +-
7 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/.github/workflows/cast_deployment.yaml b/.github/workflows/cast_deployment.yaml
index 120658dd0c..b1cde578e8 100644
--- a/.github/workflows/cast_deployment.yaml
+++ b/.github/workflows/cast_deployment.yaml
@@ -26,7 +26,7 @@ jobs:
ref: dev
- name: Setup Node
- uses: actions/setup-node@v3.6.0
+ uses: actions/setup-node@v3.7.0
with:
node-version-file: ".nvmrc"
cache: yarn
@@ -62,7 +62,7 @@ jobs:
ref: master
- name: Setup Node
- uses: actions/setup-node@v3.6.0
+ uses: actions/setup-node@v3.7.0
with:
node-version-file: ".nvmrc"
cache: yarn
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 16656927e6..94f4e6413a 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -26,7 +26,7 @@ jobs:
- name: Check out files from GitHub
uses: actions/checkout@v3.5.3
- name: Setup Node
- uses: actions/setup-node@v3.6.0
+ uses: actions/setup-node@v3.7.0
with:
node-version-file: ".nvmrc"
cache: yarn
@@ -49,7 +49,7 @@ jobs:
- name: Check out files from GitHub
uses: actions/checkout@v3.5.3
- name: Setup Node
- uses: actions/setup-node@v3.6.0
+ uses: actions/setup-node@v3.7.0
with:
node-version-file: ".nvmrc"
cache: yarn
@@ -67,7 +67,7 @@ jobs:
- name: Check out files from GitHub
uses: actions/checkout@v3.5.3
- name: Setup Node
- uses: actions/setup-node@v3.6.0
+ uses: actions/setup-node@v3.7.0
with:
node-version-file: ".nvmrc"
cache: yarn
@@ -85,7 +85,7 @@ jobs:
- name: Check out files from GitHub
uses: actions/checkout@v3.5.3
- name: Setup Node
- uses: actions/setup-node@v3.6.0
+ uses: actions/setup-node@v3.7.0
with:
node-version-file: ".nvmrc"
cache: yarn
diff --git a/.github/workflows/demo_deployment.yaml b/.github/workflows/demo_deployment.yaml
index 77c4b98f5c..cbf8b92d88 100644
--- a/.github/workflows/demo_deployment.yaml
+++ b/.github/workflows/demo_deployment.yaml
@@ -27,7 +27,7 @@ jobs:
ref: dev
- name: Setup Node
- uses: actions/setup-node@v3.6.0
+ uses: actions/setup-node@v3.7.0
with:
node-version-file: ".nvmrc"
cache: yarn
@@ -63,7 +63,7 @@ jobs:
ref: master
- name: Setup Node
- uses: actions/setup-node@v3.6.0
+ uses: actions/setup-node@v3.7.0
with:
node-version-file: ".nvmrc"
cache: yarn
diff --git a/.github/workflows/design_deployment.yaml b/.github/workflows/design_deployment.yaml
index 8b5aec8a39..096dfd752b 100644
--- a/.github/workflows/design_deployment.yaml
+++ b/.github/workflows/design_deployment.yaml
@@ -19,7 +19,7 @@ jobs:
uses: actions/checkout@v3.5.3
- name: Setup Node
- uses: actions/setup-node@v3.6.0
+ uses: actions/setup-node@v3.7.0
with:
node-version-file: ".nvmrc"
cache: yarn
diff --git a/.github/workflows/design_preview.yaml b/.github/workflows/design_preview.yaml
index a257f9ec98..d5b5bde6fd 100644
--- a/.github/workflows/design_preview.yaml
+++ b/.github/workflows/design_preview.yaml
@@ -24,7 +24,7 @@ jobs:
uses: actions/checkout@v3.5.3
- name: Setup Node
- uses: actions/setup-node@v3.6.0
+ uses: actions/setup-node@v3.7.0
with:
node-version-file: ".nvmrc"
cache: yarn
diff --git a/.github/workflows/nightly.yaml b/.github/workflows/nightly.yaml
index 76f0415496..70c397083e 100644
--- a/.github/workflows/nightly.yaml
+++ b/.github/workflows/nightly.yaml
@@ -28,7 +28,7 @@ jobs:
python-version: ${{ env.PYTHON_VERSION }}
- name: Setup Node
- uses: actions/setup-node@v3.6.0
+ uses: actions/setup-node@v3.7.0
with:
node-version-file: ".nvmrc"
cache: yarn
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index a269b30074..9c181a1690 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -34,7 +34,7 @@ jobs:
python-version: ${{ env.PYTHON_VERSION }}
- name: Setup Node
- uses: actions/setup-node@v3.6.0
+ uses: actions/setup-node@v3.7.0
with:
node-version-file: ".nvmrc"
cache: yarn
From f35b493d2e19e8d10ae9699ccde6f97fda4c1bac Mon Sep 17 00:00:00 2001
From: Denis Shulyaka
Date: Mon, 10 Jul 2023 12:15:27 +0300
Subject: [PATCH 018/102] humidifier cards: support null target humidity
(#17240)
remove target humidity if not provided
---
src/panels/lovelace/cards/hui-humidifier-card.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/panels/lovelace/cards/hui-humidifier-card.ts b/src/panels/lovelace/cards/hui-humidifier-card.ts
index 57e9ee8ee5..3aae9d2bf5 100644
--- a/src/panels/lovelace/cards/hui-humidifier-card.ts
+++ b/src/panels/lovelace/cards/hui-humidifier-card.ts
@@ -100,7 +100,7 @@ export class HuiHumidifierCard extends LitElement implements LovelaceCard {
stateObj.attributes.humidity !== null &&
Number.isFinite(Number(stateObj.attributes.humidity))
? stateObj.attributes.humidity
- : stateObj.attributes.min_humidity;
+ : null;
const setHumidity = this._setHum ? this._setHum : targetHumidity;
@@ -111,6 +111,7 @@ export class HuiHumidifierCard extends LitElement implements LovelaceCard {
: html`
Date: Mon, 10 Jul 2023 12:30:03 +0200
Subject: [PATCH 019/102] Remove unused device class translations (#17253)
---
src/data/logbook.ts | 67 ++---------------------------------------
src/data/translation.ts | 1 -
2 files changed, 2 insertions(+), 66 deletions(-)
diff --git a/src/data/logbook.ts b/src/data/logbook.ts
index f5caa718b7..37b0737bea 100644
--- a/src/data/logbook.ts
+++ b/src/data/logbook.ts
@@ -71,71 +71,8 @@ export const getLogbookDataForContext = async (
hass: HomeAssistant,
startDate: string,
contextId?: string
-): Promise => {
- await hass.loadBackendTranslation("device_class");
- return getLogbookDataFromServer(
- hass,
- startDate,
- undefined,
- undefined,
- contextId
- );
-};
-
-export const getLogbookData = async (
- hass: HomeAssistant,
- startDate: string,
- endDate: string,
- entityIds?: string[],
- deviceIds?: string[]
-): Promise => {
- await hass.loadBackendTranslation("device_class");
- return deviceIds?.length
- ? getLogbookDataFromServer(
- hass,
- startDate,
- endDate,
- entityIds,
- undefined,
- deviceIds
- )
- : getLogbookDataCache(hass, startDate, endDate, entityIds);
-};
-
-const getLogbookDataCache = async (
- hass: HomeAssistant,
- startDate: string,
- endDate: string,
- entityId?: string[]
-) => {
- const ALL_ENTITIES = "*";
-
- const entityIdKey = entityId ? entityId.toString() : ALL_ENTITIES;
- const cacheKey = `${startDate}${endDate}`;
-
- if (!DATA_CACHE[cacheKey]) {
- DATA_CACHE[cacheKey] = {};
- }
-
- if (entityIdKey in DATA_CACHE[cacheKey]) {
- return DATA_CACHE[cacheKey][entityIdKey]!;
- }
-
- if (entityId && DATA_CACHE[cacheKey][ALL_ENTITIES]) {
- const entities = await DATA_CACHE[cacheKey][ALL_ENTITIES]!;
- return entities.filter(
- (entity) => entity.entity_id && entityId.includes(entity.entity_id)
- );
- }
-
- DATA_CACHE[cacheKey][entityIdKey] = getLogbookDataFromServer(
- hass,
- startDate,
- endDate,
- entityId
- );
- return DATA_CACHE[cacheKey][entityIdKey]!;
-};
+): Promise =>
+ getLogbookDataFromServer(hass, startDate, undefined, undefined, contextId);
const getLogbookDataFromServer = (
hass: HomeAssistant,
diff --git a/src/data/translation.ts b/src/data/translation.ts
index b64e557b6b..99a7f7b521 100644
--- a/src/data/translation.ts
+++ b/src/data/translation.ts
@@ -67,7 +67,6 @@ export type TranslationCategory =
| "device_automation"
| "mfa_setup"
| "system_health"
- | "device_class"
| "application_credentials"
| "issues"
| "selector";
From a1771cc919404302ed0a37277f1d2700bb1bb29c Mon Sep 17 00:00:00 2001
From: Philip Allgaier
Date: Mon, 10 Jul 2023 13:08:15 +0200
Subject: [PATCH 020/102] Clearly show if there are no ignored or disabled
integrations (#17251)
---
.../ha-config-integrations-dashboard.ts | 48 +++++++++++--------
src/translations/en.json | 2 +
2 files changed, 30 insertions(+), 20 deletions(-)
diff --git a/src/panels/config/integrations/ha-config-integrations-dashboard.ts b/src/panels/config/integrations/ha-config-integrations-dashboard.ts
index d670e5894c..2e60ec2935 100644
--- a/src/panels/config/integrations/ha-config-integrations-dashboard.ts
+++ b/src/panels/config/integrations/ha-config-integrations-dashboard.ts
@@ -383,16 +383,20 @@ class HaConfigIntegrationsDashboard extends SubscribeMixin(LitElement) {
)}
- ${ignoredConfigEntries.map(
- (entry: ConfigEntryExtended) => html`
-
- `
- )}
+ ${ignoredConfigEntries.length > 0
+ ? ignoredConfigEntries.map(
+ (entry: ConfigEntryExtended) => html`
+
+ `
+ )
+ : html`${this.hass.localize(
+ "ui.panel.config.integrations.no_ignored_integrations"
+ )}`}
`
: ""}
${configEntriesInProgress.length
@@ -417,16 +421,20 @@ class HaConfigIntegrationsDashboard extends SubscribeMixin(LitElement) {
${this.hass.localize("ui.panel.config.integrations.disabled")}
- ${disabledConfigEntries.map(
- (entry: ConfigEntryExtended) => html`
-
- `
- )}
+ ${disabledConfigEntries.length > 0
+ ? disabledConfigEntries.map(
+ (entry: ConfigEntryExtended) => html`
+
+ `
+ )
+ : html`${this.hass.localize(
+ "ui.panel.config.integrations.no_disabled_integrations"
+ )}`}
`
: ""}
${configEntriesInProgress.length ||
diff --git a/src/translations/en.json b/src/translations/en.json
index b8324e57e7..44bf822d05 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -3377,6 +3377,8 @@
"confirm_new": "Do you want to set up {integration}?",
"add_integration": "Add integration",
"no_integrations": "Seems like you don't have any integrations configured yet. Click on the button below to add your first integration!",
+ "no_disabled_integrations": "No disabled integrations",
+ "no_ignored_integrations": "No ignored integrations",
"note_about_integrations": "No integrations matched your search, the integration you want to set up might not be available to set up via the UI yet.",
"note_about_website_reference": "More are available on the ",
"home_assistant_website": "Home Assistant website",
From 456eba1d88841e9724b008c9a738cea32dd4780c Mon Sep 17 00:00:00 2001
From: Steve Repsher
Date: Mon, 10 Jul 2023 07:08:46 -0400
Subject: [PATCH 021/102] Add pull request labeler (#17199)
---
.github/dependabot.yml | 3 +++
.github/labeler.yml | 31 +++++++++++++++++++++++++++++++
.github/release-drafter.yml | 2 +-
.github/workflows/labeler.yaml | 15 +++++++++++++++
renovate.json | 2 +-
5 files changed, 51 insertions(+), 2 deletions(-)
create mode 100644 .github/labeler.yml
create mode 100644 .github/workflows/labeler.yaml
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index b7b4ca2ddc..44500cfd3c 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -6,3 +6,6 @@ updates:
interval: weekly
time: "06:00"
open-pull-requests-limit: 10
+ labels:
+ - Dependencies
+ - GitHub Actions
diff --git a/.github/labeler.yml b/.github/labeler.yml
new file mode 100644
index 0000000000..0ad85a9bb6
--- /dev/null
+++ b/.github/labeler.yml
@@ -0,0 +1,31 @@
+Build:
+ - build-scripts/**
+ - .browserslistrc
+ - gulpfile.js
+
+Cast:
+ - cast/src/**
+ - src/cast/**
+
+Demo:
+ - demo/src/**
+ - src/fake_data/**
+
+Design:
+ - gallery/src/**
+ - src/fake_data/**
+
+Dependencies:
+ - package.json
+ - renovate.json
+ - yarn.lock
+ - .yarn/**
+ - .yarnrc.yml
+ - .nvmrc
+
+GitHub Actions:
+ - .github/workflows/**
+ - .github/*.yml
+
+Supervisor:
+ - hassio/src/**
diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml
index 0d507d1104..82a06ab923 100644
--- a/.github/release-drafter.yml
+++ b/.github/release-drafter.yml
@@ -2,7 +2,7 @@ categories:
- title: 'Dependency updates'
collapse-after: 3
labels:
- - 'dependencies'
+ - 'Dependencies'
template: |
## What's Changed
diff --git a/.github/workflows/labeler.yaml b/.github/workflows/labeler.yaml
new file mode 100644
index 0000000000..079d25cf06
--- /dev/null
+++ b/.github/workflows/labeler.yaml
@@ -0,0 +1,15 @@
+name: "Pull Request Labeler"
+
+on: pull_request_target
+
+jobs:
+ triage:
+ permissions:
+ contents: read
+ pull-requests: write
+ runs-on: ubuntu-latest
+ steps:
+ - name: Apply labels
+ uses: actions/labeler@v4.2.0
+ with:
+ sync-labels: true
diff --git a/renovate.json b/renovate.json
index 291e6a4a26..e1dabc5a5b 100644
--- a/renovate.json
+++ b/renovate.json
@@ -2,7 +2,7 @@
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
":ignoreModulesAndTests",
- ":label(dependencies)",
+ ":label(Dependencies)",
":pinVersions",
":prConcurrentLimit10",
":semanticCommitsDisabled",
From 3bf8739a7c2013540884ff3479f5ece560dd5093 Mon Sep 17 00:00:00 2001
From: Till
Date: Mon, 10 Jul 2023 13:12:15 +0200
Subject: [PATCH 022/102] Fix missing autocomplete in energy settings (#17218)
---
src/components/entity/ha-statistic-picker.ts | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/components/entity/ha-statistic-picker.ts b/src/components/entity/ha-statistic-picker.ts
index fc40f169ea..f5c1d7ff22 100644
--- a/src/components/entity/ha-statistic-picker.ts
+++ b/src/components/entity/ha-statistic-picker.ts
@@ -263,7 +263,9 @@ export class HaStatisticPicker extends LitElement {
.renderer=${this._rowRenderer}
.disabled=${this.disabled}
.allowCustomValue=${this.allowCustomEntity}
- .filteredItems=${this._statistics}
+ .filteredItems=${this.value && this._statistics.length === 0
+ ? undefined
+ : this._statistics}
item-value-path="id"
item-id-path="id"
item-label-path="name"
From d66a8a65b6408f39c3d3c5654e612fcee6fcf173 Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Mon, 10 Jul 2023 04:13:46 -0700
Subject: [PATCH 023/102] Fix a browser hang with charts in grids (#17244)
---
src/components/chart/state-history-charts.ts | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/components/chart/state-history-charts.ts b/src/components/chart/state-history-charts.ts
index 0ce32a583e..2ed678b01c 100644
--- a/src/components/chart/state-history-charts.ts
+++ b/src/components/chart/state-history-charts.ts
@@ -184,7 +184,17 @@ export class StateHistoryCharts extends LitElement {
};
protected shouldUpdate(changedProps: PropertyValues): boolean {
- return !(changedProps.size === 1 && changedProps.has("hass"));
+ if (changedProps.size === 1 && changedProps.has("hass")) {
+ return false;
+ }
+ if (
+ changedProps.size === 1 &&
+ changedProps.has("_maxYWidth") &&
+ changedProps.get("_maxYWidth") === this._maxYWidth
+ ) {
+ return false;
+ }
+ return true;
}
protected willUpdate() {
From f98eaf0c2d3cbf823f2ff6ad734778debc2779f9 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 10 Jul 2023 13:15:43 +0200
Subject: [PATCH 024/102] Update vaadinWebComponents monorepo to v24.1.3
(#17250)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 4 +-
yarn.lock | 166 +++++++++++++++++++++++++--------------------------
2 files changed, 85 insertions(+), 85 deletions(-)
diff --git a/package.json b/package.json
index 4838f73498..ec33e72712 100644
--- a/package.json
+++ b/package.json
@@ -94,8 +94,8 @@
"@polymer/paper-toast": "3.0.1",
"@polymer/polymer": "3.5.1",
"@thomasloven/round-slider": "0.6.0",
- "@vaadin/combo-box": "24.1.2",
- "@vaadin/vaadin-themable-mixin": "24.1.2",
+ "@vaadin/combo-box": "24.1.3",
+ "@vaadin/vaadin-themable-mixin": "24.1.3",
"@vibrant/color": "3.2.1-alpha.1",
"@vibrant/core": "3.2.1-alpha.1",
"@vibrant/quantizer-mmcq": "3.2.1-alpha.1",
diff --git a/yarn.lock b/yarn.lock
index 3dcac07cfd..7c4f7bb89a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4824,126 +4824,126 @@ __metadata:
languageName: node
linkType: hard
-"@vaadin/a11y-base@npm:~24.1.2":
- version: 24.1.2
- resolution: "@vaadin/a11y-base@npm:24.1.2"
+"@vaadin/a11y-base@npm:~24.1.3":
+ version: 24.1.3
+ resolution: "@vaadin/a11y-base@npm:24.1.3"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
"@polymer/polymer": ^3.0.0
- "@vaadin/component-base": ~24.1.2
+ "@vaadin/component-base": ~24.1.3
lit: ^2.0.0
- checksum: 66ce2a3f46a5cd7ba917018e09d39f7b97c611415edbc079dc0b309612d089fcb7aaaf28224c4f924c187664a651275c02698ffcb2fde6c19cdc9b8c562fff7f
+ checksum: f2e365ea5d77bec664e02499dde31ff12b7e636bc726d33944afd428cf8c613f5d0adb1fb29237caebba0937bafe1a8027e950246ecba822545c3a9079e56aaa
languageName: node
linkType: hard
-"@vaadin/combo-box@npm:24.1.2":
- version: 24.1.2
- resolution: "@vaadin/combo-box@npm:24.1.2"
+"@vaadin/combo-box@npm:24.1.3":
+ version: 24.1.3
+ resolution: "@vaadin/combo-box@npm:24.1.3"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
"@polymer/polymer": ^3.0.0
- "@vaadin/a11y-base": ~24.1.2
- "@vaadin/component-base": ~24.1.2
- "@vaadin/field-base": ~24.1.2
- "@vaadin/input-container": ~24.1.2
- "@vaadin/item": ~24.1.2
- "@vaadin/lit-renderer": ~24.1.2
- "@vaadin/overlay": ~24.1.2
- "@vaadin/vaadin-lumo-styles": ~24.1.2
- "@vaadin/vaadin-material-styles": ~24.1.2
- "@vaadin/vaadin-themable-mixin": ~24.1.2
- checksum: 6f165bb337517c249d6796d8c42c3f24a4d58ad103de8fd983d2aa8cfa245f6082879713dc4ce4a69b1f163d0ec18737a8499e57880a23eb31cf9df974df9fd9
+ "@vaadin/a11y-base": ~24.1.3
+ "@vaadin/component-base": ~24.1.3
+ "@vaadin/field-base": ~24.1.3
+ "@vaadin/input-container": ~24.1.3
+ "@vaadin/item": ~24.1.3
+ "@vaadin/lit-renderer": ~24.1.3
+ "@vaadin/overlay": ~24.1.3
+ "@vaadin/vaadin-lumo-styles": ~24.1.3
+ "@vaadin/vaadin-material-styles": ~24.1.3
+ "@vaadin/vaadin-themable-mixin": ~24.1.3
+ checksum: a31da1b4694a6d322156bb59af06b07bfdb6b7cbb8bb91ecc96d20969b42cfd70353faa2f44bc63e9ed97cfd20e29e8399402d885a70a0620588de9a73146e1d
languageName: node
linkType: hard
-"@vaadin/component-base@npm:~24.1.2":
- version: 24.1.2
- resolution: "@vaadin/component-base@npm:24.1.2"
+"@vaadin/component-base@npm:~24.1.3":
+ version: 24.1.3
+ resolution: "@vaadin/component-base@npm:24.1.3"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
"@polymer/polymer": ^3.0.0
"@vaadin/vaadin-development-mode-detector": ^2.0.0
"@vaadin/vaadin-usage-statistics": ^2.1.0
lit: ^2.0.0
- checksum: 20299afe5c3247056d986b6bae2f680511e50ae47123ff41324c6110c5b77d6c61d7735475e19b4f3df52de57745ca567a5fdbaba2059883b8ffc444f9e2ac5e
+ checksum: 069c50059ea57c48e4ca02dee2e5624decadce90304c62bd32195beb368afd59a67e88c669fe6f31fb840bd8b3c5c7901d83787f50816cbb55b01f4488556700
languageName: node
linkType: hard
-"@vaadin/field-base@npm:~24.1.2":
- version: 24.1.2
- resolution: "@vaadin/field-base@npm:24.1.2"
+"@vaadin/field-base@npm:~24.1.3":
+ version: 24.1.3
+ resolution: "@vaadin/field-base@npm:24.1.3"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
"@polymer/polymer": ^3.0.0
- "@vaadin/a11y-base": ~24.1.2
- "@vaadin/component-base": ~24.1.2
+ "@vaadin/a11y-base": ~24.1.3
+ "@vaadin/component-base": ~24.1.3
lit: ^2.0.0
- checksum: 73112c1e524e8704d55ab3befaa0d6dcfa8e5c1621ea1e2bd7765cc88b2c567386cc75f2525b0900f7e9097e4fd90aa9e4eae5da3c79210ab9251a4d5f67ddb3
+ checksum: bc06b5b4da182c2917108657557de379ffe79b38fd61d0dc28f872420b48c63eceed92410618513a0c19a35be06cc07367bf7d1cc570f8489b2adf5bc5355a6b
languageName: node
linkType: hard
-"@vaadin/icon@npm:~24.1.2":
- version: 24.1.2
- resolution: "@vaadin/icon@npm:24.1.2"
+"@vaadin/icon@npm:~24.1.3":
+ version: 24.1.3
+ resolution: "@vaadin/icon@npm:24.1.3"
dependencies:
"@polymer/polymer": ^3.0.0
- "@vaadin/component-base": ~24.1.2
- "@vaadin/vaadin-lumo-styles": ~24.1.2
- "@vaadin/vaadin-themable-mixin": ~24.1.2
+ "@vaadin/component-base": ~24.1.3
+ "@vaadin/vaadin-lumo-styles": ~24.1.3
+ "@vaadin/vaadin-themable-mixin": ~24.1.3
lit: ^2.0.0
- checksum: 976c81e9d7377e0fdce562db1324d8e7a0b564244aaf724c96d799fd0391bf67bb24487afb5296e786e7ad50dd3ab06f68b6054239a4d0342e0c27468a80f5ba
+ checksum: 0901f6e558d440f672e6ca80995f6fdcc4ec06fe1f8cf57f305a029213138299b472c1bf23755d5b539335bd6ff0c9d218a55d4f1de3c068da6427322b6e9634
languageName: node
linkType: hard
-"@vaadin/input-container@npm:~24.1.2":
- version: 24.1.2
- resolution: "@vaadin/input-container@npm:24.1.2"
+"@vaadin/input-container@npm:~24.1.3":
+ version: 24.1.3
+ resolution: "@vaadin/input-container@npm:24.1.3"
dependencies:
"@polymer/polymer": ^3.0.0
- "@vaadin/component-base": ~24.1.2
- "@vaadin/vaadin-lumo-styles": ~24.1.2
- "@vaadin/vaadin-material-styles": ~24.1.2
- "@vaadin/vaadin-themable-mixin": ~24.1.2
- checksum: 42f4dbb673aca9c1aa03198d6a2ca69d09d053824e1270d3ba44eb752cd3ad69f10bd4ecca46abda6f0761e6e2f367828c1e717a85e5f9bd29c1abc3063da48f
+ "@vaadin/component-base": ~24.1.3
+ "@vaadin/vaadin-lumo-styles": ~24.1.3
+ "@vaadin/vaadin-material-styles": ~24.1.3
+ "@vaadin/vaadin-themable-mixin": ~24.1.3
+ checksum: 429387239df99d36685b31d1264e4c4d04b2085c80da43cd0ae01836bce2ad7cbddcc557eca517b39686581622f8589b0d08f90026ad4d5cf34993b85eb96de2
languageName: node
linkType: hard
-"@vaadin/item@npm:~24.1.2":
- version: 24.1.2
- resolution: "@vaadin/item@npm:24.1.2"
+"@vaadin/item@npm:~24.1.3":
+ version: 24.1.3
+ resolution: "@vaadin/item@npm:24.1.3"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
"@polymer/polymer": ^3.0.0
- "@vaadin/a11y-base": ~24.1.2
- "@vaadin/component-base": ~24.1.2
- "@vaadin/vaadin-lumo-styles": ~24.1.2
- "@vaadin/vaadin-material-styles": ~24.1.2
- "@vaadin/vaadin-themable-mixin": ~24.1.2
- checksum: 000364ba1977bf29f88e1cfcde33e8fa0500a85094e104a89ae8933aebea35b52bee6da7cfe95ef8f016c13ee3632882f3c92964771ad23227494dc0361d9e59
+ "@vaadin/a11y-base": ~24.1.3
+ "@vaadin/component-base": ~24.1.3
+ "@vaadin/vaadin-lumo-styles": ~24.1.3
+ "@vaadin/vaadin-material-styles": ~24.1.3
+ "@vaadin/vaadin-themable-mixin": ~24.1.3
+ checksum: f6b89f9efb1c25a41f387a2585c5ef7d51058607a33f431456d539aa48b0fb3d655aee069a47418632c046c2064f08157113779979041a68b5b9ce9ef3504a2b
languageName: node
linkType: hard
-"@vaadin/lit-renderer@npm:~24.1.2":
- version: 24.1.2
- resolution: "@vaadin/lit-renderer@npm:24.1.2"
+"@vaadin/lit-renderer@npm:~24.1.3":
+ version: 24.1.3
+ resolution: "@vaadin/lit-renderer@npm:24.1.3"
dependencies:
lit: ^2.0.0
- checksum: 702291d1fcb02b28f5f82501247726a0055dd7c5067ea124c62c582208536ba929d5c0d78cb174105ae12b95c8cd1ffb934409c58be7e46072aadffdc4d010f1
+ checksum: 2a906603ab8775de8be91323b9b5c820730531231c7ba82c655cba4bca411ef1aeb8679a440f888bf6b9577463ff54584bb61a668ee468dfd7d9755aee088337
languageName: node
linkType: hard
-"@vaadin/overlay@npm:~24.1.2":
- version: 24.1.2
- resolution: "@vaadin/overlay@npm:24.1.2"
+"@vaadin/overlay@npm:~24.1.3":
+ version: 24.1.3
+ resolution: "@vaadin/overlay@npm:24.1.3"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
"@polymer/polymer": ^3.0.0
- "@vaadin/a11y-base": ~24.1.2
- "@vaadin/component-base": ~24.1.2
- "@vaadin/vaadin-lumo-styles": ~24.1.2
- "@vaadin/vaadin-material-styles": ~24.1.2
- "@vaadin/vaadin-themable-mixin": ~24.1.2
- checksum: 228723c7928a940ddf957ce32249665ac713567b580217facdb3b77ab3604a65999f078e86d29300da46e7fb9621f98beffb4a23629a27be86297c47d24fba80
+ "@vaadin/a11y-base": ~24.1.3
+ "@vaadin/component-base": ~24.1.3
+ "@vaadin/vaadin-lumo-styles": ~24.1.3
+ "@vaadin/vaadin-material-styles": ~24.1.3
+ "@vaadin/vaadin-themable-mixin": ~24.1.3
+ checksum: e210a9b8cbb3edebea48dea196b95cc1369d2ceddeb0ba6bfb094b31147514f6e6a08c6f3a86d99e36a5e7b08e9913f5df3f89384e6907abca4eb3de2f33e68b
languageName: node
linkType: hard
@@ -4954,34 +4954,34 @@ __metadata:
languageName: node
linkType: hard
-"@vaadin/vaadin-lumo-styles@npm:~24.1.2":
- version: 24.1.2
- resolution: "@vaadin/vaadin-lumo-styles@npm:24.1.2"
+"@vaadin/vaadin-lumo-styles@npm:~24.1.3":
+ version: 24.1.3
+ resolution: "@vaadin/vaadin-lumo-styles@npm:24.1.3"
dependencies:
"@polymer/polymer": ^3.0.0
- "@vaadin/icon": ~24.1.2
- "@vaadin/vaadin-themable-mixin": ~24.1.2
- checksum: 1f389d3799e7411dd81b836e36a73f28fd471b98a3799a6d48297d968ca5f955142146152672522eb37c6ea52b4adcdf3874f5ae9e4a90efee0e4be0197c3c33
+ "@vaadin/icon": ~24.1.3
+ "@vaadin/vaadin-themable-mixin": ~24.1.3
+ checksum: 54d94bde98a2c15e7410ada28f082e43c8db9d1d5ce0a5255f02467ff7db706c805d425c5d172d545fe844a4ced147f8828b50a6cff7bea8732d6cecf4fc1211
languageName: node
linkType: hard
-"@vaadin/vaadin-material-styles@npm:~24.1.2":
- version: 24.1.2
- resolution: "@vaadin/vaadin-material-styles@npm:24.1.2"
+"@vaadin/vaadin-material-styles@npm:~24.1.3":
+ version: 24.1.3
+ resolution: "@vaadin/vaadin-material-styles@npm:24.1.3"
dependencies:
"@polymer/polymer": ^3.0.0
- "@vaadin/vaadin-themable-mixin": ~24.1.2
- checksum: 93662d887bc128fdaf1012efa9c361c0ac2397c748d20b6d21ec8c85eed0541aedcfeeb85c043456cea1e3867037662c8860772c2ab3eba2e25f083d777f229d
+ "@vaadin/vaadin-themable-mixin": ~24.1.3
+ checksum: c1af4802118864fc37a0019c4369de9f05c570382982f1cc79e96f46617860e2db453d707d3671e133d66ca3040d741ec3a414af44eabb1375fb3cf15d951e2a
languageName: node
linkType: hard
-"@vaadin/vaadin-themable-mixin@npm:24.1.2, @vaadin/vaadin-themable-mixin@npm:~24.1.2":
- version: 24.1.2
- resolution: "@vaadin/vaadin-themable-mixin@npm:24.1.2"
+"@vaadin/vaadin-themable-mixin@npm:24.1.3, @vaadin/vaadin-themable-mixin@npm:~24.1.3":
+ version: 24.1.3
+ resolution: "@vaadin/vaadin-themable-mixin@npm:24.1.3"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
lit: ^2.0.0
- checksum: 7019857bc05976e1032610bb5af74754339e65e6ad279808c245636f44187196931f21b7b35fe39370098ac745683611168abe9929cd0d40d9ddf1120c9b39fb
+ checksum: b6a57ec5ce54907f61be82413494639500fd8ef9ae2dff58628369b9581bc442b88b4356c7ef9f9202ca1cc67677f1d489df56cd0ec2ea96a357976e583f582d
languageName: node
linkType: hard
@@ -9717,8 +9717,8 @@ __metadata:
"@types/webspeechapi": 0.0.29
"@typescript-eslint/eslint-plugin": 5.61.0
"@typescript-eslint/parser": 5.61.0
- "@vaadin/combo-box": 24.1.2
- "@vaadin/vaadin-themable-mixin": 24.1.2
+ "@vaadin/combo-box": 24.1.3
+ "@vaadin/vaadin-themable-mixin": 24.1.3
"@vibrant/color": 3.2.1-alpha.1
"@vibrant/core": 3.2.1-alpha.1
"@vibrant/quantizer-mmcq": 3.2.1-alpha.1
From 35a427afad34b08962de2d7da0f1847f62454826 Mon Sep 17 00:00:00 2001
From: Bram Kragten
Date: Mon, 10 Jul 2023 13:17:35 +0200
Subject: [PATCH 025/102] Update download-translations.js
---
build-scripts/gulp/download-translations.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/build-scripts/gulp/download-translations.js b/build-scripts/gulp/download-translations.js
index 9c2f2ddd12..a8cf9b536b 100644
--- a/build-scripts/gulp/download-translations.js
+++ b/build-scripts/gulp/download-translations.js
@@ -68,6 +68,7 @@ gulp.task("convert-backend-translations", function () {
});
gulp.task("check-translations-html", function () {
+ // We exclude backend translations because they are not compliant with the HTML rule for now
return gulp.src([`${inDirFrontend}/*.json`]).pipe(checkHtml());
});
From 228b75ae835f6b27148579e5fcd397a08997b69b Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Mon, 10 Jul 2023 13:33:50 +0200
Subject: [PATCH 026/102] Simplify script/automation action description with
nested conditions/triggers (#17252)
---
src/data/script_i18n.ts | 82 +++++++++-------------------------------
src/translations/en.json | 9 +++--
2 files changed, 23 insertions(+), 68 deletions(-)
diff --git a/src/data/script_i18n.ts b/src/data/script_i18n.ts
index 3cd8a36818..c6d4122b00 100644
--- a/src/data/script_i18n.ts
+++ b/src/data/script_i18n.ts
@@ -1,17 +1,18 @@
+import { ensureArray } from "../common/array/ensure-array";
import { formatDuration } from "../common/datetime/format_duration";
import secondsToDuration from "../common/datetime/seconds_to_duration";
-import { ensureArray } from "../common/array/ensure-array";
import { computeStateName } from "../common/entity/compute_state_name";
+import { formatListWithAnds } from "../common/string/format-list";
import { isTemplate } from "../common/string/has-template";
import { HomeAssistant } from "../types";
import { Condition } from "./automation";
-import { describeCondition, describeTrigger } from "./automation_i18n";
+import { describeCondition } from "./automation_i18n";
import { localizeDeviceAutomationAction } from "./device_automation";
import { computeDeviceName } from "./device_registry";
import {
+ EntityRegistryEntry,
computeEntityRegistryName,
entityRegistryById,
- EntityRegistryEntry,
} from "./entity_registry";
import { domainToName } from "./integration";
import {
@@ -21,7 +22,6 @@ import {
DelayAction,
DeviceAction,
EventAction,
- getActionType,
IfAction,
ParallelAction,
PlayMediaAction,
@@ -30,8 +30,8 @@ import {
StopAction,
VariablesAction,
WaitForTriggerAction,
+ getActionType,
} from "./script";
-import { formatListWithAnds } from "../common/string/format-list";
const actionTranslationBaseKey =
"ui.panel.config.automation.editor.actions.type";
@@ -273,12 +273,9 @@ const tryDescribeAction = (
`${actionTranslationBaseKey}.wait_for_trigger.description.wait_for_a_trigger`
);
}
- const triggerNames = triggers.map((trigger) =>
- describeTrigger(trigger, hass, entityRegistry)
- );
return hass.localize(
- `${actionTranslationBaseKey}.wait_for_trigger.description.wait_for_triggers_with_name`,
- { triggers: formatListWithAnds(hass.locale, triggerNames) }
+ `${actionTranslationBaseKey}.wait_for_trigger.description.wait_for_triggers`,
+ { count: triggers.length }
);
}
@@ -326,52 +323,13 @@ const tryDescribeAction = (
if (actionType === "if") {
const config = action as IfAction;
- let ifConditions: string[] = [];
- if (Array.isArray(config.if)) {
- const conditions = ensureArray(config.if);
- conditions.forEach((condition) => {
- ifConditions.push(describeCondition(condition, hass, entityRegistry));
- });
- } else {
- ifConditions = [config.if];
+ if (config.else !== undefined) {
+ return hass.localize(
+ `${actionTranslationBaseKey}.if.description.if_else`
+ );
}
- let elseActions: string[] = [];
- if (config.else) {
- if (Array.isArray(config.else)) {
- const actions = ensureArray(config.else);
- actions.forEach((currentAction) => {
- elseActions.push(
- describeAction(hass, entityRegistry, currentAction, undefined)
- );
- });
- } else {
- elseActions = [
- describeAction(hass, entityRegistry, config.else, undefined),
- ];
- }
- }
-
- let thenActions: string[] = [];
- if (Array.isArray(config.then)) {
- const actions = ensureArray(config.then);
- actions.forEach((currentAction) => {
- thenActions.push(
- describeAction(hass, entityRegistry, currentAction, undefined)
- );
- });
- } else {
- thenActions = [
- describeAction(hass, entityRegistry, config.then, undefined),
- ];
- }
-
- return hass.localize(`${actionTranslationBaseKey}.if.description.full`, {
- hasElse: config.else !== undefined,
- action: formatListWithAnds(hass.locale, thenActions),
- conditions: formatListWithAnds(hass.locale, ifConditions),
- elseAction: formatListWithAnds(hass.locale, elseActions),
- });
+ return hass.localize(`${actionTranslationBaseKey}.if.description.if`);
}
if (actionType === "choose") {
@@ -400,20 +358,16 @@ const tryDescribeAction = (
{ count: count }
);
} else if ("while" in config.repeat) {
- const conditions = ensureArray(config.repeat.while).map((condition) =>
- describeCondition(condition, hass, entityRegistry)
- );
+ const conditions = ensureArray(config.repeat.while);
chosenAction = hass.localize(
- `${actionTranslationBaseKey}.repeat.description.while`,
- { conditions: formatListWithAnds(hass.locale, conditions) }
+ `${actionTranslationBaseKey}.repeat.description.while_count`,
+ { count: conditions.length }
);
} else if ("until" in config.repeat) {
- const conditions = ensureArray(config.repeat.until).map((condition) =>
- describeCondition(condition, hass, entityRegistry)
- );
+ const conditions = ensureArray(config.repeat.until);
chosenAction = hass.localize(
- `${actionTranslationBaseKey}.repeat.description.until`,
- { conditions: formatListWithAnds(hass.locale, conditions) }
+ `${actionTranslationBaseKey}.repeat.description.until_count`,
+ { count: conditions.length }
);
} else if ("for_each" in config.repeat) {
const items = ensureArray(config.repeat.for_each).map((item) =>
diff --git a/src/translations/en.json b/src/translations/en.json
index 44bf822d05..05ff2b775e 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -2621,7 +2621,7 @@
"continue_timeout": "[%key:ui::panel::config::automation::editor::actions::type::wait_template::continue_timeout%]",
"description": {
"wait_for_a_trigger": "Wait for a trigger",
- "wait_for_triggers_with_name": "Wait for ''{triggers}''"
+ "wait_for_triggers": "Wait for {count} {count, plural,\n one {trigger}\n other {triggers}\n}"
}
},
"condition": {
@@ -2679,8 +2679,8 @@
"description": {
"full": "Repeat an action {chosenAction}",
"count": "{count} {count, plural,\n one {time}\n other {times}\n}",
- "while": "while ''{conditions}'' is true",
- "until": "until ''{conditions}'' is true",
+ "while_count": "while {count} {count, plural,\n one {condition matches}\n other {conditions match}\n} ",
+ "until_count": "until {count} {count, plural,\n one {condition matches}\n other {conditions match}\n} ",
"for_each": "for every item: {items}"
}
},
@@ -2705,7 +2705,8 @@
"else": "Else",
"add_else": "Add else",
"description": {
- "full": "Perform ''{action}'' if ''{conditions}''{hasElse, select, \n true { otherwise ''{elseAction}''} \n other {}\n } "
+ "if": "Conditionally execute an action",
+ "if_else": "Conditionally execute an action and default to another action"
}
},
"stop": {
From bffdfcf61c4833293e9782aef4bdcc7c7921152a Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Mon, 10 Jul 2023 15:01:16 +0200
Subject: [PATCH 027/102] Fix notification error when calling service (#17255)
---
src/state/connection-mixin.ts | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/state/connection-mixin.ts b/src/state/connection-mixin.ts
index 8ba5091a02..ac5b27773f 100644
--- a/src/state/connection-mixin.ts
+++ b/src/state/connection-mixin.ts
@@ -123,9 +123,10 @@ export const connectionMixin = >(
`${domain}/${service}`
) +
` ${
- err.message || err.error?.code === ERR_CONNECTION_LOST
+ err.message ||
+ (err.error?.code === ERR_CONNECTION_LOST
? "connection lost"
- : "unknown error"
+ : "unknown error")
}`;
fireEvent(this as any, "hass-notification", { message });
throw err;
From b1a909d30299486532f7ef683566295d3a282676 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 10 Jul 2023 14:09:07 -0400
Subject: [PATCH 028/102] Update dependency babel-loader to v9.1.3 (#17262)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 105 +++++++++++++++++++++++++++++++++++++++------------
2 files changed, 82 insertions(+), 25 deletions(-)
diff --git a/package.json b/package.json
index ec33e72712..8662b23c01 100644
--- a/package.json
+++ b/package.json
@@ -188,7 +188,7 @@
"@typescript-eslint/parser": "5.61.0",
"@web/dev-server": "0.1.38",
"@web/dev-server-rollup": "0.4.1",
- "babel-loader": "9.1.2",
+ "babel-loader": "9.1.3",
"babel-plugin-template-html-minifier": "4.1.0",
"chai": "4.3.7",
"del": "7.0.0",
diff --git a/yarn.lock b/yarn.lock
index 7c4f7bb89a..f4dadab622 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6104,16 +6104,16 @@ __metadata:
languageName: node
linkType: hard
-"babel-loader@npm:9.1.2":
- version: 9.1.2
- resolution: "babel-loader@npm:9.1.2"
+"babel-loader@npm:9.1.3":
+ version: 9.1.3
+ resolution: "babel-loader@npm:9.1.3"
dependencies:
- find-cache-dir: ^3.3.2
+ find-cache-dir: ^4.0.0
schema-utils: ^4.0.0
peerDependencies:
"@babel/core": ^7.12.0
webpack: ">=5"
- checksum: f0edb8e157f9806b810ba3f2c8ca8fa489d377ae5c2b7b00c2ace900a6925641ce4ec520b9c12f70e37b94aa5366e7003e0f6271b26821643e109966ce741cb7
+ checksum: b168dde5b8cf11206513371a79f86bb3faa7c714e6ec9fffd420876b61f3d7f5f4b976431095ef6a14bc4d324505126deb91045fd41e312ba49f4deaa166fe28
languageName: node
linkType: hard
@@ -6989,6 +6989,13 @@ __metadata:
languageName: node
linkType: hard
+"common-path-prefix@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "common-path-prefix@npm:3.0.0"
+ checksum: fdb3c4f54e51e70d417ccd950c07f757582de800c0678ca388aedefefc84982039f346f9fd9a1252d08d2da9e9ef4019f580a1d1d3a10da031e4bb3c924c5818
+ languageName: node
+ linkType: hard
+
"common-tags@npm:^1.8.0":
version: 1.8.2
resolution: "common-tags@npm:1.8.2"
@@ -8673,14 +8680,13 @@ __metadata:
languageName: node
linkType: hard
-"find-cache-dir@npm:^3.3.2":
- version: 3.3.2
- resolution: "find-cache-dir@npm:3.3.2"
+"find-cache-dir@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "find-cache-dir@npm:4.0.0"
dependencies:
- commondir: ^1.0.1
- make-dir: ^3.0.2
- pkg-dir: ^4.1.0
- checksum: 1e61c2e64f5c0b1c535bd85939ae73b0e5773142713273818cc0b393ee3555fb0fd44e1a5b161b8b6c3e03e98c2fcc9c227d784850a13a90a8ab576869576817
+ common-path-prefix: ^3.0.0
+ pkg-dir: ^7.0.0
+ checksum: 52a456a80deeb27daa3af6e06059b63bdb9cc4af4d845fc6d6229887e505ba913cd56000349caa60bc3aa59dacdb5b4c37903d4ba34c75102d83cab330b70d2f
languageName: node
linkType: hard
@@ -8730,6 +8736,16 @@ __metadata:
languageName: node
linkType: hard
+"find-up@npm:^6.3.0":
+ version: 6.3.0
+ resolution: "find-up@npm:6.3.0"
+ dependencies:
+ locate-path: ^7.1.0
+ path-exists: ^5.0.0
+ checksum: 9a21b7f9244a420e54c6df95b4f6fc3941efd3c3e5476f8274eb452f6a85706e7a6a90de71353ee4f091fcb4593271a6f92810a324ec542650398f928783c280
+ languageName: node
+ linkType: hard
+
"findup-sync@npm:^2.0.0":
version: 2.0.0
resolution: "findup-sync@npm:2.0.0"
@@ -9728,7 +9744,7 @@ __metadata:
"@webcomponents/scoped-custom-element-registry": 0.0.9
"@webcomponents/webcomponentsjs": 2.8.0
app-datepicker: 5.1.1
- babel-loader: 9.1.2
+ babel-loader: 9.1.3
babel-plugin-template-html-minifier: 4.1.0
chai: 4.3.7
chart.js: 3.3.2
@@ -11503,6 +11519,15 @@ __metadata:
languageName: node
linkType: hard
+"locate-path@npm:^7.1.0":
+ version: 7.2.0
+ resolution: "locate-path@npm:7.2.0"
+ dependencies:
+ p-locate: ^6.0.0
+ checksum: c1b653bdf29beaecb3d307dfb7c44d98a2a98a02ebe353c9ad055d1ac45d6ed4e1142563d222df9b9efebc2bcb7d4c792b507fad9e7150a04c29530b7db570f8
+ languageName: node
+ linkType: hard
+
"lodash._reinterpolate@npm:^3.0.0":
version: 3.0.0
resolution: "lodash._reinterpolate@npm:3.0.0"
@@ -11698,15 +11723,6 @@ __metadata:
languageName: node
linkType: hard
-"make-dir@npm:^3.0.2":
- version: 3.1.0
- resolution: "make-dir@npm:3.1.0"
- dependencies:
- semver: ^6.0.0
- checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78
- languageName: node
- linkType: hard
-
"make-fetch-happen@npm:^11.0.3":
version: 11.1.1
resolution: "make-fetch-happen@npm:11.1.1"
@@ -12715,6 +12731,15 @@ __metadata:
languageName: node
linkType: hard
+"p-limit@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "p-limit@npm:4.0.0"
+ dependencies:
+ yocto-queue: ^1.0.0
+ checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b
+ languageName: node
+ linkType: hard
+
"p-locate@npm:^4.1.0":
version: 4.1.0
resolution: "p-locate@npm:4.1.0"
@@ -12733,6 +12758,15 @@ __metadata:
languageName: node
linkType: hard
+"p-locate@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "p-locate@npm:6.0.0"
+ dependencies:
+ p-limit: ^4.0.0
+ checksum: 2bfe5234efa5e7a4e74b30a5479a193fdd9236f8f6b4d2f3f69e3d286d9a7d7ab0c118a2a50142efcf4e41625def635bd9332d6cbf9cc65d85eb0718c579ab38
+ languageName: node
+ linkType: hard
+
"p-map@npm:^4.0.0":
version: 4.0.0
resolution: "p-map@npm:4.0.0"
@@ -12945,6 +12979,13 @@ __metadata:
languageName: node
linkType: hard
+"path-exists@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "path-exists@npm:5.0.0"
+ checksum: 8ca842868cab09423994596eb2c5ec2a971c17d1a3cb36dbf060592c730c725cd524b9067d7d2a1e031fef9ba7bd2ac6dc5ec9fb92aa693265f7be3987045254
+ languageName: node
+ linkType: hard
+
"path-is-absolute@npm:1.0.1, path-is-absolute@npm:^1.0.0":
version: 1.0.1
resolution: "path-is-absolute@npm:1.0.1"
@@ -13134,7 +13175,7 @@ __metadata:
languageName: node
linkType: hard
-"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0":
+"pkg-dir@npm:^4.2.0":
version: 4.2.0
resolution: "pkg-dir@npm:4.2.0"
dependencies:
@@ -13143,6 +13184,15 @@ __metadata:
languageName: node
linkType: hard
+"pkg-dir@npm:^7.0.0":
+ version: 7.0.0
+ resolution: "pkg-dir@npm:7.0.0"
+ dependencies:
+ find-up: ^6.3.0
+ checksum: 94298b20a446bfbbd66604474de8a0cdd3b8d251225170970f15d9646f633e056c80520dd5b4c1d1050c9fed8f6a9e5054b141c93806439452efe72e57562c03
+ languageName: node
+ linkType: hard
+
"plugin-error@npm:0.1.2":
version: 0.1.2
resolution: "plugin-error@npm:0.1.2"
@@ -14072,7 +14122,7 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^6.0.0, semver@npm:^6.3.0":
+"semver@npm:^6.3.0":
version: 6.3.0
resolution: "semver@npm:6.3.0"
bin:
@@ -16887,3 +16937,10 @@ __metadata:
checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700
languageName: node
linkType: hard
+
+"yocto-queue@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "yocto-queue@npm:1.0.0"
+ checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801
+ languageName: node
+ linkType: hard
From bf4cf310f3fe1e1c75d285ed930f8780b1e948c1 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Mon, 10 Jul 2023 14:37:15 -0400
Subject: [PATCH 029/102] Bump HAWS to 8.2.0 (#17263)
---
package.json | 2 +-
src/entrypoints/core.ts | 1 +
src/onboarding/ha-onboarding.ts | 2 ++
yarn.lock | 10 +++++-----
4 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 8662b23c01..869d279cb6 100644
--- a/package.json
+++ b/package.json
@@ -114,7 +114,7 @@
"fuse.js": "6.6.2",
"google-timezones-json": "1.1.0",
"hls.js": "1.4.8",
- "home-assistant-js-websocket": "8.1.0",
+ "home-assistant-js-websocket": "8.2.0",
"idb-keyval": "6.2.1",
"intl-messageformat": "10.5.0",
"js-yaml": "4.1.0",
diff --git a/src/entrypoints/core.ts b/src/entrypoints/core.ts
index cc92ddd5bc..d9467f11ca 100644
--- a/src/entrypoints/core.ts
+++ b/src/entrypoints/core.ts
@@ -65,6 +65,7 @@ const authProm = isExternal
: () =>
getAuth({
hassUrl,
+ limitHassInstance: true,
saveTokens,
loadTokens: () => Promise.resolve(loadTokens()),
});
diff --git a/src/onboarding/ha-onboarding.ts b/src/onboarding/ha-onboarding.ts
index 956914856d..88b12140f1 100644
--- a/src/onboarding/ha-onboarding.ts
+++ b/src/onboarding/ha-onboarding.ts
@@ -211,6 +211,7 @@ class HaOnboarding extends litLocalizeLiteMixin(HassElement) {
// First step is already done, so we need to get auth somewhere else.
const auth = await getAuth({
hassUrl,
+ limitHassInstance: true,
});
history.replaceState(null, "", location.pathname);
await this._connectHass(auth);
@@ -237,6 +238,7 @@ class HaOnboarding extends litLocalizeLiteMixin(HassElement) {
try {
const auth = await getAuth({
hassUrl,
+ limitHassInstance: true,
authCode: result.auth_code,
});
await this._connectHass(auth);
diff --git a/yarn.lock b/yarn.lock
index f4dadab622..be693c0a47 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9780,7 +9780,7 @@ __metadata:
gulp-rename: 2.0.0
gulp-zopfli-green: 6.0.1
hls.js: 1.4.8
- home-assistant-js-websocket: 8.1.0
+ home-assistant-js-websocket: 8.2.0
html-minifier-terser: 7.2.0
husky: 8.0.3
idb-keyval: 6.2.1
@@ -9854,10 +9854,10 @@ __metadata:
languageName: unknown
linkType: soft
-"home-assistant-js-websocket@npm:8.1.0":
- version: 8.1.0
- resolution: "home-assistant-js-websocket@npm:8.1.0"
- checksum: 74f9afc5affe491921d7fd9e743c1a6841cb0409c2c5454fff266d14ea893f5be476cb85f584ff1836722de77cfe2777d4133890f00fc1983ad448eba50f6240
+"home-assistant-js-websocket@npm:8.2.0":
+ version: 8.2.0
+ resolution: "home-assistant-js-websocket@npm:8.2.0"
+ checksum: 4eacdfe8d1bd35492ff77079779e2e0a1967b20a46b168752d8c037bf155fa5d2a8e898e7d1aee5514976d93589d26fe2d6c1975e4fcb039b0beff852564c64c
languageName: node
linkType: hard
From e46f0224c68ed3736f3a85e7802d03733f4500a0 Mon Sep 17 00:00:00 2001
From: Bram Kragten
Date: Tue, 11 Jul 2023 02:37:04 +0200
Subject: [PATCH 030/102] Add support for service translations (#17264)
* Add support for service translations
* Add selector translation support
---
src/components/ha-service-control.ts | 50 ++++++++++++++++---
src/components/ha-service-description.js | 27 ----------
src/components/ha-service-picker.ts | 12 ++++-
src/data/script_i18n.ts | 6 ++-
src/data/translation.ts | 3 +-
src/panels/config/ha-panel-config.ts | 1 +
.../zha/zha-add-devices-page.ts | 7 ---
.../integration-panels/zha/zha-device-card.ts | 1 -
.../zha/zha-device-pairing-status-card.ts | 1 -
src/panels/lovelace/common/handle-action.ts | 7 ++-
10 files changed, 67 insertions(+), 48 deletions(-)
delete mode 100644 src/components/ha-service-description.js
diff --git a/src/components/ha-service-control.ts b/src/components/ha-service-control.ts
index 21e5289e5f..5abd368056 100644
--- a/src/components/ha-service-control.ts
+++ b/src/components/ha-service-control.ts
@@ -89,6 +89,10 @@ export class HaServiceControl extends LitElement {
@query("ha-yaml-editor") private _yamlEditor?: HaYamlEditor;
protected willUpdate(changedProperties: PropertyValues) {
+ if (!this.hasUpdated) {
+ this.hass.loadBackendTranslation("services");
+ this.hass.loadBackendTranslation("selector");
+ }
if (!changedProperties.has("value")) {
return;
}
@@ -342,6 +346,20 @@ export class HaServiceControl extends LitElement {
const filteredFields = this._filterFields(serviceData, this._value);
+ const domain = this._value?.service
+ ? computeDomain(this._value.service)
+ : undefined;
+ const serviceName = this._value?.service
+ ? computeObjectId(this._value.service)
+ : undefined;
+
+ const description =
+ (serviceName &&
+ this.hass.localize(
+ `component.${domain}.services.${serviceName}.description`
+ )) ||
+ serviceData?.description;
+
return html`
- ${serviceData?.description
- ? html`
${serviceData?.description}
`
- : ""}
+ ${description ? html`
${description}
` : ""}
${this._manifest
? html`
`
@@ -437,8 +455,18 @@ export class HaServiceControl extends LitElement {
@change=${this._checkboxChanged}
slot="prefix"
>`}
- ${dataField.name || dataField.key}
- ${dataField?.description}
+ ${this.hass.localize(
+ `component.${domain}.services.${serviceName}.fields.${dataField.key}.name`
+ ) ||
+ dataField.name ||
+ dataField.key}
+ ${this.hass.localize(
+ `component.${domain}.services.${serviceName}.fields.${dataField.key}.description`
+ ) || dataField?.description}
`
: "";
})}`;
}
+ private _localizeValueCallback = (key: string) => {
+ if (!this._value?.service) {
+ return "";
+ }
+ return this.hass.localize(
+ `component.${computeDomain(this._value.service)}.selector.${key}`
+ );
+ };
+
private _checkboxChanged(ev) {
const checked = ev.currentTarget.checked;
const key = ev.currentTarget.key;
diff --git a/src/components/ha-service-description.js b/src/components/ha-service-description.js
deleted file mode 100644
index c2d3359bcc..0000000000
--- a/src/components/ha-service-description.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import { html } from "@polymer/polymer/lib/utils/html-tag";
-/* eslint-plugin-disable lit */
-import { PolymerElement } from "@polymer/polymer/polymer-element";
-
-class HaServiceDescription extends PolymerElement {
- static get template() {
- return html` [[_getDescription(hass, domain, service)]] `;
- }
-
- static get properties() {
- return {
- hass: Object,
- domain: String,
- service: String,
- };
- }
-
- _getDescription(hass, domain, service) {
- const domainServices = hass.services[domain];
- if (!domainServices) return "";
- const serviceObject = domainServices[service];
- if (!serviceObject) return "";
- return serviceObject.description;
- }
-}
-
-customElements.define("ha-service-description", HaServiceDescription);
diff --git a/src/components/ha-service-picker.ts b/src/components/ha-service-picker.ts
index 76532a331d..9ef0dc670a 100644
--- a/src/components/ha-service-picker.ts
+++ b/src/components/ha-service-picker.ts
@@ -27,6 +27,12 @@ class HaServicePicker extends LitElement {
@state() private _filter?: string;
+ protected willUpdate() {
+ if (!this.hasUpdated) {
+ this.hass.loadBackendTranslation("services");
+ }
+ }
+
protected render() {
return html`
(
if (config.service) {
const [domain, serviceName] = config.service.split(".", 2);
- const service = hass.services[domain][serviceName];
+ const service =
+ hass.localize(`component.${domain}.services.${serviceName}.name`) ||
+ hass.services[domain][serviceName]?.name;
return hass.localize(
`${actionTranslationBaseKey}.service.description.service_based_on_name`,
{
name: service
- ? `${domainToName(hass.localize, domain)}: ${service.name}`
+ ? `${domainToName(hass.localize, domain)}: ${service}`
: config.service,
targets: formatListWithAnds(hass.locale, targets),
}
diff --git a/src/data/translation.ts b/src/data/translation.ts
index 99a7f7b521..bc8165578a 100644
--- a/src/data/translation.ts
+++ b/src/data/translation.ts
@@ -69,7 +69,8 @@ export type TranslationCategory =
| "system_health"
| "application_credentials"
| "issues"
- | "selector";
+ | "selector"
+ | "services";
export const fetchTranslationPreferences = (hass: HomeAssistant) =>
fetchFrontendUserData(hass.connection, "language");
diff --git a/src/panels/config/ha-panel-config.ts b/src/panels/config/ha-panel-config.ts
index 7004f32a5f..2db32736be 100644
--- a/src/panels/config/ha-panel-config.ts
+++ b/src/panels/config/ha-panel-config.ts
@@ -574,6 +574,7 @@ class HaPanelConfig extends SubscribeMixin(HassRouterPage) {
protected firstUpdated(changedProps: PropertyValues) {
super.firstUpdated(changedProps);
this.hass.loadBackendTranslation("title");
+ this.hass.loadBackendTranslation("services");
if (isComponentLoaded(this.hass, "cloud")) {
this._updateCloudStatus();
this.addEventListener("connection-status", (ev) => {
diff --git a/src/panels/config/integrations/integration-panels/zha/zha-add-devices-page.ts b/src/panels/config/integrations/integration-panels/zha/zha-add-devices-page.ts
index 31d30b88fd..f75b9607bb 100644
--- a/src/panels/config/integrations/integration-panels/zha/zha-add-devices-page.ts
+++ b/src/panels/config/integrations/integration-panels/zha/zha-add-devices-page.ts
@@ -10,7 +10,6 @@ import {
} from "lit";
import { customElement, property, state } from "lit/decorators";
import "../../../../../components/ha-circular-progress";
-import "../../../../../components/ha-service-description";
import {
DEVICE_MESSAGE_TYPES,
LOG_OUTPUT,
@@ -259,12 +258,6 @@ class ZHAAddDevicesPage extends LitElement {
right: 0;
color: var(--primary-color);
}
- ha-service-description {
- margin-top: 16px;
- margin-left: 16px;
- display: block;
- color: grey;
- }
.search-button {
margin-top: 16px;
margin-left: 16px;
diff --git a/src/panels/config/integrations/integration-panels/zha/zha-device-card.ts b/src/panels/config/integrations/integration-panels/zha/zha-device-card.ts
index 7bbc64fa67..5d4f476491 100644
--- a/src/panels/config/integrations/integration-panels/zha/zha-device-card.ts
+++ b/src/panels/config/integrations/integration-panels/zha/zha-device-card.ts
@@ -11,7 +11,6 @@ import "../../../../../components/buttons/ha-call-service-button";
import "../../../../../components/entity/state-badge";
import "../../../../../components/ha-area-picker";
import "../../../../../components/ha-card";
-import "../../../../../components/ha-service-description";
import { updateDeviceRegistryEntry } from "../../../../../data/device_registry";
import {
EntityRegistryEntry,
diff --git a/src/panels/config/integrations/integration-panels/zha/zha-device-pairing-status-card.ts b/src/panels/config/integrations/integration-panels/zha/zha-device-pairing-status-card.ts
index 42768533ce..c4a8668ebd 100644
--- a/src/panels/config/integrations/integration-panels/zha/zha-device-pairing-status-card.ts
+++ b/src/panels/config/integrations/integration-panels/zha/zha-device-pairing-status-card.ts
@@ -6,7 +6,6 @@ import "../../../../../components/buttons/ha-call-service-button";
import "../../../../../components/entity/state-badge";
import "../../../../../components/ha-area-picker";
import "../../../../../components/ha-card";
-import "../../../../../components/ha-service-description";
import {
CONFIGURED,
INCOMPLETE_PAIRING_STATUSES,
diff --git a/src/panels/lovelace/common/handle-action.ts b/src/panels/lovelace/common/handle-action.ts
index 83deadf5db..febf1c848f 100644
--- a/src/panels/lovelace/common/handle-action.ts
+++ b/src/panels/lovelace/common/handle-action.ts
@@ -60,9 +60,12 @@ export const handleAction = async (
const [domain, service] = actionConfig.service.split(".", 2);
const serviceDomains = hass.services;
if (domain in serviceDomains && service in serviceDomains[domain]) {
- const localize = await hass.loadBackendTranslation("title");
+ await hass.loadBackendTranslation("title");
+ const localize = await hass.loadBackendTranslation("services");
serviceName = `${domainToName(localize, domain)}: ${
- serviceDomains[domain][service].name || service
+ localize(`component.${domain}.services.${serviceName}.name`) ||
+ serviceDomains[domain][service].name ||
+ service
}`;
}
}
From 2298d2b7ca0f37de86e1a1f15a4cd83181b6e683 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 10 Jul 2023 21:42:49 -0400
Subject: [PATCH 031/102] Bump semver from 5.7.1 to 5.7.2 (#17271)
Bumps [semver](https://github.com/npm/node-semver) from 5.7.1 to 5.7.2.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v5.7.1...v5.7.2)
---
updated-dependencies:
- dependency-name: semver
dependency-type: indirect
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
yarn.lock | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index be693c0a47..e5ef3782ab 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -14114,11 +14114,11 @@ __metadata:
linkType: hard
"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.7.1":
- version: 5.7.1
- resolution: "semver@npm:5.7.1"
+ version: 5.7.2
+ resolution: "semver@npm:5.7.2"
bin:
- semver: ./bin/semver
- checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf
+ semver: bin/semver
+ checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686
languageName: node
linkType: hard
From 9f55c06dfcd8b8699580cb7e315e88d5742812be Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 10 Jul 2023 21:44:18 -0400
Subject: [PATCH 032/102] Update dependency glob to v10.3.2 (#17270)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 32 ++++++++++++++++----------------
2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/package.json b/package.json
index 869d279cb6..1b34ac076a 100644
--- a/package.json
+++ b/package.json
@@ -206,7 +206,7 @@
"esprima": "4.0.1",
"fancy-log": "2.0.0",
"fs-extra": "11.1.1",
- "glob": "10.3.1",
+ "glob": "10.3.2",
"gulp": "4.0.2",
"gulp-flatmap": "1.0.2",
"gulp-json-transform": "0.4.8",
diff --git a/yarn.lock b/yarn.lock
index e5ef3782ab..15c20c02af 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9204,18 +9204,18 @@ __metadata:
languageName: node
linkType: hard
-"glob@npm:10.3.1, glob@npm:^10.2.2":
- version: 10.3.1
- resolution: "glob@npm:10.3.1"
+"glob@npm:10.3.2, glob@npm:^10.2.2":
+ version: 10.3.2
+ resolution: "glob@npm:10.3.2"
dependencies:
foreground-child: ^3.1.0
jackspeak: ^2.0.3
minimatch: ^9.0.1
- minipass: ^5.0.0 || ^6.0.2
- path-scurry: ^1.10.0
+ minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
+ path-scurry: ^1.10.1
bin:
glob: dist/cjs/src/bin.js
- checksum: 19c8c2805658b1002fecf0722cd609a33153d756a0d5260676bd0e9c5e6ef889ec9cce6d3dac0411aa90bce8de3d14f25b6f5589a3292582cccbfeddd0e98cc4
+ checksum: 3b4f455192d18eb1cf41a9193c825f594a70323b522f290d4b75191d3e399791f9da1febef339392a9828c03a3bf2b96e0b32cc8efb0068c2b11df585026a367
languageName: node
linkType: hard
@@ -9771,7 +9771,7 @@ __metadata:
fancy-log: 2.0.0
fs-extra: 11.1.1
fuse.js: 6.6.2
- glob: 10.3.1
+ glob: 10.3.2
google-timezones-json: 1.1.0
gulp: 4.0.2
gulp-flatmap: 1.0.2
@@ -12076,10 +12076,10 @@ __metadata:
languageName: node
linkType: hard
-"minipass@npm:^5.0.0 || ^6.0.2":
- version: 6.0.2
- resolution: "minipass@npm:6.0.2"
- checksum: d140b91f4ab2e5ce5a9b6c468c0e82223504acc89114c1a120d4495188b81fedf8cade72a9f4793642b4e66672f990f1e0d902dd858485216a07cd3c8a62fac9
+"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0":
+ version: 7.0.1
+ resolution: "minipass@npm:7.0.1"
+ checksum: fedd1293f6a1b4e406c242a1cecfb75d0a81422bb2c365d999e33a88642fb68d70a89d95b550e08c640b3c0d9162829310e0c58b9b846b9218de25779818c709
languageName: node
linkType: hard
@@ -13037,13 +13037,13 @@ __metadata:
languageName: node
linkType: hard
-"path-scurry@npm:^1.10.0":
- version: 1.10.0
- resolution: "path-scurry@npm:1.10.0"
+"path-scurry@npm:^1.10.1":
+ version: 1.10.1
+ resolution: "path-scurry@npm:1.10.1"
dependencies:
lru-cache: ^9.1.1 || ^10.0.0
- minipass: ^5.0.0 || ^6.0.2
- checksum: 3b66a4a6ab66e45755b577c966ecf0da92d3e068b3c992d8f69aa2cc908ef4eda9358253e9b4f86cad43d3ad810ec445be164105975f5cb3fdab68459c59dc6e
+ minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
+ checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90
languageName: node
linkType: hard
From 9866a3217e95c9324a0a9554cda787a07d206ad4 Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Tue, 11 Jul 2023 14:35:37 +0200
Subject: [PATCH 033/102] Prevent items in add integration dialog from
flickering (#17260)
---
src/panels/config/integrations/dialog-add-integration.ts | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/panels/config/integrations/dialog-add-integration.ts b/src/panels/config/integrations/dialog-add-integration.ts
index 02935336c0..eed4036670 100644
--- a/src/panels/config/integrations/dialog-add-integration.ts
+++ b/src/panels/config/integrations/dialog-add-integration.ts
@@ -443,6 +443,7 @@ class AddIntegrationDialog extends LitElement {
})}
@click=${this._integrationPicked}
.items=${integrations}
+ .keyFunction=${this._keyFunction}
.renderItem=${this._renderRow}
>
@@ -450,6 +451,9 @@ class AddIntegrationDialog extends LitElement {
: html``} `;
}
+ private _keyFunction = (integration: IntegrationListItem) =>
+ integration.domain;
+
private _renderRow = (integration: IntegrationListItem) => {
if (!integration) {
return nothing;
From 04ec380ce062798a655618d4d15fb2882c50ebe3 Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Tue, 11 Jul 2023 05:38:36 -0700
Subject: [PATCH 034/102] Prune empty value_template field from numeric_state
(#17272)
---
.../ha-automation-condition-numeric_state.ts | 16 ++++++++++------
.../types/ha-automation-trigger-numeric_state.ts | 4 ++++
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-numeric_state.ts b/src/panels/config/automation/condition/types/ha-automation-condition-numeric_state.ts
index 0a9003c72e..a7458813db 100644
--- a/src/panels/config/automation/condition/types/ha-automation-condition-numeric_state.ts
+++ b/src/panels/config/automation/condition/types/ha-automation-condition-numeric_state.ts
@@ -237,15 +237,19 @@ export default class HaNumericStateCondition extends LitElement {
private _valueChanged(ev: CustomEvent): void {
ev.stopPropagation();
- const newTrigger = ev.detail.value;
+ const newCondition = ev.detail.value;
- this._inputAboveIsEntity = newTrigger.mode_above === "input";
- this._inputBelowIsEntity = newTrigger.mode_below === "input";
+ this._inputAboveIsEntity = newCondition.mode_above === "input";
+ this._inputBelowIsEntity = newCondition.mode_below === "input";
- delete newTrigger.mode_above;
- delete newTrigger.mode_below;
+ delete newCondition.mode_above;
+ delete newCondition.mode_below;
- fireEvent(this, "value-changed", { value: newTrigger });
+ if (newCondition.value_template === "") {
+ delete newCondition.value_template;
+ }
+
+ fireEvent(this, "value-changed", { value: newCondition });
}
private _computeLabelCallback = (
diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-numeric_state.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-numeric_state.ts
index 29cb0362cd..62315025a4 100644
--- a/src/panels/config/automation/trigger/types/ha-automation-trigger-numeric_state.ts
+++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-numeric_state.ts
@@ -288,6 +288,10 @@ export class HaNumericStateTrigger extends LitElement {
delete newTrigger.mode_above;
delete newTrigger.mode_below;
+ if (newTrigger.value_template === "") {
+ delete newTrigger.value_template;
+ }
+
fireEvent(this, "value-changed", { value: newTrigger });
}
From 33b9786ae77f0b1fa31fc06f1a8f9bf6c711c774 Mon Sep 17 00:00:00 2001
From: Bram Kragten
Date: Tue, 11 Jul 2023 14:54:38 +0200
Subject: [PATCH 035/102] =?UTF-8?q?`start=5Fpause`=20is=20only=20supported?=
=?UTF-8?q?=20on=20entities=20that=20don't=20have=20`STATE`=20sup=E2=80=A6?=
=?UTF-8?q?=20(#17147)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* `start_pause` is only support on entities that don't have `STATE` support
* Update hui-vacuum-commands-tile-feature.ts
* Add comment
---
src/dialogs/more-info/controls/more-info-vacuum.ts | 10 +++++++---
.../tile-features/hui-vacuum-commands-tile-feature.ts | 2 ++
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/src/dialogs/more-info/controls/more-info-vacuum.ts b/src/dialogs/more-info/controls/more-info-vacuum.ts
index c470b33cba..d1ca0ae75c 100644
--- a/src/dialogs/more-info/controls/more-info-vacuum.ts
+++ b/src/dialogs/more-info/controls/more-info-vacuum.ts
@@ -43,9 +43,11 @@ const VACUUM_COMMANDS: VacuumCommand[] = [
icon: mdiPause,
serviceName: "pause",
isVisible: (stateObj) =>
- // We need also to check if Start is supported because if not we show play-pause
- supportsFeature(stateObj, VacuumEntityFeature.START) &&
- supportsFeature(stateObj, VacuumEntityFeature.PAUSE),
+ // We need also to check if Start is supported because if not we show start-pause
+ // Start-pause service is only available for old vacuum entities, new entities have the `STATE` feature
+ supportsFeature(stateObj, VacuumEntityFeature.PAUSE) &&
+ (supportsFeature(stateObj, VacuumEntityFeature.STATE) ||
+ supportsFeature(stateObj, VacuumEntityFeature.START)),
},
{
translationKey: "start_pause",
@@ -53,6 +55,8 @@ const VACUUM_COMMANDS: VacuumCommand[] = [
serviceName: "start_pause",
isVisible: (stateObj) =>
// If start is supported, we don't show this button
+ // This service is only available for old vacuum entities, new entities have the `STATE` feature
+ !supportsFeature(stateObj, VacuumEntityFeature.STATE) &&
!supportsFeature(stateObj, VacuumEntityFeature.START) &&
supportsFeature(stateObj, VacuumEntityFeature.PAUSE),
},
diff --git a/src/panels/lovelace/tile-features/hui-vacuum-commands-tile-feature.ts b/src/panels/lovelace/tile-features/hui-vacuum-commands-tile-feature.ts
index 3c4119511c..f4079030dd 100644
--- a/src/panels/lovelace/tile-features/hui-vacuum-commands-tile-feature.ts
+++ b/src/panels/lovelace/tile-features/hui-vacuum-commands-tile-feature.ts
@@ -63,6 +63,8 @@ export const VACUUM_COMMANDS_BUTTONS: Record<
> = {
start_pause: (stateObj) => {
const startPauseOnly =
+ // This service is only available for old vacuum entities, new entities have the `STATE` feature
+ !supportsFeature(stateObj, VacuumEntityFeature.STATE) &&
!supportsFeature(stateObj, VacuumEntityFeature.START) &&
supportsFeature(stateObj, VacuumEntityFeature.PAUSE);
From 606b96f6fdb034358f74a2e6badd94bb72228826 Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Tue, 11 Jul 2023 15:00:12 +0200
Subject: [PATCH 036/102] Fix history issue when closing more info dialog by
clicking update (#17257)
* Fix history issue when closing more info dialog by clicking update
* Remove hideMoreInfoDialog function
---
src/dialogs/more-info/show-ha-more-info-dialog.ts | 3 ---
.../editor-tabs/settings/entity-settings-helper-tab.ts | 3 +--
src/panels/config/entities/entity-registry-settings.ts | 3 +--
src/panels/config/entities/ha-config-entities.ts | 10 +---------
4 files changed, 3 insertions(+), 16 deletions(-)
diff --git a/src/dialogs/more-info/show-ha-more-info-dialog.ts b/src/dialogs/more-info/show-ha-more-info-dialog.ts
index b5a4197979..de6d688fec 100644
--- a/src/dialogs/more-info/show-ha-more-info-dialog.ts
+++ b/src/dialogs/more-info/show-ha-more-info-dialog.ts
@@ -5,6 +5,3 @@ export const showMoreInfoDialog = (
element: HTMLElement,
params: MoreInfoDialogParams
) => fireEvent(element, "hass-more-info", params);
-
-export const hideMoreInfoDialog = (element: HTMLElement) =>
- fireEvent(element, "hass-more-info", { entityId: null });
diff --git a/src/panels/config/entities/editor-tabs/settings/entity-settings-helper-tab.ts b/src/panels/config/entities/editor-tabs/settings/entity-settings-helper-tab.ts
index 26ba5b9639..dd42f8b34e 100644
--- a/src/panels/config/entities/editor-tabs/settings/entity-settings-helper-tab.ts
+++ b/src/panels/config/entities/editor-tabs/settings/entity-settings-helper-tab.ts
@@ -16,7 +16,6 @@ import {
} from "../../../../../data/entity_registry";
import { HELPERS_CRUD } from "../../../../../data/helpers_crud";
import { showConfirmationDialog } from "../../../../../dialogs/generic/show-dialog-box";
-import { hideMoreInfoDialog } from "../../../../../dialogs/more-info/show-ha-more-info-dialog";
import { haStyle } from "../../../../../resources/styles";
import type { HomeAssistant } from "../../../../../types";
import type { Helper } from "../../../helpers/const";
@@ -151,7 +150,7 @@ export class EntityRegistrySettingsHelper extends LitElement {
}
const result = await this._registryEditor!.updateEntry();
if (result.close) {
- hideMoreInfoDialog(this);
+ fireEvent(this, "close-dialog");
}
} catch (err: any) {
this._error = err.message || "Unknown error";
diff --git a/src/panels/config/entities/entity-registry-settings.ts b/src/panels/config/entities/entity-registry-settings.ts
index c8c32701f8..f8ed357167 100644
--- a/src/panels/config/entities/entity-registry-settings.ts
+++ b/src/panels/config/entities/entity-registry-settings.ts
@@ -22,7 +22,6 @@ import {
showAlertDialog,
showConfirmationDialog,
} from "../../../dialogs/generic/show-dialog-box";
-import { hideMoreInfoDialog } from "../../../dialogs/more-info/show-ha-more-info-dialog";
import { SubscribeMixin } from "../../../mixins/subscribe-mixin";
import { haStyle } from "../../../resources/styles";
import type { HomeAssistant } from "../../../types";
@@ -200,7 +199,7 @@ export class EntityRegistrySettings extends SubscribeMixin(LitElement) {
try {
const result = await this._registryEditor!.updateEntry();
if (result.close) {
- hideMoreInfoDialog(this);
+ fireEvent(this, "close-dialog");
}
} catch (err: any) {
this._error = err.message || "Unknown error";
diff --git a/src/panels/config/entities/ha-config-entities.ts b/src/panels/config/entities/ha-config-entities.ts
index fb4673059b..67b0b4e5bb 100644
--- a/src/panels/config/entities/ha-config-entities.ts
+++ b/src/panels/config/entities/ha-config-entities.ts
@@ -55,10 +55,7 @@ import {
showAlertDialog,
showConfirmationDialog,
} from "../../../dialogs/generic/show-dialog-box";
-import {
- hideMoreInfoDialog,
- showMoreInfoDialog,
-} from "../../../dialogs/more-info/show-ha-more-info-dialog";
+import { showMoreInfoDialog } from "../../../dialogs/more-info/show-ha-more-info-dialog";
import "../../../layouts/hass-loading-screen";
import "../../../layouts/hass-tabs-subpage-data-table";
import type { HaTabsSubpageDataTable } from "../../../layouts/hass-tabs-subpage-data-table";
@@ -487,11 +484,6 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) {
];
}
- public disconnectedCallback() {
- super.disconnectedCallback();
- hideMoreInfoDialog(this);
- }
-
protected render() {
if (!this.hass || this._entities === undefined) {
return html` `;
From 52d717a86bec0531b8c9ed1f2cc636fb7d13c5a8 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 12 Jul 2023 09:10:21 -0400
Subject: [PATCH 037/102] Update dependency glob to v10.3.3 (#17281)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 1b34ac076a..5d40650f5f 100644
--- a/package.json
+++ b/package.json
@@ -206,7 +206,7 @@
"esprima": "4.0.1",
"fancy-log": "2.0.0",
"fs-extra": "11.1.1",
- "glob": "10.3.2",
+ "glob": "10.3.3",
"gulp": "4.0.2",
"gulp-flatmap": "1.0.2",
"gulp-json-transform": "0.4.8",
diff --git a/yarn.lock b/yarn.lock
index 15c20c02af..d8f866b844 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9204,9 +9204,9 @@ __metadata:
languageName: node
linkType: hard
-"glob@npm:10.3.2, glob@npm:^10.2.2":
- version: 10.3.2
- resolution: "glob@npm:10.3.2"
+"glob@npm:10.3.3, glob@npm:^10.2.2":
+ version: 10.3.3
+ resolution: "glob@npm:10.3.3"
dependencies:
foreground-child: ^3.1.0
jackspeak: ^2.0.3
@@ -9215,7 +9215,7 @@ __metadata:
path-scurry: ^1.10.1
bin:
glob: dist/cjs/src/bin.js
- checksum: 3b4f455192d18eb1cf41a9193c825f594a70323b522f290d4b75191d3e399791f9da1febef339392a9828c03a3bf2b96e0b32cc8efb0068c2b11df585026a367
+ checksum: 29190d3291f422da0cb40b77a72fc8d2c51a36524e99b8bf412548b7676a6627489528b57250429612b6eec2e6fe7826d328451d3e694a9d15e575389308ec53
languageName: node
linkType: hard
@@ -9771,7 +9771,7 @@ __metadata:
fancy-log: 2.0.0
fs-extra: 11.1.1
fuse.js: 6.6.2
- glob: 10.3.2
+ glob: 10.3.3
google-timezones-json: 1.1.0
gulp: 4.0.2
gulp-flatmap: 1.0.2
From 5ed348aa56e24d72456681afd578678a23ea41a4 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Wed, 12 Jul 2023 11:54:33 -0400
Subject: [PATCH 038/102] Add download button to assist sentence parser dev
tool (#17265)
* Add download button to assist sentence parser dev tool
* Use outlined button
* BLOCK
---
src/components/ha-button.ts | 1 +
.../assist/developer-tools-assist.ts | 25 +++++++++++++++++++
2 files changed, 26 insertions(+)
diff --git a/src/components/ha-button.ts b/src/components/ha-button.ts
index 959f679431..df7bdf46e5 100644
--- a/src/components/ha-button.ts
+++ b/src/components/ha-button.ts
@@ -12,6 +12,7 @@ export class HaButton extends Button {
margin-inline-start: 0px;
margin-inline-end: 8px;
direction: var(--direction);
+ display: block;
}
.mdc-button {
height: var(--button-height, 36px);
diff --git a/src/panels/developer-tools/assist/developer-tools-assist.ts b/src/panels/developer-tools/assist/developer-tools-assist.ts
index 9080e13394..32d5dcfcd6 100644
--- a/src/panels/developer-tools/assist/developer-tools-assist.ts
+++ b/src/panels/developer-tools/assist/developer-tools-assist.ts
@@ -1,3 +1,4 @@
+import { mdiDownload } from "@mdi/js";
import { dump } from "js-yaml";
import { CSSResultGroup, LitElement, css, html, nothing } from "lit";
import { customElement, property, query, state } from "lit/decorators";
@@ -16,6 +17,7 @@ import { haStyle } from "../../../resources/styles";
import { HomeAssistant } from "../../../types";
import { formatLanguageCode } from "../../../common/language/format_language";
import { storage } from "../../../common/decorators/storage";
+import { fileDownload } from "../../../util/file_download";
type SentenceParsingResult = {
sentence: string;
@@ -146,6 +148,16 @@ class HaPanelDevAssist extends SubscribeMixin(LitElement) {
+ ${this._results.length
+ ? html`
+
+
+
+ Download Results
+
+
+ `
+ : ""}
${this._results.map((r) => {
const { sentence, result, language } = r;
const matched = result != null;
@@ -182,6 +194,15 @@ class HaPanelDevAssist extends SubscribeMixin(LitElement) {
`;
}
+ private _download() {
+ fileDownload(
+ `data:text/plain;charset=utf-8,${encodeURIComponent(
+ JSON.stringify({ results: this._results }, null, 2)
+ )}`,
+ `intent_results.json`
+ );
+ }
+
static get styles(): CSSResultGroup {
return [
haStyle,
@@ -208,6 +229,10 @@ class HaPanelDevAssist extends SubscribeMixin(LitElement) {
.form {
margin-bottom: 16px;
}
+ .result-toolbar {
+ text-align: center;
+ margin-bottom: 16px;
+ }
.result {
margin-bottom: 16px;
}
From 3a4d2db8ffd83a3eaf9fadd7d9f16999c8452486 Mon Sep 17 00:00:00 2001
From: Domantas Petrauskas
Date: Thu, 13 Jul 2023 10:34:20 +0300
Subject: [PATCH 039/102] Fix overflow on sensor card (#17284)
---
src/panels/lovelace/cards/hui-sensor-card.ts | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/panels/lovelace/cards/hui-sensor-card.ts b/src/panels/lovelace/cards/hui-sensor-card.ts
index 71b7282ce6..ee7937e544 100644
--- a/src/panels/lovelace/cards/hui-sensor-card.ts
+++ b/src/panels/lovelace/cards/hui-sensor-card.ts
@@ -76,6 +76,9 @@ class HuiSensorCard extends HuiEntityCard {
return [
HuiEntityCard.styles,
css`
+ ha-card {
+ overflow: hidden;
+ }
.info {
direction: ltr;
text-align: var(--float-start);
From 158a816f7a36e5e6ef7c6e290282d44d7dd509de Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Thu, 13 Jul 2023 04:20:51 -0700
Subject: [PATCH 040/102] Consistently treat `standby` as a non-active state
for media_player (#17289)
Consistently treat standby as an off state for media_player
---
src/data/media-player.ts | 3 ++-
.../more-info/controls/more-info-media_player.ts | 8 ++++----
src/panels/lovelace/cards/hui-media-control-card.ts | 6 ++++--
.../entity-rows/hui-media-player-entity-row.ts | 12 ++++++------
4 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/src/data/media-player.ts b/src/data/media-player.ts
index c666c0ec52..0e3ca09160 100644
--- a/src/data/media-player.ts
+++ b/src/data/media-player.ts
@@ -33,6 +33,7 @@ import type {
HassEntityBase,
} from "home-assistant-js-websocket";
import { supportsFeature } from "../common/entity/supports-feature";
+import { stateActive } from "../common/entity/state_active";
import { MediaPlayerItemId } from "../components/media-player/ha-media-player-browse";
import type { HomeAssistant, TranslationDict } from "../types";
import { isUnavailableState } from "./entity";
@@ -270,7 +271,7 @@ export const computeMediaControls = (
return undefined;
}
- if (state === "off") {
+ if (!stateActive(stateObj)) {
return supportsFeature(stateObj, MediaPlayerEntityFeature.TURN_ON)
? [
{
diff --git a/src/dialogs/more-info/controls/more-info-media_player.ts b/src/dialogs/more-info/controls/more-info-media_player.ts
index b02fc75e9d..047605cd8a 100644
--- a/src/dialogs/more-info/controls/more-info-media_player.ts
+++ b/src/dialogs/more-info/controls/more-info-media_player.ts
@@ -15,12 +15,12 @@ import { stopPropagation } from "../../../common/dom/stop_propagation";
import { computeAttributeValueDisplay } from "../../../common/entity/compute_attribute_display";
import { supportsFeature } from "../../../common/entity/supports-feature";
import { computeRTLDirection } from "../../../common/util/compute_rtl";
+import { stateActive } from "../../../common/entity/state_active";
import "../../../components/ha-icon-button";
import "../../../components/ha-select";
import "../../../components/ha-slider";
import "../../../components/ha-svg-icon";
import { showMediaBrowserDialog } from "../../../components/media-player/show-media-browser-dialog";
-import { UNAVAILABLE, UNKNOWN } from "../../../data/entity";
import {
computeMediaControls,
handleMediaControlClick,
@@ -83,7 +83,7 @@ class MoreInfoMediaPlayer extends LitElement {
${(supportsFeature(stateObj, MediaPlayerEntityFeature.VOLUME_SET) ||
supportsFeature(stateObj, MediaPlayerEntityFeature.VOLUME_BUTTONS)) &&
- ![UNAVAILABLE, UNKNOWN, "off"].includes(stateObj.state)
+ stateActive(stateObj)
? html`
${supportsFeature(stateObj, MediaPlayerEntityFeature.VOLUME_MUTE)
@@ -141,7 +141,7 @@ class MoreInfoMediaPlayer extends LitElement {
`
: ""}
- ${![UNAVAILABLE, UNKNOWN, "off"].includes(stateObj.state) &&
+ ${stateActive(stateObj) &&
supportsFeature(stateObj, MediaPlayerEntityFeature.SELECT_SOURCE) &&
stateObj.attributes.source_list?.length
? html`
@@ -176,7 +176,7 @@ class MoreInfoMediaPlayer extends LitElement {
`
: ""}
- ${![UNAVAILABLE, UNKNOWN, "off"].includes(stateObj.state) &&
+ ${stateActive(stateObj) &&
supportsFeature(stateObj, MediaPlayerEntityFeature.SELECT_SOUND_MODE) &&
stateObj.attributes.sound_mode_list?.length
? html`
diff --git a/src/panels/lovelace/cards/hui-media-control-card.ts b/src/panels/lovelace/cards/hui-media-control-card.ts
index 4a5af932ce..aa8074d220 100644
--- a/src/panels/lovelace/cards/hui-media-control-card.ts
+++ b/src/panels/lovelace/cards/hui-media-control-card.ts
@@ -17,6 +17,7 @@ import { fireEvent } from "../../../common/dom/fire_event";
import { computeStateName } from "../../../common/entity/compute_state_name";
import { supportsFeature } from "../../../common/entity/supports-feature";
import { extractColors } from "../../../common/image/extract_color";
+import { stateActive } from "../../../common/entity/state_active";
import { debounce } from "../../../common/util/debounce";
import "../../../components/ha-card";
import "../../../components/ha-icon-button";
@@ -169,10 +170,11 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
const entityState = stateObj.state;
- const isOffState = entityState === "off";
+ const isOffState =
+ !stateActive(stateObj) && !isUnavailableState(entityState);
const isUnavailable =
isUnavailableState(entityState) ||
- (entityState === "off" &&
+ (isOffState &&
!supportsFeature(stateObj, MediaPlayerEntityFeature.TURN_ON));
const hasNoImage = !this._image;
const controls = computeMediaControls(stateObj, false);
diff --git a/src/panels/lovelace/entity-rows/hui-media-player-entity-row.ts b/src/panels/lovelace/entity-rows/hui-media-player-entity-row.ts
index f2f481ad46..ab2de02d9a 100644
--- a/src/panels/lovelace/entity-rows/hui-media-player-entity-row.ts
+++ b/src/panels/lovelace/entity-rows/hui-media-player-entity-row.ts
@@ -24,10 +24,11 @@ import { customElement, property, state } from "lit/decorators";
import { computeStateDisplay } from "../../../common/entity/compute_state_display";
import { supportsFeature } from "../../../common/entity/supports-feature";
import { computeRTLDirection } from "../../../common/util/compute_rtl";
+import { stateActive } from "../../../common/entity/state_active";
import { debounce } from "../../../common/util/debounce";
import "../../../components/ha-icon-button";
import "../../../components/ha-slider";
-import { isUnavailableState, UNAVAILABLE, UNKNOWN } from "../../../data/entity";
+import { isUnavailableState } from "../../../data/entity";
import {
computeMediaDescription,
ControlButton,
@@ -199,7 +200,7 @@ class HuiMediaPlayerEntityRow extends LitElement implements LovelaceRow {
>
${supportsFeature(stateObj, MediaPlayerEntityFeature.TURN_ON) &&
- entityState === "off" &&
+ !stateActive(stateObj) &&
!isUnavailableState(entityState)
? html`
${(supportsFeature(stateObj, MediaPlayerEntityFeature.VOLUME_SET) ||
supportsFeature(stateObj, MediaPlayerEntityFeature.VOLUME_BUTTONS)) &&
- ![UNAVAILABLE, UNKNOWN, "off"].includes(entityState)
+ stateActive(stateObj)
? html`
@@ -330,7 +330,7 @@ class HuiMediaPlayerEntityRow extends LitElement implements LovelaceRow {
this.hass!.callService(
"media_player",
- stateObj.state === "off" ? "turn_on" : "turn_off",
+ stateActive(stateObj) ? "turn_off" : "turn_on",
{
entity_id: this._config!.entity,
}
From e2ec3b63ce8e196634879eaacc06b1c441a81721 Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Thu, 13 Jul 2023 16:33:12 +0200
Subject: [PATCH 041/102] Fix autocorrect and spellcheck for ha-textfield
(#17274)
---
src/components/ha-combo-box.ts | 2 +-
src/components/ha-textfield.ts | 19 +++++++++++++++++++
.../entity-registry-settings-editor.ts | 4 ++++
.../state/developer-tools-state.js | 2 +-
4 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/src/components/ha-combo-box.ts b/src/components/ha-combo-box.ts
index 4b6c9b1ed5..ca549b7567 100644
--- a/src/components/ha-combo-box.ts
+++ b/src/components/ha-combo-box.ts
@@ -173,7 +173,7 @@ export class HaComboBox extends LitElement {
autocapitalize="none"
autocomplete="off"
autocorrect="off"
- spellcheck="false"
+ input-spellcheck="false"
.suffix=${html`
Date: Thu, 13 Jul 2023 16:33:56 +0200
Subject: [PATCH 042/102] Add condition selector for blueprint (#17278)
---
.../ha-selector/ha-selector-condition.ts | 48 +++++++++++++++++++
src/components/ha-selector/ha-selector.ts | 5 +-
src/data/selector.ts | 6 +++
3 files changed, 57 insertions(+), 2 deletions(-)
create mode 100644 src/components/ha-selector/ha-selector-condition.ts
diff --git a/src/components/ha-selector/ha-selector-condition.ts b/src/components/ha-selector/ha-selector-condition.ts
new file mode 100644
index 0000000000..fe76180793
--- /dev/null
+++ b/src/components/ha-selector/ha-selector-condition.ts
@@ -0,0 +1,48 @@
+import { css, CSSResultGroup, html, LitElement } from "lit";
+import { customElement, property } from "lit/decorators";
+import { Condition } from "../../data/automation";
+import { ConditionSelector } from "../../data/selector";
+import "../../panels/config/automation/condition/ha-automation-condition";
+import { HomeAssistant } from "../../types";
+
+@customElement("ha-selector-condition")
+export class HaConditionSelector extends LitElement {
+ @property() public hass!: HomeAssistant;
+
+ @property() public selector!: ConditionSelector;
+
+ @property() public value?: Condition;
+
+ @property() public label?: string;
+
+ @property({ type: Boolean, reflect: true }) public disabled = false;
+
+ protected render() {
+ return html`
+
+ `;
+ }
+
+ static get styles(): CSSResultGroup {
+ return css`
+ ha-automation-condition {
+ display: block;
+ margin-bottom: 16px;
+ }
+ :host([disabled]) ha-automation-condition {
+ opacity: var(--light-disabled-opacity);
+ pointer-events: none;
+ }
+ `;
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "ha-selector-condition": HaConditionSelector;
+ }
+}
diff --git a/src/components/ha-selector/ha-selector.ts b/src/components/ha-selector/ha-selector.ts
index 2e7e5143d8..9c831c0a10 100644
--- a/src/components/ha-selector/ha-selector.ts
+++ b/src/components/ha-selector/ha-selector.ts
@@ -3,9 +3,9 @@ import { customElement, property } from "lit/decorators";
import memoizeOne from "memoize-one";
import { dynamicElement } from "../../common/dom/dynamic-element-directive";
import {
- Selector,
- handleLegacyEntitySelector,
handleLegacyDeviceSelector,
+ handleLegacyEntitySelector,
+ Selector,
} from "../../data/selector";
import type { HomeAssistant } from "../../types";
@@ -17,6 +17,7 @@ const LOAD_ELEMENTS = {
assist_pipeline: () => import("./ha-selector-assist-pipeline"),
boolean: () => import("./ha-selector-boolean"),
color_rgb: () => import("./ha-selector-color-rgb"),
+ condition: () => import("./ha-selector-condition"),
config_entry: () => import("./ha-selector-config-entry"),
conversation_agent: () => import("./ha-selector-conversation-agent"),
constant: () => import("./ha-selector-constant"),
diff --git a/src/data/selector.ts b/src/data/selector.ts
index acbac41a43..f046a5a1fd 100644
--- a/src/data/selector.ts
+++ b/src/data/selector.ts
@@ -19,6 +19,7 @@ export type Selector =
| BooleanSelector
| ColorRGBSelector
| ColorTempSelector
+ | ConditionSelector
| ConversationAgentSelector
| ConfigEntrySelector
| ConstantSelector
@@ -96,6 +97,11 @@ export interface ColorTempSelector {
} | null;
}
+export interface ConditionSelector {
+ // eslint-disable-next-line @typescript-eslint/ban-types
+ condition: {} | null;
+}
+
export interface ConversationAgentSelector {
conversation_agent: { language?: string } | null;
}
From 56e82eab03f329e315ab117e6ee9cf0464085a6b Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Thu, 13 Jul 2023 16:34:42 +0200
Subject: [PATCH 043/102] Add icon to edit card overflow menu (#17293)
---
.../lovelace/components/hui-card-options.ts | 171 ++++++++++--------
src/translations/en.json | 8 +-
2 files changed, 104 insertions(+), 75 deletions(-)
diff --git a/src/panels/lovelace/components/hui-card-options.ts b/src/panels/lovelace/components/hui-card-options.ts
index ec04f21acd..6f52d6135f 100644
--- a/src/panels/lovelace/components/hui-card-options.ts
+++ b/src/panels/lovelace/components/hui-card-options.ts
@@ -1,7 +1,15 @@
import "@material/mwc-button";
import { ActionDetail } from "@material/mwc-list/mwc-list-foundation";
-import "@material/mwc-list/mwc-list-item";
-import { mdiArrowDown, mdiArrowUp, mdiDotsVertical } from "@mdi/js";
+import {
+ mdiArrowDown,
+ mdiArrowUp,
+ mdiContentCopy,
+ mdiContentCut,
+ mdiContentDuplicate,
+ mdiDelete,
+ mdiDotsVertical,
+ mdiFileMoveOutline,
+} from "@mdi/js";
import deepClone from "deep-clone-simple";
import {
CSSResultGroup,
@@ -17,11 +25,13 @@ import { storage } from "../../../common/decorators/storage";
import { fireEvent } from "../../../common/dom/fire_event";
import "../../../components/ha-button-menu";
import "../../../components/ha-icon-button";
+import "../../../components/ha-list-item";
import { LovelaceCardConfig, saveConfig } from "../../../data/lovelace";
import {
showAlertDialog,
showPromptDialog,
} from "../../../dialogs/generic/show-dialog-box";
+import { haStyle } from "../../../resources/styles";
import { HomeAssistant } from "../../../types";
import { showSaveSuccessToast } from "../../../util/toast-saved-success";
import { computeCardSize } from "../common/compute-card-size";
@@ -122,31 +132,51 @@ export class HuiCardOptions extends LitElement {
)}
.path=${mdiDotsVertical}
>
-
+
+
${this.hass!.localize(
"ui.panel.lovelace.editor.edit_card.move"
- )}
-
${this.hass!.localize(
+ )}
+
+
+
+ ${this.hass!.localize(
"ui.panel.lovelace.editor.edit_card.duplicate"
- )}
-
${this.hass!.localize(
+ )}
+
+
+
+ ${this.hass!.localize(
"ui.panel.lovelace.editor.edit_card.copy"
- )}
-
${this.hass!.localize(
- "ui.panel.lovelace.editor.edit_card.cut"
- )}
-
+ )}
+
+
+
+ ${this.hass!.localize("ui.panel.lovelace.editor.edit_card.cut")}
+
+
+
+
${this.hass!.localize(
"ui.panel.lovelace.editor.edit_card.delete"
- )}
+ )}
+
@@ -155,65 +185,64 @@ export class HuiCardOptions extends LitElement {
}
static get styles(): CSSResultGroup {
- return css`
- :host(:hover) {
- outline: 2px solid var(--primary-color);
- }
+ return [
+ haStyle,
+ css`
+ :host(:hover) {
+ outline: 2px solid var(--primary-color);
+ }
- :host(:not(.panel)) ::slotted(*) {
- display: block;
- }
+ :host(:not(.panel)) ::slotted(*) {
+ display: block;
+ }
- :host(.panel) .card {
- height: calc(100% - 59px);
- }
+ :host(.panel) .card {
+ height: calc(100% - 59px);
+ }
- ha-card {
- border-top-right-radius: 0;
- border-top-left-radius: 0;
- }
+ ha-card {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0;
+ }
- .card-actions {
- display: flex;
- justify-content: space-between;
- align-items: center;
- }
+ .card-actions {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
- .right {
- display: flex;
- align-items: center;
- }
+ .right {
+ display: flex;
+ align-items: center;
+ }
- .position-badge {
- display: block;
- width: 24px;
- line-height: 24px;
- box-sizing: border-box;
- border-radius: 50%;
- font-weight: 500;
- text-align: center;
- font-size: 14px;
- background-color: var(--app-header-edit-background-color, #455a64);
- color: var(--app-header-edit-text-color, white);
- }
+ .position-badge {
+ display: block;
+ width: 24px;
+ line-height: 24px;
+ box-sizing: border-box;
+ border-radius: 50%;
+ font-weight: 500;
+ text-align: center;
+ font-size: 14px;
+ background-color: var(--app-header-edit-background-color, #455a64);
+ color: var(--app-header-edit-text-color, white);
+ }
- ha-icon-button {
- color: var(--primary-text-color);
- }
+ ha-icon-button {
+ color: var(--primary-text-color);
+ }
- ha-icon-button.move-arrow[disabled] {
- color: var(--disabled-text-color);
- }
+ ha-icon-button.move-arrow[disabled] {
+ color: var(--disabled-text-color);
+ }
- mwc-list-item {
- cursor: pointer;
- white-space: nowrap;
- }
-
- mwc-list-item.delete-item {
- color: var(--error-color);
- }
- `;
+ ha-list-item {
+ cursor: pointer;
+ white-space: nowrap;
+ }
+ `,
+ ];
}
private _handleAction(ev: CustomEvent
) {
diff --git a/src/translations/en.json b/src/translations/en.json
index 05ff2b775e..ea9e09b5ef 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -4548,10 +4548,10 @@
"add": "Add Card",
"edit": "Edit",
"clear": "Clear",
- "delete": "Delete card",
- "copy": "Copy card",
- "cut": "Cut card",
- "duplicate": "Duplicate card",
+ "delete": "Delete",
+ "copy": "Copy",
+ "cut": "Cut",
+ "duplicate": "Duplicate",
"move": "Move to view",
"move_up": "Move card up",
"move_down": "Move card down",
From df765515ec072bc687d7a0a66a277a025769360a Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Thu, 13 Jul 2023 16:35:53 +0200
Subject: [PATCH 044/102] Use icon button to switch between code and editor
(#17294)
---
.../hui-conditional-card-editor.ts | 16 +++++++------
.../config-elements/hui-stack-card-editor.ts | 24 +++++++++++--------
.../lovelace/editor/hui-sub-element-editor.ts | 14 +++++------
3 files changed, 30 insertions(+), 24 deletions(-)
diff --git a/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts
index b2c8566af6..b63913d45b 100644
--- a/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts
+++ b/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts
@@ -1,7 +1,7 @@
import "@material/mwc-list/mwc-list-item";
import "@material/mwc-tab-bar/mwc-tab-bar";
import "@material/mwc-tab/mwc-tab";
-import { mdiContentCopy } from "@mdi/js";
+import { mdiCodeBraces, mdiContentCopy, mdiListBoxOutline } from "@mdi/js";
import deepClone from "deep-clone-simple";
import type { MDCTabBarActivatedEvent } from "@material/tab-bar";
import { css, CSSResultGroup, html, LitElement, nothing } from "lit";
@@ -92,6 +92,8 @@ export class HuiConditionalCardEditor
return nothing;
}
+ const isGuiMode = !this._cardEditorEl || this._GUImode;
+
return html`
-
- ${this.hass!.localize(
- !this._cardEditorEl || this._GUImode
+ .label=${this.hass!.localize(
+ isGuiMode
? "ui.panel.lovelace.editor.edit_card.show_code_editor"
: "ui.panel.lovelace.editor.edit_card.show_visual_editor"
)}
-
+ .path=${isGuiMode ? mdiCodeBraces : mdiListBoxOutline}
+ >
${this.config.type === "row"
? html`
From 510f9dbb1256c6cb92ae513ac061ebc291e8d2c7 Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Thu, 13 Jul 2023 16:36:18 +0200
Subject: [PATCH 045/102] Don't show paste from clipboard card when user search
for a card (#17295)
---
src/panels/lovelace/editor/card-editor/hui-card-picker.ts | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/panels/lovelace/editor/card-editor/hui-card-picker.ts b/src/panels/lovelace/editor/card-editor/hui-card-picker.ts
index 415b89b993..500a6a12b9 100644
--- a/src/panels/lovelace/editor/card-editor/hui-card-picker.ts
+++ b/src/panels/lovelace/editor/card-editor/hui-card-picker.ts
@@ -123,7 +123,7 @@ export class HuiCardPicker extends LitElement {
})}
>
- ${this._clipboard
+ ${this._clipboard && !this._filter
? html`
${until(
this._renderCardElement(
@@ -402,6 +402,9 @@ export class HuiCardPicker extends LitElement {
background: var(--primary-background-color, #fafafa);
cursor: pointer;
position: relative;
+ overflow: hidden;
+ border: var(--ha-card-border-width, 1px) solid
+ var(--ha-card-border-color, var(--divider-color));
}
.card-header {
@@ -451,8 +454,6 @@ export class HuiCardPicker extends LitElement {
height: 100%;
z-index: 1;
box-sizing: border-box;
- border: var(--ha-card-border-width, 1px) solid
- var(--ha-card-border-color, var(--divider-color));
border-radius: var(--ha-card-border-radius, 12px);
}
From 8bb2cbe7672474f1785be270110f8ad5e50ce2cf Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Thu, 13 Jul 2023 16:42:08 +0200
Subject: [PATCH 046/102] Refactor lock and alarm panel code dialog (#17254)
---
src/data/lock.ts | 31 ++++++++++++++
.../lock/ha-more-info-lock-toggle.ts | 33 ++++-----------
.../more-info/controls/more-info-lock.ts | 41 ++++---------------
3 files changed, 47 insertions(+), 58 deletions(-)
diff --git a/src/data/lock.ts b/src/data/lock.ts
index a6c9914559..df79b4e223 100644
--- a/src/data/lock.ts
+++ b/src/data/lock.ts
@@ -2,6 +2,8 @@ import {
HassEntityAttributeBase,
HassEntityBase,
} from "home-assistant-js-websocket";
+import { showEnterCodeDialogDialog } from "../dialogs/enter-code/show-enter-code-dialog";
+import { HomeAssistant } from "../types";
export const FORMAT_TEXT = "text";
export const FORMAT_NUMBER = "number";
@@ -18,3 +20,32 @@ interface LockEntityAttributes extends HassEntityAttributeBase {
export interface LockEntity extends HassEntityBase {
attributes: LockEntityAttributes;
}
+
+type ProtectedLockService = "lock" | "unlock" | "open";
+
+export const callProtectedLockService = async (
+ element: HTMLElement,
+ hass: HomeAssistant,
+ stateObj: LockEntity,
+ service: ProtectedLockService
+) => {
+ let code: string | undefined;
+
+ if (stateObj!.attributes.code_format) {
+ const response = await showEnterCodeDialogDialog(element, {
+ codeFormat: "text",
+ codePattern: stateObj!.attributes.code_format,
+ title: hass.localize(`ui.dialogs.more_info_control.lock.${service}`),
+ submitText: hass.localize(`ui.dialogs.more_info_control.lock.${service}`),
+ });
+ if (!response) {
+ throw new Error("Code dialog closed");
+ }
+ code = response;
+ }
+
+ await hass.callService("lock", service, {
+ entity_id: stateObj!.entity_id,
+ code,
+ });
+};
diff --git a/src/dialogs/more-info/components/lock/ha-more-info-lock-toggle.ts b/src/dialogs/more-info/components/lock/ha-more-info-lock-toggle.ts
index aafecef40d..0f5691e408 100644
--- a/src/dialogs/more-info/components/lock/ha-more-info-lock-toggle.ts
+++ b/src/dialogs/more-info/components/lock/ha-more-info-lock-toggle.ts
@@ -15,9 +15,8 @@ import "../../../../components/ha-control-button";
import "../../../../components/ha-control-switch";
import { UNAVAILABLE, UNKNOWN } from "../../../../data/entity";
import { forwardHaptic } from "../../../../data/haptics";
-import { LockEntity } from "../../../../data/lock";
+import { callProtectedLockService, LockEntity } from "../../../../data/lock";
import { HomeAssistant } from "../../../../types";
-import { showEnterCodeDialogDialog } from "../../../enter-code/show-enter-code-dialog";
@customElement("ha-more-info-lock-toggle")
export class HaMoreInfoLockToggle extends LitElement {
@@ -68,30 +67,12 @@ export class HaMoreInfoLockToggle extends LitElement {
return;
}
forwardHaptic("light");
-
- let code: string | undefined;
-
- if (this.stateObj.attributes.code_format) {
- const response = await showEnterCodeDialogDialog(this, {
- codeFormat: "text",
- codePattern: this.stateObj.attributes.code_format,
- title: this.hass.localize(
- `ui.dialogs.more_info_control.lock.${turnOn ? "lock" : "unlock"}`
- ),
- submitText: this.hass.localize(
- `ui.dialogs.more_info_control.lock.${turnOn ? "lock" : "unlock"}`
- ),
- });
- if (response == null) {
- throw new Error("cancel");
- }
- code = response;
- }
-
- await this.hass.callService("lock", turnOn ? "lock" : "unlock", {
- entity_id: this.stateObj.entity_id,
- code,
- });
+ callProtectedLockService(
+ this,
+ this.hass,
+ this.stateObj,
+ turnOn ? "lock" : "unlock"
+ );
}
protected render(): TemplateResult {
diff --git a/src/dialogs/more-info/controls/more-info-lock.ts b/src/dialogs/more-info/controls/more-info-lock.ts
index 5fa6ec5df3..24c8d0cece 100644
--- a/src/dialogs/more-info/controls/more-info-lock.ts
+++ b/src/dialogs/more-info/controls/more-info-lock.ts
@@ -1,6 +1,6 @@
import "@material/web/iconbutton/outlined-icon-button";
import { mdiDoorOpen, mdiLock, mdiLockOff } from "@mdi/js";
-import { css, CSSResultGroup, html, LitElement, nothing } from "lit";
+import { CSSResultGroup, LitElement, css, html, nothing } from "lit";
import { customElement, property } from "lit/decorators";
import { styleMap } from "lit/directives/style-map";
import { domainIcon } from "../../../common/entity/domain_icon";
@@ -8,9 +8,12 @@ import { stateColorCss } from "../../../common/entity/state_color";
import { supportsFeature } from "../../../common/entity/supports-feature";
import "../../../components/ha-attributes";
import { UNAVAILABLE } from "../../../data/entity";
-import { LockEntity, LockEntityFeature } from "../../../data/lock";
+import {
+ LockEntity,
+ LockEntityFeature,
+ callProtectedLockService,
+} from "../../../data/lock";
import type { HomeAssistant } from "../../../types";
-import { showEnterCodeDialogDialog } from "../../enter-code/show-enter-code-dialog";
import { moreInfoControlStyle } from "../components/ha-more-info-control-style";
import "../components/ha-more-info-state-header";
import "../components/lock/ha-more-info-lock-toggle";
@@ -22,41 +25,15 @@ class MoreInfoLock extends LitElement {
@property({ attribute: false }) public stateObj?: LockEntity;
private async _open() {
- this._callService("open");
+ callProtectedLockService(this, this.hass, this.stateObj!, "open");
}
private async _lock() {
- this._callService("lock");
+ callProtectedLockService(this, this.hass, this.stateObj!, "lock");
}
private async _unlock() {
- this._callService("unlock");
- }
-
- private async _callService(service: "open" | "lock" | "unlock") {
- let code: string | undefined;
-
- if (this.stateObj!.attributes.code_format) {
- const response = await showEnterCodeDialogDialog(this, {
- codeFormat: "text",
- codePattern: this.stateObj!.attributes.code_format,
- title: this.hass.localize(
- `ui.dialogs.more_info_control.lock.${service}`
- ),
- submitText: this.hass.localize(
- `ui.dialogs.more_info_control.lock.${service}`
- ),
- });
- if (!response) {
- return;
- }
- code = response;
- }
-
- this.hass.callService("lock", service, {
- entity_id: this.stateObj!.entity_id,
- code,
- });
+ callProtectedLockService(this, this.hass, this.stateObj!, "unlock");
}
protected render() {
From 1fe02e8d6c12c29932d7dcc0efca2170ef0297aa Mon Sep 17 00:00:00 2001
From: Denis Shulyaka
Date: Thu, 13 Jul 2023 18:04:04 +0300
Subject: [PATCH 047/102] Add current humidity to humidifier history chart
(#17288)
* Add current humidity to humidifier history chart
* state-humidifier-on-color
---
.../chart/state-history-chart-line.ts | 85 +++++++++++++++++--
src/data/history.ts | 2 +
src/resources/ha-style.ts | 2 +-
src/translations/en.json | 3 +
4 files changed, 84 insertions(+), 8 deletions(-)
diff --git a/src/components/chart/state-history-chart-line.ts b/src/components/chart/state-history-chart-line.ts
index b90d57fb62..37f831c192 100644
--- a/src/components/chart/state-history-chart-line.ts
+++ b/src/components/chart/state-history-chart-line.ts
@@ -328,23 +328,94 @@ class StateHistoryChartLine extends LitElement {
}
});
} else if (domain === "humidifier") {
+ const hasAction = states.states.some(
+ (entityState) => entityState.attributes?.action
+ );
+ const hasCurrent = states.states.some(
+ (entityState) => entityState.attributes?.current_humidity
+ );
+
+ const hasHumidifying =
+ hasAction &&
+ states.states.some(
+ (entityState: LineChartState) =>
+ entityState.attributes?.action === "humidifying"
+ );
+ const hasDrying =
+ hasAction &&
+ states.states.some(
+ (entityState: LineChartState) =>
+ entityState.attributes?.action === "drying"
+ );
+
addDataSet(
`${this.hass.localize("ui.card.humidifier.target_humidity_entity", {
name: name,
})}`
);
- addDataSet(
- `${this.hass.localize("ui.card.humidifier.on_entity", {
- name: name,
- })}`,
- true
- );
+
+ if (hasCurrent) {
+ addDataSet(
+ `${this.hass.localize(
+ "ui.card.humidifier.current_humidity_entity",
+ {
+ name: name,
+ }
+ )}`
+ );
+ }
+
+ // If action attribute is available, we used it to shade the area below the humidity.
+ // If action attribute is not available, we shade the area when the device is on
+ if (hasHumidifying) {
+ addDataSet(
+ `${this.hass.localize("ui.card.humidifier.humidifying", {
+ name: name,
+ })}`,
+ true,
+ computedStyles.getPropertyValue("--state-humidifier-on-color")
+ );
+ } else if (hasDrying) {
+ addDataSet(
+ `${this.hass.localize("ui.card.humidifier.drying", {
+ name: name,
+ })}`,
+ true,
+ computedStyles.getPropertyValue("--state-humidifier-on-color")
+ );
+ } else {
+ addDataSet(
+ `${this.hass.localize("ui.card.humidifier.on_entity", {
+ name: name,
+ })}`,
+ true
+ );
+ }
states.states.forEach((entityState) => {
if (!entityState.attributes) return;
const target = safeParseFloat(entityState.attributes.humidity);
+ // If the current humidity is not available, then we fill up to the target humidity
+ const current = hasCurrent
+ ? safeParseFloat(entityState.attributes?.current_humidity)
+ : target;
const series = [target];
- series.push(entityState.state === "on" ? target : null);
+
+ if (hasCurrent) {
+ series.push(current);
+ }
+
+ if (hasHumidifying) {
+ series.push(
+ entityState.attributes?.action === "humidifying" ? current : null
+ );
+ } else if (hasDrying) {
+ series.push(
+ entityState.attributes?.action === "drying" ? current : null
+ );
+ } else {
+ series.push(entityState.state === "on" ? current : null);
+ }
pushData(new Date(entityState.last_changed), series);
});
} else {
diff --git a/src/data/history.ts b/src/data/history.ts
index 8202f44167..653dbef356 100644
--- a/src/data/history.ts
+++ b/src/data/history.ts
@@ -29,6 +29,8 @@ const LINE_ATTRIBUTES_TO_KEEP = [
"hvac_action",
"humidity",
"mode",
+ "action",
+ "current_humidity",
];
export interface LineChartState {
diff --git a/src/resources/ha-style.ts b/src/resources/ha-style.ts
index 4bdac11926..aefe6e6479 100644
--- a/src/resources/ha-style.ts
+++ b/src/resources/ha-style.ts
@@ -156,7 +156,7 @@ documentContainer.innerHTML = `
--state-device_tracker-active-color: var(--blue-color);
--state-device_tracker-home-color: var(--green-color);
--state-fan-active-color: var(--cyan-color);
- --state-humidifier-active-color: var(--blue-color);
+ --state-humidifier-on-color: var(--blue-color);
--state-light-active-color: var(--amber-color);
--state-lock-jammed-color: var(--red-color);
--state-lock-locked-color: var(--green-color);
diff --git a/src/translations/en.json b/src/translations/en.json
index ea9e09b5ef..b55a6dc042 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -134,6 +134,9 @@
"state": "State",
"mode": "Mode",
"target_humidity_entity": "{name} target humidity",
+ "current_humidity_entity": "{name} current humidity",
+ "humidifying": "{name} humidifying",
+ "drying": "{name} drying",
"on_entity": "{name} on"
},
"light": {
From 9b3710f8bdf7c5c63dc2089b6f95b5237656af3b Mon Sep 17 00:00:00 2001
From: Simon Lamon <32477463+silamon@users.noreply.github.com>
Date: Thu, 13 Jul 2023 18:32:36 +0200
Subject: [PATCH 048/102] Use translation keys for Network configuration pages
(#17261)
* Network labels
* Remove quotes
* Update translations to include data and linting
* IPV6 => IPv6
---
src/panels/config/network/dialog-ip-detail.ts | 77 ++++++++++++++++---
.../config/network/ha-config-network.ts | 11 ++-
.../config/network/supervisor-network.ts | 6 +-
src/translations/en.json | 14 +++-
4 files changed, 91 insertions(+), 17 deletions(-)
diff --git a/src/panels/config/network/dialog-ip-detail.ts b/src/panels/config/network/dialog-ip-detail.ts
index 6d1d3e24a4..e998e9c059 100644
--- a/src/panels/config/network/dialog-ip-detail.ts
+++ b/src/panels/config/network/dialog-ip-detail.ts
@@ -41,20 +41,49 @@ class DialogIPDetail extends LitElement {
@closed=${this.closeDialog}
scrimClickAction
escapeKeyAction
- .heading=${createCloseHeading(this.hass, "IP Information")}
+ .heading=${createCloseHeading(
+ this.hass,
+ this.hass.localize("ui.dialogs.dialog-ip-detail.ip_information")
+ )}
>
${ipv4
? html`
-
IPv4
+
+ ${this.hass.localize("ui.dialogs.dialog-ip-detail.ipv4")}
+
${ipv4.address
- ? html`
IP Address: ${ipv4.address?.join(", ")}
`
+ ? html`
+ ${this.hass.localize(
+ "ui.dialogs.dialog-ip-detail.ip_address",
+ { address: ipv4.address?.join(", ") }
+ )}
+
`
+ : ""}
+ ${ipv4.gateway
+ ? html`
+ ${this.hass.localize(
+ "ui.dialogs.dialog-ip-detail.gateway",
+ { gateway: ipv4.gateway }
+ )}
+
`
+ : ""}
+ ${ipv4.method
+ ? html`
+ ${this.hass.localize(
+ "ui.dialogs.dialog-ip-detail.method",
+ { method: ipv4.method }
+ )}
+
`
: ""}
- ${ipv4.gateway ? html`
Gateway: ${ipv4.gateway}
` : ""}
- ${ipv4.method ? html`
Method: ${ipv4.method}
` : ""}
${ipv4.nameservers?.length
? html`
-
Name Servers: ${ipv4.nameservers?.join(", ")}
+
+ ${this.hass.localize(
+ "ui.dialogs.dialog-ip-detail.nameservers",
+ { nameservers: ipv4.nameservers?.join(", ") }
+ )}
+
`
: ""}
@@ -63,15 +92,41 @@ class DialogIPDetail extends LitElement {
${ipv6
? html`
-
IPv6
+
+ ${this.hass.localize("ui.dialogs.dialog-ip-detail.ipv6")}
+
${ipv6.address
- ? html`
IP Address: ${ipv6.address?.join(", ")}
`
+ ? html`
+ ${this.hass.localize(
+ "ui.dialogs.dialog-ip-detail.ip_address",
+ { address: ipv6.address?.join(", ") }
+ )}
+
`
+ : ""}
+ ${ipv6.gateway
+ ? html`
+ ${this.hass.localize(
+ "ui.dialogs.dialog-ip-detail.gateway",
+ { gateway: ipv6.gateway }
+ )}
+
`
+ : ""}
+ ${ipv6.method
+ ? html`
+ ${this.hass.localize(
+ "ui.dialogs.dialog-ip-detail.method",
+ { method: ipv6.method }
+ )}
+
`
: ""}
- ${ipv6.gateway ? html`
Gateway: ${ipv6.gateway}
` : ""}
- ${ipv6.method ? html`
Method: ${ipv6.method}
` : ""}
${ipv6.nameservers?.length
? html`
-
Name Servers: ${ipv6.nameservers?.join(", ")}
+
+ ${this.hass.localize(
+ "ui.dialogs.dialog-ip-detail.nameservers",
+ { nameservers: ipv6.nameservers?.join(", ") }
+ )}
+
`
: ""}
diff --git a/src/panels/config/network/ha-config-network.ts b/src/panels/config/network/ha-config-network.ts
index 0d799b281d..25952cd43e 100644
--- a/src/panels/config/network/ha-config-network.ts
+++ b/src/panels/config/network/ha-config-network.ts
@@ -40,7 +40,10 @@ class ConfigNetwork extends LitElement {
}
return html`
-
+
${this._error
? html`
@@ -50,9 +53,9 @@ class ConfigNetwork extends LitElement {
`
: ""}
- Configure which network adapters integrations will use. Currently
- this setting only affects multicast traffic. A restart is required
- for these settings to apply.
+ ${this.hass.localize(
+ "ui.panel.config.network.network_adapter_info"
+ )}
- IP Information
+ ${this.hass.localize(
+ "ui.panel.config.network.ip_information"
+ )}
`;
}
diff --git a/src/translations/en.json b/src/translations/en.json
index b55a6dc042..10dfbe298f 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -1385,6 +1385,15 @@
"message_example": "Hello. How can I assist?",
"message_placeholder": "Enter a sentence to speak.",
"play": "Play"
+ },
+ "dialog-ip-detail": {
+ "ip_information": "[%key:ui::panel::config::network::ip_information%]",
+ "ipv4": "IPv4",
+ "ipv6": "IPv6",
+ "ip_address": "IP Address: {address}",
+ "gateway": "Gateway: {gateway}",
+ "method": "Method: {method}",
+ "nameservers": "Name Servers: {nameservers}"
}
},
"duration": {
@@ -4193,7 +4202,10 @@
"description": "The name your instance will have on your network",
"failed_to_set_hostname": "Setting hostname failed"
}
- }
+ },
+ "network_adapter": "Network Adapter",
+ "network_adapter_info": "Configure which network adapters integrations will use. Currently this setting only affects multicast traffic. A restart is required for these settings to apply.",
+ "ip_information": "IP Information"
},
"storage": {
"caption": "Storage",
From 27bfa130f399c4f2743742d4b841df9927a87dc6 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 13 Jul 2023 18:56:45 -0400
Subject: [PATCH 049/102] Update typescript-eslint monorepo to v5.62.0 (#17298)
---
package.json | 4 +--
yarn.lock | 100 +++++++++++++++++++++++++--------------------------
2 files changed, 52 insertions(+), 52 deletions(-)
diff --git a/package.json b/package.json
index 5d40650f5f..e989a0c1c4 100644
--- a/package.json
+++ b/package.json
@@ -184,8 +184,8 @@
"@types/sortablejs": "1.15.1",
"@types/tar": "6.1.5",
"@types/webspeechapi": "0.0.29",
- "@typescript-eslint/eslint-plugin": "5.61.0",
- "@typescript-eslint/parser": "5.61.0",
+ "@typescript-eslint/eslint-plugin": "5.62.0",
+ "@typescript-eslint/parser": "5.62.0",
"@web/dev-server": "0.1.38",
"@web/dev-server-rollup": "0.4.1",
"babel-loader": "9.1.3",
diff --git a/yarn.lock b/yarn.lock
index d8f866b844..386d399b47 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4703,14 +4703,14 @@ __metadata:
languageName: node
linkType: hard
-"@typescript-eslint/eslint-plugin@npm:5.61.0":
- version: 5.61.0
- resolution: "@typescript-eslint/eslint-plugin@npm:5.61.0"
+"@typescript-eslint/eslint-plugin@npm:5.62.0":
+ version: 5.62.0
+ resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0"
dependencies:
"@eslint-community/regexpp": ^4.4.0
- "@typescript-eslint/scope-manager": 5.61.0
- "@typescript-eslint/type-utils": 5.61.0
- "@typescript-eslint/utils": 5.61.0
+ "@typescript-eslint/scope-manager": 5.62.0
+ "@typescript-eslint/type-utils": 5.62.0
+ "@typescript-eslint/utils": 5.62.0
debug: ^4.3.4
graphemer: ^1.4.0
ignore: ^5.2.0
@@ -4723,43 +4723,43 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
- checksum: d9e891fb43ccb75322fc40d58d02479f98bd3c962db71075438868b13f579643d714a24b5477a827be7ca2e7e9f6058c406241b6696a6395c6fcbd6de76e015c
+ checksum: fc104b389c768f9fa7d45a48c86d5c1ad522c1d0512943e782a56b1e3096b2cbcc1eea3fcc590647bf0658eef61aac35120a9c6daf979bf629ad2956deb516a1
languageName: node
linkType: hard
-"@typescript-eslint/parser@npm:5.61.0":
- version: 5.61.0
- resolution: "@typescript-eslint/parser@npm:5.61.0"
+"@typescript-eslint/parser@npm:5.62.0":
+ version: 5.62.0
+ resolution: "@typescript-eslint/parser@npm:5.62.0"
dependencies:
- "@typescript-eslint/scope-manager": 5.61.0
- "@typescript-eslint/types": 5.61.0
- "@typescript-eslint/typescript-estree": 5.61.0
+ "@typescript-eslint/scope-manager": 5.62.0
+ "@typescript-eslint/types": 5.62.0
+ "@typescript-eslint/typescript-estree": 5.62.0
debug: ^4.3.4
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
typescript:
optional: true
- checksum: 2422bca03ecc6830700aaa739ec46b8e9ab6c0a47a67f140dc6b62a42a8b98997e73bce52c6a010b8a9b461211c46ba865d5b7f680a7823cf5c245d3b61f7fd5
+ checksum: d168f4c7f21a7a63f47002e2d319bcbb6173597af5c60c1cf2de046b46c76b4930a093619e69faf2d30214c29ab27b54dcf1efc7046a6a6bd6f37f59a990e752
languageName: node
linkType: hard
-"@typescript-eslint/scope-manager@npm:5.61.0":
- version: 5.61.0
- resolution: "@typescript-eslint/scope-manager@npm:5.61.0"
+"@typescript-eslint/scope-manager@npm:5.62.0":
+ version: 5.62.0
+ resolution: "@typescript-eslint/scope-manager@npm:5.62.0"
dependencies:
- "@typescript-eslint/types": 5.61.0
- "@typescript-eslint/visitor-keys": 5.61.0
- checksum: 6dfbb42c4b7d796ae3c395398bdfd2e5a4ae8aaf1448381278ecc39a1d1045af2cb452da5a00519d265bc1a5997523de22d5021acb4dbe1648502fe61512d3c6
+ "@typescript-eslint/types": 5.62.0
+ "@typescript-eslint/visitor-keys": 5.62.0
+ checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573
languageName: node
linkType: hard
-"@typescript-eslint/type-utils@npm:5.61.0":
- version: 5.61.0
- resolution: "@typescript-eslint/type-utils@npm:5.61.0"
+"@typescript-eslint/type-utils@npm:5.62.0":
+ version: 5.62.0
+ resolution: "@typescript-eslint/type-utils@npm:5.62.0"
dependencies:
- "@typescript-eslint/typescript-estree": 5.61.0
- "@typescript-eslint/utils": 5.61.0
+ "@typescript-eslint/typescript-estree": 5.62.0
+ "@typescript-eslint/utils": 5.62.0
debug: ^4.3.4
tsutils: ^3.21.0
peerDependencies:
@@ -4767,23 +4767,23 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
- checksum: f0203fd48c6218f004dd73a9a71ba4cf97f015d0f13a7b3c821a3ba7ec814839bae270a1db589184ca7091fe54815a3171d1993e8a25200bf33e131bd6e855d4
+ checksum: fc41eece5f315dfda14320be0da78d3a971d650ea41300be7196934b9715f3fe1120a80207551eb71d39568275dbbcf359bde540d1ca1439d8be15e9885d2739
languageName: node
linkType: hard
-"@typescript-eslint/types@npm:5.61.0":
- version: 5.61.0
- resolution: "@typescript-eslint/types@npm:5.61.0"
- checksum: d311ca2141f6bcb5f0f8f97ddbc218c9911e0735aaa30f0f2e64d518fb33568410754e1b04bf157175f8783504f8ec62a7ab53a66a18507f43edb1e21fe69e90
+"@typescript-eslint/types@npm:5.62.0":
+ version: 5.62.0
+ resolution: "@typescript-eslint/types@npm:5.62.0"
+ checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670
languageName: node
linkType: hard
-"@typescript-eslint/typescript-estree@npm:5.61.0":
- version: 5.61.0
- resolution: "@typescript-eslint/typescript-estree@npm:5.61.0"
+"@typescript-eslint/typescript-estree@npm:5.62.0":
+ version: 5.62.0
+ resolution: "@typescript-eslint/typescript-estree@npm:5.62.0"
dependencies:
- "@typescript-eslint/types": 5.61.0
- "@typescript-eslint/visitor-keys": 5.61.0
+ "@typescript-eslint/types": 5.62.0
+ "@typescript-eslint/visitor-keys": 5.62.0
debug: ^4.3.4
globby: ^11.1.0
is-glob: ^4.0.3
@@ -4792,35 +4792,35 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
- checksum: efe25a1b2774939c02cb9b388cf72efa672811f1c39a87ddd617937f63c2320551ce459ba69c6d022e33322594d40b9f2d2c6bc9937387718adc40dc5e57ea8e
+ checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52
languageName: node
linkType: hard
-"@typescript-eslint/utils@npm:5.61.0":
- version: 5.61.0
- resolution: "@typescript-eslint/utils@npm:5.61.0"
+"@typescript-eslint/utils@npm:5.62.0":
+ version: 5.62.0
+ resolution: "@typescript-eslint/utils@npm:5.62.0"
dependencies:
"@eslint-community/eslint-utils": ^4.2.0
"@types/json-schema": ^7.0.9
"@types/semver": ^7.3.12
- "@typescript-eslint/scope-manager": 5.61.0
- "@typescript-eslint/types": 5.61.0
- "@typescript-eslint/typescript-estree": 5.61.0
+ "@typescript-eslint/scope-manager": 5.62.0
+ "@typescript-eslint/types": 5.62.0
+ "@typescript-eslint/typescript-estree": 5.62.0
eslint-scope: ^5.1.1
semver: ^7.3.7
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
- checksum: 24efc1964e6c92db96fe0d9a390550e4f27e8f353e51a9b46bda03e6692ea5d40f398d539235a4ff0894e9e45dfcfb51df953ade2ae9d17a1421449625ce6f5a
+ checksum: ee9398c8c5db6d1da09463ca7bf36ed134361e20131ea354b2da16a5fdb6df9ba70c62a388d19f6eebb421af1786dbbd79ba95ddd6ab287324fc171c3e28d931
languageName: node
linkType: hard
-"@typescript-eslint/visitor-keys@npm:5.61.0":
- version: 5.61.0
- resolution: "@typescript-eslint/visitor-keys@npm:5.61.0"
+"@typescript-eslint/visitor-keys@npm:5.62.0":
+ version: 5.62.0
+ resolution: "@typescript-eslint/visitor-keys@npm:5.62.0"
dependencies:
- "@typescript-eslint/types": 5.61.0
+ "@typescript-eslint/types": 5.62.0
eslint-visitor-keys: ^3.3.0
- checksum: a8d589f61ddfc380787218da4d347e8f9aef0f82f4a93f1daee46786bda889a90961c7ec1b470db5e3261438a728fdfd956f5bda6ee2de22c4be2d2152d6e270
+ checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35
languageName: node
linkType: hard
@@ -9731,8 +9731,8 @@ __metadata:
"@types/sortablejs": 1.15.1
"@types/tar": 6.1.5
"@types/webspeechapi": 0.0.29
- "@typescript-eslint/eslint-plugin": 5.61.0
- "@typescript-eslint/parser": 5.61.0
+ "@typescript-eslint/eslint-plugin": 5.62.0
+ "@typescript-eslint/parser": 5.62.0
"@vaadin/combo-box": 24.1.3
"@vaadin/vaadin-themable-mixin": 24.1.3
"@vibrant/color": 3.2.1-alpha.1
From 5e197334f6ab57404fa2592b2e744d9a5e162f27 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 14 Jul 2023 04:57:20 +0000
Subject: [PATCH 050/102] Update octokit monorepo to v6 (major) (#17269)
Update octokit monorepo to v6
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 4 +--
yarn.lock | 89 +++++++++++++++++++++++++++++-----------------------
2 files changed, 51 insertions(+), 42 deletions(-)
diff --git a/package.json b/package.json
index e989a0c1c4..64074c8452 100644
--- a/package.json
+++ b/package.json
@@ -158,8 +158,8 @@
"@babel/preset-env": "7.22.7",
"@babel/preset-typescript": "7.22.5",
"@koa/cors": "4.0.0",
- "@octokit/auth-oauth-device": "5.0.2",
- "@octokit/plugin-retry": "5.0.5",
+ "@octokit/auth-oauth-device": "6.0.0",
+ "@octokit/plugin-retry": "6.0.0",
"@octokit/rest": "19.0.13",
"@open-wc/dev-server-hmr": "0.1.4",
"@rollup/plugin-babel": "6.0.3",
diff --git a/yarn.lock b/yarn.lock
index 386d399b47..dde0a03496 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3227,15 +3227,15 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/auth-oauth-device@npm:5.0.2":
- version: 5.0.2
- resolution: "@octokit/auth-oauth-device@npm:5.0.2"
+"@octokit/auth-oauth-device@npm:6.0.0":
+ version: 6.0.0
+ resolution: "@octokit/auth-oauth-device@npm:6.0.0"
dependencies:
- "@octokit/oauth-methods": ^3.0.1
- "@octokit/request": ^7.0.0
- "@octokit/types": ^10.0.0
+ "@octokit/oauth-methods": ^4.0.0
+ "@octokit/request": ^8.0.0
+ "@octokit/types": ^11.0.0
universal-user-agent: ^6.0.0
- checksum: b625a2d7604351e52df46d3fdad04d1eb2ec68f80bce065047691ea83044967ef1e7dd0a70e9f8aab818d8c5ecf7f2550d2aa029ffdba85e0ff8c0ce2e25736a
+ checksum: ba6e46a42a68ca0e6d345b10de257b4e0764e6abeedfa3b7bd27bbe4336cbabf3dc081c97eb860939e4fbcb9827c62be5c4396023342db4717f254f06cdbba43
languageName: node
linkType: hard
@@ -3272,14 +3272,14 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/endpoint@npm:^8.0.0":
- version: 8.0.1
- resolution: "@octokit/endpoint@npm:8.0.1"
+"@octokit/endpoint@npm:^9.0.0":
+ version: 9.0.0
+ resolution: "@octokit/endpoint@npm:9.0.0"
dependencies:
- "@octokit/types": ^10.0.0
+ "@octokit/types": ^11.0.0
is-plain-object: ^5.0.0
universal-user-agent: ^6.0.0
- checksum: 0cff7c972d8304cb59c4cc28016c15bca05e6d7e9e2d9b00af88ce05bf9abdfdb17025f38080162a71ea15b21c740bcb5079361396f18a24bbe55134c504a581
+ checksum: 0e402c4d0fbe5b8053630cedb30dde5074bb6410828a05dc93d7e0fdd6c17f9a44b66586ef1a4e4ee0baa8d34ef7d6f535e2f04d9ea42909b7fc7ff55ce56a48
languageName: node
linkType: hard
@@ -3301,16 +3301,16 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/oauth-methods@npm:^3.0.1":
- version: 3.0.1
- resolution: "@octokit/oauth-methods@npm:3.0.1"
+"@octokit/oauth-methods@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "@octokit/oauth-methods@npm:4.0.0"
dependencies:
"@octokit/oauth-authorization-url": ^6.0.2
- "@octokit/request": ^7.0.0
- "@octokit/request-error": ^4.0.1
- "@octokit/types": ^10.0.0
+ "@octokit/request": ^8.0.2
+ "@octokit/request-error": ^5.0.0
+ "@octokit/types": ^11.0.0
btoa-lite: ^1.0.0
- checksum: ad327084f97d2f3be270d8957545dbd06c35df3e99d8e58702217beb7ac3574c361b49dfe28ba5d96b7f1911ac9c8e26ae07d6180a0598eef8b7fab4b0fe4ad5
+ checksum: 623f3031f56f5bfd6f142f9215bf47ba418b2f7fd9eb72d3e68cdd2b2c81345021b692edd18ad055df85e71e35497002e1fc4816235ed520dd71e677885c99cc
languageName: node
linkType: hard
@@ -3353,16 +3353,16 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/plugin-retry@npm:5.0.5":
- version: 5.0.5
- resolution: "@octokit/plugin-retry@npm:5.0.5"
+"@octokit/plugin-retry@npm:6.0.0":
+ version: 6.0.0
+ resolution: "@octokit/plugin-retry@npm:6.0.0"
dependencies:
- "@octokit/request-error": ^4.0.1
- "@octokit/types": ^10.0.0
+ "@octokit/request-error": ^5.0.0
+ "@octokit/types": ^11.0.0
bottleneck: ^2.15.3
peerDependencies:
- "@octokit/core": ">=3"
- checksum: c0bf1735e8af38fddccfe69bb1b97f2c194df88cd201309992e19a6d2c82b6d8e0515ca8d81acbc5861a03a49f0178bb026a230d107a53239ed3b7de43cf6e11
+ "@octokit/core": ">=5"
+ checksum: 84c047309d6b3ad8d796cd6aca9a73c61ebea3894a01067ec6bd40d6ba9aaab779a1085749c04f90b25c0fc3a100c6553474d830e5c2e0dde4ffc42b5e0a2e89
languageName: node
linkType: hard
@@ -3377,14 +3377,14 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/request-error@npm:^4.0.1":
- version: 4.0.2
- resolution: "@octokit/request-error@npm:4.0.2"
+"@octokit/request-error@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "@octokit/request-error@npm:5.0.0"
dependencies:
- "@octokit/types": ^10.0.0
+ "@octokit/types": ^11.0.0
deprecation: ^2.0.0
once: ^1.4.0
- checksum: 9510078f718be08cf74e7b04b45f67aa545a388787192ff1cd3ca0d066499963d641bf1fea76ef47d2657a55f0cf3e612e46bbf4f33a96436415d30a2e3bb00a
+ checksum: 2012eca66f6b8fa4038b3bfe81d65a7134ec58e2caf45d229aca13b9653ab260abd95229bd1a8c11180ee0bcf738e2556831a85de28f39b175175653c3b79fdd
languageName: node
linkType: hard
@@ -3402,16 +3402,16 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/request@npm:^7.0.0":
- version: 7.0.0
- resolution: "@octokit/request@npm:7.0.0"
+"@octokit/request@npm:^8.0.0, @octokit/request@npm:^8.0.2":
+ version: 8.1.0
+ resolution: "@octokit/request@npm:8.1.0"
dependencies:
- "@octokit/endpoint": ^8.0.0
- "@octokit/request-error": ^4.0.1
- "@octokit/types": ^10.0.0
+ "@octokit/endpoint": ^9.0.0
+ "@octokit/request-error": ^5.0.0
+ "@octokit/types": ^11.1.0
is-plain-object: ^5.0.0
universal-user-agent: ^6.0.0
- checksum: d3b8ac25c3702bb69c5b345f7a9f16b158209db7e244cc2d60dbcbfbaf1edec8252d78885de3607ee85eb86db7c1d2e07fa2515ba6e25cf2880440c0df5e918a
+ checksum: 00f71e1ca0bff84a1a903ca9f79a7837aac830cae3560d44f03272d062ef98e5a8170fdab8a47169c41db88e6894717cc71387604486d559f9eae409fab93f6f
languageName: node
linkType: hard
@@ -3443,6 +3443,15 @@ __metadata:
languageName: node
linkType: hard
+"@octokit/types@npm:^11.0.0, @octokit/types@npm:^11.1.0":
+ version: 11.1.0
+ resolution: "@octokit/types@npm:11.1.0"
+ dependencies:
+ "@octokit/openapi-types": ^18.0.0
+ checksum: 72627a94ddaf7bc14db06572bcde67649aad608cd86548818380db9305f4c0ca9ca078a62dd883858a267e8ec8fd596a0fce416aa04197c439b9548efef609a7
+ languageName: node
+ linkType: hard
+
"@octokit/types@npm:^9.0.0, @octokit/types@npm:^9.2.3":
version: 9.3.2
resolution: "@octokit/types@npm:9.3.2"
@@ -9693,8 +9702,8 @@ __metadata:
"@material/web": =1.0.0-pre.12
"@mdi/js": 7.2.96
"@mdi/svg": 7.2.96
- "@octokit/auth-oauth-device": 5.0.2
- "@octokit/plugin-retry": 5.0.5
+ "@octokit/auth-oauth-device": 6.0.0
+ "@octokit/plugin-retry": 6.0.0
"@octokit/rest": 19.0.13
"@open-wc/dev-server-hmr": 0.1.4
"@polymer/app-layout": 3.1.0
From 7546d1950e1170f6d6b7cfd3b71491cbf6d0d712 Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Fri, 14 Jul 2023 01:01:00 -0700
Subject: [PATCH 051/102] Make action-choose options collapsible (#17239)
* Make action-choose options collapsible
* padding changes
---
.../types/ha-automation-action-choose.ts | 182 ++++++++++++++----
src/translations/en.json | 2 +
2 files changed, 142 insertions(+), 42 deletions(-)
diff --git a/src/panels/config/automation/action/types/ha-automation-action-choose.ts b/src/panels/config/automation/action/types/ha-automation-action-choose.ts
index 879d8d8ca5..2d25f72f39 100644
--- a/src/panels/config/automation/action/types/ha-automation-action-choose.ts
+++ b/src/panels/config/automation/action/types/ha-automation-action-choose.ts
@@ -1,5 +1,6 @@
+import { consume } from "@lit-labs/context";
import { mdiDelete, mdiPlus } from "@mdi/js";
-import { CSSResultGroup, LitElement, css, html } from "lit";
+import { CSSResultGroup, LitElement, PropertyValues, css, html } from "lit";
import { customElement, property, state } from "lit/decorators";
import { ensureArray } from "../../../../../common/array/ensure-array";
import { fireEvent } from "../../../../../common/dom/fire_event";
@@ -10,6 +11,9 @@ import { Action, ChooseAction } from "../../../../../data/script";
import { haStyle } from "../../../../../resources/styles";
import { HomeAssistant } from "../../../../../types";
import { ActionElement } from "../ha-automation-action-row";
+import { describeCondition } from "../../../../../data/automation_i18n";
+import { fullEntitiesContext } from "../../../../../data/context";
+import { EntityRegistryEntry } from "../../../../../data/entity_registry";
@customElement("ha-automation-action-choose")
export class HaChooseAction extends LitElement implements ActionElement {
@@ -23,62 +27,145 @@ export class HaChooseAction extends LitElement implements ActionElement {
@state() private _showDefault = false;
+ @state() private expandedUpdateFlag = false;
+
+ @state()
+ @consume({ context: fullEntitiesContext, subscribe: true })
+ _entityReg!: EntityRegistryEntry[];
+
public static get defaultConfig() {
return { choose: [{ conditions: [], sequence: [] }] };
}
+ protected willUpdate(changedProperties: PropertyValues) {
+ if (!changedProperties.has("action")) {
+ return;
+ }
+
+ const oldCnt =
+ changedProperties.get("action") === undefined ||
+ changedProperties.get("action").choose === undefined
+ ? 0
+ : ensureArray(changedProperties.get("action").choose).length;
+ const newCnt = this.action.choose
+ ? ensureArray(this.action.choose).length
+ : 0;
+ if (newCnt === oldCnt + 1) {
+ this.expand(newCnt - 1);
+ }
+ }
+
+ private expand(i: number) {
+ this.updateComplete.then(() => {
+ this.shadowRoot!.querySelectorAll("ha-expansion-panel")[i].expanded =
+ true;
+ this.expandedUpdateFlag = !this.expandedUpdateFlag;
+ });
+ }
+
+ private isExpanded(i: number) {
+ const nodes = this.shadowRoot!.querySelectorAll("ha-expansion-panel");
+ if (nodes[i]) {
+ return nodes[i].expanded;
+ }
+ return false;
+ }
+
+ private _expandedChanged() {
+ this.expandedUpdateFlag = !this.expandedUpdateFlag;
+ }
+
+ private _getDescription(option, idx: number) {
+ if (this.isExpanded(idx)) {
+ return "";
+ }
+ if (!option.conditions || option.conditions.length === 0) {
+ return this.hass.localize(
+ "ui.panel.config.automation.editor.actions.type.choose.no_conditions"
+ );
+ }
+ let str = "";
+ if (typeof option.conditions[0] === "string") {
+ str += option.conditions[0];
+ } else {
+ str += describeCondition(
+ option.conditions[0],
+ this.hass,
+ this._entityReg
+ );
+ }
+ if (option.conditions.length > 1) {
+ str += this.hass.localize(
+ "ui.panel.config.automation.editor.actions.type.choose.option_description_additional",
+ "numberOfAdditionalConditions",
+ option.conditions.length - 1
+ );
+ }
+ return str;
+ }
+
protected render() {
const action = this.action;
return html`
${(action.choose ? ensureArray(action.choose) : []).map(
(option, idx) => html`
-
-
-
+
+
${this.hass.localize(
"ui.panel.config.automation.editor.actions.type.choose.option",
"number",
idx + 1
)}:
-
-
- ${this.hass.localize(
- "ui.panel.config.automation.editor.actions.type.choose.conditions"
- )}:
+ ${this._getDescription(option, idx)}
- (option.conditions)}
- .reOrderMode=${this.reOrderMode}
- .disabled=${this.disabled}
- .hass=${this.hass}
+
+
-
- ${this.hass.localize(
- "ui.panel.config.automation.editor.actions.type.choose.sequence"
- )}:
-
-
-
+ @click=${this._removeOption}
+ .label=${this.hass.localize(
+ "ui.panel.config.automation.editor.actions.type.choose.remove_option"
+ )}
+ .path=${mdiDelete}
+ >
+
+
+ ${this.hass.localize(
+ "ui.panel.config.automation.editor.actions.type.choose.conditions"
+ )}:
+
+ (
+ option.conditions
+ )}
+ .reOrderMode=${this.reOrderMode}
+ .disabled=${this.disabled}
+ .hass=${this.hass}
+ .idx=${idx}
+ @value-changed=${this._conditionChanged}
+ >
+
+ ${this.hass.localize(
+ "ui.panel.config.automation.editor.actions.type.choose.sequence"
+ )}:
+
+
+
+
`
)}
Date: Fri, 14 Jul 2023 12:10:52 -0400
Subject: [PATCH 052/102] Update dependency @octokit/rest to v20 (#17307)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 192 ++++++++++++---------------------------------------
2 files changed, 47 insertions(+), 147 deletions(-)
diff --git a/package.json b/package.json
index 64074c8452..2611334d32 100644
--- a/package.json
+++ b/package.json
@@ -160,7 +160,7 @@
"@koa/cors": "4.0.0",
"@octokit/auth-oauth-device": "6.0.0",
"@octokit/plugin-retry": "6.0.0",
- "@octokit/rest": "19.0.13",
+ "@octokit/rest": "20.0.1",
"@open-wc/dev-server-hmr": "0.1.4",
"@rollup/plugin-babel": "6.0.3",
"@rollup/plugin-commonjs": "25.0.2",
diff --git a/yarn.lock b/yarn.lock
index dde0a03496..77a5aaaa45 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3239,36 +3239,25 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/auth-token@npm:^3.0.0":
- version: 3.0.4
- resolution: "@octokit/auth-token@npm:3.0.4"
- checksum: 42f533a873d4192e6df406b3176141c1f95287423ebdc4cf23a38bb77ee00ccbc0e60e3fbd5874234fc2ed2e67bbc6035e3b0561dacc1d078adb5c4ced3579e3
+"@octokit/auth-token@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "@octokit/auth-token@npm:4.0.0"
+ checksum: d78f4dc48b214d374aeb39caec4fdbf5c1e4fd8b9fcb18f630b1fe2cbd5a880fca05445f32b4561f41262cb551746aeb0b49e89c95c6dd99299706684d0cae2f
languageName: node
linkType: hard
-"@octokit/core@npm:^4.2.1":
- version: 4.2.4
- resolution: "@octokit/core@npm:4.2.4"
+"@octokit/core@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "@octokit/core@npm:5.0.0"
dependencies:
- "@octokit/auth-token": ^3.0.0
- "@octokit/graphql": ^5.0.0
- "@octokit/request": ^6.0.0
- "@octokit/request-error": ^3.0.0
- "@octokit/types": ^9.0.0
+ "@octokit/auth-token": ^4.0.0
+ "@octokit/graphql": ^7.0.0
+ "@octokit/request": ^8.0.2
+ "@octokit/request-error": ^5.0.0
+ "@octokit/types": ^11.0.0
before-after-hook: ^2.2.0
universal-user-agent: ^6.0.0
- checksum: ac8ab47440a31b0228a034aacac6994b64d6b073ad5b688b4c5157fc5ee0d1af1c926e6087bf17fd7244ee9c5998839da89065a90819bde4a97cb77d4edf58a6
- languageName: node
- linkType: hard
-
-"@octokit/endpoint@npm:^7.0.0":
- version: 7.0.6
- resolution: "@octokit/endpoint@npm:7.0.6"
- dependencies:
- "@octokit/types": ^9.0.0
- is-plain-object: ^5.0.0
- universal-user-agent: ^6.0.0
- checksum: 7caebf30ceec50eb7f253341ed419df355232f03d4638a95c178ee96620400db7e4a5e15d89773fe14db19b8653d4ab4cc81b2e93ca0c760b4e0f7eb7ad80301
+ checksum: 1a5d1112a2403d146aa1db7aaf81a31192ef6b0310a1e6f68c3e439fded22bd4b3a930f5071585e6ca0f2f5e7fc4a1aac68910525b71b03732c140e362d26a33
languageName: node
linkType: hard
@@ -3283,14 +3272,14 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/graphql@npm:^5.0.0":
- version: 5.0.6
- resolution: "@octokit/graphql@npm:5.0.6"
+"@octokit/graphql@npm:^7.0.0":
+ version: 7.0.1
+ resolution: "@octokit/graphql@npm:7.0.1"
dependencies:
- "@octokit/request": ^6.0.0
- "@octokit/types": ^9.0.0
+ "@octokit/request": ^8.0.1
+ "@octokit/types": ^11.0.0
universal-user-agent: ^6.0.0
- checksum: 7be545d348ef31dcab0a2478dd64d5746419a2f82f61459c774602bcf8a9b577989c18001f50b03f5f61a3d9e34203bdc021a4e4d75ff2d981e8c9c09cf8a65c
+ checksum: 7ee907987b1b8312c6f870c44455cbd3eed805bb1a4095038f4e7e62ee2e006bd766f2a71dfbe56b870cd8f7558309c602f00d3e252fe59578f4acf6249a4f17
languageName: node
linkType: hard
@@ -3321,35 +3310,34 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/plugin-paginate-rest@npm:^6.1.2":
- version: 6.1.2
- resolution: "@octokit/plugin-paginate-rest@npm:6.1.2"
+"@octokit/plugin-paginate-rest@npm:^8.0.0":
+ version: 8.0.0
+ resolution: "@octokit/plugin-paginate-rest@npm:8.0.0"
dependencies:
- "@octokit/tsconfig": ^1.0.2
- "@octokit/types": ^9.2.3
+ "@octokit/types": ^11.0.0
peerDependencies:
- "@octokit/core": ">=4"
- checksum: a7b3e686c7cbd27ec07871cde6e0b1dc96337afbcef426bbe3067152a17b535abd480db1861ca28c88d93db5f7bfdbcadd0919ead19818c28a69d0e194038065
+ "@octokit/core": ">=5"
+ checksum: b5d7cee50523862c6ce7be057f7200e14ee4dcded462f27304c822c960a37efa23ed51080ea879f5d1e56e78f74baa17d2ce32eed5d726794abc35755777e32c
languageName: node
linkType: hard
-"@octokit/plugin-request-log@npm:^1.0.4":
- version: 1.0.4
- resolution: "@octokit/plugin-request-log@npm:1.0.4"
+"@octokit/plugin-request-log@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "@octokit/plugin-request-log@npm:4.0.0"
peerDependencies:
- "@octokit/core": ">=3"
- checksum: 2086db00056aee0f8ebd79797b5b57149ae1014e757ea08985b71eec8c3d85dbb54533f4fd34b6b9ecaa760904ae6a7536be27d71e50a3782ab47809094bfc0c
+ "@octokit/core": ">=5"
+ checksum: 2a8a6619640942092009a9248ceeb163ce01c978e2d7b2a7eb8686bd09a04b783c4cd9071eebb16652d233587abcde449a02ce4feabc652f0a171615fb3e9946
languageName: node
linkType: hard
-"@octokit/plugin-rest-endpoint-methods@npm:^7.1.2":
- version: 7.2.3
- resolution: "@octokit/plugin-rest-endpoint-methods@npm:7.2.3"
+"@octokit/plugin-rest-endpoint-methods@npm:^9.0.0":
+ version: 9.0.0
+ resolution: "@octokit/plugin-rest-endpoint-methods@npm:9.0.0"
dependencies:
- "@octokit/types": ^10.0.0
+ "@octokit/types": ^11.0.0
peerDependencies:
- "@octokit/core": ">=3"
- checksum: 21dfb98514dbe900c29cddb13b335bbce43d613800c6b17eba3c1fd31d17e69c1960f3067f7bf864bb38fdd5043391f4a23edee42729d8c7fbabd00569a80336
+ "@octokit/core": ">=5"
+ checksum: 8795cb29be042c839098886a03c2ec6051e3fd7a29f16f4f8a487aa2d85ceb00df8a4432499a43af550369bd730ce9b1b9d7eeff768745b80a3e67698ca9a5dd
languageName: node
linkType: hard
@@ -3366,17 +3354,6 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/request-error@npm:^3.0.0":
- version: 3.0.3
- resolution: "@octokit/request-error@npm:3.0.3"
- dependencies:
- "@octokit/types": ^9.0.0
- deprecation: ^2.0.0
- once: ^1.4.0
- checksum: 5db0b514732686b627e6ed9ef1ccdbc10501f1b271a9b31f784783f01beee70083d7edcfeb35fbd7e569fa31fdd6762b1ff6b46101700d2d97e7e48e749520d0
- languageName: node
- linkType: hard
-
"@octokit/request-error@npm:^5.0.0":
version: 5.0.0
resolution: "@octokit/request-error@npm:5.0.0"
@@ -3388,21 +3365,7 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/request@npm:^6.0.0":
- version: 6.2.8
- resolution: "@octokit/request@npm:6.2.8"
- dependencies:
- "@octokit/endpoint": ^7.0.0
- "@octokit/request-error": ^3.0.0
- "@octokit/types": ^9.0.0
- is-plain-object: ^5.0.0
- node-fetch: ^2.6.7
- universal-user-agent: ^6.0.0
- checksum: 3747106f50d7c462131ff995b13defdd78024b7becc40283f4ac9ea0af2391ff33a0bb476a05aa710346fe766d20254979079a1d6f626112015ba271fe38f3e2
- languageName: node
- linkType: hard
-
-"@octokit/request@npm:^8.0.0, @octokit/request@npm:^8.0.2":
+"@octokit/request@npm:^8.0.0, @octokit/request@npm:^8.0.1, @octokit/request@npm:^8.0.2":
version: 8.1.0
resolution: "@octokit/request@npm:8.1.0"
dependencies:
@@ -3415,31 +3378,15 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/rest@npm:19.0.13":
- version: 19.0.13
- resolution: "@octokit/rest@npm:19.0.13"
+"@octokit/rest@npm:20.0.1":
+ version: 20.0.1
+ resolution: "@octokit/rest@npm:20.0.1"
dependencies:
- "@octokit/core": ^4.2.1
- "@octokit/plugin-paginate-rest": ^6.1.2
- "@octokit/plugin-request-log": ^1.0.4
- "@octokit/plugin-rest-endpoint-methods": ^7.1.2
- checksum: ca1553e3fe46efabffef60e68e4a228d4cc0f0d545daf7f019560f666d3e934c6f3a6402a42bbd786af4f3c0a6e69380776312f01b7d52998fe1bbdd1b068f69
- languageName: node
- linkType: hard
-
-"@octokit/tsconfig@npm:^1.0.2":
- version: 1.0.2
- resolution: "@octokit/tsconfig@npm:1.0.2"
- checksum: 74d56f3e9f326a8dd63700e9a51a7c75487180629c7a68bbafee97c612fbf57af8347369bfa6610b9268a3e8b833c19c1e4beb03f26db9a9dce31f6f7a19b5b1
- languageName: node
- linkType: hard
-
-"@octokit/types@npm:^10.0.0":
- version: 10.0.0
- resolution: "@octokit/types@npm:10.0.0"
- dependencies:
- "@octokit/openapi-types": ^18.0.0
- checksum: 8aafba2ff0cd2435fb70c291bf75ed071c0fa8a865cf6169648732068a35dec7b85a345851f18920ec5f3e94ee0e954988485caac0da09ec3f6781cc44fe153a
+ "@octokit/core": ^5.0.0
+ "@octokit/plugin-paginate-rest": ^8.0.0
+ "@octokit/plugin-request-log": ^4.0.0
+ "@octokit/plugin-rest-endpoint-methods": ^9.0.0
+ checksum: 9fb2e154a498e00598379b09d76cc7b67b3801e9c97d753f1a76e1163924188bf4cb1411ec152a038ae91e97b86d7146ff220b05adfb6e500e2300c87e14100a
languageName: node
linkType: hard
@@ -3452,15 +3399,6 @@ __metadata:
languageName: node
linkType: hard
-"@octokit/types@npm:^9.0.0, @octokit/types@npm:^9.2.3":
- version: 9.3.2
- resolution: "@octokit/types@npm:9.3.2"
- dependencies:
- "@octokit/openapi-types": ^18.0.0
- checksum: f55d096aaed3e04b8308d4422104fb888f355988056ba7b7ef0a4c397b8a3e54290d7827b06774dbe0c9ce55280b00db486286954f9c265aa6b03091026d9da8
- languageName: node
- linkType: hard
-
"@open-wc/dedupe-mixin@npm:^1.3.0":
version: 1.4.0
resolution: "@open-wc/dedupe-mixin@npm:1.4.0"
@@ -9704,7 +9642,7 @@ __metadata:
"@mdi/svg": 7.2.96
"@octokit/auth-oauth-device": 6.0.0
"@octokit/plugin-retry": 6.0.0
- "@octokit/rest": 19.0.13
+ "@octokit/rest": 20.0.1
"@open-wc/dev-server-hmr": 0.1.4
"@polymer/app-layout": 3.1.0
"@polymer/iron-flex-layout": 3.0.1
@@ -12315,20 +12253,6 @@ __metadata:
languageName: node
linkType: hard
-"node-fetch@npm:^2.6.7":
- version: 2.6.11
- resolution: "node-fetch@npm:2.6.11"
- dependencies:
- whatwg-url: ^5.0.0
- peerDependencies:
- encoding: ^0.1.0
- peerDependenciesMeta:
- encoding:
- optional: true
- checksum: 249d0666a9497553384d46b5ab296ba223521ac88fed4d8a17d6ee6c2efb0fc890f3e8091cafe7f9fba8151a5b8d925db2671543b3409a56c3cd522b468b47b3
- languageName: node
- linkType: hard
-
"node-forge@npm:^1":
version: 1.3.1
resolution: "node-forge@npm:1.3.1"
@@ -15296,13 +15220,6 @@ __metadata:
languageName: node
linkType: hard
-"tr46@npm:~0.0.3":
- version: 0.0.3
- resolution: "tr46@npm:0.0.3"
- checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3
- languageName: node
- linkType: hard
-
"ts-lit-plugin@npm:2.0.0-pre.1":
version: 2.0.0-pre.1
resolution: "ts-lit-plugin@npm:2.0.0-pre.1"
@@ -16082,13 +15999,6 @@ __metadata:
languageName: node
linkType: hard
-"webidl-conversions@npm:^3.0.0":
- version: 3.0.1
- resolution: "webidl-conversions@npm:3.0.1"
- checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c
- languageName: node
- linkType: hard
-
"webidl-conversions@npm:^4.0.2":
version: 4.0.2
resolution: "webidl-conversions@npm:4.0.2"
@@ -16322,16 +16232,6 @@ __metadata:
languageName: node
linkType: hard
-"whatwg-url@npm:^5.0.0":
- version: 5.0.0
- resolution: "whatwg-url@npm:5.0.0"
- dependencies:
- tr46: ~0.0.3
- webidl-conversions: ^3.0.0
- checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c
- languageName: node
- linkType: hard
-
"whatwg-url@npm:^7.0.0":
version: 7.1.0
resolution: "whatwg-url@npm:7.1.0"
From cb0bc762b124b83ce2dcb2c290c5dd6d2e38e7e6 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 14 Jul 2023 17:40:17 +0000
Subject: [PATCH 053/102] Update dependency prettier to v3 (#17215)
* Update dependency prettier to v3
* Update config and remove .prettierignore
* Reformat
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Steve Repsher
---
.prettierignore | 9 -
gallery/src/pages/automation/editor-action.ts | 21 +-
.../src/pages/automation/editor-condition.ts | 21 +-
.../src/pages/automation/editor-trigger.ts | 21 +-
gallery/src/pages/components/ha-selector.ts | 35 +-
gallery/src/pages/components/ha-tip.ts | 5 +-
.../src/addon-view/info/hassio-addon-info.ts | 15 +-
.../components/supervisor-backup-content.ts | 44 +-
.../dialogs/network/dialog-hassio-network.ts | 37 +-
.../registries/dialog-hassio-registries.ts | 9 +-
.../dialog-hassio-repositories.ts | 9 +-
hassio/src/system/hassio-core-info.ts | 15 +-
hassio/src/system/hassio-host-info.ts | 15 +-
hassio/src/system/hassio-supervisor-info.ts | 15 +-
package.json | 6 +-
prettier.config.js | 3 +
src/common/translations/localize.ts | 2 +-
src/components/chart/ha-chart-base.ts | 58 +--
.../device/ha-area-devices-picker.ts | 11 +-
.../device/ha-device-automation-picker.ts | 2 +-
src/components/device/ha-device-picker.ts | 11 +-
src/components/entity/ha-entities-picker.ts | 6 +-
src/components/entity/ha-statistic-picker.ts | 42 +-
src/components/entity/state-badge.ts | 4 +-
src/components/ha-addon-picker.ts | 25 +-
src/components/ha-analytics.ts | 65 ++-
src/components/ha-area-picker.ts | 13 +-
src/components/ha-button-toggle-group.ts | 4 +-
src/components/ha-config-entry-picker.ts | 45 +-
src/components/ha-control-button.ts | 3 +-
src/components/ha-control-circular-slider.ts | 10 +-
src/components/ha-control-select.ts | 4 +-
src/components/ha-control-slider.ts | 7 +-
src/components/ha-control-switch.ts | 3 +-
src/components/ha-form/ha-form-grid.ts | 21 +-
src/components/ha-form/types.ts | 2 +-
src/components/ha-gauge.ts | 12 +-
src/components/ha-hs-color-picker.ts | 4 +-
src/components/ha-mount-picker.ts | 41 +-
.../ha-selector/ha-selector-select.ts | 25 +-
src/components/ha-service-picker.ts | 13 +-
src/components/ha-temp-color-picker.ts | 4 +-
src/components/ha-tts-voice-picker.ts | 7 +-
.../media-player/ha-media-player-browse.ts | 17 +-
src/components/user/ha-users-picker.ts | 66 +--
src/data/config.ts | 2 +-
src/data/frontend.ts | 6 +-
src/data/selector.ts | 58 ++-
.../config-flow/step-flow-create-entry.ts | 37 +-
.../lights/dialog-light-color-favorite.ts | 31 +-
.../lights/light-color-rgb-picker.ts | 4 +-
.../controls/more-info-configurator.ts | 13 +-
.../more-info/controls/more-info-fan.ts | 33 +-
.../controls/more-info-media_player.ts | 27 +-
.../notifications/notification-drawer.ts | 13 +-
.../ha-voice-command-dialog.ts | 32 +-
src/layouts/hass-tabs-subpage.ts | 39 +-
src/panels/calendar/ha-panel-calendar.ts | 33 +-
.../dialog-add-application-credential.ts | 7 +-
.../config/areas/ha-config-area-page.ts | 17 +-
.../types/ha-automation-action-choose.ts | 113 ++---
.../config/automation/ha-automation-picker.ts | 127 +++---
.../thingtalk/ha-thingtalk-placeholders.ts | 199 +++++----
.../config/blueprint/ha-blueprint-overview.ts | 9 +-
.../core/ha-config-system-navigation.ts | 5 +-
.../ha-device-automation-card.ts | 29 +-
.../config/devices/ha-config-device-page.ts | 61 ++-
.../components/ha-energy-battery-settings.ts | 13 +-
.../components/ha-energy-device-settings.ts | 13 +-
.../components/ha-energy-gas-settings.ts | 13 +-
.../components/ha-energy-solar-settings.ts | 13 +-
.../components/ha-energy-water-settings.ts | 13 +-
.../dialogs/dialog-energy-solar-settings.ts | 49 +--
.../entity-registry-settings-editor.ts | 8 +-
.../config/entities/ha-config-entities.ts | 17 +-
.../hardware/dialog-hardware-available.ts | 89 ++--
.../config/helpers/forms/ha-counter-form.ts | 9 +-
.../helpers/forms/ha-input_boolean-form.ts | 9 +-
.../helpers/forms/ha-input_button-form.ts | 9 +-
.../helpers/forms/ha-input_datetime-form.ts | 9 +-
.../helpers/forms/ha-input_number-form.ts | 9 +-
.../helpers/forms/ha-input_select-form.ts | 9 +-
.../helpers/forms/ha-input_text-form.ts | 9 +-
.../config/helpers/forms/ha-schedule-form.ts | 9 +-
.../config/helpers/forms/ha-timer-form.ts | 9 +-
.../config/helpers/ha-config-helpers.ts | 13 +-
.../ha-config-integration-page.ts | 33 +-
.../ha-config-integrations-dashboard.ts | 2 +-
.../integrations/ha-domain-integrations.ts | 45 +-
.../zha/zha-config-dashboard.ts | 39 +-
.../zha/zha-groups-dashboard.ts | 5 +-
.../zwave_js/dialog-zwave_js-add-node.ts | 41 +-
.../dialog-zwave_js-node-statistics.ts | 2 +-
.../zwave_js/zwave_js-node-config.ts | 52 +--
.../ha-config-lovelace-dashboards.ts | 11 +-
.../resources/ha-config-lovelace-resources.ts | 11 +-
.../config/network/supervisor-network.ts | 37 +-
.../repairs/dialog-system-information.ts | 46 +--
src/panels/config/scene/ha-scene-dashboard.ts | 92 ++---
src/panels/config/scene/ha-scene-editor.ts | 73 ++--
src/panels/config/script/ha-script-picker.ts | 91 ++--
src/panels/config/tags/ha-config-tags.ts | 66 +--
src/panels/config/users/ha-config-users.ts | 5 +-
.../debug/assist-render-pipeline-run.ts | 13 +-
.../ha-config-voice-assistants-expose.ts | 9 +-
.../event/event-subscribe-card.ts | 37 +-
.../service/developer-tools-service.ts | 19 +-
.../template/developer-tools-template.ts | 38 +-
.../developer-yaml-config.ts | 35 +-
.../energy/hui-energy-distribution-card.ts | 24 +-
.../energy/hui-energy-sources-table-card.ts | 391 +++++++++---------
.../lovelace/cards/hui-media-control-card.ts | 20 +-
.../lovelace/cards/hui-shopping-list-card.ts | 100 ++---
src/panels/lovelace/cards/hui-tile-card.ts | 4 +-
.../common/process-config-entities.ts | 2 +-
.../components/hui-energy-period-selector.ts | 4 +-
.../create-element/create-element-base.ts | 4 +-
.../hui-statistics-graph-card-editor.ts | 9 +-
.../hui-dialog-create-headerfooter.ts | 39 +-
.../entity-rows/hui-select-entity-row.ts | 25 +-
.../lovelace/strategies/get-strategy.ts | 2 +-
.../ha-long-lived-access-tokens-card.ts | 38 +-
src/panels/profile/ha-mfa-modules-card.ts | 31 +-
src/panels/profile/ha-refresh-tokens-card.ts | 104 ++---
src/state-summary/state-card-select.ts | 25 +-
src/state/url-sync-mixin.ts | 2 +-
yarn.lock | 12 +-
127 files changed, 1842 insertions(+), 1820 deletions(-)
delete mode 100644 .prettierignore
create mode 100644 prettier.config.js
diff --git a/.prettierignore b/.prettierignore
deleted file mode 100644
index 68fe46e32c..0000000000
--- a/.prettierignore
+++ /dev/null
@@ -1,9 +0,0 @@
-build
-translations/*
-node_modules/*
-hass_frontend/*
-pip-selfcheck.json
-
-# vscode
-.vscode/*
-!.vscode/extensions.json
diff --git a/gallery/src/pages/automation/editor-action.ts b/gallery/src/pages/automation/editor-action.ts
index 376f547d72..28f9bb16e2 100644
--- a/gallery/src/pages/automation/editor-action.ts
+++ b/gallery/src/pages/automation/editor-action.ts
@@ -85,17 +85,16 @@ class DemoHaAutomationEditorAction extends LitElement {
.value=${this.data[sampleIdx]}
>
${["light", "dark"].map(
- (slot) =>
- html`
-
- `
+ (slot) => html`
+
+ `
)}
`
diff --git a/gallery/src/pages/automation/editor-condition.ts b/gallery/src/pages/automation/editor-condition.ts
index 7504d9dc46..3a43eda71e 100644
--- a/gallery/src/pages/automation/editor-condition.ts
+++ b/gallery/src/pages/automation/editor-condition.ts
@@ -121,17 +121,16 @@ class DemoHaAutomationEditorCondition extends LitElement {
.value=${this.data[sampleIdx]}
>
${["light", "dark"].map(
- (slot) =>
- html`
-
- `
+ (slot) => html`
+
+ `
)}
`
diff --git a/gallery/src/pages/automation/editor-trigger.ts b/gallery/src/pages/automation/editor-trigger.ts
index cdc9ed2c83..30c9721256 100644
--- a/gallery/src/pages/automation/editor-trigger.ts
+++ b/gallery/src/pages/automation/editor-trigger.ts
@@ -167,17 +167,16 @@ class DemoHaAutomationEditorTrigger extends LitElement {
.value=${this.data[sampleIdx]}
>
${["light", "dark"].map(
- (slot) =>
- html`
-
- `
+ (slot) => html`
+
+ `
)}
`
diff --git a/gallery/src/pages/components/ha-selector.ts b/gallery/src/pages/components/ha-selector.ts
index 9ac7959635..4cdc97013b 100644
--- a/gallery/src/pages/components/ha-selector.ts
+++ b/gallery/src/pages/components/ha-selector.ts
@@ -497,24 +497,23 @@ class DemoHaSelector extends LitElement implements ProvideHassElement {
${["light", "dark"].map((slot) =>
Object.entries(info.input).map(
- ([key, value]) =>
- html`
-
- ${value?.name || key}
- ${value?.description}
-
-
- `
+ ([key, value]) => html`
+
+ ${value?.name || key}
+ ${value?.description}
+
+
+ `
)
)}
diff --git a/gallery/src/pages/components/ha-tip.ts b/gallery/src/pages/components/ha-tip.ts
index 1f349efa7e..b9e9e5fc73 100644
--- a/gallery/src/pages/components/ha-tip.ts
+++ b/gallery/src/pages/components/ha-tip.ts
@@ -20,9 +20,8 @@ export class DemoHaTip extends LitElement {
${tips.map(
- (tip) => html`${tip}`
+ (tip) =>
+ html`${tip}`
)}
diff --git a/hassio/src/addon-view/info/hassio-addon-info.ts b/hassio/src/addon-view/info/hassio-addon-info.ts
index 5800d2e1b0..fee9340720 100644
--- a/hassio/src/addon-view/info/hassio-addon-info.ts
+++ b/hassio/src/addon-view/info/hassio-addon-info.ts
@@ -544,14 +544,13 @@ class HassioAddonInfo extends LitElement {
${this.addon.hostname}
${metrics.map(
- (metric) =>
- html`
-
- `
+ (metric) => html`
+
+ `
)}`
: ""}
diff --git a/hassio/src/components/supervisor-backup-content.ts b/hassio/src/components/supervisor-backup-content.ts
index ded21bf63a..81b4f6fbf1 100644
--- a/hassio/src/components/supervisor-backup-content.ts
+++ b/hassio/src/components/supervisor-backup-content.ts
@@ -384,28 +384,30 @@ export class SupervisorBackupContent extends LitElement {
: undefined;
let checkedItems = 0;
this[section].forEach((item) => {
- templates.push(html`
+ `}
>
- `}
- >
-
-
- `);
+
+
+ `
+ );
if (item.checked) {
checkedItems++;
diff --git a/hassio/src/dialogs/network/dialog-hassio-network.ts b/hassio/src/dialogs/network/dialog-hassio-network.ts
index 943e92972c..f3a77f8b40 100644
--- a/hassio/src/dialogs/network/dialog-hassio-network.ts
+++ b/hassio/src/dialogs/network/dialog-hassio-network.ts
@@ -168,25 +168,24 @@ export class DialogHassioNetwork
${this._accessPoints.accesspoints
.filter((ap) => ap.ssid)
.map(
- (ap) =>
- html`
-
- ${ap.ssid}
-
- ${ap.mac} -
- ${this.supervisor.localize(
- "dialog.network.signal_strength"
- )}:
- ${ap.signal}
-
-
- `
+ (ap) => html`
+
+ ${ap.ssid}
+
+ ${ap.mac} -
+ ${this.supervisor.localize(
+ "dialog.network.signal_strength"
+ )}:
+ ${ap.signal}
+
+
+ `
)}
`
diff --git a/hassio/src/dialogs/registries/dialog-hassio-registries.ts b/hassio/src/dialogs/registries/dialog-hassio-registries.ts
index e26753e5dc..d623ebf3b8 100644
--- a/hassio/src/dialogs/registries/dialog-hassio-registries.ts
+++ b/hassio/src/dialogs/registries/dialog-hassio-registries.ts
@@ -157,10 +157,11 @@ class HassioRegistriesDialog extends LitElement {
}
public focus(): void {
- this.updateComplete.then(() =>
- (
- this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
- )?.focus()
+ this.updateComplete.then(
+ () =>
+ (
+ this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
+ )?.focus()
);
}
diff --git a/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts b/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts
index aeac743f31..bf42ff4499 100644
--- a/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts
+++ b/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts
@@ -209,10 +209,11 @@ class HassioRepositoriesDialog extends LitElement {
}
public focus() {
- this.updateComplete.then(() =>
- (
- this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
- )?.focus()
+ this.updateComplete.then(
+ () =>
+ (
+ this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
+ )?.focus()
);
}
diff --git a/hassio/src/system/hassio-core-info.ts b/hassio/src/system/hassio-core-info.ts
index 254d602e87..7754728757 100644
--- a/hassio/src/system/hassio-core-info.ts
+++ b/hassio/src/system/hassio-core-info.ts
@@ -81,14 +81,13 @@ class HassioCoreInfo extends LitElement {
${metrics.map(
- (metric) =>
- html`
-
- `
+ (metric) => html`
+
+ `
)}
diff --git a/hassio/src/system/hassio-host-info.ts b/hassio/src/system/hassio-host-info.ts
index cfb039d935..4e84c0f23f 100644
--- a/hassio/src/system/hassio-host-info.ts
+++ b/hassio/src/system/hassio-host-info.ts
@@ -154,14 +154,13 @@ class HassioHostInfo extends LitElement {
`
: ""}
${metrics.map(
- (metric) =>
- html`
-
- `
+ (metric) => html`
+
+ `
)}
diff --git a/hassio/src/system/hassio-supervisor-info.ts b/hassio/src/system/hassio-supervisor-info.ts
index 1dbca65417..d083bfb613 100644
--- a/hassio/src/system/hassio-supervisor-info.ts
+++ b/hassio/src/system/hassio-supervisor-info.ts
@@ -178,14 +178,13 @@ class HassioSupervisorInfo extends LitElement {
${metrics.map(
- (metric) =>
- html`
-
- `
+ (metric) => html`
+
+ `
)}
diff --git a/package.json b/package.json
index 2611334d32..c7be5ec960 100644
--- a/package.json
+++ b/package.json
@@ -227,7 +227,7 @@
"object-hash": "3.0.0",
"open": "9.1.0",
"pinst": "3.0.0",
- "prettier": "2.8.8",
+ "prettier": "3.0.0",
"rollup": "2.79.1",
"rollup-plugin-string": "3.0.0",
"rollup-plugin-terser": "7.0.2",
@@ -256,9 +256,5 @@
"sortablejs@1.15.0": "patch:sortablejs@npm%3A1.15.0#./.yarn/patches/sortablejs-npm-1.15.0-f3a393abcc.patch",
"leaflet-draw@1.0.4": "patch:leaflet-draw@npm%3A1.0.4#./.yarn/patches/leaflet-draw-npm-1.0.4-0ca0ebcf65.patch"
},
- "prettier": {
- "trailingComma": "es5",
- "arrowParens": "always"
- },
"packageManager": "yarn@3.6.1"
}
diff --git a/prettier.config.js b/prettier.config.js
new file mode 100644
index 0000000000..e8646cb474
--- /dev/null
+++ b/prettier.config.js
@@ -0,0 +1,3 @@
+export default {
+ trailingComma: "es5",
+};
diff --git a/src/common/translations/localize.ts b/src/common/translations/localize.ts
index 8117af0ffe..15773a5cb5 100644
--- a/src/common/translations/localize.ts
+++ b/src/common/translations/localize.ts
@@ -38,7 +38,7 @@ export type LocalizeKeys =
// Tweaked from https://www.raygesualdo.com/posts/flattening-object-keys-with-typescript-types
export type FlattenObjectKeys<
T extends Record,
- Key extends keyof T = keyof T
+ Key extends keyof T = keyof T,
> = Key extends string
? T[Key] extends Record
? `${Key}.${FlattenObjectKeys}`
diff --git a/src/components/chart/ha-chart-base.ts b/src/components/chart/ha-chart-base.ts
index 902d567885..389fd8dab6 100644
--- a/src/components/chart/ha-chart-base.ts
+++ b/src/components/chart/ha-chart-base.ts
@@ -108,23 +108,24 @@ export default class HaChartBase extends LitElement {
? html`
${this.data.datasets.map(
- (dataset, index) => html`-
-
+ html`
- ${dataset.label}
- `
+ .title=${dataset.label}
+ >
+
+ ${dataset.label}
+ `
)}
`
@@ -156,18 +157,19 @@ export default class HaChartBase extends LitElement {
${this._tooltip.body.map(
- (item, i) => html`-
-
- ${item.lines.join("\n")}
-
`
+ (item, i) =>
+ html`-
+
+ ${item.lines.join("\n")}
+
`
)}
diff --git a/src/components/device/ha-area-devices-picker.ts b/src/components/device/ha-area-devices-picker.ts
index d7c4a1d0b3..8964ff566c 100644
--- a/src/components/device/ha-area-devices-picker.ts
+++ b/src/components/device/ha-area-devices-picker.ts
@@ -36,12 +36,11 @@ interface AreaDevices {
devices: string[];
}
-const rowRenderer: ComboBoxLitRenderer = (
- item
-) => html`
- ${item.name}
- ${item.devices.length} devices
-`;
+const rowRenderer: ComboBoxLitRenderer = (item) =>
+ html`
+ ${item.name}
+ ${item.devices.length} devices
+ `;
@customElement("ha-area-devices-picker")
export class HaAreaDevicesPicker extends SubscribeMixin(LitElement) {
diff --git a/src/components/device/ha-device-automation-picker.ts b/src/components/device/ha-device-automation-picker.ts
index 0189fc5d4c..87257aba4f 100644
--- a/src/components/device/ha-device-automation-picker.ts
+++ b/src/components/device/ha-device-automation-picker.ts
@@ -17,7 +17,7 @@ const NO_AUTOMATION_KEY = "NO_AUTOMATION";
const UNKNOWN_AUTOMATION_KEY = "UNKNOWN_AUTOMATION";
export abstract class HaDeviceAutomationPicker<
- T extends DeviceAutomation
+ T extends DeviceAutomation,
> extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
diff --git a/src/components/device/ha-device-picker.ts b/src/components/device/ha-device-picker.ts
index fb837d15b2..8b8d5bf8a0 100644
--- a/src/components/device/ha-device-picker.ts
+++ b/src/components/device/ha-device-picker.ts
@@ -45,12 +45,11 @@ export type HaDevicePickerDeviceFilterFunc = (
export type HaDevicePickerEntityFilterFunc = (entity: HassEntity) => boolean;
-const rowRenderer: ComboBoxLitRenderer = (item) => html`
- ${item.name}
- ${item.area}
-`;
+const rowRenderer: ComboBoxLitRenderer = (item) =>
+ html`
+ ${item.name}
+ ${item.area}
+ `;
@customElement("ha-device-picker")
export class HaDevicePicker extends SubscribeMixin(LitElement) {
diff --git a/src/components/entity/ha-entities-picker.ts b/src/components/entity/ha-entities-picker.ts
index 8eae3577bb..21aebdfd2c 100644
--- a/src/components/entity/ha-entities-picker.ts
+++ b/src/components/entity/ha-entities-picker.ts
@@ -130,9 +130,9 @@ class HaEntitiesPickerLight extends LitElement {
private _getEntityFilter = memoizeOne(
(
- value: string[] | undefined,
- entityFilter: HaEntityPickerEntityFilterFunc | undefined
- ): HaEntityPickerEntityFilterFunc =>
+ value: string[] | undefined,
+ entityFilter: HaEntityPickerEntityFilterFunc | undefined
+ ): HaEntityPickerEntityFilterFunc =>
(stateObj: HassEntity) =>
(!value || !value.includes(stateObj.entity_id)) &&
(!entityFilter || entityFilter(stateObj))
diff --git a/src/components/entity/ha-statistic-picker.ts b/src/components/entity/ha-statistic-picker.ts
index f5c1d7ff22..e9a9388243 100644
--- a/src/components/entity/ha-statistic-picker.ts
+++ b/src/components/entity/ha-statistic-picker.ts
@@ -87,26 +87,28 @@ export class HaStatisticPicker extends LitElement {
private _statistics: StatisticItem[] = [];
- private _rowRenderer: ComboBoxLitRenderer = (
- item
- ) => html`
- ${item.state
- ? html``
- : ""}
- ${item.name}
- ${item.id === "" || item.id === "__missing"
- ? html`${this.hass.localize(
- "ui.components.statistic-picker.learn_more"
- )}`
- : item.id}
- `;
+ private _rowRenderer: ComboBoxLitRenderer = (item) =>
+ html`
+ ${item.state
+ ? html``
+ : ""}
+ ${item.name}
+ ${item.id === "" || item.id === "__missing"
+ ? html`${this.hass.localize(
+ "ui.components.statistic-picker.learn_more"
+ )}`
+ : item.id}
+ `;
private _getStatistics = memoizeOne(
(
diff --git a/src/components/entity/state-badge.ts b/src/components/entity/state-badge.ts
index 2b6f936497..1c91fce31b 100644
--- a/src/components/entity/state-badge.ts
+++ b/src/components/entity/state-badge.ts
@@ -211,7 +211,9 @@ export class StateBadge extends LitElement {
background: var(--divider-color);
}
ha-state-icon {
- transition: color 0.3s ease-in-out, filter 0.3s ease-in-out;
+ transition:
+ color 0.3s ease-in-out,
+ filter 0.3s ease-in-out;
}
.missing {
color: #fce588;
diff --git a/src/components/ha-addon-picker.ts b/src/components/ha-addon-picker.ts
index 099da62e9f..c169ecc532 100644
--- a/src/components/ha-addon-picker.ts
+++ b/src/components/ha-addon-picker.ts
@@ -11,19 +11,18 @@ import "./ha-combo-box";
import type { HaComboBox } from "./ha-combo-box";
import "./ha-list-item";
-const rowRenderer: ComboBoxLitRenderer = (
- item
-) => html`
- ${item.name}
- ${item.slug}
- ${item.icon
- ? html`
`
- : ""}
-`;
+const rowRenderer: ComboBoxLitRenderer = (item) =>
+ html`
+ ${item.name}
+ ${item.slug}
+ ${item.icon
+ ? html`
`
+ : ""}
+ `;
@customElement("ha-addon-picker")
class HaAddonPicker extends LitElement {
diff --git a/src/components/ha-analytics.ts b/src/components/ha-analytics.ts
index 9faec6a273..15e356582d 100644
--- a/src/components/ha-analytics.ts
+++ b/src/components/ha-analytics.ts
@@ -53,39 +53,38 @@ export class HaAnalytics extends LitElement {
${ADDITIONAL_PREFERENCES.map(
- (preference) =>
- html`
-
-
- ${this.localize(
- `ui.panel.${this.translationKeyPanel}.analytics.preferences.${preference}.title`
- )}
-
-
- ${this.localize(
- `ui.panel.${this.translationKeyPanel}.analytics.preferences.${preference}.description`
- )}
-
-
-
-
- ${!baseEnabled
- ? html`
-
- ${this.localize(
- `ui.panel.${this.translationKeyPanel}.analytics.need_base_enabled`
- )}
-
- `
- : ""}
-
-
- `
+ (preference) => html`
+
+
+ ${this.localize(
+ `ui.panel.${this.translationKeyPanel}.analytics.preferences.${preference}.title`
+ )}
+
+
+ ${this.localize(
+ `ui.panel.${this.translationKeyPanel}.analytics.preferences.${preference}.description`
+ )}
+
+
+
+
+ ${!baseEnabled
+ ? html`
+
+ ${this.localize(
+ `ui.panel.${this.translationKeyPanel}.analytics.need_base_enabled`
+ )}
+
+ `
+ : ""}
+
+
+ `
)}
diff --git a/src/components/ha-area-picker.ts b/src/components/ha-area-picker.ts
index 1ea409aafe..5d56c69082 100644
--- a/src/components/ha-area-picker.ts
+++ b/src/components/ha-area-picker.ts
@@ -34,13 +34,12 @@ import "./ha-svg-icon";
type ScorableAreaRegistryEntry = ScorableTextItem & AreaRegistryEntry;
-const rowRenderer: ComboBoxLitRenderer = (
- item
-) => html`
- ${item.name}
-`;
+const rowRenderer: ComboBoxLitRenderer = (item) =>
+ html`
+ ${item.name}
+ `;
@customElement("ha-area-picker")
export class HaAreaPicker extends LitElement {
diff --git a/src/components/ha-button-toggle-group.ts b/src/components/ha-button-toggle-group.ts
index 8534cfba0b..e4dd2e9524 100644
--- a/src/components/ha-button-toggle-group.ts
+++ b/src/components/ha-button-toggle-group.ts
@@ -94,7 +94,9 @@ export class HaButtonToggleGroup extends LitElement {
opacity: 0;
pointer-events: none;
content: "";
- transition: opacity 15ms linear, background-color 15ms linear;
+ transition:
+ opacity 15ms linear,
+ background-color 15ms linear;
}
ha-icon-button[active]::before,
mwc-button[active]::before {
diff --git a/src/components/ha-config-entry-picker.ts b/src/components/ha-config-entry-picker.ts
index fb99d62b5a..65f2064931 100644
--- a/src/components/ha-config-entry-picker.ts
+++ b/src/components/ha-config-entry-picker.ts
@@ -47,29 +47,28 @@ class HaConfigEntryPicker extends LitElement {
this._getConfigEntries();
}
- private _rowRenderer: ComboBoxLitRenderer = (
- item
- ) => html`
- ${item.title ||
- this.hass.localize(
- "ui.panel.config.integrations.config_entry.unnamed_entry"
- )}
- ${item.localized_domain_name}
-
- `;
+ private _rowRenderer: ComboBoxLitRenderer = (item) =>
+ html`
+ ${item.title ||
+ this.hass.localize(
+ "ui.panel.config.integrations.config_entry.unnamed_entry"
+ )}
+ ${item.localized_domain_name}
+
+ `;
protected render() {
if (!this._configEntries) {
diff --git a/src/components/ha-control-button.ts b/src/components/ha-control-button.ts
index 8c8f467f76..1eee1286e6 100644
--- a/src/components/ha-control-button.ts
+++ b/src/components/ha-control-button.ts
@@ -122,7 +122,8 @@ export class HaControlButton extends LitElement {
height: 100%;
width: 100%;
background-color: var(--control-button-background-color);
- transition: background-color 180ms ease-in-out,
+ transition:
+ background-color 180ms ease-in-out,
opacity 180ms ease-in-out;
opacity: var(--control-button-background-opacity);
}
diff --git a/src/components/ha-control-circular-slider.ts b/src/components/ha-control-circular-slider.ts
index 97bc2ea566..5b3caf3bef 100644
--- a/src/components/ha-control-circular-slider.ts
+++ b/src/components/ha-control-circular-slider.ts
@@ -566,7 +566,9 @@ export class HaControlCircularSlider extends LitElement {
fill: none;
stroke: var(--control-circular-slider-background);
opacity: var(--control-circular-slider-background-opacity);
- transition: stroke 180ms ease-in-out, opacity 180ms ease-in-out;
+ transition:
+ stroke 180ms ease-in-out,
+ opacity 180ms ease-in-out;
stroke-linecap: round;
stroke-width: 24px;
}
@@ -576,9 +578,11 @@ export class HaControlCircularSlider extends LitElement {
fill: none;
stroke-linecap: round;
stroke-width: 24px;
- transition: stroke-width 300ms ease-in-out,
+ transition:
+ stroke-width 300ms ease-in-out,
stroke-dasharray 300ms ease-in-out,
- stroke-dashoffset 300ms ease-in-out, stroke 180ms ease-in-out,
+ stroke-dashoffset 300ms ease-in-out,
+ stroke 180ms ease-in-out,
opacity 180ms ease-in-out;
}
diff --git a/src/components/ha-control-select.ts b/src/components/ha-control-select.ts
index 1a48c0574c..855fc338a1 100644
--- a/src/components/ha-control-select.ts
+++ b/src/components/ha-control-select.ts
@@ -283,7 +283,9 @@ export class HaControlSelect extends LitElement {
width: 100%;
background-color: var(--control-select-color);
opacity: 0;
- transition: background-color ease-in-out 180ms, opacity ease-in-out 80ms;
+ transition:
+ background-color ease-in-out 180ms,
+ opacity ease-in-out 80ms;
}
.option.focused::before,
.option:hover::before {
diff --git a/src/components/ha-control-slider.ts b/src/components/ha-control-slider.ts
index 3f4abcf4e3..c3450c6014 100644
--- a/src/components/ha-control-slider.ts
+++ b/src/components/ha-control-slider.ts
@@ -327,7 +327,8 @@ export class HaControlSlider extends LitElement {
height: 100%;
width: 100%;
background-color: var(--control-slider-color);
- transition: transform 180ms ease-in-out,
+ transition:
+ transform 180ms ease-in-out,
background-color 180ms ease-in-out;
}
.slider .slider-track-bar.show-handle {
@@ -427,7 +428,9 @@ export class HaControlSlider extends LitElement {
position: absolute;
background-color: white;
border-radius: var(--handle-size);
- transition: left 180ms ease-in-out, bottom 180ms ease-in-out;
+ transition:
+ left 180ms ease-in-out,
+ bottom 180ms ease-in-out;
top: 0;
bottom: 0;
left: calc(var(--value, 0) * (100% - var(--cursor-size)));
diff --git a/src/components/ha-control-switch.ts b/src/components/ha-control-switch.ts
index ae15ce98b7..759ee93f9d 100644
--- a/src/components/ha-control-switch.ts
+++ b/src/components/ha-control-switch.ts
@@ -208,7 +208,8 @@ export class HaControlSwitch extends LitElement {
border-radius: calc(
var(--control-switch-border-radius) - var(--control-switch-padding)
);
- transition: transform 180ms ease-in-out,
+ transition:
+ transform 180ms ease-in-out,
background-color 180ms ease-in-out;
background-color: var(--control-switch-off-color);
color: white;
diff --git a/src/components/ha-form/ha-form-grid.ts b/src/components/ha-form/ha-form-grid.ts
index f74377c12a..a3fbcb079a 100644
--- a/src/components/ha-form/ha-form-grid.ts
+++ b/src/components/ha-form/ha-form-grid.ts
@@ -55,17 +55,16 @@ export class HaFormGrid extends LitElement implements HaFormElement {
protected render(): TemplateResult {
return html`
${this.schema.schema.map(
- (item) =>
- html`
-
- `
+ (item) => html`
+
+ `
)}
`;
}
diff --git a/src/components/ha-form/types.ts b/src/components/ha-form/types.ts
index 287b904780..e2e032312d 100644
--- a/src/components/ha-form/types.ts
+++ b/src/components/ha-form/types.ts
@@ -98,7 +98,7 @@ export interface HaFormTimeSchema extends HaFormBaseSchema {
// Type utility to unionize a schema array by flattening any grid schemas
export type SchemaUnion<
SchemaArray extends readonly HaFormSchema[],
- Schema = SchemaArray[number]
+ Schema = SchemaArray[number],
> = Schema extends HaFormGridSchema | HaFormExpandableSchema
? SchemaUnion
: Schema;
diff --git a/src/components/ha-gauge.ts b/src/components/ha-gauge.ts
index 1895e419db..e6faa19773 100644
--- a/src/components/ha-gauge.ts
+++ b/src/components/ha-gauge.ts
@@ -138,12 +138,12 @@ export class Gauge extends LitElement {
: this.valueText ||
formatNumber(this.value, this.locale, this.formatOptions)
}${
- this._segment_label
- ? ""
- : this.label === "%"
- ? blankBeforePercent(this.locale) + "%"
- : ` ${this.label}`
- }
+ this._segment_label
+ ? ""
+ : this.label === "%"
+ ? blankBeforePercent(this.locale) + "%"
+ : ` ${this.label}`
+ }
`;
}
diff --git a/src/components/ha-hs-color-picker.ts b/src/components/ha-hs-color-picker.ts
index ba5d038526..cef11cfc38 100644
--- a/src/components/ha-hs-color-picker.ts
+++ b/src/components/ha-hs-color-picker.ts
@@ -406,7 +406,9 @@ class HaHsColorPicker extends LitElement {
filter: url(#marker-shadow);
}
.container:not(.pressed) circle {
- transition: transform 100ms ease-in-out, fill 100ms ease-in-out;
+ transition:
+ transform 100ms ease-in-out,
+ fill 100ms ease-in-out;
}
.container:not(.pressed) .cursor {
transition: transform 200ms ease-in-out;
diff --git a/src/components/ha-mount-picker.ts b/src/components/ha-mount-picker.ts
index fd47688001..6a35dea416 100644
--- a/src/components/ha-mount-picker.ts
+++ b/src/components/ha-mount-picker.ts
@@ -81,28 +81,25 @@ class HaMountPicker extends LitElement {
? dataDiskOption
: nothing}
${this._filterMounts(this._mounts, this.usage).map(
- (mount) => html`
- ${mount.name}
- ${mount.server}${mount.port
- ? `:${mount.port}`
- : nothing}${mount.type === SupervisorMountType.NFS
- ? mount.path
- : `:${mount.share}`}
-
- `
+ (mount) =>
+ html`
+ ${mount.name}
+ ${mount.server}${mount.port
+ ? `:${mount.port}`
+ : nothing}${mount.type === SupervisorMountType.NFS
+ ? mount.path
+ : `:${mount.share}`}
+
+ `
)}
${this.usage === SupervisorMountUsage.BACKUP &&
this._mounts.default_backup_mount
diff --git a/src/components/ha-selector/ha-selector-select.ts b/src/components/ha-selector/ha-selector-select.ts
index e8bd3ac4b4..71747c4d27 100644
--- a/src/components/ha-selector/ha-selector-select.ts
+++ b/src/components/ha-selector/ha-selector-select.ts
@@ -112,19 +112,18 @@ export class HaSelectSelector extends LitElement {
${value?.length
? html`
${value.map(
- (item, idx) =>
- html`
-
- ${options.find((option) => option.value === item)
- ?.label || item}
-
-
- `
+ (item, idx) => html`
+
+ ${options.find((option) => option.value === item)?.label ||
+ item}
+
+
+ `
)}
`
: ""}
diff --git a/src/components/ha-service-picker.ts b/src/components/ha-service-picker.ts
index 9ef0dc670a..db4dec62d7 100644
--- a/src/components/ha-service-picker.ts
+++ b/src/components/ha-service-picker.ts
@@ -10,12 +10,13 @@ import "./ha-combo-box";
const rowRenderer: ComboBoxLitRenderer<{ service: string; name: string }> = (
item
-) => html`
- ${item.name}
- ${item.name === item.service ? "" : item.service}
-`;
+) =>
+ html`
+ ${item.name}
+ ${item.name === item.service ? "" : item.service}
+ `;
@customElement("ha-service-picker")
class HaServicePicker extends LitElement {
diff --git a/src/components/ha-temp-color-picker.ts b/src/components/ha-temp-color-picker.ts
index b2f2b26dfc..4e0d109109 100644
--- a/src/components/ha-temp-color-picker.ts
+++ b/src/components/ha-temp-color-picker.ts
@@ -418,7 +418,9 @@ class HaTempColorPicker extends LitElement {
filter: url(#marker-shadow);
}
.container:not(.pressed) circle {
- transition: transform 100ms ease-in-out, fill 100ms ease-in-out;
+ transition:
+ transform 100ms ease-in-out,
+ fill 100ms ease-in-out;
}
.container:not(.pressed) .cursor {
transition: transform 200ms ease-in-out;
diff --git a/src/components/ha-tts-voice-picker.ts b/src/components/ha-tts-voice-picker.ts
index 8cbe24dffd..cfea9c3c5c 100644
--- a/src/components/ha-tts-voice-picker.ts
+++ b/src/components/ha-tts-voice-picker.ts
@@ -62,9 +62,10 @@ export class HaTTSVoicePicker extends LitElement {
`
: nothing}
${this._voices.map(
- (voice) => html`
- ${voice.name}
- `
+ (voice) =>
+ html`
+ ${voice.name}
+ `
)}
`;
diff --git a/src/components/media-player/ha-media-player-browse.ts b/src/components/media-player/ha-media-player-browse.ts
index ae617af86b..2600758eac 100644
--- a/src/components/media-player/ha-media-player-browse.ts
+++ b/src/components/media-player/ha-media-player-browse.ts
@@ -930,7 +930,9 @@ export class HaMediaPlayerBrowse extends LitElement {
margin-right: 16px;
background-size: cover;
border-radius: 2px;
- transition: width 0.4s, height 0.4s;
+ transition:
+ width 0.4s,
+ height 0.4s;
}
.header-info {
display: flex;
@@ -977,7 +979,9 @@ export class HaMediaPlayerBrowse extends LitElement {
overflow: hidden;
text-overflow: ellipsis;
margin-bottom: 0;
- transition: height 0.5s, margin 0.5s;
+ transition:
+ height 0.5s,
+ margin 0.5s;
}
.not-shown {
@@ -1121,7 +1125,9 @@ export class HaMediaPlayerBrowse extends LitElement {
top: auto;
bottom: 0px;
right: 8px;
- transition: bottom 0.1s ease-out, opacity 0.1s ease-out;
+ transition:
+ bottom 0.1s ease-out,
+ opacity 0.1s ease-out;
}
.child .play:hover {
@@ -1220,7 +1226,10 @@ export class HaMediaPlayerBrowse extends LitElement {
position: relative;
background-position: center;
border-radius: 0;
- transition: width 0.4s, height 0.4s, padding-bottom 0.4s;
+ transition:
+ width 0.4s,
+ height 0.4s,
+ padding-bottom 0.4s;
}
ha-fab {
position: absolute;
diff --git a/src/components/user/ha-users-picker.ts b/src/components/user/ha-users-picker.ts
index a78de5ed4c..aeda071a88 100644
--- a/src/components/user/ha-users-picker.ts
+++ b/src/components/user/ha-users-picker.ts
@@ -40,38 +40,40 @@ class HaUsersPickerLight extends LitElement {
const notSelectedUsers = this._notSelectedUsers(this.users, this.value);
return html`
- ${guard([notSelectedUsers], () =>
- this.value?.map(
- (user_id, idx) => html`
-
-
-
- >
-
- `
- )
+ ${guard(
+ [notSelectedUsers],
+ () =>
+ this.value?.map(
+ (user_id, idx) => html`
+
+
+
+ >
+
+ `
+ )
)}
+ T extends Partial<{ [key in ValidKeys]: unknown }>,
>(
hass: HomeAssistant,
config: T
diff --git a/src/data/frontend.ts b/src/data/frontend.ts
index 8760859c65..9e0095e7a9 100644
--- a/src/data/frontend.ts
+++ b/src/data/frontend.ts
@@ -14,7 +14,7 @@ declare global {
export type ValidUserDataKey = keyof FrontendUserData;
export const fetchFrontendUserData = async <
- UserDataKey extends ValidUserDataKey
+ UserDataKey extends ValidUserDataKey,
>(
conn: Connection,
key: UserDataKey
@@ -29,7 +29,7 @@ export const fetchFrontendUserData = async <
};
export const saveFrontendUserData = async <
- UserDataKey extends ValidUserDataKey
+ UserDataKey extends ValidUserDataKey,
>(
conn: Connection,
key: UserDataKey,
@@ -42,7 +42,7 @@ export const saveFrontendUserData = async <
});
export const getOptimisticFrontendUserDataCollection = <
- UserDataKey extends ValidUserDataKey
+ UserDataKey extends ValidUserDataKey,
>(
conn: Connection,
userDataKey: UserDataKey
diff --git a/src/data/selector.ts b/src/data/selector.ts
index f046a5a1fd..71805ef7d4 100644
--- a/src/data/selector.ts
+++ b/src/data/selector.ts
@@ -145,21 +145,20 @@ export interface DeviceSelector {
}
export interface LegacyDeviceSelector {
- device:
- | DeviceSelector["device"] & {
- /**
- * @deprecated Use filter instead
- */
- integration?: DeviceSelectorFilter["integration"];
- /**
- * @deprecated Use filter instead
- */
- manufacturer?: DeviceSelectorFilter["manufacturer"];
- /**
- * @deprecated Use filter instead
- */
- model?: DeviceSelectorFilter["model"];
- };
+ device: DeviceSelector["device"] & {
+ /**
+ * @deprecated Use filter instead
+ */
+ integration?: DeviceSelectorFilter["integration"];
+ /**
+ * @deprecated Use filter instead
+ */
+ manufacturer?: DeviceSelectorFilter["manufacturer"];
+ /**
+ * @deprecated Use filter instead
+ */
+ model?: DeviceSelectorFilter["model"];
+ };
}
export interface DurationSelector {
@@ -185,21 +184,20 @@ export interface EntitySelector {
}
export interface LegacyEntitySelector {
- entity:
- | EntitySelector["entity"] & {
- /**
- * @deprecated Use filter instead
- */
- integration?: EntitySelectorFilter["integration"];
- /**
- * @deprecated Use filter instead
- */
- domain?: EntitySelectorFilter["domain"];
- /**
- * @deprecated Use filter instead
- */
- device_class?: EntitySelectorFilter["device_class"];
- };
+ entity: EntitySelector["entity"] & {
+ /**
+ * @deprecated Use filter instead
+ */
+ integration?: EntitySelectorFilter["integration"];
+ /**
+ * @deprecated Use filter instead
+ */
+ domain?: EntitySelectorFilter["domain"];
+ /**
+ * @deprecated Use filter instead
+ */
+ device_class?: EntitySelectorFilter["device_class"];
+ };
}
export interface StatisticSelector {
diff --git a/src/dialogs/config-flow/step-flow-create-entry.ts b/src/dialogs/config-flow/step-flow-create-entry.ts
index a43477d8c0..1ceb034b7a 100644
--- a/src/dialogs/config-flow/step-flow-create-entry.ts
+++ b/src/dialogs/config-flow/step-flow-create-entry.ts
@@ -48,26 +48,25 @@ class StepFlowCreateEntry extends LitElement {
${this.devices.map(
- (device) =>
- html`
-
-
- ${computeDeviceName(device, this.hass)}
- ${!device.model && !device.manufacturer
- ? html` `
- : html`${device.model}
- ${device.manufacturer
- ? html`(${device.manufacturer})`
- : ""}`}
-
-
+ (device) => html`
+
+
+ ${computeDeviceName(device, this.hass)}
+ ${!device.model && !device.manufacturer
+ ? html` `
+ : html`${device.model}
+ ${device.manufacturer
+ ? html`(${device.manufacturer})`
+ : ""}`}
- `
+
+
+ `
)}
`}
diff --git a/src/dialogs/more-info/components/lights/dialog-light-color-favorite.ts b/src/dialogs/more-info/components/lights/dialog-light-color-favorite.ts
index 410ba70c04..8549c90682 100644
--- a/src/dialogs/more-info/components/lights/dialog-light-color-favorite.ts
+++ b/src/dialogs/more-info/components/lights/dialog-light-color-favorite.ts
@@ -150,22 +150,21 @@ class DialogLightColorFavorite extends LitElement {
? html`
${this._modes.map(
- (value) =>
- html`
-
-
-
- `
+ (value) => html`
+
+
+
+ `
)}
`
diff --git a/src/dialogs/more-info/components/lights/light-color-rgb-picker.ts b/src/dialogs/more-info/components/lights/light-color-rgb-picker.ts
index cf50ae5c04..90b18f4223 100644
--- a/src/dialogs/more-info/components/lights/light-color-rgb-picker.ts
+++ b/src/dialogs/more-info/components/lights/light-color-rgb-picker.ts
@@ -415,7 +415,7 @@ class LightRgbColorPicker extends LitElement {
number,
number,
number,
- number
+ number,
];
this._applyColor({ rgbww_color });
} else if (lightSupportsColorMode(this.stateObj!, LightColorMode.RGBW)) {
@@ -427,7 +427,7 @@ class LightRgbColorPicker extends LitElement {
number,
number,
number,
- number
+ number,
];
this._applyColor({ rgbw_color });
}
diff --git a/src/dialogs/more-info/controls/more-info-configurator.ts b/src/dialogs/more-info/controls/more-info-configurator.ts
index 0e68a22c7e..76c2fb9f5b 100644
--- a/src/dialogs/more-info/controls/more-info-configurator.ts
+++ b/src/dialogs/more-info/controls/more-info-configurator.ts
@@ -36,12 +36,13 @@ export class MoreInfoConfigurator extends LitElement {
`
: ""}
${this.stateObj.attributes.fields.map(
- (field) => html`
`
+ (field) =>
+ html`
`
)}
${this.stateObj.attributes.submit_caption
? html`
diff --git a/src/dialogs/more-info/controls/more-info-fan.ts b/src/dialogs/more-info/controls/more-info-fan.ts
index 588397c5ce..ae841e996c 100644
--- a/src/dialogs/more-info/controls/more-info-fan.ts
+++ b/src/dialogs/more-info/controls/more-info-fan.ts
@@ -299,23 +299,22 @@ class MoreInfoFan extends LitElement {
>
${this.stateObj.attributes.preset_modes?.map(
- (mode) =>
- html`
-
- ${computeAttributeValueDisplay(
- this.hass.localize,
- this.stateObj!,
- this.hass.locale,
- this.hass.config,
- this.hass.entities,
- "preset_mode",
- mode
- )}
-
- `
+ (mode) => html`
+
+ ${computeAttributeValueDisplay(
+ this.hass.localize,
+ this.stateObj!,
+ this.hass.locale,
+ this.hass.config,
+ this.hass.entities,
+ "preset_mode",
+ mode
+ )}
+
+ `
)}
`
diff --git a/src/dialogs/more-info/controls/more-info-media_player.ts b/src/dialogs/more-info/controls/more-info-media_player.ts
index 047605cd8a..1d9fcbe0fc 100644
--- a/src/dialogs/more-info/controls/more-info-media_player.ts
+++ b/src/dialogs/more-info/controls/more-info-media_player.ts
@@ -156,20 +156,19 @@ class MoreInfoMediaPlayer extends LitElement {
@closed=${stopPropagation}
>
${stateObj.attributes.source_list!.map(
- (source) =>
- html`
- ${computeAttributeValueDisplay(
- this.hass.localize,
- stateObj,
- this.hass.locale,
- this.hass.config,
- this.hass.entities,
- "source",
- source
- )}
- `
+ (source) => html`
+ ${computeAttributeValueDisplay(
+ this.hass.localize,
+ stateObj,
+ this.hass.locale,
+ this.hass.config,
+ this.hass.entities,
+ "source",
+ source
+ )}
+ `
)}
diff --git a/src/dialogs/notifications/notification-drawer.ts b/src/dialogs/notifications/notification-drawer.ts
index b11a45a345..57407a62ad 100644
--- a/src/dialogs/notifications/notification-drawer.ts
+++ b/src/dialogs/notifications/notification-drawer.ts
@@ -108,12 +108,13 @@ export class HuiNotificationDrawer extends LitElement {
${notifications.length
? html`${notifications.map(
- (notification) => html`
-
-
`
+ (notification) =>
+ html`
+
+
`
)}
${this._notifications.length > 1
? html`
diff --git a/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts b/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts
index de68790067..b479b07a22 100644
--- a/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts
+++ b/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts
@@ -158,20 +158,24 @@ export class HaVoiceCommandDialog extends LitElement {
>
${this._pipelines?.map(
- (pipeline) => html`
- ${pipeline.name}${pipeline.id === this._preferredPipeline
- ? html`
-
- `
- : nothing}
- `
+ (pipeline) =>
+ html`
+ ${pipeline.name}${pipeline.id === this._preferredPipeline
+ ? html`
+
+ `
+ : nothing}
+ `
)}
${this.hass.user?.is_admin
? html`
diff --git a/src/layouts/hass-tabs-subpage.ts b/src/layouts/hass-tabs-subpage.ts
index bbc978fd7d..e8c470df3b 100644
--- a/src/layouts/hass-tabs-subpage.ts
+++ b/src/layouts/hass-tabs-subpage.ts
@@ -94,26 +94,25 @@ class HassTabsSubpage extends LitElement {
}
return shownTabs.map(
- (page) =>
- html`
-
-
- ${page.iconPath
- ? html``
- : ""}
-
-
- `
+ (page) => html`
+
+
+ ${page.iconPath
+ ? html``
+ : ""}
+
+
+ `
);
}
);
diff --git a/src/panels/calendar/ha-panel-calendar.ts b/src/panels/calendar/ha-panel-calendar.ts
index 878d6348fa..c2562d1357 100644
--- a/src/panels/calendar/ha-panel-calendar.ts
+++ b/src/panels/calendar/ha-panel-calendar.ts
@@ -79,23 +79,22 @@ class PanelCalendar extends LitElement {
${this.hass.localize("ui.components.calendar.my_calendars")}
${this._calendars.map(
- (selCal) =>
- html`
-
-
-
-
-
- `
+ (selCal) => html`
+
+
+
+
+
+ `
)}
= (item) => html`
- ${item.name}
-`;
+const rowRenderer: ComboBoxLitRenderer = (item) =>
+ html`
+ ${item.name}
+ `;
@customElement("dialog-add-application-credential")
export class DialogAddApplicationCredential extends LitElement {
diff --git a/src/panels/config/areas/ha-config-area-page.ts b/src/panels/config/areas/ha-config-area-page.ts
index 4edc723c0e..8a326e6867 100644
--- a/src/panels/config/areas/ha-config-area-page.ts
+++ b/src/panels/config/areas/ha-config-area-page.ts
@@ -283,15 +283,14 @@ class HaConfigAreaPage extends SubscribeMixin(LitElement) {
.header=${this.hass.localize("ui.panel.config.devices.caption")}
>${devices.length
? devices.map(
- (device) =>
- html`
-
-
- ${device.name}
-
-
-
- `
+ (device) => html`
+
+
+ ${device.name}
+
+
+
+ `
)
: html`
html`
-
-
- ${this.hass.localize(
- "ui.panel.config.automation.editor.actions.type.choose.option",
- "number",
- idx + 1
- )}:
- ${this._getDescription(option, idx)}
-
+ (option, idx) =>
+ html`
+
+
+ ${this.hass.localize(
+ "ui.panel.config.automation.editor.actions.type.choose.option",
+ "number",
+ idx + 1
+ )}:
+ ${this._getDescription(option, idx)}
+
-
-
-
- ${this.hass.localize(
- "ui.panel.config.automation.editor.actions.type.choose.conditions"
- )}:
-
- (
- option.conditions
+
-
- ${this.hass.localize(
- "ui.panel.config.automation.editor.actions.type.choose.sequence"
- )}:
-
-
-
-
- `
+ .path=${mdiDelete}
+ >
+
+
+ ${this.hass.localize(
+ "ui.panel.config.automation.editor.actions.type.choose.conditions"
+ )}:
+
+ (
+ option.conditions
+ )}
+ .reOrderMode=${this.reOrderMode}
+ .disabled=${this.disabled}
+ .hass=${this.hass}
+ .idx=${idx}
+ @value-changed=${this._conditionChanged}
+ >
+
+ ${this.hass.localize(
+ "ui.panel.config.automation.editor.actions.type.choose.sequence"
+ )}:
+
+
+
+
+ `
)}
- html`
- this._showInfo(automation),
- },
- {
- path: mdiPlay,
- label: this.hass.localize(
- "ui.panel.config.automation.editor.run"
- ),
- action: () => this._runActions(automation),
- },
- {
- path: mdiTransitConnection,
- label: this.hass.localize(
- "ui.panel.config.automation.editor.show_trace"
- ),
- action: () => this._showTrace(automation),
- },
- {
- divider: true,
- },
- {
- path: mdiContentDuplicate,
- label: this.hass.localize(
- "ui.panel.config.automation.picker.duplicate"
- ),
- action: () => this.duplicate(automation),
- },
- {
- path:
- automation.state === "off"
- ? mdiPlayCircleOutline
- : mdiStopCircleOutline,
- label:
- automation.state === "off"
- ? this.hass.localize(
- "ui.panel.config.automation.editor.enable"
- )
- : this.hass.localize(
- "ui.panel.config.automation.editor.disable"
- ),
- action: () => this._toggle(automation),
- },
- {
- label: this.hass.localize(
- "ui.panel.config.automation.picker.delete"
- ),
- path: mdiDelete,
- action: () => this._deleteConfirm(automation),
- warning: true,
- },
- ]}
- >
-
- `,
+ template: (_: string, automation: any) => html`
+ this._showInfo(automation),
+ },
+ {
+ path: mdiPlay,
+ label: this.hass.localize(
+ "ui.panel.config.automation.editor.run"
+ ),
+ action: () => this._runActions(automation),
+ },
+ {
+ path: mdiTransitConnection,
+ label: this.hass.localize(
+ "ui.panel.config.automation.editor.show_trace"
+ ),
+ action: () => this._showTrace(automation),
+ },
+ {
+ divider: true,
+ },
+ {
+ path: mdiContentDuplicate,
+ label: this.hass.localize(
+ "ui.panel.config.automation.picker.duplicate"
+ ),
+ action: () => this.duplicate(automation),
+ },
+ {
+ path:
+ automation.state === "off"
+ ? mdiPlayCircleOutline
+ : mdiStopCircleOutline,
+ label:
+ automation.state === "off"
+ ? this.hass.localize(
+ "ui.panel.config.automation.editor.enable"
+ )
+ : this.hass.localize(
+ "ui.panel.config.automation.editor.disable"
+ ),
+ action: () => this._toggle(automation),
+ },
+ {
+ label: this.hass.localize(
+ "ui.panel.config.automation.picker.delete"
+ ),
+ path: mdiDelete,
+ action: () => this._deleteConfirm(automation),
+ warning: true,
+ },
+ ]}
+ >
+
+ `,
};
return columns;
}
diff --git a/src/panels/config/automation/thingtalk/ha-thingtalk-placeholders.ts b/src/panels/config/automation/thingtalk/ha-thingtalk-placeholders.ts
index 9731a96394..3be3fbe024 100644
--- a/src/panels/config/automation/thingtalk/ha-thingtalk-placeholders.ts
+++ b/src/panels/config/automation/thingtalk/ha-thingtalk-placeholders.ts
@@ -133,110 +133,107 @@ export class ThingTalkPlaceholders extends SubscribeMixin(LitElement) {
${this._error ? html`
${this._error}
` : ""}
${Object.entries(this.placeholders).map(
- ([type, placeholders]) =>
- html`
-
- ${this.hass.localize(
- `ui.panel.config.automation.editor.${type}s.name`
- )}:
-
- ${placeholders.map((placeholder) => {
- if (placeholder.fields.includes("device_id")) {
- const extraInfo = getPath(this._extraInfo, [
- type,
- placeholder.index,
- ]);
- return html`
-
- ${extraInfo && extraInfo.manualEntity
- ? html`
-
- ${this.hass.localize(
- `ui.panel.config.automation.thingtalk.link_devices.ambiguous_entities`
- )}
-
- ${Object.keys(extraInfo.manualEntity).map(
- (idx) => html`
-
{
- const devId =
- this._placeholderValues[type][
- placeholder.index
- ][idx].device_id;
- return this._deviceEntityLookup[
- devId
- ].includes(entityState.entity_id);
- }}
- >
- `
- )}
- `
- : ""}
- `;
- }
- if (placeholder.fields.includes("entity_id")) {
- return html`
-
- `;
- }
+ ([type, placeholders]) => html`
+
+ ${this.hass.localize(
+ `ui.panel.config.automation.editor.${type}s.name`
+ )}:
+
+ ${placeholders.map((placeholder) => {
+ if (placeholder.fields.includes("device_id")) {
+ const extraInfo = getPath(this._extraInfo, [
+ type,
+ placeholder.index,
+ ]);
return html`
-
- ${this.hass.localize(
- `ui.panel.config.automation.thingtalk.link_devices.unknown_placeholder`
- )}
- ${placeholder.domains}
- ${placeholder.fields.map(
- (field) => html` ${field}
`
+
+ >
+ ${extraInfo && extraInfo.manualEntity
+ ? html`
+
+ ${this.hass.localize(
+ `ui.panel.config.automation.thingtalk.link_devices.ambiguous_entities`
+ )}
+
+ ${Object.keys(extraInfo.manualEntity).map(
+ (idx) => html`
+
{
+ const devId =
+ this._placeholderValues[type][
+ placeholder.index
+ ][idx].device_id;
+ return this._deviceEntityLookup[
+ devId
+ ].includes(entityState.entity_id);
+ }}
+ >
+ `
+ )}
+ `
+ : ""}
`;
- })}
- `
+ }
+ if (placeholder.fields.includes("entity_id")) {
+ return html`
+
+ `;
+ }
+ return html`
+
+ ${this.hass.localize(
+ `ui.panel.config.automation.thingtalk.link_devices.unknown_placeholder`
+ )}
+ ${placeholder.domains}
+ ${placeholder.fields.map((field) => html` ${field}
`)}
+
+ `;
+ })}
+ `
)}
diff --git a/src/panels/config/blueprint/ha-blueprint-overview.ts b/src/panels/config/blueprint/ha-blueprint-overview.ts
index 44fd7f79c8..c926a2c581 100644
--- a/src/panels/config/blueprint/ha-blueprint-overview.ts
+++ b/src/panels/config/blueprint/ha-blueprint-overview.ts
@@ -125,11 +125,10 @@ class HaBlueprintOverview extends LitElement {
direction: "asc",
grows: true,
template: narrow
- ? (name, entity: any) =>
- html`
- ${name}
- ${entity.path}
- `
+ ? (name, entity: any) => html`
+ ${name}
+ ${entity.path}
+ `
: undefined,
},
type: {
diff --git a/src/panels/config/core/ha-config-system-navigation.ts b/src/panels/config/core/ha-config-system-navigation.ts
index 9225670215..ade0cf81a8 100644
--- a/src/panels/config/core/ha-config-system-navigation.ts
+++ b/src/panels/config/core/ha-config-system-navigation.ts
@@ -181,9 +181,8 @@ class HaConfigSystemNavigation extends LitElement {
const hardwareInfo: HardwareInfo = await this.hass.callWS({
type: "hardware/info",
});
- this._boardName = hardwareInfo?.hardware.find(
- (hw) => hw.board !== null
- )?.name;
+ this._boardName = hardwareInfo?.hardware.find((hw) => hw.board !== null)
+ ?.name;
} else if (isHassioLoaded) {
const osData: HassioHassOSInfo = await fetchHassioHassOsInfo(this.hass);
if (osData.board) {
diff --git a/src/panels/config/devices/device-detail/ha-device-automation-card.ts b/src/panels/config/devices/device-detail/ha-device-automation-card.ts
index 9bf3e433ea..7ea0ec1026 100644
--- a/src/panels/config/devices/device-detail/ha-device-automation-card.ts
+++ b/src/panels/config/devices/device-detail/ha-device-automation-card.ts
@@ -20,7 +20,7 @@ declare global {
}
export abstract class HaDeviceAutomationCard<
- T extends DeviceAutomation
+ T extends DeviceAutomation,
> extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@@ -76,20 +76,19 @@ export abstract class HaDeviceAutomationCard<
${automations.map(
- (automation, idx) =>
- html`
-
- ${this._localizeDeviceAutomation(
- this.hass,
- this.entityReg!,
- automation
- )}
-
- `
+ (automation, idx) => html`
+
+ ${this._localizeDeviceAutomation(
+ this.hass,
+ this.entityReg!,
+ automation
+ )}
+
+ `
)}
${!this._showSecondary && automations.length < this.automations.length
diff --git a/src/panels/config/devices/ha-config-device-page.ts b/src/panels/config/devices/ha-config-device-page.ts
index 2cd52f253c..2c2051065e 100644
--- a/src/panels/config/devices/ha-config-device-page.ts
+++ b/src/panels/config/devices/ha-config-device-page.ts
@@ -376,32 +376,30 @@ export class HaConfigDevicePage extends LitElement {
const firstDeviceAction = actions.shift();
if (device.disabled_by) {
- deviceInfo.push(
- html`
-
- ${this.hass.localize(
- "ui.panel.config.devices.enabled_cause",
- "type",
- this.hass.localize(
- `ui.panel.config.devices.type.${device.entry_type || "device"}`
- ),
- "cause",
- this.hass.localize(
- `ui.panel.config.devices.disabled_by.${device.disabled_by}`
- )
- )}
-
- ${device.disabled_by === "user"
- ? html`
-
-
- ${this.hass.localize("ui.common.enable")}
-
-
- `
- : ""}
- `
- );
+ deviceInfo.push(html`
+
+ ${this.hass.localize(
+ "ui.panel.config.devices.enabled_cause",
+ "type",
+ this.hass.localize(
+ `ui.panel.config.devices.type.${device.entry_type || "device"}`
+ ),
+ "cause",
+ this.hass.localize(
+ `ui.panel.config.devices.disabled_by.${device.disabled_by}`
+ )
+ )}
+
+ ${device.disabled_by === "user"
+ ? html`
+
+
+ ${this.hass.localize("ui.common.enable")}
+
+
+ `
+ : ""}
+ `);
}
this._renderIntegrationInfo(device, integrations, deviceInfo);
@@ -751,12 +749,11 @@ export class HaConfigDevicePage extends LitElement {
? html`
${this._deviceAlerts.map(
- (alert) =>
- html`
-
- ${alert.text}
-
- `
+ (alert) => html`
+
+ ${alert.text}
+
+ `
)}
`
diff --git a/src/panels/config/energy/components/ha-energy-battery-settings.ts b/src/panels/config/energy/components/ha-energy-battery-settings.ts
index dc4923f27a..9d27716a8a 100644
--- a/src/panels/config/energy/components/ha-energy-battery-settings.ts
+++ b/src/panels/config/energy/components/ha-energy-battery-settings.ts
@@ -76,13 +76,12 @@ export class EnergyBatterySettings extends LitElement {
>
${batteryValidation.map(
- (result) =>
- html`
-
- `
+ (result) => html`
+
+ `
)}
diff --git a/src/panels/config/energy/components/ha-energy-device-settings.ts b/src/panels/config/energy/components/ha-energy-device-settings.ts
index 52012f4106..dc2df5472f 100644
--- a/src/panels/config/energy/components/ha-energy-device-settings.ts
+++ b/src/panels/config/energy/components/ha-energy-device-settings.ts
@@ -68,13 +68,12 @@ export class EnergyDeviceSettings extends LitElement {
>
${this.validationResult?.device_consumption.map(
- (result) =>
- html`
-
- `
+ (result) => html`
+
+ `
)}
${this.hass.localize(
diff --git a/src/panels/config/energy/components/ha-energy-gas-settings.ts b/src/panels/config/energy/components/ha-energy-gas-settings.ts
index 14f6653f05..135d686ebc 100644
--- a/src/panels/config/energy/components/ha-energy-gas-settings.ts
+++ b/src/panels/config/energy/components/ha-energy-gas-settings.ts
@@ -74,13 +74,12 @@ export class EnergyGasSettings extends LitElement {
>
${gasValidation.map(
- (result) =>
- html`
-
- `
+ (result) => html`
+
+ `
)}
${this.hass.localize("ui.panel.config.energy.gas.gas_consumption")}
diff --git a/src/panels/config/energy/components/ha-energy-solar-settings.ts b/src/panels/config/energy/components/ha-energy-solar-settings.ts
index 4fe65f0188..ccc7e492e7 100644
--- a/src/panels/config/energy/components/ha-energy-solar-settings.ts
+++ b/src/panels/config/energy/components/ha-energy-solar-settings.ts
@@ -79,13 +79,12 @@ export class EnergySolarSettings extends LitElement {
>
${solarValidation.map(
- (result) =>
- html`
-
- `
+ (result) => html`
+
+ `
)}
diff --git a/src/panels/config/energy/components/ha-energy-water-settings.ts b/src/panels/config/energy/components/ha-energy-water-settings.ts
index a997629695..278b3f747e 100644
--- a/src/panels/config/energy/components/ha-energy-water-settings.ts
+++ b/src/panels/config/energy/components/ha-energy-water-settings.ts
@@ -75,13 +75,12 @@ export class EnergyWaterSettings extends LitElement {
>
${waterValidation.map(
- (result) =>
- html`
-
- `
+ (result) => html`
+
+ `
)}
${this.hass.localize(
diff --git a/src/panels/config/energy/dialogs/dialog-energy-solar-settings.ts b/src/panels/config/energy/dialogs/dialog-energy-solar-settings.ts
index 2cc14377b5..dd05a30612 100644
--- a/src/panels/config/energy/dialogs/dialog-energy-solar-settings.ts
+++ b/src/panels/config/energy/dialogs/dialog-energy-solar-settings.ts
@@ -139,31 +139,32 @@ export class DialogEnergySolarSettings
${this._forecast
? html`
${this._configEntries?.map(
- (entry) => html`
+ html`
+
${entry.title}
+ `}
>
-
${entry.title}
-
`}
- >
-
-
- `
+
+
+ `
)}
${this.hass.localize(
diff --git a/src/panels/config/entities/entity-registry-settings-editor.ts b/src/panels/config/entities/entity-registry-settings-editor.ts
index 96d1214370..940ea5de59 100644
--- a/src/panels/config/entities/entity-registry-settings-editor.ts
+++ b/src/panels/config/entities/entity-registry-settings-editor.ts
@@ -892,11 +892,9 @@ export class EntityRegistrySettingsEditor extends LitElement {
"ui.dialogs.entity_registry.editor.use_device_area"
)}
${this.hass.devices[this.entry.device_id].area_id
- ? `(${
- this.hass.areas[
- this.hass.devices[this.entry.device_id].area_id!
- ]?.name
- })`
+ ? `(${this.hass.areas[
+ this.hass.devices[this.entry.device_id].area_id!
+ ]?.name})`
: ""}
- html`
- ${name}
-
- ${entity.entity_id} |
- ${this.hass.localize(`component.${entity.platform}.title`) ||
- entity.platform}
-
- `
+ ? (name, entity: EntityRow) => html`
+ ${name}
+
+ ${entity.entity_id} |
+ ${this.hass.localize(`component.${entity.platform}.title`) ||
+ entity.platform}
+
+ `
: undefined,
},
entity_id: {
diff --git a/src/panels/config/hardware/dialog-hardware-available.ts b/src/panels/config/hardware/dialog-hardware-available.ts
index d60d801b19..817ee0db12 100644
--- a/src/panels/config/hardware/dialog-hardware-available.ts
+++ b/src/panels/config/hardware/dialog-hardware-available.ts
@@ -110,51 +110,50 @@ class DialogHardwareAvailable extends LitElement implements HassDialog {
${devices.map(
- (device) =>
- html`
-
-
-
- ${this.hass.localize(
- "ui.panel.config.hardware.available_hardware.subsystem"
- )}:
-
- ${device.subsystem}
-
-
-
- ${this.hass.localize(
- "ui.panel.config.hardware.available_hardware.device_path"
- )}:
-
- ${device.dev_path}
-
- ${device.by_id
- ? html`
-
-
- ${this.hass.localize(
- "ui.panel.config.hardware.available_hardware.id"
- )}:
-
- ${device.by_id}
-
- `
- : ""}
-
-
- ${this.hass.localize(
- "ui.panel.config.hardware.available_hardware.attributes"
- )}:
-
-
${dump(device.attributes, { indent: 2 })}
-
-
- `
+ (device) => html`
+
+
+
+ ${this.hass.localize(
+ "ui.panel.config.hardware.available_hardware.subsystem"
+ )}:
+
+ ${device.subsystem}
+
+
+
+ ${this.hass.localize(
+ "ui.panel.config.hardware.available_hardware.device_path"
+ )}:
+
+ ${device.dev_path}
+
+ ${device.by_id
+ ? html`
+
+
+ ${this.hass.localize(
+ "ui.panel.config.hardware.available_hardware.id"
+ )}:
+
+ ${device.by_id}
+
+ `
+ : ""}
+
+
+ ${this.hass.localize(
+ "ui.panel.config.hardware.available_hardware.attributes"
+ )}:
+
+
${dump(device.attributes, { indent: 2 })}
+
+
+ `
)}
`;
diff --git a/src/panels/config/helpers/forms/ha-counter-form.ts b/src/panels/config/helpers/forms/ha-counter-form.ts
index 92c844af88..c2b03630ab 100644
--- a/src/panels/config/helpers/forms/ha-counter-form.ts
+++ b/src/panels/config/helpers/forms/ha-counter-form.ts
@@ -53,10 +53,11 @@ class HaCounterForm extends LitElement {
}
public focus() {
- this.updateComplete.then(() =>
- (
- this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
- )?.focus()
+ this.updateComplete.then(
+ () =>
+ (
+ this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
+ )?.focus()
);
}
diff --git a/src/panels/config/helpers/forms/ha-input_boolean-form.ts b/src/panels/config/helpers/forms/ha-input_boolean-form.ts
index 82912b4552..870d83cf22 100644
--- a/src/panels/config/helpers/forms/ha-input_boolean-form.ts
+++ b/src/panels/config/helpers/forms/ha-input_boolean-form.ts
@@ -31,10 +31,11 @@ class HaInputBooleanForm extends LitElement {
}
public focus() {
- this.updateComplete.then(() =>
- (
- this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
- )?.focus()
+ this.updateComplete.then(
+ () =>
+ (
+ this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
+ )?.focus()
);
}
diff --git a/src/panels/config/helpers/forms/ha-input_button-form.ts b/src/panels/config/helpers/forms/ha-input_button-form.ts
index a67b65d5d3..0b8ec14ede 100644
--- a/src/panels/config/helpers/forms/ha-input_button-form.ts
+++ b/src/panels/config/helpers/forms/ha-input_button-form.ts
@@ -31,10 +31,11 @@ class HaInputButtonForm extends LitElement {
}
public focus() {
- this.updateComplete.then(() =>
- (
- this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
- )?.focus()
+ this.updateComplete.then(
+ () =>
+ (
+ this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
+ )?.focus()
);
}
diff --git a/src/panels/config/helpers/forms/ha-input_datetime-form.ts b/src/panels/config/helpers/forms/ha-input_datetime-form.ts
index 61e70d735a..c44fe057c8 100644
--- a/src/panels/config/helpers/forms/ha-input_datetime-form.ts
+++ b/src/panels/config/helpers/forms/ha-input_datetime-form.ts
@@ -45,10 +45,11 @@ class HaInputDateTimeForm extends LitElement {
}
public focus() {
- this.updateComplete.then(() =>
- (
- this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
- )?.focus()
+ this.updateComplete.then(
+ () =>
+ (
+ this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
+ )?.focus()
);
}
diff --git a/src/panels/config/helpers/forms/ha-input_number-form.ts b/src/panels/config/helpers/forms/ha-input_number-form.ts
index f090713f72..0c83b7861c 100644
--- a/src/panels/config/helpers/forms/ha-input_number-form.ts
+++ b/src/panels/config/helpers/forms/ha-input_number-form.ts
@@ -60,10 +60,11 @@ class HaInputNumberForm extends LitElement {
}
public focus() {
- this.updateComplete.then(() =>
- (
- this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
- )?.focus()
+ this.updateComplete.then(
+ () =>
+ (
+ this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
+ )?.focus()
);
}
diff --git a/src/panels/config/helpers/forms/ha-input_select-form.ts b/src/panels/config/helpers/forms/ha-input_select-form.ts
index 378c6aa179..55217382bd 100644
--- a/src/panels/config/helpers/forms/ha-input_select-form.ts
+++ b/src/panels/config/helpers/forms/ha-input_select-form.ts
@@ -43,10 +43,11 @@ class HaInputSelectForm extends LitElement {
}
public focus() {
- this.updateComplete.then(() =>
- (
- this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
- )?.focus()
+ this.updateComplete.then(
+ () =>
+ (
+ this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
+ )?.focus()
);
}
diff --git a/src/panels/config/helpers/forms/ha-input_text-form.ts b/src/panels/config/helpers/forms/ha-input_text-form.ts
index d8ba12b444..90252e2ab0 100644
--- a/src/panels/config/helpers/forms/ha-input_text-form.ts
+++ b/src/panels/config/helpers/forms/ha-input_text-form.ts
@@ -50,10 +50,11 @@ class HaInputTextForm extends LitElement {
}
public focus() {
- this.updateComplete.then(() =>
- (
- this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
- )?.focus()
+ this.updateComplete.then(
+ () =>
+ (
+ this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
+ )?.focus()
);
}
diff --git a/src/panels/config/helpers/forms/ha-schedule-form.ts b/src/panels/config/helpers/forms/ha-schedule-form.ts
index 1656fafb00..5a503eef1b 100644
--- a/src/panels/config/helpers/forms/ha-schedule-form.ts
+++ b/src/panels/config/helpers/forms/ha-schedule-form.ts
@@ -98,10 +98,11 @@ class HaScheduleForm extends LitElement {
}
public focus() {
- this.updateComplete.then(() =>
- (
- this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
- )?.focus()
+ this.updateComplete.then(
+ () =>
+ (
+ this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
+ )?.focus()
);
}
diff --git a/src/panels/config/helpers/forms/ha-timer-form.ts b/src/panels/config/helpers/forms/ha-timer-form.ts
index 1d427ef7af..4108f7fa43 100644
--- a/src/panels/config/helpers/forms/ha-timer-form.ts
+++ b/src/panels/config/helpers/forms/ha-timer-form.ts
@@ -39,10 +39,11 @@ class HaTimerForm extends LitElement {
}
public focus() {
- this.updateComplete.then(() =>
- (
- this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
- )?.focus()
+ this.updateComplete.then(
+ () =>
+ (
+ this.shadowRoot?.querySelector("[dialogInitialFocus]") as HTMLElement
+ )?.focus()
);
}
diff --git a/src/panels/config/helpers/ha-config-helpers.ts b/src/panels/config/helpers/ha-config-helpers.ts
index 41d5f03441..55b9cb1bb7 100644
--- a/src/panels/config/helpers/ha-config-helpers.ts
+++ b/src/panels/config/helpers/ha-config-helpers.ts
@@ -96,13 +96,12 @@ export class HaConfigHelpers extends SubscribeMixin(LitElement) {
filterable: true,
grows: true,
direction: "asc",
- template: (name, item: any) =>
- html`
- ${name}
- ${narrow
- ? html` ${item.entity_id}
`
- : ""}
- `,
+ template: (name, item: any) => html`
+ ${name}
+ ${narrow
+ ? html` ${item.entity_id}
`
+ : ""}
+ `,
},
};
if (!narrow) {
diff --git a/src/panels/config/integrations/ha-config-integration-page.ts b/src/panels/config/integrations/ha-config-integration-page.ts
index 45292826bc..9248d0c805 100644
--- a/src/panels/config/integrations/ha-config-integration-page.ts
+++ b/src/panels/config/integrations/ha-config-integration-page.ts
@@ -410,22 +410,23 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) {
${discoveryFlows.map(
- (flow) => html`
- ${flow.localized_title}
-
- `
+ (flow) =>
+ html`
+ ${flow.localized_title}
+
+ `
)}
`
diff --git a/src/panels/config/integrations/ha-config-integrations-dashboard.ts b/src/panels/config/integrations/ha-config-integrations-dashboard.ts
index 2e60ec2935..77e7ab18fd 100644
--- a/src/panels/config/integrations/ha-config-integrations-dashboard.ts
+++ b/src/panels/config/integrations/ha-config-integrations-dashboard.ts
@@ -150,7 +150,7 @@ class HaConfigIntegrationsDashboard extends SubscribeMixin(LitElement) {
): [
[string, ConfigEntryExtended[]][],
ConfigEntryExtended[],
- ConfigEntryExtended[]
+ ConfigEntryExtended[],
] => {
let filteredConfigEntries: ConfigEntryExtended[];
const ignored: ConfigEntryExtended[] = [];
diff --git a/src/panels/config/integrations/ha-domain-integrations.ts b/src/panels/config/integrations/ha-domain-integrations.ts
index 0a96aa0856..ed4fc8c160 100644
--- a/src/panels/config/integrations/ha-domain-integrations.ts
+++ b/src/panels/config/integrations/ha-domain-integrations.ts
@@ -44,29 +44,30 @@ class HaDomainIntegrations extends LitElement {
${this.hass.localize("ui.panel.config.integrations.discovered")}
${this.flowsInProgress.map(
- (flow) => html`
-
- ${localizeConfigFlowTitle(this.hass.localize, flow)}
+ html`
-
- `
+
+ ${localizeConfigFlowTitle(this.hass.localize, flow)}
+
+ `
)}
${this.integration &&
diff --git a/src/panels/config/integrations/integration-panels/zha/zha-config-dashboard.ts b/src/panels/config/integrations/integration-panels/zha/zha-config-dashboard.ts
index 6fe1e65f6b..13b2f85c66 100644
--- a/src/panels/config/integrations/integration-panels/zha/zha-config-dashboard.ts
+++ b/src/panels/config/integrations/integration-panels/zha/zha-config-dashboard.ts
@@ -223,25 +223,26 @@ class ZHAConfigDashboard extends LitElement {
${this._configuration
? Object.entries(this._configuration.schemas).map(
- ([section, schema]) => html`
-
-
-
- `
+ ([section, schema]) =>
+ html`
+
+
+
+ `
)
: ""}
diff --git a/src/panels/config/integrations/integration-panels/zha/zha-groups-dashboard.ts b/src/panels/config/integrations/integration-panels/zha/zha-groups-dashboard.ts
index 0b756fe41d..b57fbcf6ea 100644
--- a/src/panels/config/integrations/integration-panels/zha/zha-groups-dashboard.ts
+++ b/src/panels/config/integrations/integration-panels/zha/zha-groups-dashboard.ts
@@ -94,8 +94,9 @@ export class ZHAGroupsDashboard extends LitElement {
title: this.hass.localize("ui.panel.config.zha.groups.group_id"),
type: "numeric",
width: "15%",
- template: (groupId: number) =>
- html` ${formatAsPaddedHex(groupId)} `,
+ template: (groupId: number) => html`
+ ${formatAsPaddedHex(groupId)}
+ `,
sortable: true,
},
members: {
diff --git a/src/panels/config/integrations/integration-panels/zwave_js/dialog-zwave_js-add-node.ts b/src/panels/config/integrations/integration-panels/zwave_js/dialog-zwave_js-add-node.ts
index d6a1b460a9..7ffc6554b2 100644
--- a/src/panels/config/integrations/integration-panels/zwave_js/dialog-zwave_js-add-node.ts
+++ b/src/panels/config/integrations/integration-panels/zwave_js/dialog-zwave_js-add-node.ts
@@ -228,27 +228,28 @@ class DialogZWaveJSAddNode extends LitElement {
.sort()
.reverse()
.map(
- (securityClass) => html`${this.hass.localize(
- `ui.panel.config.zwave_js.security_classes.${SecurityClass[securityClass]}.title`
- )}
-
- ${this.hass.localize(
- `ui.panel.config.zwave_js.security_classes.${SecurityClass[securityClass]}.description`
- )}
-
`}
- >
-
+ html`${this.hass.localize(
+ `ui.panel.config.zwave_js.security_classes.${SecurityClass[securityClass]}.title`
+ )}
+
+ ${this.hass.localize(
+ `ui.panel.config.zwave_js.security_classes.${SecurityClass[securityClass]}.description`
+ )}
+
`}
>
-
- `
+
+
+ `
)}
html`
-
- ${this.hass.localize(
- "ui.panel.config.zwave_js.node_config.endpoint",
- "endpoint",
- endpoint
- )}
-
-
- ${configParamEntries
- .sort(([_, paramA], [__, paramB]) =>
- paramA.property !== paramB.property
- ? paramA.property - paramB.property
- : paramA.property_key! - paramB.property_key!
- )
- .map(
- ([id, item]) => html`
- ${this._generateConfigBox(id, item)}
- `
+ ([endpoint, configParamEntries]) =>
+ html`
+
+ ${this.hass.localize(
+ "ui.panel.config.zwave_js.node_config.endpoint",
+ "endpoint",
+ endpoint
)}
-
-
`
+
+
+ ${configParamEntries
+ .sort(([_, paramA], [__, paramB]) =>
+ paramA.property !== paramB.property
+ ? paramA.property - paramB.property
+ : paramA.property_key! - paramB.property_key!
+ )
+ .map(
+ ([id, item]) =>
+ html`
+ ${this._generateConfigBox(id, item)}
+ `
+ )}
+
+ `
)}
diff --git a/src/panels/config/lovelace/dashboards/ha-config-lovelace-dashboards.ts b/src/panels/config/lovelace/dashboards/ha-config-lovelace-dashboards.ts
index 3430181210..7af4aa2587 100644
--- a/src/panels/config/lovelace/dashboards/ha-config-lovelace-dashboards.ts
+++ b/src/panels/config/lovelace/dashboards/ha-config-lovelace-dashboards.ts
@@ -123,12 +123,11 @@ export class HaConfigLovelaceDashboards extends LitElement {
sortable: true,
filterable: true,
width: "20%",
- template: (mode) =>
- html`
- ${this.hass.localize(
- `ui.panel.config.lovelace.dashboards.conf_mode.${mode}`
- ) || mode}
- `,
+ template: (mode) => html`
+ ${this.hass.localize(
+ `ui.panel.config.lovelace.dashboards.conf_mode.${mode}`
+ ) || mode}
+ `,
};
if (dashboards.some((dashboard) => dashboard.filename)) {
columns.filename = {
diff --git a/src/panels/config/lovelace/resources/ha-config-lovelace-resources.ts b/src/panels/config/lovelace/resources/ha-config-lovelace-resources.ts
index 411d288fbe..1d9cc10c8c 100644
--- a/src/panels/config/lovelace/resources/ha-config-lovelace-resources.ts
+++ b/src/panels/config/lovelace/resources/ha-config-lovelace-resources.ts
@@ -58,12 +58,11 @@ export class HaConfigLovelaceRescources extends LitElement {
sortable: true,
filterable: true,
width: "30%",
- template: (type) =>
- html`
- ${this.hass.localize(
- `ui.panel.config.lovelace.resources.types.${type}`
- ) || type}
- `,
+ template: (type) => html`
+ ${this.hass.localize(
+ `ui.panel.config.lovelace.resources.types.${type}`
+ ) || type}
+ `,
},
})
);
diff --git a/src/panels/config/network/supervisor-network.ts b/src/panels/config/network/supervisor-network.ts
index a2cd8ffe30..114649620d 100644
--- a/src/panels/config/network/supervisor-network.ts
+++ b/src/panels/config/network/supervisor-network.ts
@@ -139,25 +139,24 @@ export class HassioNetwork extends LitElement {
${this._accessPoints.accesspoints
.filter((ap) => ap.ssid)
.map(
- (ap) =>
- html`
-
- ${ap.ssid}
-
- ${ap.mac} -
- ${this.hass.localize(
- "ui.panel.config.network.supervisor.signal_strength"
- )}:
- ${ap.signal}
-
-
- `
+ (ap) => html`
+
+ ${ap.ssid}
+
+ ${ap.mac} -
+ ${this.hass.localize(
+ "ui.panel.config.network.supervisor.signal_strength"
+ )}:
+ ${ap.signal}
+
+
+ `
)}
`
diff --git a/src/panels/config/repairs/dialog-system-information.ts b/src/panels/config/repairs/dialog-system-information.ts
index bc3b1e0181..c96ac4c574 100644
--- a/src/panels/config/repairs/dialog-system-information.ts
+++ b/src/panels/config/repairs/dialog-system-information.ts
@@ -305,13 +305,11 @@ class DialogSystemInformation extends LitElement {
const sections: TemplateResult[] = [];
if (!this._systemInfo) {
- sections.push(
- html`
-
-
-
- `
- );
+ sections.push(html`
+
+
+
+ `);
} else {
const domains = Object.keys(this._systemInfo).sort(sortKeys);
for (const domain of domains) {
@@ -371,24 +369,22 @@ class DialogSystemInformation extends LitElement {
`);
}
if (domain !== "homeassistant") {
- sections.push(
- html`
-
- `
- );
+ sections.push(html`
+
+ `);
}
sections.push(html`
diff --git a/src/panels/config/scene/ha-scene-dashboard.ts b/src/panels/config/scene/ha-scene-dashboard.ts
index df9f6be040..3a7a7790b8 100644
--- a/src/panels/config/scene/ha-scene-dashboard.ts
+++ b/src/panels/config/scene/ha-scene-dashboard.ts
@@ -90,8 +90,9 @@ class HaSceneDashboard extends LitElement {
"ui.panel.config.scene.picker.headers.state"
),
type: "icon",
- template: (_, scene) =>
- html` `,
+ template: (_, scene) => html`
+
+ `,
},
name: {
title: this.hass.localize(
@@ -151,50 +152,49 @@ class HaSceneDashboard extends LitElement {
title: "",
width: "72px",
type: "overflow-menu",
- template: (_: string, scene: any) =>
- html`
- this._showInfo(scene),
- },
- {
- path: mdiPlay,
- label: this.hass.localize(
- "ui.panel.config.scene.picker.activate"
- ),
- action: () => this._activateScene(scene),
- },
- {
- divider: true,
- },
- {
- path: mdiContentDuplicate,
- label: this.hass.localize(
- "ui.panel.config.scene.picker.duplicate"
- ),
- action: () => this._duplicate(scene),
- disabled: !scene.attributes.id,
- },
- {
- label: this.hass.localize(
- "ui.panel.config.scene.picker.delete"
- ),
- path: mdiDelete,
- action: () => this._deleteConfirm(scene),
- warning: scene.attributes.id,
- disabled: !scene.attributes.id,
- },
- ]}
- >
-
- `,
+ template: (_: string, scene: any) => html`
+ this._showInfo(scene),
+ },
+ {
+ path: mdiPlay,
+ label: this.hass.localize(
+ "ui.panel.config.scene.picker.activate"
+ ),
+ action: () => this._activateScene(scene),
+ },
+ {
+ divider: true,
+ },
+ {
+ path: mdiContentDuplicate,
+ label: this.hass.localize(
+ "ui.panel.config.scene.picker.duplicate"
+ ),
+ action: () => this._duplicate(scene),
+ disabled: !scene.attributes.id,
+ },
+ {
+ label: this.hass.localize(
+ "ui.panel.config.scene.picker.delete"
+ ),
+ path: mdiDelete,
+ action: () => this._deleteConfirm(scene),
+ warning: scene.attributes.id,
+ disabled: !scene.attributes.id,
+ },
+ ]}
+ >
+
+ `,
};
return columns;
diff --git a/src/panels/config/scene/ha-scene-editor.ts b/src/panels/config/scene/ha-scene-editor.ts
index 4a93bb65e7..ffb3b25c42 100644
--- a/src/panels/config/scene/ha-scene-editor.ts
+++ b/src/panels/config/scene/ha-scene-editor.ts
@@ -324,43 +324,42 @@ export class HaSceneEditor extends SubscribeMixin(
${devices.map(
- (device) =>
- html`
-
-
- ${device.entities.map((entityId) => {
- const entityStateObj = this.hass.states[entityId];
- if (!entityStateObj) {
- return nothing;
- }
- return html`
-
-
-
- ${computeStateName(entityStateObj)}
-
-
- `;
- })}
-
- `
+ (device) => html`
+
+
+ ${device.entities.map((entityId) => {
+ const entityStateObj = this.hass.states[entityId];
+ if (!entityStateObj) {
+ return nothing;
+ }
+ return html`
+
+
+
+ ${computeStateName(entityStateObj)}
+
+
+ `;
+ })}
+
+ `
)}
- html`
- this._showInfo(script),
- },
- {
- path: mdiPlay,
- label: this.hass.localize("ui.panel.config.script.picker.run"),
- action: () => this._runScript(script),
- },
- {
- path: mdiTransitConnection,
- label: this.hass.localize(
- "ui.panel.config.script.picker.show_trace"
- ),
- action: () => this._showTrace(script),
- },
- {
- divider: true,
- },
- {
- path: mdiContentDuplicate,
- label: this.hass.localize(
- "ui.panel.config.script.picker.duplicate"
- ),
- action: () => this._duplicate(script),
- },
- {
- label: this.hass.localize(
- "ui.panel.config.script.picker.delete"
- ),
- path: mdiDelete,
- action: () => this._deleteConfirm(script),
- warning: true,
- },
- ]}
- >
-
- `,
+ template: (_: string, script: any) => html`
+ this._showInfo(script),
+ },
+ {
+ path: mdiPlay,
+ label: this.hass.localize("ui.panel.config.script.picker.run"),
+ action: () => this._runScript(script),
+ },
+ {
+ path: mdiTransitConnection,
+ label: this.hass.localize(
+ "ui.panel.config.script.picker.show_trace"
+ ),
+ action: () => this._showTrace(script),
+ },
+ {
+ divider: true,
+ },
+ {
+ path: mdiContentDuplicate,
+ label: this.hass.localize(
+ "ui.panel.config.script.picker.duplicate"
+ ),
+ action: () => this._duplicate(script),
+ },
+ {
+ label: this.hass.localize("ui.panel.config.script.picker.delete"),
+ path: mdiDelete,
+ action: () => this._deleteConfirm(script),
+ warning: true,
+ },
+ ]}
+ >
+
+ `,
};
return columns;
diff --git a/src/panels/config/tags/ha-config-tags.ts b/src/panels/config/tags/ha-config-tags.ts
index e566aff75d..61a61c8af7 100644
--- a/src/panels/config/tags/ha-config-tags.ts
+++ b/src/panels/config/tags/ha-config-tags.ts
@@ -70,18 +70,19 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
sortable: true,
filterable: true,
grows: true,
- template: (name, tag: any) => html`${name}
- ${narrow
- ? html`
- ${tag.last_scanned_datetime
- ? html``
- : this.hass.localize("ui.panel.config.tag.never_scanned")}
-
`
- : ""}`,
+ template: (name, tag: any) =>
+ html`${name}
+ ${narrow
+ ? html`
+ ${tag.last_scanned_datetime
+ ? html``
+ : this.hass.localize("ui.panel.config.tag.never_scanned")}
+
`
+ : ""}`,
},
};
if (!narrow) {
@@ -106,33 +107,38 @@ export class HaConfigTags extends SubscribeMixin(LitElement) {
title: "",
label: this.hass.localize("ui.panel.config.tag.headers.write"),
type: "icon-button",
- template: (_write, tag: any) => html` `,
+ template: (_write, tag: any) =>
+ html` `,
};
}
columns.automation = {
title: "",
type: "icon-button",
- template: (_automation, tag: any) => html` `,
+ template: (_automation, tag: any) =>
+ html` `,
};
columns.edit = {
title: "",
type: "icon-button",
- template: (_settings, tag: any) => html` `,
+ template: (_settings, tag: any) =>
+ html` `,
};
return columns;
}
diff --git a/src/panels/config/users/ha-config-users.ts b/src/panels/config/users/ha-config-users.ts
index 54c949f7d7..a125ef8b81 100644
--- a/src/panels/config/users/ha-config-users.ts
+++ b/src/panels/config/users/ha-config-users.ts
@@ -77,8 +77,9 @@ export class HaConfigUsers extends LitElement {
width: "20%",
direction: "asc",
hidden: narrow,
- template: (groupIds: User["group_ids"]) =>
- html` ${localize(`groups.${groupIds[0]}`)} `,
+ template: (groupIds: User["group_ids"]) => html`
+ ${localize(`groups.${groupIds[0]}`)}
+ `,
},
is_active: {
title: this.hass.localize(
diff --git a/src/panels/config/voice-assistants/debug/assist-render-pipeline-run.ts b/src/panels/config/voice-assistants/debug/assist-render-pipeline-run.ts
index f30d5cf5d7..14da1d1e7d 100644
--- a/src/panels/config/voice-assistants/debug/assist-render-pipeline-run.ts
+++ b/src/panels/config/voice-assistants/debug/assist-render-pipeline-run.ts
@@ -101,13 +101,12 @@ const renderProgress = (
const renderData = (data: Record, keys: Record) =>
Object.entries(keys).map(
- ([key, label]) =>
- html`
-
-
${label}
-
${data[key]}
-
- `
+ ([key, label]) => html`
+
+
${label}
+
${data[key]}
+
+ `
);
const dataMinusKeysRender = (
diff --git a/src/panels/config/voice-assistants/ha-config-voice-assistants-expose.ts b/src/panels/config/voice-assistants/ha-config-voice-assistants-expose.ts
index 98363e9bed..e6f171f367 100644
--- a/src/panels/config/voice-assistants/ha-config-voice-assistants-expose.ts
+++ b/src/panels/config/voice-assistants/ha-config-voice-assistants-expose.ts
@@ -150,11 +150,10 @@ export class VoiceAssistantsExpose extends LitElement {
filterable: true,
direction: "asc",
grows: true,
- template: (name, entry) =>
- html`
- ${name}
- ${entry.entity_id}
- `,
+ template: (name, entry) => html`
+ ${name}
+ ${entry.entity_id}
+ `,
},
area: {
title: this.hass.localize(
diff --git a/src/panels/developer-tools/event/event-subscribe-card.ts b/src/panels/developer-tools/event/event-subscribe-card.ts
index d1d7afc0aa..d6fc035474 100644
--- a/src/panels/developer-tools/event/event-subscribe-card.ts
+++ b/src/panels/developer-tools/event/event-subscribe-card.ts
@@ -70,25 +70,24 @@ class EventSubscribeCard extends LitElement {
${repeat(
this._events,
(event) => event.id,
- (event) =>
- html`
-
- ${this.hass!.localize(
- "ui.panel.developer-tools.tabs.events.event_fired",
- "name",
- event.id
- )}
- ${formatTime(
- new Date(event.event.time_fired),
- this.hass!.locale,
- this.hass!.config
- )}:
-
-
- `
+ (event) => html`
+
+ ${this.hass!.localize(
+ "ui.panel.developer-tools.tabs.events.event_fired",
+ "name",
+ event.id
+ )}
+ ${formatTime(
+ new Date(event.event.time_fired),
+ this.hass!.locale,
+ this.hass!.config
+ )}:
+
+
+ `
)}
diff --git a/src/panels/developer-tools/service/developer-tools-service.ts b/src/panels/developer-tools/service/developer-tools-service.ts
index 66da2d5f0e..d0600df766 100644
--- a/src/panels/developer-tools/service/developer-tools-service.ts
+++ b/src/panels/developer-tools/service/developer-tools-service.ts
@@ -66,8 +66,8 @@ class HaPanelDevService extends LitElement {
data: {},
};
if (this._yamlMode) {
- this.updateComplete.then(() =>
- this._yamlEditor?.setValue(this._serviceData)
+ this.updateComplete.then(
+ () => this._yamlEditor?.setValue(this._serviceData)
);
}
} else if (!this._serviceData?.service) {
@@ -79,8 +79,8 @@ class HaPanelDevService extends LitElement {
data: {},
};
if (this._yamlMode) {
- this.updateComplete.then(() =>
- this._yamlEditor?.setValue(this._serviceData)
+ this.updateComplete.then(
+ () => this._yamlEditor?.setValue(this._serviceData)
);
}
}
@@ -248,11 +248,12 @@ class HaPanelDevService extends LitElement {
? fields
: this._filterSelectorFields(fields)
).map(
- (field) => html`
- ${field.key} |
- ${field.description} |
- ${field.example} |
-
`
+ (field) =>
+ html`
+ ${field.key} |
+ ${field.description} |
+ ${field.example} |
+
`
)}
${this._yamlMode
diff --git a/src/panels/developer-tools/template/developer-tools-template.ts b/src/panels/developer-tools/template/developer-tools-template.ts
index fe0a0c158c..c7618b38d5 100644
--- a/src/panels/developer-tools/template/developer-tools-template.ts
+++ b/src/panels/developer-tools/template/developer-tools-template.ts
@@ -202,30 +202,28 @@ class HaPanelDevTemplate extends LitElement {
${this._templateResult.listeners.domains
.sort()
.map(
- (domain) =>
- html`
-
- ${this.hass.localize(
- "ui.panel.developer-tools.tabs.templates.domain"
- )}: ${domain}
-
- `
+ (domain) => html`
+
+ ${this.hass.localize(
+ "ui.panel.developer-tools.tabs.templates.domain"
+ )}: ${domain}
+
+ `
)}
${this._templateResult.listeners.entities
.sort()
.map(
- (entity_id) =>
- html`
-
- ${this.hass.localize(
- "ui.panel.developer-tools.tabs.templates.entity"
- )}: ${entity_id}
-
- `
+ (entity_id) => html`
+
+ ${this.hass.localize(
+ "ui.panel.developer-tools.tabs.templates.entity"
+ )}: ${entity_id}
+
+ `
)}
`
diff --git a/src/panels/developer-tools/yaml_configuration/developer-yaml-config.ts b/src/panels/developer-tools/yaml_configuration/developer-yaml-config.ts
index 8b67a7e7a5..50bc2e2d60 100644
--- a/src/panels/developer-tools/yaml_configuration/developer-yaml-config.ts
+++ b/src/panels/developer-tools/yaml_configuration/developer-yaml-config.ts
@@ -142,24 +142,23 @@ export class DeveloperYamlConfig extends LitElement {
${this._reloadableDomains.map(
- (domain) =>
- html`
-
- ${this.hass.localize(
- `ui.panel.developer-tools.tabs.yaml.section.reloading.${domain}`
- ) ||
- this.hass.localize(
- "ui.panel.developer-tools.tabs.yaml.section.reloading.reload",
- "domain",
- domainToName(this.hass.localize, domain)
- )}
-
-
- `
+ (domain) => html`
+
+ ${this.hass.localize(
+ `ui.panel.developer-tools.tabs.yaml.section.reloading.${domain}`
+ ) ||
+ this.hass.localize(
+ "ui.panel.developer-tools.tabs.yaml.section.reloading.reload",
+ "domain",
+ domainToName(this.hass.localize, domain)
+ )}
+
+
+ `
)}
diff --git a/src/panels/lovelace/cards/energy/hui-energy-distribution-card.ts b/src/panels/lovelace/cards/energy/hui-energy-distribution-card.ts
index 378f6e7a5f..e621bdea72 100644
--- a/src/panels/lovelace/cards/energy/hui-energy-distribution-card.ts
+++ b/src/panels/lovelace/cards/energy/hui-energy-distribution-card.ts
@@ -446,8 +446,8 @@ class HuiEnergyDistrubutionCard
cy="40"
r="38"
stroke-dasharray="${homeSolarCircumference} ${
- CIRCLE_CIRCUMFERENCE - homeSolarCircumference
- }"
+ CIRCLE_CIRCUMFERENCE - homeSolarCircumference
+ }"
shape-rendering="geometricPrecision"
stroke-dashoffset="-${
CIRCLE_CIRCUMFERENCE - homeSolarCircumference
@@ -461,8 +461,8 @@ class HuiEnergyDistrubutionCard
cy="40"
r="38"
stroke-dasharray="${homeBatteryCircumference} ${
- CIRCLE_CIRCUMFERENCE - homeBatteryCircumference
- }"
+ CIRCLE_CIRCUMFERENCE - homeBatteryCircumference
+ }"
stroke-dashoffset="-${
CIRCLE_CIRCUMFERENCE -
homeBatteryCircumference -
@@ -478,8 +478,8 @@ class HuiEnergyDistrubutionCard
cy="40"
r="38"
stroke-dasharray="${homeLowCarbonCircumference} ${
- CIRCLE_CIRCUMFERENCE - homeLowCarbonCircumference
- }"
+ CIRCLE_CIRCUMFERENCE - homeLowCarbonCircumference
+ }"
stroke-dashoffset="-${
CIRCLE_CIRCUMFERENCE -
homeLowCarbonCircumference -
@@ -611,8 +611,8 @@ class HuiEnergyDistrubutionCard
id="return"
class="return"
d="M${hasBattery ? 45 : 47},0 v15 c0,${
- hasBattery ? "35 -10,30 -30,30" : "40 -10,35 -30,35"
- } h-20"
+ hasBattery ? "35 -10,30 -30,30" : "40 -10,35 -30,35"
+ } h-20"
vector-effect="non-scaling-stroke"
> `
: ""}
@@ -621,8 +621,8 @@ class HuiEnergyDistrubutionCard
id="solar"
class="solar"
d="M${hasBattery ? 55 : 53},0 v15 c0,${
- hasBattery ? "35 10,30 30,30" : "40 10,35 30,35"
- } h20"
+ hasBattery ? "35 10,30 30,30" : "40 10,35 30,35"
+ } h20"
vector-effect="non-scaling-stroke"
>`
: ""}
@@ -1024,7 +1024,9 @@ class HuiEnergyDistrubutionCard
}
.circle svg circle {
animation: rotate-in 0.6s ease-in;
- transition: stroke-dashoffset 0.4s, stroke-dasharray 0.4s;
+ transition:
+ stroke-dashoffset 0.4s,
+ stroke-dasharray 0.4s;
fill: none;
}
@keyframes rotate-in {
diff --git a/src/panels/lovelace/cards/energy/hui-energy-sources-table-card.ts b/src/panels/lovelace/cards/energy/hui-energy-sources-table-card.ts
index a6570a4485..734a4067ae 100644
--- a/src/panels/lovelace/cards/energy/hui-energy-sources-table-card.ts
+++ b/src/panels/lovelace/cards/energy/hui-energy-sources-table-card.ts
@@ -452,217 +452,220 @@ export class HuiEnergySourcesTableCard
`
: ""}
${types.grid?.map(
- (source) => html`${source.flow_from.map((flow, idx) => {
- const energy =
- calculateStatisticSumGrowth(
- this._data!.stats[flow.stat_energy_from]
- ) || 0;
- totalGrid += energy;
-
- const compareEnergy =
- (compare &&
+ (source) =>
+ html`${source.flow_from.map((flow, idx) => {
+ const energy =
calculateStatisticSumGrowth(
- this._data!.statsCompare[flow.stat_energy_from]
- )) ||
- 0;
- totalGridCompare += compareEnergy;
+ this._data!.stats[flow.stat_energy_from]
+ ) || 0;
+ totalGrid += energy;
- const cost_stat =
- flow.stat_cost ||
- this._data!.info.cost_sensors[flow.stat_energy_from];
- const cost = cost_stat
- ? calculateStatisticSumGrowth(
- this._data!.stats[cost_stat]
- ) || 0
- : null;
- if (cost !== null) {
- totalGridCost += cost;
- }
+ const compareEnergy =
+ (compare &&
+ calculateStatisticSumGrowth(
+ this._data!.statsCompare[flow.stat_energy_from]
+ )) ||
+ 0;
+ totalGridCompare += compareEnergy;
- const costCompare =
- compare && cost_stat
+ const cost_stat =
+ flow.stat_cost ||
+ this._data!.info.cost_sensors[flow.stat_energy_from];
+ const cost = cost_stat
? calculateStatisticSumGrowth(
- this._data!.statsCompare[cost_stat]
+ this._data!.stats[cost_stat]
) || 0
: null;
- if (costCompare !== null) {
- totalGridCostCompare += costCompare;
- }
+ if (cost !== null) {
+ totalGridCost += cost;
+ }
- const modifiedColor =
- idx > 0
- ? this.hass.themes.darkMode
- ? labBrighten(rgb2lab(hex2rgb(consumptionColor)), idx)
- : labDarken(rgb2lab(hex2rgb(consumptionColor)), idx)
- : undefined;
- const color = modifiedColor
- ? rgb2hex(lab2rgb(modifiedColor))
- : consumptionColor;
+ const costCompare =
+ compare && cost_stat
+ ? calculateStatisticSumGrowth(
+ this._data!.statsCompare[cost_stat]
+ ) || 0
+ : null;
+ if (costCompare !== null) {
+ totalGridCostCompare += costCompare;
+ }
- return html`
-
-
- |
-
- ${getStatisticLabel(
- this.hass,
- flow.stat_energy_from,
- this._data?.statsMetadata[flow.stat_energy_from]
- )}
- |
- ${compare
- ? html` 0
+ ? this.hass.themes.darkMode
+ ? labBrighten(rgb2lab(hex2rgb(consumptionColor)), idx)
+ : labDarken(rgb2lab(hex2rgb(consumptionColor)), idx)
+ : undefined;
+ const color = modifiedColor
+ ? rgb2hex(lab2rgb(modifiedColor))
+ : consumptionColor;
+
+ return html` |
+
+
+ |
+
+ ${getStatisticLabel(
+ this.hass,
+ flow.stat_energy_from,
+ this._data?.statsMetadata[flow.stat_energy_from]
+ )}
+ |
+ ${compare
+ ? html`
+ ${formatNumber(compareEnergy, this.hass.locale)}
+ kWh
+ |
+ ${showCosts
+ ? html`
+ ${costCompare !== null
+ ? formatNumber(
+ costCompare,
+ this.hass.locale,
+ {
+ style: "currency",
+ currency: this.hass.config.currency!,
+ }
+ )
+ : ""}
+ | `
+ : ""}`
+ : ""}
+
+ ${formatNumber(energy, this.hass.locale)} kWh
+ |
+ ${showCosts
+ ? html`
- ${formatNumber(compareEnergy, this.hass.locale)} kWh
- |
- ${showCosts
- ? html`
- ${costCompare !== null
- ? formatNumber(
- costCompare,
- this.hass.locale,
- {
- style: "currency",
- currency: this.hass.config.currency!,
- }
- )
- : ""}
- | `
- : ""}`
- : ""}
-
- ${formatNumber(energy, this.hass.locale)} kWh
- |
- ${showCosts
- ? html`
- ${cost !== null
- ? formatNumber(cost, this.hass.locale, {
- style: "currency",
- currency: this.hass.config.currency!,
- })
- : ""}
- | `
- : ""}
-
`;
- })}
- ${source.flow_to.map((flow, idx) => {
- const energy =
- (calculateStatisticSumGrowth(
- this._data!.stats[flow.stat_energy_to]
- ) || 0) * -1;
- totalGrid += energy;
- const cost_stat =
- flow.stat_compensation ||
- this._data!.info.cost_sensors[flow.stat_energy_to];
- const cost = cost_stat
- ? (calculateStatisticSumGrowth(
- this._data!.stats[cost_stat]
- ) || 0) * -1
- : null;
- if (cost !== null) {
- totalGridCost += cost;
- }
-
- const energyCompare =
- ((compare &&
- calculateStatisticSumGrowth(
- this._data!.statsCompare[flow.stat_energy_to]
- )) ||
- 0) * -1;
- totalGridCompare += energyCompare;
-
- const costCompare =
- compare && cost_stat
+ ${cost !== null
+ ? formatNumber(cost, this.hass.locale, {
+ style: "currency",
+ currency: this.hass.config.currency!,
+ })
+ : ""}
+ `
+ : ""}
+ `;
+ })}
+ ${source.flow_to.map((flow, idx) => {
+ const energy =
+ (calculateStatisticSumGrowth(
+ this._data!.stats[flow.stat_energy_to]
+ ) || 0) * -1;
+ totalGrid += energy;
+ const cost_stat =
+ flow.stat_compensation ||
+ this._data!.info.cost_sensors[flow.stat_energy_to];
+ const cost = cost_stat
? (calculateStatisticSumGrowth(
- this._data!.statsCompare[cost_stat]
+ this._data!.stats[cost_stat]
) || 0) * -1
: null;
- if (costCompare !== null) {
- totalGridCostCompare += costCompare;
- }
+ if (cost !== null) {
+ totalGridCost += cost;
+ }
- const modifiedColor =
- idx > 0
- ? this.hass.themes.darkMode
- ? labBrighten(rgb2lab(hex2rgb(returnColor)), idx)
- : labDarken(rgb2lab(hex2rgb(returnColor)), idx)
- : undefined;
- const color = modifiedColor
- ? rgb2hex(lab2rgb(modifiedColor))
- : returnColor;
+ const energyCompare =
+ ((compare &&
+ calculateStatisticSumGrowth(
+ this._data!.statsCompare[flow.stat_energy_to]
+ )) ||
+ 0) * -1;
+ totalGridCompare += energyCompare;
- return html`
-
-
- |
-
- ${getStatisticLabel(
- this.hass,
- flow.stat_energy_to,
- this._data?.statsMetadata[flow.stat_energy_to]
- )}
- |
- ${compare
- ? html` 0
+ ? this.hass.themes.darkMode
+ ? labBrighten(rgb2lab(hex2rgb(returnColor)), idx)
+ : labDarken(rgb2lab(hex2rgb(returnColor)), idx)
+ : undefined;
+ const color = modifiedColor
+ ? rgb2hex(lab2rgb(modifiedColor))
+ : returnColor;
+
+ return html` |
+
+
+ |
+
+ ${getStatisticLabel(
+ this.hass,
+ flow.stat_energy_to,
+ this._data?.statsMetadata[flow.stat_energy_to]
+ )}
+ |
+ ${compare
+ ? html`
+ ${formatNumber(energyCompare, this.hass.locale)}
+ kWh
+ |
+ ${showCosts
+ ? html`
+ ${costCompare !== null
+ ? formatNumber(
+ costCompare,
+ this.hass.locale,
+ {
+ style: "currency",
+ currency: this.hass.config.currency!,
+ }
+ )
+ : ""}
+ | `
+ : ""}`
+ : ""}
+
+ ${formatNumber(energy, this.hass.locale)} kWh
+ |
+ ${showCosts
+ ? html`
- ${formatNumber(energyCompare, this.hass.locale)} kWh
- |
- ${showCosts
- ? html`
- ${costCompare !== null
- ? formatNumber(
- costCompare,
- this.hass.locale,
- {
- style: "currency",
- currency: this.hass.config.currency!,
- }
- )
- : ""}
- | `
- : ""}`
- : ""}
-
- ${formatNumber(energy, this.hass.locale)} kWh
- |
- ${showCosts
- ? html`
- ${cost !== null
- ? formatNumber(cost, this.hass.locale, {
- style: "currency",
- currency: this.hass.config.currency!,
- })
- : ""}
- | `
- : ""}
-
`;
- })}`
+ ${cost !== null
+ ? formatNumber(cost, this.hass.locale, {
+ style: "currency",
+ currency: this.hass.config.currency!,
+ })
+ : ""}
+ `
+ : ""}
+ `;
+ })}`
)}
${types.grid
? html`
diff --git a/src/panels/lovelace/cards/hui-media-control-card.ts b/src/panels/lovelace/cards/hui-media-control-card.ts
index aa8074d220..fcd449cdf0 100644
--- a/src/panels/lovelace/cards/hui-media-control-card.ts
+++ b/src/panels/lovelace/cards/hui-media-control-card.ts
@@ -609,7 +609,9 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
right: 0;
opacity: 1;
- transition: width 0.8s, opacity 0.8s linear 0.8s;
+ transition:
+ width 0.8s,
+ opacity 0.8s linear 0.8s;
}
.image {
@@ -621,8 +623,12 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
right: 0;
height: 100%;
opacity: 1;
- transition: width 0.8s, background-image 0.8s, background-color 0.8s,
- background-size 0.8s, opacity 0.8s linear 0.8s;
+ transition:
+ width 0.8s,
+ background-image 0.8s,
+ background-color 0.8s,
+ background-size 0.8s,
+ opacity 0.8s linear 0.8s;
}
.no-image .image {
@@ -640,13 +646,17 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
height: 100%;
background-image: url("/static/images/card_media_player_bg.png");
width: 50%;
- transition: opacity 0.8s, background-color 0.8s;
+ transition:
+ opacity 0.8s,
+ background-color 0.8s;
}
.off .image,
.off .color-gradient {
opacity: 0;
- transition: opacity 0s, width 0.8s;
+ transition:
+ opacity 0s,
+ width 0.8s;
width: 0;
}
diff --git a/src/panels/lovelace/cards/hui-shopping-list-card.ts b/src/panels/lovelace/cards/hui-shopping-list-card.ts
index 0a6b08d6d3..1b7dc10a56 100644
--- a/src/panels/lovelace/cards/hui-shopping-list-card.ts
+++ b/src/panels/lovelace/cards/hui-shopping-list-card.ts
@@ -147,10 +147,12 @@ class HuiShoppingListCard
${this._reordering
? html`
- ${guard([this._uncheckedItems, this._renderEmptySortable], () =>
- this._renderEmptySortable
- ? ""
- : this._renderItems(this._uncheckedItems!)
+ ${guard(
+ [this._uncheckedItems, this._renderEmptySortable],
+ () =>
+ this._renderEmptySortable
+ ? ""
+ : this._renderItems(this._uncheckedItems!)
)}
`
@@ -178,23 +180,22 @@ class HuiShoppingListCard
${repeat(
this._checkedItems!,
(item) => item.id,
- (item) =>
- html`
-
-
-
-
- `
+ (item) => html`
+
+
+
+
+ `
)}
`
: ""}
@@ -207,35 +208,34 @@ class HuiShoppingListCard
${repeat(
items,
(item) => item.id,
- (item) =>
- html`
-
-
-
- ${this._reordering
- ? html`
-
-
- `
- : ""}
-
- `
+ (item) => html`
+
+
+
+ ${this._reordering
+ ? html`
+
+
+ `
+ : ""}
+
+ `
)}
`;
}
diff --git a/src/panels/lovelace/cards/hui-tile-card.ts b/src/panels/lovelace/cards/hui-tile-card.ts
index 3471b6348b..f9b10c65a9 100644
--- a/src/panels/lovelace/cards/hui-tile-card.ts
+++ b/src/panels/lovelace/cards/hui-tile-card.ts
@@ -453,7 +453,9 @@ export class HuiTileCard extends LitElement implements LovelaceCard {
height: 100%;
z-index: 0;
overflow: hidden;
- transition: box-shadow 180ms ease-in-out, border-color 180ms ease-in-out;
+ transition:
+ box-shadow 180ms ease-in-out,
+ border-color 180ms ease-in-out;
}
ha-card.active {
--tile-color: var(--state-icon-color);
diff --git a/src/panels/lovelace/common/process-config-entities.ts b/src/panels/lovelace/common/process-config-entities.ts
index 1d4519ea5f..49ce41ad27 100644
--- a/src/panels/lovelace/common/process-config-entities.ts
+++ b/src/panels/lovelace/common/process-config-entities.ts
@@ -3,7 +3,7 @@ import { isValidEntityId } from "../../../common/entity/valid_entity_id";
import { EntityConfig, LovelaceRowConfig } from "../entity-rows/types";
export const processConfigEntities = <
- T extends EntityConfig | LovelaceRowConfig
+ T extends EntityConfig | LovelaceRowConfig,
>(
entities: Array,
checkEntityId = true
diff --git a/src/panels/lovelace/components/hui-energy-period-selector.ts b/src/panels/lovelace/components/hui-energy-period-selector.ts
index 9cd6666cd3..dd923698ff 100644
--- a/src/panels/lovelace/components/hui-energy-period-selector.ts
+++ b/src/panels/lovelace/components/hui-energy-period-selector.ts
@@ -343,7 +343,9 @@ export class HuiEnergyPeriodSelector extends SubscribeMixin(LitElement) {
opacity: 0;
pointer-events: none;
content: "";
- transition: opacity 15ms linear, background-color 15ms linear;
+ transition:
+ opacity 15ms linear,
+ background-color 15ms linear;
opacity: var(--mdc-icon-button-ripple-opacity, 0.12);
}
ha-icon-button.active::before {
diff --git a/src/panels/lovelace/create-element/create-element-base.ts b/src/panels/lovelace/create-element/create-element-base.ts
index 792b8fd2e3..a92d49ba8b 100644
--- a/src/panels/lovelace/create-element/create-element-base.ts
+++ b/src/panels/lovelace/create-element/create-element-base.ts
@@ -185,7 +185,7 @@ export const createLovelaceElement = (
};
export const tryCreateLovelaceElement = <
- T extends keyof CreateElementConfigTypes
+ T extends keyof CreateElementConfigTypes,
>(
tagSuffix: T,
config: CreateElementConfigTypes[T]["config"],
@@ -246,7 +246,7 @@ export const tryCreateLovelaceElement = <
};
export const getLovelaceElementClass = async <
- T extends keyof CreateElementConfigTypes
+ T extends keyof CreateElementConfigTypes,
>(
type: string,
tagSuffix: T,
diff --git a/src/panels/lovelace/editor/config-elements/hui-statistics-graph-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-statistics-graph-card-editor.ts
index 8cb52183c5..3ed3b6d8af 100644
--- a/src/panels/lovelace/editor/config-elements/hui-statistics-graph-card-editor.ts
+++ b/src/panels/lovelace/editor/config-elements/hui-statistics-graph-card-editor.ts
@@ -246,10 +246,11 @@ export class HuiStatisticsGraphCardEditor
);
const configured_stat_types = this._config!.stat_types
? ensureArray(this._config.stat_types)
- : stat_types.filter((stat_type) =>
- this._metaDatas?.some((metaData) =>
- statisticsMetaHasType(metaData, stat_type)
- )
+ : stat_types.filter(
+ (stat_type) =>
+ this._metaDatas?.some((metaData) =>
+ statisticsMetaHasType(metaData, stat_type)
+ )
);
const data = {
chart_type: "line",
diff --git a/src/panels/lovelace/editor/header-footer-editor/hui-dialog-create-headerfooter.ts b/src/panels/lovelace/editor/header-footer-editor/hui-dialog-create-headerfooter.ts
index d1b5423e5e..092dd02134 100644
--- a/src/panels/lovelace/editor/header-footer-editor/hui-dialog-create-headerfooter.ts
+++ b/src/panels/lovelace/editor/header-footer-editor/hui-dialog-create-headerfooter.ts
@@ -56,26 +56,25 @@ export class HuiCreateDialogHeaderFooter
>
${headerFooterElements.map(
- (headerFooter, index) =>
- html`
-
-
-
- ${this.hass!.localize(
- `ui.panel.lovelace.editor.header-footer.types.${headerFooter.type}.name`
- )}
-
-
- `
+ (headerFooter, index) => html`
+
+
+
+ ${this.hass!.localize(
+ `ui.panel.lovelace.editor.header-footer.types.${headerFooter.type}.name`
+ )}
+
+
+ `
)}
diff --git a/src/panels/lovelace/entity-rows/hui-select-entity-row.ts b/src/panels/lovelace/entity-rows/hui-select-entity-row.ts
index 2d7d3c51e1..31b51927c1 100644
--- a/src/panels/lovelace/entity-rows/hui-select-entity-row.ts
+++ b/src/panels/lovelace/entity-rows/hui-select-entity-row.ts
@@ -75,19 +75,18 @@ class HuiSelectEntityRow extends LitElement implements LovelaceRow {
>
${stateObj.attributes.options
? stateObj.attributes.options.map(
- (option) =>
- html`
-
- ${computeStateDisplay(
- this.hass!.localize,
- stateObj,
- this.hass!.locale,
- this.hass!.config,
- this.hass!.entities,
- option
- )}
-
- `
+ (option) => html`
+
+ ${computeStateDisplay(
+ this.hass!.localize,
+ stateObj,
+ this.hass!.locale,
+ this.hass!.config,
+ this.hass!.entities,
+ option
+ )}
+
+ `
)
: ""}
diff --git a/src/panels/lovelace/strategies/get-strategy.ts b/src/panels/lovelace/strategies/get-strategy.ts
index 4e13f6ef36..59ae47b141 100644
--- a/src/panels/lovelace/strategies/get-strategy.ts
+++ b/src/panels/lovelace/strategies/get-strategy.ts
@@ -32,7 +32,7 @@ const strategies: Record<
};
const getLovelaceStrategy = async <
- T extends LovelaceDashboardStrategy | LovelaceViewStrategy
+ T extends LovelaceDashboardStrategy | LovelaceViewStrategy,
>(
strategyType: string
): Promise
=> {
diff --git a/src/panels/profile/ha-long-lived-access-tokens-card.ts b/src/panels/profile/ha-long-lived-access-tokens-card.ts
index 5edcbfb34d..c622ad0d7e 100644
--- a/src/panels/profile/ha-long-lived-access-tokens-card.ts
+++ b/src/panels/profile/ha-long-lived-access-tokens-card.ts
@@ -61,23 +61,27 @@ class HaLongLivedTokens extends LitElement {
)}
`
: accessTokens!.map(
- (token) => html`
- ${token.client_name}
-
- ${this.hass.localize(
- "ui.panel.profile.long_lived_access_tokens.created",
- "date",
- relativeTime(new Date(token.created_at), this.hass.locale)
- )}
-
-
- `
+ (token) =>
+ html`
+ ${token.client_name}
+
+ ${this.hass.localize(
+ "ui.panel.profile.long_lived_access_tokens.created",
+ "date",
+ relativeTime(
+ new Date(token.created_at),
+ this.hass.locale
+ )
+ )}
+
+
+ `
)}
diff --git a/src/panels/profile/ha-mfa-modules-card.ts b/src/panels/profile/ha-mfa-modules-card.ts
index c6fed2b149..ce3f94c0a2 100644
--- a/src/panels/profile/ha-mfa-modules-card.ts
+++ b/src/panels/profile/ha-mfa-modules-card.ts
@@ -17,21 +17,22 @@ class HaMfaModulesCard extends LitElement {
return html`
${this.mfaModules.map(
- (module) => html`
- ${module.name}
- ${module.id}
- ${module.enabled
- ? html`${this.hass.localize(
- "ui.panel.profile.mfa.disable"
- )}`
- : html`${this.hass.localize(
- "ui.panel.profile.mfa.enable"
- )}`}
- `
+ (module) =>
+ html`
+ ${module.name}
+ ${module.id}
+ ${module.enabled
+ ? html`${this.hass.localize(
+ "ui.panel.profile.mfa.disable"
+ )}`
+ : html`${this.hass.localize(
+ "ui.panel.profile.mfa.enable"
+ )}`}
+ `
)}
`;
diff --git a/src/panels/profile/ha-refresh-tokens-card.ts b/src/panels/profile/ha-refresh-tokens-card.ts
index b271002a63..6217936dcb 100644
--- a/src/panels/profile/ha-refresh-tokens-card.ts
+++ b/src/panels/profile/ha-refresh-tokens-card.ts
@@ -50,57 +50,61 @@ class HaRefreshTokens extends LitElement {
${this.hass.localize("ui.panel.profile.refresh_tokens.description")}
${refreshTokens?.length
? refreshTokens!.map(
- (token) => html`
- ${this.hass.localize(
- "ui.panel.profile.refresh_tokens.token_title",
- { clientId: token.client_id }
- )}
-
-
- ${this.hass.localize(
- "ui.panel.profile.refresh_tokens.created_at",
- {
- date: relativeTime(
- new Date(token.created_at),
- this.hass.locale
- ),
- }
- )}
-
-
- ${token.last_used_at
- ? this.hass.localize(
- "ui.panel.profile.refresh_tokens.last_used",
- {
- date: relativeTime(
- new Date(token.last_used_at),
- this.hass.locale
- ),
- location: token.last_used_ip,
- }
- )
- : this.hass.localize(
- "ui.panel.profile.refresh_tokens.not_used"
- )}
-
-
- ${token.is_current
- ? html`
- ${this.hass.localize(
- "ui.panel.profile.refresh_tokens.current_token_tooltip"
+ (token) =>
+ html`
+ ${this.hass.localize(
+ "ui.panel.profile.refresh_tokens.token_title",
+ { clientId: token.client_id }
+ )}
+
+
+ ${this.hass.localize(
+ "ui.panel.profile.refresh_tokens.created_at",
+ {
+ date: relativeTime(
+ new Date(token.created_at),
+ this.hass.locale
+ ),
+ }
+ )}
+
+
+ ${token.last_used_at
+ ? this.hass.localize(
+ "ui.panel.profile.refresh_tokens.last_used",
+ {
+ date: relativeTime(
+ new Date(token.last_used_at),
+ this.hass.locale
+ ),
+ location: token.last_used_ip,
+ }
+ )
+ : this.hass.localize(
+ "ui.panel.profile.refresh_tokens.not_used"
)}
- `
- : ""}
-
-
- `
+
+
+ ${token.is_current
+ ? html`
+ ${this.hass.localize(
+ "ui.panel.profile.refresh_tokens.current_token_tooltip"
+ )}
+ `
+ : ""}
+
+
+ `
)
: ""}
diff --git a/src/state-summary/state-card-select.ts b/src/state-summary/state-card-select.ts
index 354136c67e..4e6b48c9dc 100644
--- a/src/state-summary/state-card-select.ts
+++ b/src/state-summary/state-card-select.ts
@@ -29,19 +29,18 @@ class StateCardSelect extends LitElement {
@closed=${stopPropagation}
>
${this.stateObj.attributes.options.map(
- (option) =>
- html`
-
- ${computeStateDisplay(
- this.hass.localize,
- this.stateObj,
- this.hass.locale,
- this.hass.config,
- this.hass.entities,
- option
- )}
-
- `
+ (option) => html`
+
+ ${computeStateDisplay(
+ this.hass.localize,
+ this.stateObj,
+ this.hass.locale,
+ this.hass.config,
+ this.hass.entities,
+ option
+ )}
+
+ `
)}
`;
diff --git a/src/state/url-sync-mixin.ts b/src/state/url-sync-mixin.ts
index 387bf8fd9b..70b908feac 100644
--- a/src/state/url-sync-mixin.ts
+++ b/src/state/url-sync-mixin.ts
@@ -19,7 +19,7 @@ export let historyPromise: Promise | undefined;
let historyResolve: undefined | (() => void);
export const urlSyncMixin = <
- T extends Constructor
+ T extends Constructor,
>(
superClass: T
) =>
diff --git a/yarn.lock b/yarn.lock
index 77a5aaaa45..e4275e4f19 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9752,7 +9752,7 @@ __metadata:
object-hash: 3.0.0
open: 9.1.0
pinst: 3.0.0
- prettier: 2.8.8
+ prettier: 3.0.0
proxy-polyfill: 0.3.2
punycode: 2.3.0
qr-scanner: 1.4.2
@@ -13208,12 +13208,12 @@ __metadata:
languageName: node
linkType: hard
-"prettier@npm:2.8.8":
- version: 2.8.8
- resolution: "prettier@npm:2.8.8"
+"prettier@npm:3.0.0":
+ version: 3.0.0
+ resolution: "prettier@npm:3.0.0"
bin:
- prettier: bin-prettier.js
- checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8
+ prettier: bin/prettier.cjs
+ checksum: 6a832876a1552dc58330d2467874e5a0b46b9ccbfc5d3531eb69d15684743e7f83dc9fbd202db6270446deba9c82b79d24383d09924c462b457136a759425e33
languageName: node
linkType: hard
From d756daded45d21e7bb3ea6917d7a6b3d5e801f10 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 14 Jul 2023 22:21:56 -0400
Subject: [PATCH 054/102] Update dependency eslint-plugin-unused-imports to v3
(#17312)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 12 ++++++------
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/package.json b/package.json
index c7be5ec960..bce5b25ebb 100644
--- a/package.json
+++ b/package.json
@@ -201,7 +201,7 @@
"eslint-plugin-import": "2.27.5",
"eslint-plugin-lit": "1.8.3",
"eslint-plugin-lit-a11y": "3.0.0",
- "eslint-plugin-unused-imports": "2.0.0",
+ "eslint-plugin-unused-imports": "3.0.0",
"eslint-plugin-wc": "1.5.0",
"esprima": "4.0.1",
"fancy-log": "2.0.0",
diff --git a/yarn.lock b/yarn.lock
index e4275e4f19..a998a0d667 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8069,18 +8069,18 @@ __metadata:
languageName: node
linkType: hard
-"eslint-plugin-unused-imports@npm:2.0.0":
- version: 2.0.0
- resolution: "eslint-plugin-unused-imports@npm:2.0.0"
+"eslint-plugin-unused-imports@npm:3.0.0":
+ version: 3.0.0
+ resolution: "eslint-plugin-unused-imports@npm:3.0.0"
dependencies:
eslint-rule-composer: ^0.3.0
peerDependencies:
- "@typescript-eslint/eslint-plugin": ^5.0.0
+ "@typescript-eslint/eslint-plugin": ^6.0.0
eslint: ^8.0.0
peerDependenciesMeta:
"@typescript-eslint/eslint-plugin":
optional: true
- checksum: 8aa1e03e75da2a62a354065e0cb8fe370118c6f8d9720a32fe8c1da937de6adb81a4fed7d0d391d115ac9453b49029fb19f970d180a2cf3dba451fd4c20f0dc4
+ checksum: 51666f62cc8dccba2895ced83f3c1e0b78b68c357e17360e156c4db548bfdeda34cbd8725192fb4903f22d5069400fb22ded6039631df01ee82fd618dc307247
languageName: node
linkType: hard
@@ -9712,7 +9712,7 @@ __metadata:
eslint-plugin-import: 2.27.5
eslint-plugin-lit: 1.8.3
eslint-plugin-lit-a11y: 3.0.0
- eslint-plugin-unused-imports: 2.0.0
+ eslint-plugin-unused-imports: 3.0.0
eslint-plugin-wc: 1.5.0
esprima: 4.0.1
fancy-log: 2.0.0
From e81cac0d037647e01349d8ff9601e33cbf726ada Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 15 Jul 2023 16:08:15 -0400
Subject: [PATCH 055/102] Update babel monorepo to v7.22.9 (#17317)
---
package.json | 6 +--
yarn.lock | 101 +++++++++++++++++++++++++--------------------------
2 files changed, 53 insertions(+), 54 deletions(-)
diff --git a/package.json b/package.json
index bce5b25ebb..4c870d67a2 100644
--- a/package.json
+++ b/package.json
@@ -152,10 +152,10 @@
"xss": "1.0.14"
},
"devDependencies": {
- "@babel/core": "7.22.8",
+ "@babel/core": "7.22.9",
"@babel/plugin-proposal-decorators": "7.22.7",
- "@babel/plugin-transform-runtime": "7.22.7",
- "@babel/preset-env": "7.22.7",
+ "@babel/plugin-transform-runtime": "7.22.9",
+ "@babel/preset-env": "7.22.9",
"@babel/preset-typescript": "7.22.5",
"@koa/cors": "4.0.0",
"@octokit/auth-oauth-device": "6.0.0",
diff --git a/yarn.lock b/yarn.lock
index a998a0d667..2689d26906 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -54,45 +54,45 @@ __metadata:
languageName: node
linkType: hard
-"@babel/compat-data@npm:^7.22.5, @babel/compat-data@npm:^7.22.6":
- version: 7.22.6
- resolution: "@babel/compat-data@npm:7.22.6"
- checksum: b88631143a2ebdb75e5bac47984e950983294f1739c2133f32569c6f2fcee85f83634bb6cf4378afb44fa8eb7877d11e48811d1e6a52afa161f82276ffdc3fb4
+"@babel/compat-data@npm:^7.22.5, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9":
+ version: 7.22.9
+ resolution: "@babel/compat-data@npm:7.22.9"
+ checksum: bed77d9044ce948b4327b30dd0de0779fa9f3a7ed1f2d31638714ed00229fa71fc4d1617ae0eb1fad419338d3658d0e9a5a083297451e09e73e078d0347ff808
languageName: node
linkType: hard
-"@babel/core@npm:7.22.8, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.3":
- version: 7.22.8
- resolution: "@babel/core@npm:7.22.8"
+"@babel/core@npm:7.22.9, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.3":
+ version: 7.22.9
+ resolution: "@babel/core@npm:7.22.9"
dependencies:
"@ampproject/remapping": ^2.2.0
"@babel/code-frame": ^7.22.5
- "@babel/generator": ^7.22.7
- "@babel/helper-compilation-targets": ^7.22.6
- "@babel/helper-module-transforms": ^7.22.5
+ "@babel/generator": ^7.22.9
+ "@babel/helper-compilation-targets": ^7.22.9
+ "@babel/helper-module-transforms": ^7.22.9
"@babel/helpers": ^7.22.6
"@babel/parser": ^7.22.7
"@babel/template": ^7.22.5
"@babel/traverse": ^7.22.8
"@babel/types": ^7.22.5
- "@nicolo-ribaudo/semver-v6": ^6.3.3
convert-source-map: ^1.7.0
debug: ^4.1.0
gensync: ^1.0.0-beta.2
json5: ^2.2.2
- checksum: 75ed701c14ad17070382ae1dd166f7534b31f2c71e00995a5f261ee2398ee96335b0736573b8ff24ab6e3e6f5814ee2a48fa11ab90fabcd3dfc70ea87c5f30a6
+ semver: ^6.3.1
+ checksum: 7bf069aeceb417902c4efdaefab1f7b94adb7dea694a9aed1bda2edf4135348a080820529b1a300c6f8605740a00ca00c19b2d5e74b5dd489d99d8c11d5e56d1
languageName: node
linkType: hard
-"@babel/generator@npm:^7.22.7":
- version: 7.22.7
- resolution: "@babel/generator@npm:7.22.7"
+"@babel/generator@npm:^7.22.7, @babel/generator@npm:^7.22.9":
+ version: 7.22.9
+ resolution: "@babel/generator@npm:7.22.9"
dependencies:
"@babel/types": ^7.22.5
"@jridgewell/gen-mapping": ^0.3.2
"@jridgewell/trace-mapping": ^0.3.17
jsesc: ^2.5.1
- checksum: cee15558888bdf5564e19cfaf95101b2910fa425f30cc1a25ac9b8621bd62b63544eb1b36ad89c80b5e41915699219f78712cab128d1f7e3da6a21fbf4143927
+ checksum: 7c9d2c58b8d5ac5e047421a6ab03ec2ff5d9a5ff2c2212130a0055e063ac349e0b19d435537d6886c999771aef394832e4f54cd9fc810100a7f23d982f6af06b
languageName: node
linkType: hard
@@ -114,18 +114,18 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6":
- version: 7.22.6
- resolution: "@babel/helper-compilation-targets@npm:7.22.6"
+"@babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.22.9":
+ version: 7.22.9
+ resolution: "@babel/helper-compilation-targets@npm:7.22.9"
dependencies:
- "@babel/compat-data": ^7.22.6
+ "@babel/compat-data": ^7.22.9
"@babel/helper-validator-option": ^7.22.5
- "@nicolo-ribaudo/semver-v6": ^6.3.3
browserslist: ^4.21.9
lru-cache: ^5.1.1
+ semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0
- checksum: c7788c48099c4f0edf2adeb367a941a930d39ed7453140ceb10d7114c4091922adf56d3cdd832050fd4501f25e872886390629042ddd365d3bce2ecad69ed394
+ checksum: ea0006c6a93759025f4a35a25228ae260538c9f15023e8aac2a6d45ca68aef4cf86cfc429b19af9a402cbdd54d5de74ad3fbcf6baa7e48184dc079f1a791e178
languageName: node
linkType: hard
@@ -220,19 +220,18 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-module-transforms@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helper-module-transforms@npm:7.22.5"
+"@babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.22.9":
+ version: 7.22.9
+ resolution: "@babel/helper-module-transforms@npm:7.22.9"
dependencies:
"@babel/helper-environment-visitor": ^7.22.5
"@babel/helper-module-imports": ^7.22.5
"@babel/helper-simple-access": ^7.22.5
- "@babel/helper-split-export-declaration": ^7.22.5
+ "@babel/helper-split-export-declaration": ^7.22.6
"@babel/helper-validator-identifier": ^7.22.5
- "@babel/template": ^7.22.5
- "@babel/traverse": ^7.22.5
- "@babel/types": ^7.22.5
- checksum: 8985dc0d971fd17c467e8b84fe0f50f3dd8610e33b6c86e5b3ca8e8859f9448bcc5c84e08a2a14285ef388351c0484797081c8f05a03770bf44fc27bf4900e68
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 2751f77660518cf4ff027514d6f4794f04598c6393be7b04b8e46c6e21606e11c19f3f57ab6129a9c21bacdf8b3ffe3af87bb401d972f34af2d0ffde02ac3001
languageName: node
linkType: hard
@@ -298,7 +297,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-split-export-declaration@npm:^7.22.5, @babel/helper-split-export-declaration@npm:^7.22.6":
+"@babel/helper-split-export-declaration@npm:^7.22.6":
version: 7.22.6
resolution: "@babel/helper-split-export-declaration@npm:7.22.6"
dependencies:
@@ -1140,19 +1139,19 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-runtime@npm:7.22.7":
- version: 7.22.7
- resolution: "@babel/plugin-transform-runtime@npm:7.22.7"
+"@babel/plugin-transform-runtime@npm:7.22.9":
+ version: 7.22.9
+ resolution: "@babel/plugin-transform-runtime@npm:7.22.9"
dependencies:
"@babel/helper-module-imports": ^7.22.5
"@babel/helper-plugin-utils": ^7.22.5
- "@nicolo-ribaudo/semver-v6": ^6.3.3
babel-plugin-polyfill-corejs2: ^0.4.4
babel-plugin-polyfill-corejs3: ^0.8.2
babel-plugin-polyfill-regenerator: ^0.5.1
+ semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 1b41c44d5c44c98df3885b4f541c4edbef507bbdb1c889eed9878d9aabb29b6f589192ae712454c20ced22c79cfb2911403023daf03d20902434a258632d4773
+ checksum: 2fe5e41f83015ca174feda841d77aa9012fc855c907f9b360a11927f41b100537c8c83487771769147668e797eec26d5294e972b997f4759133cc43a22a43eec
languageName: node
linkType: hard
@@ -1273,12 +1272,12 @@ __metadata:
languageName: node
linkType: hard
-"@babel/preset-env@npm:7.22.7, @babel/preset-env@npm:^7.11.0":
- version: 7.22.7
- resolution: "@babel/preset-env@npm:7.22.7"
+"@babel/preset-env@npm:7.22.9, @babel/preset-env@npm:^7.11.0":
+ version: 7.22.9
+ resolution: "@babel/preset-env@npm:7.22.9"
dependencies:
- "@babel/compat-data": ^7.22.6
- "@babel/helper-compilation-targets": ^7.22.6
+ "@babel/compat-data": ^7.22.9
+ "@babel/helper-compilation-targets": ^7.22.9
"@babel/helper-plugin-utils": ^7.22.5
"@babel/helper-validator-option": ^7.22.5
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.22.5
@@ -1352,14 +1351,14 @@ __metadata:
"@babel/plugin-transform-unicode-sets-regex": ^7.22.5
"@babel/preset-modules": ^0.1.5
"@babel/types": ^7.22.5
- "@nicolo-ribaudo/semver-v6": ^6.3.3
babel-plugin-polyfill-corejs2: ^0.4.4
babel-plugin-polyfill-corejs3: ^0.8.2
babel-plugin-polyfill-regenerator: ^0.5.1
core-js-compat: ^3.31.0
+ semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: eabde70e450dd54f57997b0f92317f69f268e9a1f85b13f5ef5540d2a38cfae5620bd8e48ddffb547c55fbd2f17673276e6eb9411d6b5fb82e3422faf44cb6cf
+ checksum: 6caa2897bbda30c6932aed0a03827deb1337c57108050c9f97dc9a857e1533c7125b168b6d70b9d191965bf05f9f233f0ad20303080505dff7ce39740aaa759d
languageName: node
linkType: hard
@@ -9577,10 +9576,10 @@ __metadata:
version: 0.0.0-use.local
resolution: "home-assistant-frontend@workspace:."
dependencies:
- "@babel/core": 7.22.8
+ "@babel/core": 7.22.9
"@babel/plugin-proposal-decorators": 7.22.7
- "@babel/plugin-transform-runtime": 7.22.7
- "@babel/preset-env": 7.22.7
+ "@babel/plugin-transform-runtime": 7.22.9
+ "@babel/preset-env": 7.22.9
"@babel/preset-typescript": 7.22.5
"@babel/runtime": 7.22.6
"@braintree/sanitize-url": 6.0.2
@@ -14055,12 +14054,12 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^6.3.0":
- version: 6.3.0
- resolution: "semver@npm:6.3.0"
+"semver@npm:^6.3.0, semver@npm:^6.3.1":
+ version: 6.3.1
+ resolution: "semver@npm:6.3.1"
bin:
- semver: ./bin/semver.js
- checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9
+ semver: bin/semver.js
+ checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2
languageName: node
linkType: hard
From c173ffd181af6c9a417cb85f10d4d4f2d756b0f3 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 16 Jul 2023 12:41:06 -0400
Subject: [PATCH 056/102] Update dependency google-timezones-json to v1.2.0
(#17321)
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 4c870d67a2..5ba38c1c9f 100644
--- a/package.json
+++ b/package.json
@@ -112,7 +112,7 @@
"deep-clone-simple": "1.1.1",
"deep-freeze": "0.0.1",
"fuse.js": "6.6.2",
- "google-timezones-json": "1.1.0",
+ "google-timezones-json": "1.2.0",
"hls.js": "1.4.8",
"home-assistant-js-websocket": "8.2.0",
"idb-keyval": "6.2.1",
diff --git a/yarn.lock b/yarn.lock
index 2689d26906..c0847954be 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9301,10 +9301,10 @@ __metadata:
languageName: node
linkType: hard
-"google-timezones-json@npm:1.1.0":
- version: 1.1.0
- resolution: "google-timezones-json@npm:1.1.0"
- checksum: 4abbf1b50a9c199fec4dbf7113803dbcb7c87794a4e52189dc0187e4c8a26a7dffd133bc4e2674e1f30f357e5f2060153effe267a013613c362cc098176dc8a0
+"google-timezones-json@npm:1.2.0":
+ version: 1.2.0
+ resolution: "google-timezones-json@npm:1.2.0"
+ checksum: 2945d2ed900511cb5111c9066dd84a8330feed5166b195a854f9ac9550c9f9e2d10d62743e08a4571c6005a9a08045b2375c60dc9539c403830a0a25cd0d1690
languageName: node
linkType: hard
@@ -9718,7 +9718,7 @@ __metadata:
fs-extra: 11.1.1
fuse.js: 6.6.2
glob: 10.3.3
- google-timezones-json: 1.1.0
+ google-timezones-json: 1.2.0
gulp: 4.0.2
gulp-flatmap: 1.0.2
gulp-json-transform: 0.4.8
From bcfdb27e2585e8d8232fadad2a3e7649478b0b12 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 16 Jul 2023 12:43:16 -0400
Subject: [PATCH 057/102] Update dependency eslint-config-airbnb-typescript to
v17.1.0 (#17320)
---
package.json | 2 +-
yarn.lock | 14 +++++++-------
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/package.json b/package.json
index 5ba38c1c9f..2c0286be0f 100644
--- a/package.json
+++ b/package.json
@@ -194,7 +194,7 @@
"del": "7.0.0",
"eslint": "8.44.0",
"eslint-config-airbnb-base": "15.0.0",
- "eslint-config-airbnb-typescript": "17.0.0",
+ "eslint-config-airbnb-typescript": "17.1.0",
"eslint-config-prettier": "8.8.0",
"eslint-import-resolver-webpack": "0.13.2",
"eslint-plugin-disable": "2.0.3",
diff --git a/yarn.lock b/yarn.lock
index c0847954be..588ad665ec 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7928,17 +7928,17 @@ __metadata:
languageName: node
linkType: hard
-"eslint-config-airbnb-typescript@npm:17.0.0":
- version: 17.0.0
- resolution: "eslint-config-airbnb-typescript@npm:17.0.0"
+"eslint-config-airbnb-typescript@npm:17.1.0":
+ version: 17.1.0
+ resolution: "eslint-config-airbnb-typescript@npm:17.1.0"
dependencies:
eslint-config-airbnb-base: ^15.0.0
peerDependencies:
- "@typescript-eslint/eslint-plugin": ^5.13.0
- "@typescript-eslint/parser": ^5.0.0
+ "@typescript-eslint/eslint-plugin": ^5.13.0 || ^6.0.0
+ "@typescript-eslint/parser": ^5.0.0 || ^6.0.0
eslint: ^7.32.0 || ^8.2.0
eslint-plugin-import: ^2.25.3
- checksum: e598ae7bcc3629bbc847a749f8c1ad69e6ef111335b60d88bde91d1bb335077b06688868257fe2fcc95c3687a0d6e3e1f91e0534cc633f5a118239e52bb05a54
+ checksum: cfd26a2782e322ebfdfbf9a64262332c7653f297c4a32d7b951079eb18bb9502a83d67b3f7ef2cc1c5374ae06098eb454ed010784b3416e7274839083022a08c
languageName: node
linkType: hard
@@ -9704,7 +9704,7 @@ __metadata:
del: 7.0.0
eslint: 8.44.0
eslint-config-airbnb-base: 15.0.0
- eslint-config-airbnb-typescript: 17.0.0
+ eslint-config-airbnb-typescript: 17.1.0
eslint-config-prettier: 8.8.0
eslint-import-resolver-webpack: 0.13.2
eslint-plugin-disable: 2.0.3
From 3d0f2adf9fa673db324c87413da878eac0a76bf2 Mon Sep 17 00:00:00 2001
From: Skyler Carlson <43375685+skycarl@users.noreply.github.com>
Date: Sun, 16 Jul 2023 11:09:48 -0700
Subject: [PATCH 058/102] Update wording in UI when restoring partial backup
(#17319)
---
hassio/src/dialogs/backup/dialog-hassio-backup.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hassio/src/dialogs/backup/dialog-hassio-backup.ts b/hassio/src/dialogs/backup/dialog-hassio-backup.ts
index cded8cf5ba..230ecc1f22 100644
--- a/hassio/src/dialogs/backup/dialog-hassio-backup.ts
+++ b/hassio/src/dialogs/backup/dialog-hassio-backup.ts
@@ -194,7 +194,7 @@ class HassioBackupDialog
}
if (
!(await showConfirmationDialog(this, {
- title: "Are you sure you want partially to restore this backup?",
+ title: "Are you sure you want to restore this partial backup?",
confirmText: "restore",
dismissText: "cancel",
}))
From 4b40405cc4b118151550579bc022a52305b9bc03 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 16 Jul 2023 20:52:13 -0400
Subject: [PATCH 059/102] Update tsparticles to v2.11.0 (#17318)
---
package.json | 4 +-
yarn.lock | 106 +++++++++++++++++++++++++--------------------------
2 files changed, 55 insertions(+), 55 deletions(-)
diff --git a/package.json b/package.json
index 2c0286be0f..d710a9254d 100644
--- a/package.json
+++ b/package.json
@@ -135,8 +135,8 @@
"sortablejs": "1.15.0",
"superstruct": "1.0.3",
"tinykeys": "2.1.0",
- "tsparticles-engine": "2.10.1",
- "tsparticles-preset-links": "2.10.1",
+ "tsparticles-engine": "2.11.0",
+ "tsparticles-preset-links": "2.11.0",
"unfetch": "5.0.0",
"vis-data": "7.1.6",
"vis-network": "9.1.6",
diff --git a/yarn.lock b/yarn.lock
index 588ad665ec..9af9d5432e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9773,8 +9773,8 @@ __metadata:
terser-webpack-plugin: 5.3.9
tinykeys: 2.1.0
ts-lit-plugin: 2.0.0-pre.1
- tsparticles-engine: 2.10.1
- tsparticles-preset-links: 2.10.1
+ tsparticles-engine: 2.11.0
+ tsparticles-preset-links: 2.11.0
typescript: 5.1.6
unfetch: 5.0.0
vinyl-buffer: 1.0.1
@@ -15262,89 +15262,89 @@ __metadata:
languageName: node
linkType: hard
-"tsparticles-engine@npm:2.10.1, tsparticles-engine@npm:^2.10.1":
- version: 2.10.1
- resolution: "tsparticles-engine@npm:2.10.1"
- checksum: 5662c453b1e4c37c608435393a8c5ae03bd9b301dc488a3909bdddf321f38c486b6076d61641add3e2d8764c6e8eb28021e1b424da3240b6efa723c6e8bcbc43
+"tsparticles-engine@npm:2.11.0, tsparticles-engine@npm:^2.11.0":
+ version: 2.11.0
+ resolution: "tsparticles-engine@npm:2.11.0"
+ checksum: 1aad1c3969b38dec5b468220eba7a1a26982fd8b13567f37970fe8d1cd6e7609da8622e8b16599b6359ecc681a33e9672a8a697e5ea9f146b15cc709b9fa78d9
languageName: node
linkType: hard
-"tsparticles-interaction-particles-links@npm:^2.10.1":
- version: 2.10.1
- resolution: "tsparticles-interaction-particles-links@npm:2.10.1"
+"tsparticles-interaction-particles-links@npm:^2.11.0":
+ version: 2.11.0
+ resolution: "tsparticles-interaction-particles-links@npm:2.11.0"
dependencies:
- tsparticles-engine: ^2.10.1
- checksum: 994fcac1cfcae34409095437db7684cc9f74b4e084995da310ea7f1a63c0a97030cac8fde47a7a54b5e8644e26a3b72fb5e6d229e10758eb1e6fcf52800b8e83
+ tsparticles-engine: ^2.11.0
+ checksum: 38bfca50c5c8b55ef3cc55975a5be80479e283dbe04247f165635281f37f9b9fb6b884e5e996ca99e0da3725e4777100ddef2a04dab6216896649f48a89faf04
languageName: node
linkType: hard
-"tsparticles-move-base@npm:^2.10.1":
- version: 2.10.1
- resolution: "tsparticles-move-base@npm:2.10.1"
+"tsparticles-move-base@npm:^2.11.0":
+ version: 2.11.0
+ resolution: "tsparticles-move-base@npm:2.11.0"
dependencies:
- tsparticles-engine: ^2.10.1
- checksum: 26fb88e7622dfbede4d0177d01645917b01611bf8be32508588e7d8d6e28fcaf58daf900095a7947382d59fe9fcd420563cc6fc6a50c67c9c7ea7236c601d9b7
+ tsparticles-engine: ^2.11.0
+ checksum: a049e1ecd23f8b3fd19b236040085e415765b299e919647acc18e43eb2b6d51176c97ae3095f313cd0959096638d6d6ad4337d5c9cff8d98d1b8dadbad02eaff
languageName: node
linkType: hard
-"tsparticles-preset-links@npm:2.10.1":
- version: 2.10.1
- resolution: "tsparticles-preset-links@npm:2.10.1"
+"tsparticles-preset-links@npm:2.11.0":
+ version: 2.11.0
+ resolution: "tsparticles-preset-links@npm:2.11.0"
dependencies:
- tsparticles-engine: ^2.10.1
- tsparticles-interaction-particles-links: ^2.10.1
- tsparticles-move-base: ^2.10.1
- tsparticles-shape-circle: ^2.10.1
- tsparticles-updater-color: ^2.10.1
- tsparticles-updater-opacity: ^2.10.1
- tsparticles-updater-out-modes: ^2.10.1
- tsparticles-updater-size: ^2.10.1
- checksum: 0678ad77ae9022f3ceac6b462ad4e049e2a0f5559b035690698609df081d7d6307fb93c38d07f3fe6e0f517635bd6a4831b705b7ba6fc33f79a22d4a3ddf65fe
+ tsparticles-engine: ^2.11.0
+ tsparticles-interaction-particles-links: ^2.11.0
+ tsparticles-move-base: ^2.11.0
+ tsparticles-shape-circle: ^2.11.0
+ tsparticles-updater-color: ^2.11.0
+ tsparticles-updater-opacity: ^2.11.0
+ tsparticles-updater-out-modes: ^2.11.0
+ tsparticles-updater-size: ^2.11.0
+ checksum: 4f50e70d25cce142fc1a692dc736819c3e42c6bf3c4d10eaf6667536750ed487ee8e6173914ade73fd26ea9cee0557e84e3bf305efc73fb6288803cd803a22a3
languageName: node
linkType: hard
-"tsparticles-shape-circle@npm:^2.10.1":
- version: 2.10.1
- resolution: "tsparticles-shape-circle@npm:2.10.1"
+"tsparticles-shape-circle@npm:^2.11.0":
+ version: 2.11.0
+ resolution: "tsparticles-shape-circle@npm:2.11.0"
dependencies:
- tsparticles-engine: ^2.10.1
- checksum: 49c2a865745c6217b08006c11f134e64792e1d62abbc1dc6f2484165b6b13b6bd7205cd10171418697680e513bd3c8d128c7d9877c61540722250bb8e1693f02
+ tsparticles-engine: ^2.11.0
+ checksum: a83098b8d39b8ed89d1ced0f7b2e560d53b8d0f85f3993cd539b8a72d12d84cc9ef67ccc663ac580489129f33638c1791506c40d69ac0afcf8cb2e999688b2c1
languageName: node
linkType: hard
-"tsparticles-updater-color@npm:^2.10.1":
- version: 2.10.1
- resolution: "tsparticles-updater-color@npm:2.10.1"
+"tsparticles-updater-color@npm:^2.11.0":
+ version: 2.11.0
+ resolution: "tsparticles-updater-color@npm:2.11.0"
dependencies:
- tsparticles-engine: ^2.10.1
- checksum: 6858b429fd59f244251584346d47748216774a9012a6ffb9a614f87ca83b957a6da2b0dffb1c9e5238c84c043c29a23eb828568baf4ddde76c73707a1a0652ba
+ tsparticles-engine: ^2.11.0
+ checksum: bfbac9a31d1ccbc179c646016f45b6ca6990d1b23b654130e38ec8df95402241d20e18d8a5b061e66c82eef4380901ed964ccbe3143d5b8ff757bd91014134e6
languageName: node
linkType: hard
-"tsparticles-updater-opacity@npm:^2.10.1":
- version: 2.10.1
- resolution: "tsparticles-updater-opacity@npm:2.10.1"
+"tsparticles-updater-opacity@npm:^2.11.0":
+ version: 2.11.0
+ resolution: "tsparticles-updater-opacity@npm:2.11.0"
dependencies:
- tsparticles-engine: ^2.10.1
- checksum: f5a418dfe922db99cd6ee75a7accb901eebb4e4f34ef411be46a1d88c8893816b4f8487f7b100a0a1cda749fdecf1d052efaae994a8639a464b6d6829ec9ee8b
+ tsparticles-engine: ^2.11.0
+ checksum: e8bf67196b529fabc838140ffe2997c58e27ab569e70a9815b10db93e8d5496f4f07e04b600b832d1a22239970eca29b2619e30f00cb0f2cc0428bd73c3582f0
languageName: node
linkType: hard
-"tsparticles-updater-out-modes@npm:^2.10.1":
- version: 2.10.1
- resolution: "tsparticles-updater-out-modes@npm:2.10.1"
+"tsparticles-updater-out-modes@npm:^2.11.0":
+ version: 2.11.0
+ resolution: "tsparticles-updater-out-modes@npm:2.11.0"
dependencies:
- tsparticles-engine: ^2.10.1
- checksum: 0f78d2aae5fa03f1af32dbe9eab326d6ef59b4e63226a84a5f8ce91efb1beecd13e0465068de9c9cd70ba830c212552fbe3b01fd21c674368ba39071af335e9b
+ tsparticles-engine: ^2.11.0
+ checksum: 8f14fb9756c98e48d0d613b439bbb6c21d385b95cf78cebcc8077da15f42b2d9c219d7b51e9ed8f2643eb00a9871d2cdb91fc96922376827bf69171d030fc7ac
languageName: node
linkType: hard
-"tsparticles-updater-size@npm:^2.10.1":
- version: 2.10.1
- resolution: "tsparticles-updater-size@npm:2.10.1"
+"tsparticles-updater-size@npm:^2.11.0":
+ version: 2.11.0
+ resolution: "tsparticles-updater-size@npm:2.11.0"
dependencies:
- tsparticles-engine: ^2.10.1
- checksum: c77ce515aa765f4e069d232ca7407105d86c432042593fffdd6ae33948f84a654cba7e41c0aef00c2327ed3b5715ab07e057153b93afe5c7a2a5917eee786e85
+ tsparticles-engine: ^2.11.0
+ checksum: b14aecf4000441fe3e7f37cacd9f9074bb8fcd96b7ed0eb1be16274da8a843d005bca37949043867378138c6e65ccdd76c849ba2528a1c4cf92ad6488b4da7d8
languageName: node
linkType: hard
From 2564fb91db71b90dbf2aa2f9415ff820d022ca94 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 17 Jul 2023 07:55:20 -0400
Subject: [PATCH 060/102] Bump actions/labeler from 4.2.0 to 4.3.0 (#17327)
---
.github/workflows/labeler.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/labeler.yaml b/.github/workflows/labeler.yaml
index 079d25cf06..166fcb1aa8 100644
--- a/.github/workflows/labeler.yaml
+++ b/.github/workflows/labeler.yaml
@@ -10,6 +10,6 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Apply labels
- uses: actions/labeler@v4.2.0
+ uses: actions/labeler@v4.3.0
with:
sync-labels: true
From 486cfd1d9161915030002443f8430b21f9993b05 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 17 Jul 2023 09:37:41 -0400
Subject: [PATCH 061/102] Update dependency hls.js to v1.4.9 (#17326)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index d710a9254d..a764067d01 100644
--- a/package.json
+++ b/package.json
@@ -113,7 +113,7 @@
"deep-freeze": "0.0.1",
"fuse.js": "6.6.2",
"google-timezones-json": "1.2.0",
- "hls.js": "1.4.8",
+ "hls.js": "1.4.9",
"home-assistant-js-websocket": "8.2.0",
"idb-keyval": "6.2.1",
"intl-messageformat": "10.5.0",
diff --git a/yarn.lock b/yarn.lock
index 9af9d5432e..24255aad24 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9565,10 +9565,10 @@ __metadata:
languageName: node
linkType: hard
-"hls.js@npm:1.4.8":
- version: 1.4.8
- resolution: "hls.js@npm:1.4.8"
- checksum: abbd3985e5339dea9b0cd244080b914ad9fb6b092e926a41f9bc9affe3383e4ed1ccda32515ef35b78580feb13373cabfdb7d23c3fb1c7ef9cd02f62f3302353
+"hls.js@npm:1.4.9":
+ version: 1.4.9
+ resolution: "hls.js@npm:1.4.9"
+ checksum: 51e469eb99e7093a1b71a7531731d9da8609104730f1030797d25c4e25d9d7d8a6d22603921cb9a9ee6ab26b28c569e91c68a37be92dc1f34bc58e0c5af65b99
languageName: node
linkType: hard
@@ -9725,7 +9725,7 @@ __metadata:
gulp-merge-json: 2.1.2
gulp-rename: 2.0.0
gulp-zopfli-green: 6.0.1
- hls.js: 1.4.8
+ hls.js: 1.4.9
home-assistant-js-websocket: 8.2.0
html-minifier-terser: 7.2.0
husky: 8.0.3
From 4c9066a4b07392013797a133224e405dd0ea3872 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 17 Jul 2023 12:37:31 -0400
Subject: [PATCH 062/102] Update dependency eslint to v8.45.0 (#17330)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 16 +++++++---------
2 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/package.json b/package.json
index a764067d01..45e3c8e65c 100644
--- a/package.json
+++ b/package.json
@@ -192,7 +192,7 @@
"babel-plugin-template-html-minifier": "4.1.0",
"chai": "4.3.7",
"del": "7.0.0",
- "eslint": "8.44.0",
+ "eslint": "8.45.0",
"eslint-config-airbnb-base": "15.0.0",
"eslint-config-airbnb-typescript": "17.1.0",
"eslint-config-prettier": "8.8.0",
diff --git a/yarn.lock b/yarn.lock
index 24255aad24..383f42846b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8136,9 +8136,9 @@ __metadata:
languageName: node
linkType: hard
-"eslint@npm:8.44.0":
- version: 8.44.0
- resolution: "eslint@npm:8.44.0"
+"eslint@npm:8.45.0":
+ version: 8.45.0
+ resolution: "eslint@npm:8.45.0"
dependencies:
"@eslint-community/eslint-utils": ^4.2.0
"@eslint-community/regexpp": ^4.4.0
@@ -8165,7 +8165,6 @@ __metadata:
globals: ^13.19.0
graphemer: ^1.4.0
ignore: ^5.2.0
- import-fresh: ^3.0.0
imurmurhash: ^0.1.4
is-glob: ^4.0.0
is-path-inside: ^3.0.3
@@ -8177,11 +8176,10 @@ __metadata:
natural-compare: ^1.4.0
optionator: ^0.9.3
strip-ansi: ^6.0.1
- strip-json-comments: ^3.1.0
text-table: ^0.2.0
bin:
eslint: bin/eslint.js
- checksum: d06309ce4aafb9d27d558c8e5e5aa5cba3bbec3ce8ceccbc7d4b7a35f2b67fd40189159155553270e2e6febeb69bd8a3b60d6241c8f5ddc2ef1702ccbd328501
+ checksum: 3e6dcce5cc43c5e301662db88ee26d1d188b22c177b9f104d7eefd1191236980bd953b3670fe2fac287114b26d7c5420ab48407d7ea1c3a446d6313c000009da
languageName: node
linkType: hard
@@ -9702,7 +9700,7 @@ __metadata:
deep-clone-simple: 1.1.1
deep-freeze: 0.0.1
del: 7.0.0
- eslint: 8.44.0
+ eslint: 8.45.0
eslint-config-airbnb-base: 15.0.0
eslint-config-airbnb-typescript: 17.1.0
eslint-config-prettier: 8.8.0
@@ -10089,7 +10087,7 @@ __metadata:
languageName: node
linkType: hard
-"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1":
+"import-fresh@npm:^3.2.1":
version: 3.3.0
resolution: "import-fresh@npm:3.3.0"
dependencies:
@@ -14828,7 +14826,7 @@ __metadata:
languageName: node
linkType: hard
-"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1":
+"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.1":
version: 3.1.1
resolution: "strip-json-comments@npm:3.1.1"
checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443
From 4946c00d34d14f613356a5f5937c8284afeff589 Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Mon, 17 Jul 2023 18:57:43 +0200
Subject: [PATCH 063/102] Add last_used option for pipeline and explicit
default (#17329)
* Add last-used option for pipeline and explicit default
* Default to last used
---
src/components/ha-assist-pipeline-picker.ts | 24 +++++++++++++++----
.../ha-selector-assist-pipeline.ts | 21 +++++++++-------
src/data/selector.ts | 4 +++-
.../ha-voice-command-dialog.ts | 19 +++++++++++----
.../show-ha-voice-command-dialog.ts | 15 ++++++++----
src/external_app/external_messaging.ts | 4 ++--
src/panels/lovelace/common/handle-action.ts | 4 ++--
.../lovelace/components/hui-action-editor.ts | 4 +++-
src/panels/lovelace/hui-root.ts | 4 ++--
.../shopping-list/ha-panel-shopping-list.ts | 2 +-
src/translations/en.json | 3 ++-
11 files changed, 73 insertions(+), 31 deletions(-)
diff --git a/src/components/ha-assist-pipeline-picker.ts b/src/components/ha-assist-pipeline-picker.ts
index 0d51bc1444..80a69b2d27 100644
--- a/src/components/ha-assist-pipeline-picker.ts
+++ b/src/components/ha-assist-pipeline-picker.ts
@@ -16,7 +16,8 @@ import "./ha-list-item";
import "./ha-select";
import type { HaSelect } from "./ha-select";
-const PREFERRED = "__PREFERRED_PIPELINE_OPTION__";
+const PREFERRED = "preferred";
+const LAST_USED = "last_used";
@customElement("ha-assist-pipeline-picker")
export class HaAssistPipelinePicker extends LitElement {
@@ -30,15 +31,21 @@ export class HaAssistPipelinePicker extends LitElement {
@property({ type: Boolean }) public required = false;
+ @property() public includeLastUsed = false;
+
@state() _pipelines?: AssistPipeline[];
@state() _preferredPipeline: string | null = null;
+ private get _default() {
+ return this.includeLastUsed ? LAST_USED : PREFERRED;
+ }
+
protected render() {
if (!this._pipelines) {
return nothing;
}
- const value = this.value ?? PREFERRED;
+ const value = this.value ?? this._default;
return html`
+ ${this.includeLastUsed
+ ? html`
+
+ ${this.hass!.localize(
+ "ui.components.pipeline-picker.last_used"
+ )}
+
+ `
+ : null}
${this.hass!.localize("ui.components.pipeline-picker.preferred", {
preferred: this._pipelines.find(
@@ -93,11 +109,11 @@ export class HaAssistPipelinePicker extends LitElement {
!this.hass ||
target.value === "" ||
target.value === this.value ||
- (this.value === undefined && target.value === PREFERRED)
+ (this.value === undefined && target.value === this._default)
) {
return;
}
- this.value = target.value === PREFERRED ? undefined : target.value;
+ this.value = target.value === this._default ? undefined : target.value;
fireEvent(this, "value-changed", { value: this.value });
}
}
diff --git a/src/components/ha-selector/ha-selector-assist-pipeline.ts b/src/components/ha-selector/ha-selector-assist-pipeline.ts
index 74a143b819..9a00519f07 100644
--- a/src/components/ha-selector/ha-selector-assist-pipeline.ts
+++ b/src/components/ha-selector/ha-selector-assist-pipeline.ts
@@ -21,14 +21,19 @@ export class HaAssistPipelineSelector extends LitElement {
@property({ type: Boolean }) public required = true;
protected render() {
- return html``;
+ return html`
+
+ `;
}
static styles = css`
diff --git a/src/data/selector.ts b/src/data/selector.ts
index 71805ef7d4..0a24bc2def 100644
--- a/src/data/selector.ts
+++ b/src/data/selector.ts
@@ -278,7 +278,9 @@ export interface ObjectSelector {
export interface AssistPipelineSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
- assist_pipeline: {} | null;
+ assist_pipeline: {
+ include_last_used?: boolean;
+ } | null;
}
export interface SelectOption {
diff --git a/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts b/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts
index b479b07a22..7bf95f7c33 100644
--- a/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts
+++ b/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts
@@ -87,9 +87,16 @@ export class HaVoiceCommandDialog extends LitElement {
private _pipelinePromise?: Promise;
- public async showDialog(params?: VoiceCommandDialogParams): Promise {
- if (params?.pipeline_id) {
- this._pipelineId = params?.pipeline_id;
+ public async showDialog(
+ params: Required
+ ): Promise {
+ if (params.pipeline_id === "last_used") {
+ // Do not set pipeline id (retrieve from storage)
+ } else if (params.pipeline_id === "preferred") {
+ await this._loadPipelines();
+ this._pipelineId = this._preferredPipeline;
+ } else {
+ this._pipelineId = params.pipeline_id;
}
this._conversation = [
@@ -103,7 +110,11 @@ export class HaVoiceCommandDialog extends LitElement {
this._scrollMessagesBottom();
await this._pipelinePromise;
- if (params?.start_listening && this._pipeline?.stt_engine) {
+ if (
+ params?.start_listening &&
+ this._pipeline?.stt_engine &&
+ AudioRecorder.isSupported
+ ) {
this._toggleListening();
}
}
diff --git a/src/dialogs/voice-command-dialog/show-ha-voice-command-dialog.ts b/src/dialogs/voice-command-dialog/show-ha-voice-command-dialog.ts
index c755877cd3..3c29fb8d16 100644
--- a/src/dialogs/voice-command-dialog/show-ha-voice-command-dialog.ts
+++ b/src/dialogs/voice-command-dialog/show-ha-voice-command-dialog.ts
@@ -4,21 +4,22 @@ import { HomeAssistant } from "../../types";
const loadVoiceCommandDialog = () => import("./ha-voice-command-dialog");
export interface VoiceCommandDialogParams {
- pipeline_id?: string;
+ pipeline_id: "last_used" | "preferred" | string;
start_listening?: boolean;
}
export const showVoiceCommandDialog = (
element: HTMLElement,
hass: HomeAssistant,
- dialogParams?: VoiceCommandDialogParams
+ dialogParams: VoiceCommandDialogParams
): void => {
if (hass.auth.external?.config.hasAssist) {
hass.auth.external!.fireMessage({
type: "assist/show",
payload: {
- pipeline_id: dialogParams?.pipeline_id,
- start_listening: dialogParams?.start_listening,
+ pipeline_id: dialogParams.pipeline_id,
+ // Start listening by default for app
+ start_listening: dialogParams.start_listening ?? true,
},
});
return;
@@ -26,6 +27,10 @@ export const showVoiceCommandDialog = (
fireEvent(element, "show-dialog", {
dialogTag: "ha-voice-command-dialog",
dialogImport: loadVoiceCommandDialog,
- dialogParams,
+ dialogParams: {
+ pipeline_id: dialogParams.pipeline_id,
+ // Don't start listening by default for web
+ start_listening: dialogParams.start_listening ?? false,
+ },
});
};
diff --git a/src/external_app/external_messaging.ts b/src/external_app/external_messaging.ts
index 5c10155138..1b6e9d87f6 100644
--- a/src/external_app/external_messaging.ts
+++ b/src/external_app/external_messaging.ts
@@ -98,8 +98,8 @@ interface EMOutgoingMessageSidebarShow extends EMMessage {
interface EMOutgoingMessageAssistShow extends EMMessage {
type: "assist/show";
payload?: {
- pipeline_id?: string;
- start_listening?: boolean;
+ pipeline_id: "preferred" | "last_used" | string;
+ start_listening: boolean;
};
}
diff --git a/src/panels/lovelace/common/handle-action.ts b/src/panels/lovelace/common/handle-action.ts
index febf1c848f..bd849bd428 100644
--- a/src/panels/lovelace/common/handle-action.ts
+++ b/src/panels/lovelace/common/handle-action.ts
@@ -164,8 +164,8 @@ export const handleAction = async (
}
case "assist": {
showVoiceCommandDialog(node, hass, {
- start_listening: actionConfig.start_listening,
- pipeline_id: actionConfig.pipeline_id,
+ start_listening: actionConfig.start_listening ?? false,
+ pipeline_id: actionConfig.pipeline_id ?? "last_used",
});
break;
}
diff --git a/src/panels/lovelace/components/hui-action-editor.ts b/src/panels/lovelace/components/hui-action-editor.ts
index 20d5e0f597..6ae48d59f1 100644
--- a/src/panels/lovelace/components/hui-action-editor.ts
+++ b/src/panels/lovelace/components/hui-action-editor.ts
@@ -38,7 +38,9 @@ const ASSIST_SCHEMA = [
{
name: "pipeline_id",
selector: {
- assist_pipeline: {},
+ assist_pipeline: {
+ include_last_used: true,
+ },
},
},
{
diff --git a/src/panels/lovelace/hui-root.ts b/src/panels/lovelace/hui-root.ts
index 0447b6f646..b023483ab9 100644
--- a/src/panels/lovelace/hui-root.ts
+++ b/src/panels/lovelace/hui-root.ts
@@ -567,7 +567,7 @@ class HUIRoot extends LitElement {
if (searchParams.edit === "1") {
this.lovelace!.setEditMode(true);
} else if (searchParams.conversation === "1") {
- showVoiceCommandDialog(this, this.hass);
+ this._showVoiceCommandDialog();
window.history.replaceState(
null,
"",
@@ -793,7 +793,7 @@ class HUIRoot extends LitElement {
}
private _showVoiceCommandDialog(): void {
- showVoiceCommandDialog(this, this.hass);
+ showVoiceCommandDialog(this, this.hass, { pipeline_id: "last_used" });
}
private _handleEnableEditMode(ev: CustomEvent): void {
diff --git a/src/panels/shopping-list/ha-panel-shopping-list.ts b/src/panels/shopping-list/ha-panel-shopping-list.ts
index 94f675a601..a9cfb23eaf 100644
--- a/src/panels/shopping-list/ha-panel-shopping-list.ts
+++ b/src/panels/shopping-list/ha-panel-shopping-list.ts
@@ -76,7 +76,7 @@ class PanelShoppingList extends LitElement {
}
private _showVoiceCommandDialog(): void {
- showVoiceCommandDialog(this, this.hass);
+ showVoiceCommandDialog(this, this.hass, { pipeline_id: "last_used" });
}
static get styles(): CSSResultGroup {
diff --git a/src/translations/en.json b/src/translations/en.json
index 9079fcf245..d7673cff1e 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -398,7 +398,8 @@
},
"pipeline-picker": {
"pipeline": "Assistant",
- "preferred": "Preferred assistant ({preferred})"
+ "preferred": "Preferred assistant ({preferred})",
+ "last_used": "Last used assistant"
},
"theme-picker": {
"theme": "Theme",
From 0ce93263e97a8fa5b57a1d7ea0009f801f66dff1 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 17 Jul 2023 20:26:40 +0000
Subject: [PATCH 064/102] Update typescript-eslint monorepo to v6 (major)
(#17299)
* Update typescript-eslint monorepo to v6
* Remove duplicate values from log severity enum
* Rename ActionHandler interface to avoid class conflict
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Steve Repsher
---
package.json | 4 +-
src/data/integration.ts | 2 -
.../directives/action-handler-directive.ts | 12 +-
yarn.lock | 186 +++++++++---------
4 files changed, 102 insertions(+), 102 deletions(-)
diff --git a/package.json b/package.json
index 45e3c8e65c..ff26d3047e 100644
--- a/package.json
+++ b/package.json
@@ -184,8 +184,8 @@
"@types/sortablejs": "1.15.1",
"@types/tar": "6.1.5",
"@types/webspeechapi": "0.0.29",
- "@typescript-eslint/eslint-plugin": "5.62.0",
- "@typescript-eslint/parser": "5.62.0",
+ "@typescript-eslint/eslint-plugin": "6.0.0",
+ "@typescript-eslint/parser": "6.0.0",
"@web/dev-server": "0.1.38",
"@web/dev-server-rollup": "0.4.1",
"babel-loader": "9.1.3",
diff --git a/src/data/integration.ts b/src/data/integration.ts
index af9478925a..20a73d8235 100644
--- a/src/data/integration.ts
+++ b/src/data/integration.ts
@@ -54,10 +54,8 @@ export interface IntegrationLogInfo {
export enum LogSeverity {
CRITICAL = 50,
- FATAL = 50,
ERROR = 40,
WARNING = 30,
- WARN = 30,
INFO = 20,
DEBUG = 10,
NOTSET = 0,
diff --git a/src/panels/lovelace/common/directives/action-handler-directive.ts b/src/panels/lovelace/common/directives/action-handler-directive.ts
index f7c5bc2d74..1d2b3c87a5 100644
--- a/src/panels/lovelace/common/directives/action-handler-directive.ts
+++ b/src/panels/lovelace/common/directives/action-handler-directive.ts
@@ -21,7 +21,7 @@ const isTouch =
// @ts-ignore
navigator.msMaxTouchPoints > 0;
-interface ActionHandler extends HTMLElement {
+interface ActionHandlerType extends HTMLElement {
holdTime: number;
bind(element: Element, options?: ActionHandlerOptions): void;
}
@@ -43,7 +43,7 @@ declare global {
}
}
-class ActionHandler extends HTMLElement implements ActionHandler {
+class ActionHandler extends HTMLElement implements ActionHandlerType {
public holdTime = 500;
public ripple: Ripple;
@@ -240,23 +240,23 @@ class ActionHandler extends HTMLElement implements ActionHandler {
customElements.define("action-handler", ActionHandler);
-const getActionHandler = (): ActionHandler => {
+const getActionHandler = (): ActionHandlerType => {
const body = document.body;
if (body.querySelector("action-handler")) {
- return body.querySelector("action-handler") as ActionHandler;
+ return body.querySelector("action-handler") as ActionHandlerType;
}
const actionhandler = document.createElement("action-handler");
body.appendChild(actionhandler);
- return actionhandler as ActionHandler;
+ return actionhandler as ActionHandlerType;
};
export const actionHandlerBind = (
element: ActionHandlerElement,
options?: ActionHandlerOptions
) => {
- const actionhandler: ActionHandler = getActionHandler();
+ const actionhandler: ActionHandlerType = getActionHandler();
if (!actionhandler) {
return;
}
diff --git a/yarn.lock b/yarn.lock
index 383f42846b..995136e32b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1552,7 +1552,7 @@ __metadata:
languageName: node
linkType: hard
-"@eslint-community/eslint-utils@npm:^4.2.0":
+"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.3.0":
version: 4.4.0
resolution: "@eslint-community/eslint-utils@npm:4.4.0"
dependencies:
@@ -1563,7 +1563,7 @@ __metadata:
languageName: node
linkType: hard
-"@eslint-community/regexpp@npm:^4.4.0":
+"@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.5.0":
version: 4.5.1
resolution: "@eslint-community/regexpp@npm:4.5.1"
checksum: 6d901166d64998d591fab4db1c2f872981ccd5f6fe066a1ad0a93d4e11855ecae6bfb76660869a469563e8882d4307228cebd41142adb409d182f2966771e57e
@@ -4327,7 +4327,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9":
+"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.11, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9":
version: 7.0.12
resolution: "@types/json-schema@npm:7.0.12"
checksum: 00239e97234eeb5ceefb0c1875d98ade6e922bfec39dd365ec6bd360b5c2f825e612ac4f6e5f1d13601b8b30f378f15e6faa805a3a732f4a1bbe61915163d293
@@ -4649,124 +4649,128 @@ __metadata:
languageName: node
linkType: hard
-"@typescript-eslint/eslint-plugin@npm:5.62.0":
- version: 5.62.0
- resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0"
+"@typescript-eslint/eslint-plugin@npm:6.0.0":
+ version: 6.0.0
+ resolution: "@typescript-eslint/eslint-plugin@npm:6.0.0"
dependencies:
- "@eslint-community/regexpp": ^4.4.0
- "@typescript-eslint/scope-manager": 5.62.0
- "@typescript-eslint/type-utils": 5.62.0
- "@typescript-eslint/utils": 5.62.0
+ "@eslint-community/regexpp": ^4.5.0
+ "@typescript-eslint/scope-manager": 6.0.0
+ "@typescript-eslint/type-utils": 6.0.0
+ "@typescript-eslint/utils": 6.0.0
+ "@typescript-eslint/visitor-keys": 6.0.0
debug: ^4.3.4
+ grapheme-splitter: ^1.0.4
graphemer: ^1.4.0
- ignore: ^5.2.0
+ ignore: ^5.2.4
+ natural-compare: ^1.4.0
natural-compare-lite: ^1.4.0
- semver: ^7.3.7
- tsutils: ^3.21.0
+ semver: ^7.5.0
+ ts-api-utils: ^1.0.1
peerDependencies:
- "@typescript-eslint/parser": ^5.0.0
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha
+ eslint: ^7.0.0 || ^8.0.0
peerDependenciesMeta:
typescript:
optional: true
- checksum: fc104b389c768f9fa7d45a48c86d5c1ad522c1d0512943e782a56b1e3096b2cbcc1eea3fcc590647bf0658eef61aac35120a9c6daf979bf629ad2956deb516a1
+ checksum: 863f30b8ceb24d104fc8a41774e4f597a35525533aa99721198293b51628a2d986dcc6413893f27eb9db5a49c2fd2cc91d3aece8ed23d590f3eb4e9939c3d6ad
languageName: node
linkType: hard
-"@typescript-eslint/parser@npm:5.62.0":
- version: 5.62.0
- resolution: "@typescript-eslint/parser@npm:5.62.0"
+"@typescript-eslint/parser@npm:6.0.0":
+ version: 6.0.0
+ resolution: "@typescript-eslint/parser@npm:6.0.0"
dependencies:
- "@typescript-eslint/scope-manager": 5.62.0
- "@typescript-eslint/types": 5.62.0
- "@typescript-eslint/typescript-estree": 5.62.0
+ "@typescript-eslint/scope-manager": 6.0.0
+ "@typescript-eslint/types": 6.0.0
+ "@typescript-eslint/typescript-estree": 6.0.0
+ "@typescript-eslint/visitor-keys": 6.0.0
debug: ^4.3.4
peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ eslint: ^7.0.0 || ^8.0.0
peerDependenciesMeta:
typescript:
optional: true
- checksum: d168f4c7f21a7a63f47002e2d319bcbb6173597af5c60c1cf2de046b46c76b4930a093619e69faf2d30214c29ab27b54dcf1efc7046a6a6bd6f37f59a990e752
+ checksum: a22f0c8f67eb244134f9d79d78faf1b6e2c0965495d78eef94a5680868f3d0fd9446a3ce5dc1e36dde02587da5d962944f3d83679c712d0b819ac99cdb9f7143
languageName: node
linkType: hard
-"@typescript-eslint/scope-manager@npm:5.62.0":
- version: 5.62.0
- resolution: "@typescript-eslint/scope-manager@npm:5.62.0"
+"@typescript-eslint/scope-manager@npm:6.0.0":
+ version: 6.0.0
+ resolution: "@typescript-eslint/scope-manager@npm:6.0.0"
dependencies:
- "@typescript-eslint/types": 5.62.0
- "@typescript-eslint/visitor-keys": 5.62.0
- checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573
+ "@typescript-eslint/types": 6.0.0
+ "@typescript-eslint/visitor-keys": 6.0.0
+ checksum: 450015be6454f953d0ea0da020ab47597e96a7a15c1002eed16c57430783bd7b045513d57a126606fb35e8971f1ce65fbefd845e3b5496bf75284cbe1681d0b9
languageName: node
linkType: hard
-"@typescript-eslint/type-utils@npm:5.62.0":
- version: 5.62.0
- resolution: "@typescript-eslint/type-utils@npm:5.62.0"
+"@typescript-eslint/type-utils@npm:6.0.0":
+ version: 6.0.0
+ resolution: "@typescript-eslint/type-utils@npm:6.0.0"
dependencies:
- "@typescript-eslint/typescript-estree": 5.62.0
- "@typescript-eslint/utils": 5.62.0
+ "@typescript-eslint/typescript-estree": 6.0.0
+ "@typescript-eslint/utils": 6.0.0
debug: ^4.3.4
- tsutils: ^3.21.0
+ ts-api-utils: ^1.0.1
peerDependencies:
- eslint: "*"
+ eslint: ^7.0.0 || ^8.0.0
peerDependenciesMeta:
typescript:
optional: true
- checksum: fc41eece5f315dfda14320be0da78d3a971d650ea41300be7196934b9715f3fe1120a80207551eb71d39568275dbbcf359bde540d1ca1439d8be15e9885d2739
+ checksum: 53f46237891cfa738f6a4bc766a4dbb8d745b1cb9cbe2d2b40f2a4abcf0327d4aa92d9ce5361e87cd26d82e0159f358e28b0c67759eb053c4fd752654dc9dcb1
languageName: node
linkType: hard
-"@typescript-eslint/types@npm:5.62.0":
- version: 5.62.0
- resolution: "@typescript-eslint/types@npm:5.62.0"
- checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670
+"@typescript-eslint/types@npm:6.0.0":
+ version: 6.0.0
+ resolution: "@typescript-eslint/types@npm:6.0.0"
+ checksum: a2e232b66b0b057152f4a94d7e0be75f32e389c9c1ec9ed9901ed5aab6e5df08c07bde9865710e315d835e4400ec2232f9c3c525b6edf8a85675ebfbfb69d3a5
languageName: node
linkType: hard
-"@typescript-eslint/typescript-estree@npm:5.62.0":
- version: 5.62.0
- resolution: "@typescript-eslint/typescript-estree@npm:5.62.0"
+"@typescript-eslint/typescript-estree@npm:6.0.0":
+ version: 6.0.0
+ resolution: "@typescript-eslint/typescript-estree@npm:6.0.0"
dependencies:
- "@typescript-eslint/types": 5.62.0
- "@typescript-eslint/visitor-keys": 5.62.0
+ "@typescript-eslint/types": 6.0.0
+ "@typescript-eslint/visitor-keys": 6.0.0
debug: ^4.3.4
globby: ^11.1.0
is-glob: ^4.0.3
- semver: ^7.3.7
- tsutils: ^3.21.0
+ semver: ^7.5.0
+ ts-api-utils: ^1.0.1
peerDependenciesMeta:
typescript:
optional: true
- checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52
+ checksum: 6214ff9cc3c4fd7fe03f846e96a498ecf85916083bb60d419bc5a12142cff912670032b1de5ea52ab353ca7eeb4e1cc8fa475a22958b010043c88e274df49859
languageName: node
linkType: hard
-"@typescript-eslint/utils@npm:5.62.0":
- version: 5.62.0
- resolution: "@typescript-eslint/utils@npm:5.62.0"
+"@typescript-eslint/utils@npm:6.0.0":
+ version: 6.0.0
+ resolution: "@typescript-eslint/utils@npm:6.0.0"
dependencies:
- "@eslint-community/eslint-utils": ^4.2.0
- "@types/json-schema": ^7.0.9
+ "@eslint-community/eslint-utils": ^4.3.0
+ "@types/json-schema": ^7.0.11
"@types/semver": ^7.3.12
- "@typescript-eslint/scope-manager": 5.62.0
- "@typescript-eslint/types": 5.62.0
- "@typescript-eslint/typescript-estree": 5.62.0
+ "@typescript-eslint/scope-manager": 6.0.0
+ "@typescript-eslint/types": 6.0.0
+ "@typescript-eslint/typescript-estree": 6.0.0
eslint-scope: ^5.1.1
- semver: ^7.3.7
+ semver: ^7.5.0
peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
- checksum: ee9398c8c5db6d1da09463ca7bf36ed134361e20131ea354b2da16a5fdb6df9ba70c62a388d19f6eebb421af1786dbbd79ba95ddd6ab287324fc171c3e28d931
+ eslint: ^7.0.0 || ^8.0.0
+ checksum: 94b9b616282f6fa1ae50ba371a482a3c8c50268ef8039b4e86d29c445e95025c819358a5cc9955c4668482d97ef026e7a49e7f4b3a4685347136ef5bbd297e4d
languageName: node
linkType: hard
-"@typescript-eslint/visitor-keys@npm:5.62.0":
- version: 5.62.0
- resolution: "@typescript-eslint/visitor-keys@npm:5.62.0"
+"@typescript-eslint/visitor-keys@npm:6.0.0":
+ version: 6.0.0
+ resolution: "@typescript-eslint/visitor-keys@npm:6.0.0"
dependencies:
- "@typescript-eslint/types": 5.62.0
- eslint-visitor-keys: ^3.3.0
- checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35
+ "@typescript-eslint/types": 6.0.0
+ eslint-visitor-keys: ^3.4.1
+ checksum: b0d9848a4490174db1d25b5f336548bb11dde4e0ce664c3dc341bed89fb3a3ada091aeb7f5d2d371433815332d93339c6cb77f7a24469c329c3d055b15237bfa
languageName: node
linkType: hard
@@ -9322,6 +9326,13 @@ __metadata:
languageName: node
linkType: hard
+"grapheme-splitter@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "grapheme-splitter@npm:1.0.4"
+ checksum: 0c22ec54dee1b05cd480f78cf14f732cb5b108edc073572c4ec205df4cd63f30f8db8025afc5debc8835a8ddeacf648a1c7992fe3dcd6ad38f9a476d84906620
+ languageName: node
+ linkType: hard
+
"graphemer@npm:^1.4.0":
version: 1.4.0
resolution: "graphemer@npm:1.4.0"
@@ -9675,8 +9686,8 @@ __metadata:
"@types/sortablejs": 1.15.1
"@types/tar": 6.1.5
"@types/webspeechapi": 0.0.29
- "@typescript-eslint/eslint-plugin": 5.62.0
- "@typescript-eslint/parser": 5.62.0
+ "@typescript-eslint/eslint-plugin": 6.0.0
+ "@typescript-eslint/parser": 6.0.0
"@vaadin/combo-box": 24.1.3
"@vaadin/vaadin-themable-mixin": 24.1.3
"@vibrant/color": 3.2.1-alpha.1
@@ -10064,7 +10075,7 @@ __metadata:
languageName: node
linkType: hard
-"ignore@npm:^5.2.0":
+"ignore@npm:^5.2.0, ignore@npm:^5.2.4":
version: 5.2.4
resolution: "ignore@npm:5.2.4"
checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef
@@ -14061,14 +14072,14 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7":
- version: 7.5.2
- resolution: "semver@npm:7.5.2"
+"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.5.0":
+ version: 7.5.4
+ resolution: "semver@npm:7.5.4"
dependencies:
lru-cache: ^6.0.0
bin:
semver: bin/semver.js
- checksum: 3fdf5d1e6f170fe8bcc41669e31787649af91af7f54f05c71d0865bb7aa27e8b92f68b3e6b582483e2c1c648008bc84249d2cd86301771fe5cbf7621d1fe5375
+ checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3
languageName: node
linkType: hard
@@ -15217,6 +15228,15 @@ __metadata:
languageName: node
linkType: hard
+"ts-api-utils@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "ts-api-utils@npm:1.0.1"
+ peerDependencies:
+ typescript: ">=4.2.0"
+ checksum: 78794fc7270d295b36c1ac613465b5dc7e7226907a533125b30f177efef9dd630d4e503b00be31b44335eb2ebf9e136ebe97353f8fc5d383885d5fead9d54c09
+ languageName: node
+ linkType: hard
+
"ts-lit-plugin@npm:2.0.0-pre.1":
version: 2.0.0-pre.1
resolution: "ts-lit-plugin@npm:2.0.0-pre.1"
@@ -15246,13 +15266,6 @@ __metadata:
languageName: node
linkType: hard
-"tslib@npm:^1.8.1":
- version: 1.14.1
- resolution: "tslib@npm:1.14.1"
- checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd
- languageName: node
- linkType: hard
-
"tslib@npm:^2.0.1, tslib@npm:^2.0.2, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0":
version: 2.5.3
resolution: "tslib@npm:2.5.3"
@@ -15353,17 +15366,6 @@ __metadata:
languageName: node
linkType: hard
-"tsutils@npm:^3.21.0":
- version: 3.21.0
- resolution: "tsutils@npm:3.21.0"
- dependencies:
- tslib: ^1.8.1
- peerDependencies:
- typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
- checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48
- languageName: node
- linkType: hard
-
"type-check@npm:^0.4.0, type-check@npm:~0.4.0":
version: 0.4.0
resolution: "type-check@npm:0.4.0"
From d7e58a00caa3434c1d2ed42940b12a4bcdd15a5c Mon Sep 17 00:00:00 2001
From: Bram Kragten
Date: Tue, 18 Jul 2023 09:56:07 +0200
Subject: [PATCH 065/102] Add support for registering config panels (#17296)
---
src/data/integration.ts | 10 +++++-----
.../integrations/ha-config-integration-page.ts | 15 +++++++++++----
src/types.ts | 1 +
3 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/src/data/integration.ts b/src/data/integration.ts
index 20a73d8235..151140bebd 100644
--- a/src/data/integration.ts
+++ b/src/data/integration.ts
@@ -4,11 +4,11 @@ import { HomeAssistant } from "../types";
import { debounce } from "../common/util/debounce";
export const integrationsWithPanel = {
- matter: "/config/matter",
- mqtt: "/config/mqtt",
- thread: "/config/thread",
- zha: "/config/zha/dashboard",
- zwave_js: "/config/zwave_js/dashboard",
+ matter: "config/matter",
+ mqtt: "config/mqtt",
+ thread: "config/thread",
+ zha: "config/zha/dashboard",
+ zwave_js: "config/zwave_js/dashboard",
};
export type IntegrationType =
diff --git a/src/panels/config/integrations/ha-config-integration-page.ts b/src/panels/config/integrations/ha-config-integration-page.ts
index 9248d0c805..b05b15b3ba 100644
--- a/src/panels/config/integrations/ha-config-integration-page.ts
+++ b/src/panels/config/integrations/ha-config-integration-page.ts
@@ -135,6 +135,13 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) {
window.location.hash.substring(1)
);
+ private _configPanel = memoizeOne(
+ (domain: string, panels: HomeAssistant["panels"]): string | undefined =>
+ Object.values(panels).find(
+ (panel) => panel.config_panel_domain === domain
+ )?.url_path || integrationsWithPanel[domain]
+ );
+
private _domainConfigEntries = memoizeOne(
(domain: string, configEntries?: ConfigEntry[]): ConfigEntry[] =>
configEntries
@@ -638,6 +645,8 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) {
}
}
+ const configPanel = this._configPanel(item.domain, this.hass.panels);
+
return html`
${this.hass.localize("ui.common.enable")}
`
- : item.domain in integrationsWithPanel &&
+ : configPanel &&
(item.domain !== "matter" || isDevVersion(this.hass.config.version))
? html`
${this.hass.localize(
"ui.panel.config.integrations.config_entry.configure"
diff --git a/src/types.ts b/src/types.ts
index 7dcfee537f..bfdf9768e2 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -120,6 +120,7 @@ export interface PanelInfo | null> {
icon: string | null;
title: string | null;
url_path: string;
+ config_panel_domain?: string;
}
export interface Panels {
From bc3295d8519fda0d20c16ccc079f0ee9a0fb1b59 Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Tue, 18 Jul 2023 11:57:20 +0200
Subject: [PATCH 066/102] Add prefix support to text selector (#17335)
---
src/components/ha-selector/ha-selector-text.ts | 1 +
src/data/selector.ts | 1 +
src/panels/config/script/ha-script-editor.ts | 4 +++-
3 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/components/ha-selector/ha-selector-text.ts b/src/components/ha-selector/ha-selector-text.ts
index fb8033790a..2c89b3c588 100644
--- a/src/components/ha-selector/ha-selector-text.ts
+++ b/src/components/ha-selector/ha-selector-text.ts
@@ -65,6 +65,7 @@ export class HaTextSelector extends LitElement {
.type=${this._unmaskedPassword ? "text" : this.selector.text?.type}
@input=${this._handleChange}
.label=${this.label || ""}
+ .prefix=${this.selector.text?.prefix}
.suffix=${this.selector.text?.type === "password"
? // reserve some space for the icon.
html``
diff --git a/src/data/selector.ts b/src/data/selector.ts
index 0a24bc2def..5708470a45 100644
--- a/src/data/selector.ts
+++ b/src/data/selector.ts
@@ -329,6 +329,7 @@ export interface StringSelector {
| "time"
| "datetime-local"
| "color";
+ prefix?: string;
suffix?: string;
autocomplete?: string;
} | null;
diff --git a/src/panels/config/script/ha-script-editor.ts b/src/panels/config/script/ha-script-editor.ts
index 177a5ac8a3..c9f1048e63 100644
--- a/src/panels/config/script/ha-script-editor.ts
+++ b/src/panels/config/script/ha-script-editor.ts
@@ -122,7 +122,9 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
{
name: "id",
selector: {
- text: {},
+ text: {
+ prefix: "script.",
+ },
},
},
] as const)
From d56273ec25ff661d8889e6971eeabc08ac5e466b Mon Sep 17 00:00:00 2001
From: Bram Kragten
Date: Tue, 18 Jul 2023 15:00:41 +0200
Subject: [PATCH 067/102] Use nominatim from openstreetmap for location search
in onboarding (#17287)
* Use nominatim from openstreetmap for location search in onboarding
* Update text, add user agent
* Handle errors better, add email address
* remove detect text
* Use `ui.common.search`
* Update attribution location
* Apply suggestions from code review
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
* Update src/translations/en.json
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
* Remove unused style
* Increase line-height
* Apply suggestions
---------
Co-authored-by: Paul Bottein
Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com>
---
src/auth/ha-authorize.ts | 4 +
src/components/map/ha-locations-editor.ts | 41 +-
src/components/map/ha-map.ts | 26 +-
src/data/currency.ts | 254 ++++++++++
src/data/openstreetmap.ts | 69 +++
src/html/onboarding.html.template | 3 +-
src/onboarding/onboarding-analytics.ts | 6 +-
src/onboarding/onboarding-core-config.ts | 220 +++------
src/onboarding/onboarding-integrations.ts | 4 +
src/onboarding/onboarding-location.ts | 542 ++++++++++++++++++++++
src/onboarding/onboarding-name.ts | 111 +++++
src/translations/en.json | 10 +-
12 files changed, 1121 insertions(+), 169 deletions(-)
create mode 100644 src/data/currency.ts
create mode 100644 src/data/openstreetmap.ts
create mode 100644 src/onboarding/onboarding-location.ts
create mode 100644 src/onboarding/onboarding-name.ts
diff --git a/src/auth/ha-authorize.ts b/src/auth/ha-authorize.ts
index deadcf765e..91fed8ef07 100644
--- a/src/auth/ha-authorize.ts
+++ b/src/auth/ha-authorize.ts
@@ -182,6 +182,10 @@ export class HaAuthorize extends litLocalizeLiteMixin(LitElement) {
display: block;
margin-top: 24px;
}
+ p {
+ font-size: 14px;
+ line-height: 20px;
+ }
`;
}
}
diff --git a/src/components/map/ha-locations-editor.ts b/src/components/map/ha-locations-editor.ts
index 9995094c95..76edc2606f 100644
--- a/src/components/map/ha-locations-editor.ts
+++ b/src/components/map/ha-locations-editor.ts
@@ -1,8 +1,9 @@
-import {
+import type {
Circle,
DivIcon,
DragEndEvent,
LatLng,
+ LatLngExpression,
Marker,
MarkerOptions,
} from "leaflet";
@@ -22,6 +23,8 @@ import type { HomeAssistant } from "../../types";
import "../ha-input-helper-text";
import "./ha-map";
import type { HaMap } from "./ha-map";
+import { HaIcon } from "../ha-icon";
+import { HaSvgIcon } from "../ha-svg-icon";
declare global {
// for fire event
@@ -40,6 +43,7 @@ export interface MarkerLocation {
name?: string;
id: string;
icon?: string;
+ iconPath?: string;
radius_color?: string;
location_editable?: boolean;
radius_editable?: boolean;
@@ -81,11 +85,21 @@ export class HaLocationsEditor extends LitElement {
);
}
- public fitMap(): void {
- this.map.fitMap();
+ public fitMap(options?: { zoom?: number; pad?: number }): void {
+ this.map.fitMap(options);
}
- public async fitMarker(id: string): Promise {
+ public fitBounds(
+ boundingbox: LatLngExpression[],
+ options?: { zoom?: number; pad?: number }
+ ) {
+ this.map.fitBounds(boundingbox, options);
+ }
+
+ public async fitMarker(
+ id: string,
+ options?: { zoom?: number }
+ ): Promise {
if (!this.Leaflet) {
await this._loadPromise;
}
@@ -104,7 +118,10 @@ export class HaLocationsEditor extends LitElement {
if (circle) {
this.map.leafletMap.fitBounds(circle.getBounds());
} else {
- this.map.leafletMap.setView(marker.getLatLng(), this.zoom);
+ this.map.leafletMap.setView(
+ marker.getLatLng(),
+ options?.zoom || this.zoom
+ );
}
}
}
@@ -199,15 +216,21 @@ export class HaLocationsEditor extends LitElement {
this.locations.forEach((location: MarkerLocation) => {
let icon: DivIcon | undefined;
- if (location.icon) {
+ if (location.icon || location.iconPath) {
// create icon
const el = document.createElement("div");
el.className = "named-icon";
- if (location.name) {
+ if (location.name !== undefined) {
el.innerText = location.name;
}
- const iconEl = document.createElement("ha-icon");
- iconEl.setAttribute("icon", location.icon);
+ let iconEl: HaIcon | HaSvgIcon;
+ if (location.icon) {
+ iconEl = document.createElement("ha-icon");
+ iconEl.setAttribute("icon", location.icon);
+ } else {
+ iconEl = document.createElement("ha-svg-icon");
+ iconEl.setAttribute("path", location.iconPath!);
+ }
el.prepend(iconEl);
icon = this.Leaflet!.divIcon({
diff --git a/src/components/map/ha-map.ts b/src/components/map/ha-map.ts
index 507657ce15..8ff0b4275c 100644
--- a/src/components/map/ha-map.ts
+++ b/src/components/map/ha-map.ts
@@ -1,7 +1,8 @@
-import {
+import type {
Circle,
CircleMarker,
LatLngTuple,
+ LatLngExpression,
Layer,
Map,
Marker,
@@ -162,7 +163,7 @@ export class HaMap extends ReactiveElement {
this._loaded = true;
}
- public fitMap(): void {
+ public fitMap(options?: { zoom?: number; pad?: number }): void {
if (!this.leafletMap || !this.Leaflet || !this.hass) {
return;
}
@@ -173,7 +174,7 @@ export class HaMap extends ReactiveElement {
this.hass.config.latitude,
this.hass.config.longitude
),
- this.zoom
+ options?.zoom || this.zoom
);
return;
}
@@ -196,11 +197,22 @@ export class HaMap extends ReactiveElement {
);
});
- if (!this.layers) {
- bounds = bounds.pad(0.5);
- }
+ bounds = bounds.pad(options?.pad ?? 0.5);
- this.leafletMap.fitBounds(bounds, { maxZoom: this.zoom });
+ this.leafletMap.fitBounds(bounds, { maxZoom: options?.zoom || this.zoom });
+ }
+
+ public fitBounds(
+ boundingbox: LatLngExpression[],
+ options?: { zoom?: number; pad?: number }
+ ) {
+ if (!this.leafletMap || !this.Leaflet || !this.hass) {
+ return;
+ }
+ const bounds = this.Leaflet.latLngBounds(boundingbox).pad(
+ options?.pad ?? 0.5
+ );
+ this.leafletMap.fitBounds(bounds, { maxZoom: options?.zoom || this.zoom });
}
private _drawLayers(prevLayers: Layer[] | undefined): void {
diff --git a/src/data/currency.ts b/src/data/currency.ts
new file mode 100644
index 0000000000..a263641615
--- /dev/null
+++ b/src/data/currency.ts
@@ -0,0 +1,254 @@
+// From http://country.io/currency.json
+
+export const countryCurrency = {
+ BD: "BDT",
+ BE: "EUR",
+ BF: "XOF",
+ BG: "BGN",
+ BA: "BAM",
+ BB: "BBD",
+ WF: "XPF",
+ BL: "EUR",
+ BM: "BMD",
+ BN: "BND",
+ BO: "BOB",
+ BH: "BHD",
+ BI: "BIF",
+ BJ: "XOF",
+ BT: "BTN",
+ JM: "JMD",
+ BV: "NOK",
+ BW: "BWP",
+ WS: "WST",
+ BQ: "USD",
+ BR: "BRL",
+ BS: "BSD",
+ JE: "GBP",
+ BY: "BYN",
+ BZ: "BZD",
+ RU: "RUB",
+ RW: "RWF",
+ RS: "RSD",
+ TL: "USD",
+ RE: "EUR",
+ TM: "TMT",
+ TJ: "TJS",
+ RO: "RON",
+ TK: "NZD",
+ GW: "XOF",
+ GU: "USD",
+ GT: "GTQ",
+ GS: "GBP",
+ GR: "EUR",
+ GQ: "XAF",
+ GP: "EUR",
+ JP: "JPY",
+ GY: "GYD",
+ GG: "GBP",
+ GF: "EUR",
+ GE: "GEL",
+ GD: "XCD",
+ GB: "GBP",
+ GA: "XAF",
+ SV: "USD",
+ GN: "GNF",
+ GM: "GMD",
+ GL: "DKK",
+ GI: "GIP",
+ GH: "GHS",
+ OM: "OMR",
+ TN: "TND",
+ JO: "JOD",
+ HR: "EUR",
+ HT: "HTG",
+ HU: "HUF",
+ HK: "HKD",
+ HN: "HNL",
+ HM: "AUD",
+ VE: "VEF",
+ PR: "USD",
+ PS: "ILS",
+ PW: "USD",
+ PT: "EUR",
+ SJ: "NOK",
+ PY: "PYG",
+ IQ: "IQD",
+ PA: "PAB",
+ PF: "XPF",
+ PG: "PGK",
+ PE: "PEN",
+ PK: "PKR",
+ PH: "PHP",
+ PN: "NZD",
+ PL: "PLN",
+ PM: "EUR",
+ ZM: "ZMK",
+ EH: "MAD",
+ EE: "EUR",
+ EG: "EGP",
+ ZA: "ZAR",
+ EC: "USD",
+ IT: "EUR",
+ VN: "VND",
+ SB: "SBD",
+ ET: "ETB",
+ SO: "SOS",
+ ZW: "ZWL",
+ SA: "SAR",
+ ES: "EUR",
+ ER: "ERN",
+ ME: "EUR",
+ MD: "MDL",
+ MG: "MGA",
+ MF: "EUR",
+ MA: "MAD",
+ MC: "EUR",
+ UZ: "UZS",
+ MM: "MMK",
+ ML: "XOF",
+ MO: "MOP",
+ MN: "MNT",
+ MH: "USD",
+ MK: "MKD",
+ MU: "MUR",
+ MT: "EUR",
+ MW: "MWK",
+ MV: "MVR",
+ MQ: "EUR",
+ MP: "USD",
+ MS: "XCD",
+ MR: "MRO",
+ IM: "GBP",
+ UG: "UGX",
+ TZ: "TZS",
+ MY: "MYR",
+ MX: "MXN",
+ IL: "ILS",
+ FR: "EUR",
+ IO: "USD",
+ SH: "SHP",
+ FI: "EUR",
+ FJ: "FJD",
+ FK: "FKP",
+ FM: "USD",
+ FO: "DKK",
+ NI: "NIO",
+ NL: "EUR",
+ NO: "NOK",
+ NA: "NAD",
+ VU: "VUV",
+ NC: "XPF",
+ NE: "XOF",
+ NF: "AUD",
+ NG: "NGN",
+ NZ: "NZD",
+ NP: "NPR",
+ NR: "AUD",
+ NU: "NZD",
+ CK: "NZD",
+ XK: "EUR",
+ CI: "XOF",
+ CH: "CHF",
+ CO: "COP",
+ CN: "CNY",
+ CM: "XAF",
+ CL: "CLP",
+ CC: "AUD",
+ CA: "CAD",
+ CG: "XAF",
+ CF: "XAF",
+ CD: "CDF",
+ CZ: "CZK",
+ CY: "EUR",
+ CX: "AUD",
+ CR: "CRC",
+ CW: "ANG",
+ CV: "CVE",
+ CU: "CUP",
+ SZ: "SZL",
+ SY: "SYP",
+ SX: "ANG",
+ KG: "KGS",
+ KE: "KES",
+ SS: "SSP",
+ SR: "SRD",
+ KI: "AUD",
+ KH: "KHR",
+ KN: "XCD",
+ KM: "KMF",
+ ST: "STD",
+ SK: "EUR",
+ KR: "KRW",
+ SI: "EUR",
+ KP: "KPW",
+ KW: "KWD",
+ SN: "XOF",
+ SM: "EUR",
+ SL: "SLL",
+ SC: "SCR",
+ KZ: "KZT",
+ KY: "KYD",
+ SG: "SGD",
+ SE: "SEK",
+ SD: "SDG",
+ DO: "DOP",
+ DM: "XCD",
+ DJ: "DJF",
+ DK: "DKK",
+ VG: "USD",
+ DE: "EUR",
+ YE: "YER",
+ DZ: "DZD",
+ US: "USD",
+ UY: "UYU",
+ YT: "EUR",
+ UM: "USD",
+ LB: "LBP",
+ LC: "XCD",
+ LA: "LAK",
+ TV: "AUD",
+ TW: "TWD",
+ TT: "TTD",
+ TR: "TRY",
+ LK: "LKR",
+ LI: "CHF",
+ LV: "EUR",
+ TO: "TOP",
+ LT: "EUR",
+ LU: "EUR",
+ LR: "LRD",
+ LS: "LSL",
+ TH: "THB",
+ TF: "EUR",
+ TG: "XOF",
+ TD: "XAF",
+ TC: "USD",
+ LY: "LYD",
+ VA: "EUR",
+ VC: "XCD",
+ AE: "AED",
+ AD: "EUR",
+ AG: "XCD",
+ AF: "AFN",
+ AI: "XCD",
+ VI: "USD",
+ IS: "ISK",
+ IR: "IRR",
+ AM: "AMD",
+ AL: "ALL",
+ AO: "AOA",
+ AQ: "",
+ AS: "USD",
+ AR: "ARS",
+ AU: "AUD",
+ AT: "EUR",
+ AW: "AWG",
+ IN: "INR",
+ AX: "EUR",
+ AZ: "AZN",
+ IE: "EUR",
+ ID: "IDR",
+ UA: "UAH",
+ QA: "QAR",
+ MZ: "MZN",
+};
diff --git a/src/data/openstreetmap.ts b/src/data/openstreetmap.ts
new file mode 100644
index 0000000000..3428d46f74
--- /dev/null
+++ b/src/data/openstreetmap.ts
@@ -0,0 +1,69 @@
+import { HomeAssistant } from "../types";
+
+export interface OpenStreetMapPlace {
+ place_id: number;
+ licence: string;
+ osm_type: string;
+ osm_id: number;
+ lat: string;
+ lon: string;
+ place_rank: number;
+ category: string;
+ type: string;
+ importance: number;
+ addresstype: string;
+ name: string | null;
+ display_name: string;
+ address: {
+ house_number?: string;
+ road?: string;
+ neighbourhood?: string;
+ city?: string;
+ municipality?: string;
+ state?: string;
+ country?: string;
+ postcode?: string;
+ country_code: string;
+ [key: string]: string | undefined;
+ };
+ boundingbox: number[];
+}
+
+export const searchPlaces = (
+ address: string,
+ hass: HomeAssistant,
+ addressdetails?: boolean,
+ limit?: number
+): Promise =>
+ fetch(
+ `https://nominatim.openstreetmap.org/search.php?q=${address}&format=jsonv2${
+ limit ? `&limit=${limit}` : ""
+ }${addressdetails ? "&addressdetails=1" : ""}&accept-language=${
+ hass.locale.language
+ }&email=abuse@home-assistant.io`,
+ { headers: { "User-Agent": `HomeAssistant/${hass.config.version}` } }
+ ).then((res) => {
+ if (res.ok) {
+ return res.json();
+ }
+ throw new Error(res.statusText);
+ });
+
+export const reverseGeocode = (
+ location: [number, number],
+ hass: HomeAssistant,
+ zoom?: number
+): Promise =>
+ fetch(
+ `https://nominatim.openstreetmap.org/reverse.php?lat=${location[0]}&lon=${
+ location[1]
+ }&accept-language=${hass.locale.language}&zoom=${
+ zoom ?? 18
+ }&format=jsonv2&email=abuse@home-assistant.io`,
+ { headers: { "User-Agent": `HomeAssistant/${hass.config.version}` } }
+ ).then((res) => {
+ if (res.ok) {
+ return res.json();
+ }
+ throw new Error(res.statusText);
+ });
diff --git a/src/html/onboarding.html.template b/src/html/onboarding.html.template
index 7e34e0bc7a..1824f4727b 100644
--- a/src/html/onboarding.html.template
+++ b/src/html/onboarding.html.template
@@ -11,13 +11,14 @@
}
body {
height: auto;
+ padding: 64px 0;
}
.content {
box-sizing: border-box;
padding: 20px 16px;
border-radius: var(--ha-card-border-radius, 12px);
max-width: 432px;
- margin: 64px auto 0;
+ margin: 0 auto;
box-shadow: var(
--ha-card-box-shadow,
rgba(0, 0, 0, 0.25) 0px 54px 55px,
diff --git a/src/onboarding/onboarding-analytics.ts b/src/onboarding/onboarding-analytics.ts
index 09c19a6f98..aeddcb4cc7 100644
--- a/src/onboarding/onboarding-analytics.ts
+++ b/src/onboarding/onboarding-analytics.ts
@@ -82,10 +82,13 @@ class OnboardingAnalytics extends LitElement {
static get styles(): CSSResultGroup {
return css`
+ p {
+ font-size: 14px;
+ line-height: 20px;
+ }
.error {
color: var(--error-color);
}
-
.footer {
margin-top: 16px;
display: flex;
@@ -93,7 +96,6 @@ class OnboardingAnalytics extends LitElement {
align-items: center;
flex-direction: row-reverse;
}
-
a {
color: var(--primary-color);
}
diff --git a/src/onboarding/onboarding-core-config.ts b/src/onboarding/onboarding-core-config.ts
index 46621294f4..3ea32cd556 100644
--- a/src/onboarding/onboarding-core-config.ts
+++ b/src/onboarding/onboarding-core-config.ts
@@ -5,10 +5,10 @@ import {
html,
LitElement,
nothing,
+ PropertyValues,
TemplateResult,
} from "lit";
-import { customElement, property, query, state } from "lit/decorators";
-import memoizeOne from "memoize-one";
+import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../common/dom/fire_event";
import type { LocalizeFunc } from "../common/translations/localize";
import "../components/ha-alert";
@@ -22,22 +22,13 @@ import "../components/ha-textfield";
import type { HaTextField } from "../components/ha-textfield";
import "../components/ha-timezone-picker";
import "../components/map/ha-locations-editor";
-import type {
- HaLocationsEditor,
- MarkerLocation,
-} from "../components/map/ha-locations-editor";
-import {
- ConfigUpdateValues,
- detectCoreConfig,
- saveCoreConfig,
-} from "../data/core";
+import { ConfigUpdateValues, saveCoreConfig } from "../data/core";
+import { countryCurrency } from "../data/currency";
import { onboardCoreConfigStep } from "../data/onboarding";
import type { HomeAssistant, ValueChangedEvent } from "../types";
import { getLocalLanguage } from "../util/common-translation";
-
-const amsterdam: [number, number] = [52.3731339, 4.8903147];
-const mql = matchMedia("(prefers-color-scheme: dark)");
-const locationMarkerId = "location";
+import "./onboarding-location";
+import "./onboarding-name";
@customElement("onboarding-core-config")
class OnboardingCoreConfig extends LitElement {
@@ -57,19 +48,29 @@ class OnboardingCoreConfig extends LitElement {
@state() private _currency?: ConfigUpdateValues["currency"];
- @state() private _timeZone? =
- Intl.DateTimeFormat?.().resolvedOptions?.().timeZone;
+ @state() private _timeZone?: ConfigUpdateValues["time_zone"];
- @state() private _language: ConfigUpdateValues["language"] =
- getLocalLanguage();
+ @state() private _language: ConfigUpdateValues["language"];
@state() private _country?: ConfigUpdateValues["country"];
@state() private _error?: string;
- @query("ha-locations-editor", true) private map!: HaLocationsEditor;
-
protected render(): TemplateResult {
+ if (!this._name) {
+ return html``;
+ }
+ if (!this._location) {
+ return html``;
+ }
return html`
${
this._error
@@ -78,55 +79,11 @@ class OnboardingCoreConfig extends LitElement {
}
- ${this.onboardingLocalize(
- "ui.panel.page-onboarding.core-config.intro",
- "name",
- this.hass.user!.name
- )}
+ ${this.onboardingLocalize(
+ "ui.panel.page-onboarding.core-config.intro_core_config"
+ )}
-
-
-
-
- ${this.onboardingLocalize(
- "ui.panel.page-onboarding.core-config.intro_location"
- )}
-
-
-
-
- ${this.onboardingLocalize(
- "ui.panel.page-onboarding.core-config.intro_location_detect"
- )}
-
-
- ${this.onboardingLocalize(
- "ui.panel.page-onboarding.core-config.button_detect"
- )}
-
-
-
-
-
-
-
-
this.renderRoot.querySelector("ha-textfield")!.focus(),
- 100
- );
- this.addEventListener("keypress", (ev) => {
- if (ev.key === "Enter") {
+ this.addEventListener("keyup", (ev) => {
+ if (this._location && ev.key === "Enter") {
this._save(ev);
}
});
}
- private get _nameValue() {
- return this._name !== undefined
- ? this._name
- : this.onboardingLocalize(
- "ui.panel.page-onboarding.core-config.location_name_default"
- );
- }
-
- private get _locationValue() {
- return this._location || amsterdam;
- }
-
private get _elevationValue() {
return this._elevation !== undefined ? this._elevation : 0;
}
@@ -324,17 +279,6 @@ class OnboardingCoreConfig extends LitElement {
return this._currency !== undefined ? this._currency : "";
}
- private _markerLocation = memoizeOne(
- (location: [number, number]): MarkerLocation[] => [
- {
- id: locationMarkerId,
- latitude: location[0],
- longitude: location[1],
- location_editable: true,
- },
- ]
- );
-
private _handleValueChanged(ev: ValueChangedEvent) {
const target = ev.currentTarget as HTMLElement;
this[`_${target.getAttribute("name")}`] = ev.detail.value;
@@ -345,8 +289,25 @@ class OnboardingCoreConfig extends LitElement {
this[`_${target.name}`] = target.value;
}
- private _locationChanged(ev) {
- this._location = ev.detail.location;
+ private _nameChanged(ev: CustomEvent) {
+ this._name = ev.detail.value;
+ }
+
+ private async _locationChanged(ev) {
+ this._location = ev.detail.value.location;
+ this._country = ev.detail.value.country;
+ this._elevation = ev.detail.value.elevation;
+ this._currency = ev.detail.value.currency;
+ this._language = ev.detail.value.language || getLocalLanguage();
+ this._timeZone =
+ ev.detail.value.timezone ||
+ Intl.DateTimeFormat?.().resolvedOptions?.().timeZone;
+ this._unitSystem = ev.detail.value.unit_system;
+ await this.updateComplete;
+ setTimeout(
+ () => this.renderRoot.querySelector("ha-textfield")!.focus(),
+ 100
+ );
}
private _unitSystemChanged(ev: CustomEvent) {
@@ -355,55 +316,17 @@ class OnboardingCoreConfig extends LitElement {
| "us_customary";
}
- private async _detect() {
- this._working = true;
- try {
- const values = await detectCoreConfig(this.hass);
-
- if (values.latitude && values.longitude) {
- this.map.addEventListener(
- "markers-updated",
- () => {
- this.map.fitMarker(locationMarkerId);
- },
- {
- once: true,
- }
- );
- this._location = [Number(values.latitude), Number(values.longitude)];
- }
- if (values.elevation) {
- this._elevation = String(values.elevation);
- }
- if (values.unit_system) {
- this._unitSystem = values.unit_system;
- }
- if (values.time_zone) {
- this._timeZone = values.time_zone;
- }
- if (values.currency) {
- this._currency = values.currency;
- }
- if (values.country) {
- this._country = values.country;
- }
- this._language = getLocalLanguage();
- } catch (err: any) {
- this._error = `Failed to detect location information: ${err.message}`;
- } finally {
- this._working = false;
- }
- }
-
private async _save(ev) {
+ if (!this._location) {
+ return;
+ }
ev.preventDefault();
this._working = true;
try {
- const location = this._locationValue;
await saveCoreConfig(this.hass, {
- location_name: this._nameValue,
- latitude: location[0],
- longitude: location[1],
+ location_name: this._name,
+ latitude: this._location[0],
+ longitude: this._location[1],
elevation: Number(this._elevationValue),
unit_system: this._unitSystemValue,
time_zone: this._timeZoneValue || "UTC",
@@ -436,12 +359,13 @@ class OnboardingCoreConfig extends LitElement {
color: var(--secondary-text-color);
}
- ha-textfield {
- display: block;
+ p {
+ font-size: 14px;
+ line-height: 20px;
}
- ha-locations-editor {
- height: 200px;
+ ha-textfield {
+ display: block;
}
.flex {
diff --git a/src/onboarding/onboarding-integrations.ts b/src/onboarding/onboarding-integrations.ts
index 56622a750f..c2c145359a 100644
--- a/src/onboarding/onboarding-integrations.ts
+++ b/src/onboarding/onboarding-integrations.ts
@@ -211,6 +211,10 @@ class OnboardingIntegrations extends SubscribeMixin(LitElement) {
static get styles(): CSSResultGroup {
return css`
+ p {
+ font-size: 14px;
+ line-height: 20px;
+ }
.badges {
margin-top: 24px;
display: flex;
diff --git a/src/onboarding/onboarding-location.ts b/src/onboarding/onboarding-location.ts
new file mode 100644
index 0000000000..e75a64b100
--- /dev/null
+++ b/src/onboarding/onboarding-location.ts
@@ -0,0 +1,542 @@
+import "@material/mwc-button/mwc-button";
+import { mdiCrosshairsGps, mdiMapMarker, mdiMapSearchOutline } from "@mdi/js";
+import {
+ css,
+ CSSResultGroup,
+ html,
+ LitElement,
+ nothing,
+ TemplateResult,
+} from "lit";
+import { customElement, property, query, state } from "lit/decorators";
+import memoizeOne from "memoize-one";
+import type { LocalizeFunc } from "../common/translations/localize";
+import "../components/ha-alert";
+import "../components/ha-formfield";
+import "../components/ha-radio";
+import "../components/ha-textfield";
+import type { HaTextField } from "../components/ha-textfield";
+import "../components/map/ha-locations-editor";
+import type {
+ HaLocationsEditor,
+ MarkerLocation,
+} from "../components/map/ha-locations-editor";
+import { ConfigUpdateValues, detectCoreConfig } from "../data/core";
+import { showConfirmationDialog } from "../dialogs/generic/show-dialog-box";
+import type { HomeAssistant } from "../types";
+import { fireEvent } from "../common/dom/fire_event";
+import {
+ OpenStreetMapPlace,
+ reverseGeocode,
+ searchPlaces,
+} from "../data/openstreetmap";
+
+const AMSTERDAM: [number, number] = [52.3731339, 4.8903147];
+const mql = matchMedia("(prefers-color-scheme: dark)");
+const LOCATION_MARKER_ID = "location";
+
+@customElement("onboarding-location")
+class OnboardingLocation extends LitElement {
+ @property({ attribute: false }) public hass!: HomeAssistant;
+
+ @property() public onboardingLocalize!: LocalizeFunc;
+
+ @state() private _working = false;
+
+ @state() private _location?: [number, number];
+
+ @state() private _places?: OpenStreetMapPlace[] | null;
+
+ @state() private _error?: string;
+
+ @state() private _search = false;
+
+ @state() private _highlightedMarker?: number;
+
+ private _elevation?: string;
+
+ private _unitSystem?: ConfigUpdateValues["unit_system"];
+
+ private _currency?: ConfigUpdateValues["currency"];
+
+ private _timeZone?: ConfigUpdateValues["time_zone"];
+
+ private _country?: ConfigUpdateValues["country"];
+
+ @query("ha-locations-editor", true) private map!: HaLocationsEditor;
+
+ protected render(): TemplateResult {
+ const addressAttribution = this.onboardingLocalize(
+ "ui.panel.page-onboarding.core-config.location_address",
+ {
+ openstreetmap: html`OpenStreetMap`,
+ osm_privacy_policy: html`${this.onboardingLocalize(
+ "ui.panel.page-onboarding.core-config.osm_privacy_policy"
+ )}`,
+ }
+ );
+
+ return html`
+ ${this._error
+ ? html`${this._error}`
+ : nothing}
+
+
+ ${this.onboardingLocalize(
+ "ui.panel.page-onboarding.core-config.intro_location"
+ )}
+
+
+
+ ${this._working
+ ? html`
+
+ `
+ : html`
+
+ `}
+
+ ${this._places !== undefined
+ ? html`
+
+ ${this._places?.length
+ ? this._places.map((place) => {
+ const primary = [
+ place.name || place.address[place.category],
+ place.address.house_number,
+ place.address.road || place.address.waterway,
+ place.address.village || place.address.town,
+ place.address.suburb || place.address.subdivision,
+ place.address.city || place.address.municipality,
+ ]
+ .filter(Boolean)
+ .join(", ");
+ const secondary = [
+ place.address.county ||
+ place.address.state_district ||
+ place.address.region,
+ place.address.state,
+ place.address.country,
+ ]
+ .filter(Boolean)
+ .join(", ");
+ return html`
+ ${primary || secondary}
+ ${primary ? secondary : ""}
+ `;
+ })
+ : html`${this._places === null ? "" : "No results"}`}
+
+ `
+ : nothing}
+ ${addressAttribution}
+
+
+
+ `;
+ }
+
+ protected firstUpdated(changedProps) {
+ super.firstUpdated(changedProps);
+ setTimeout(
+ () => this.renderRoot.querySelector("ha-textfield")!.focus(),
+ 100
+ );
+ this.addEventListener("keyup", (ev) => {
+ if (ev.key === "Enter") {
+ this._save(ev);
+ }
+ });
+ }
+
+ protected updated(changedProps) {
+ if (changedProps.has("_highlightedMarker") && this._highlightedMarker) {
+ const place = this._places?.find(
+ (plc) => plc.place_id === this._highlightedMarker
+ );
+ if (place?.boundingbox?.length === 4) {
+ this.map.fitBounds(
+ [
+ [place.boundingbox[0], place.boundingbox[2]],
+ [place.boundingbox[1], place.boundingbox[3]],
+ ],
+ { zoom: 16, pad: 0 }
+ );
+ } else {
+ this.map.fitMarker(String(this._highlightedMarker), { zoom: 16 });
+ }
+ }
+ }
+
+ private _markerLocations = memoizeOne(
+ (
+ location?: [number, number],
+ places?: OpenStreetMapPlace[] | null,
+ highlightedMarker?: number
+ ): MarkerLocation[] => {
+ if (!places) {
+ return [
+ {
+ id: LOCATION_MARKER_ID,
+ latitude: (location || AMSTERDAM)[0],
+ longitude: (location || AMSTERDAM)[1],
+ location_editable: true,
+ },
+ ];
+ }
+ return places?.length
+ ? places.map((place) => ({
+ id: String(place.place_id),
+ iconPath:
+ place.place_id === highlightedMarker ? undefined : mdiMapMarker,
+ latitude:
+ location && place.place_id === highlightedMarker
+ ? location[0]
+ : Number(place.lat),
+ longitude:
+ location && place.place_id === highlightedMarker
+ ? location[1]
+ : Number(place.lon),
+ location_editable: place.place_id === highlightedMarker,
+ }))
+ : [];
+ }
+ );
+
+ private _locationChanged(ev) {
+ this._location = ev.detail.location;
+ if (ev.detail.id !== LOCATION_MARKER_ID) {
+ this._reverseGeocode();
+ }
+ }
+
+ private _markerClicked(ev) {
+ if (ev.detail.id === LOCATION_MARKER_ID) {
+ return;
+ }
+ this._highlightedMarker = ev.detail.id;
+ const place = this._places!.find((plc) => plc.place_id === ev.detail.id)!;
+ this._location = [Number(place.lat), Number(place.lon)];
+ this._country = place.address.country_code.toUpperCase();
+ }
+
+ private _itemClicked(ev) {
+ this._highlightedMarker = ev.currentTarget.placeId;
+ const place = this._places!.find(
+ (plc) => plc.place_id === ev.currentTarget.placeId
+ )!;
+ this._location = [Number(place.lat), Number(place.lon)];
+ this._country = place.address.country_code.toUpperCase();
+ }
+
+ private async _addressSearch(ev: KeyboardEvent) {
+ ev.stopPropagation();
+ this._search = (ev.currentTarget as HaTextField).value.length > 0;
+ if (ev.key !== "Enter") {
+ return;
+ }
+ this._searchAddress((ev.currentTarget as HaTextField).value);
+ }
+
+ private async _searchAddress(address: string) {
+ this._working = true;
+ this._location = undefined;
+ this._highlightedMarker = undefined;
+ this._error = undefined;
+ this._places = null;
+ this.map.addEventListener(
+ "markers-updated",
+ () => {
+ setTimeout(() => {
+ if ((this._places?.length || 0) > 2) {
+ this.map.fitMap({ pad: 0.5 });
+ }
+ }, 500);
+ },
+ {
+ once: true,
+ }
+ );
+ try {
+ this._places = await searchPlaces(address, this.hass, true, 3);
+ if (this._places?.length === 1) {
+ this._highlightedMarker = this._places[0].place_id;
+ this._location = [
+ Number(this._places[0].lat),
+ Number(this._places[0].lon),
+ ];
+ this._country = this._places[0].address.country_code.toUpperCase();
+ }
+ } catch (e: any) {
+ this._places = undefined;
+ this._error = e.message;
+ } finally {
+ this._working = false;
+ }
+ }
+
+ private async _reverseGeocode() {
+ if (!this._location) {
+ return;
+ }
+ this._places = null;
+ const reverse = await reverseGeocode(this._location, this.hass);
+ this._country = reverse.address.country_code.toUpperCase();
+ this._places = [reverse];
+ this._highlightedMarker = reverse.place_id;
+ }
+
+ private async _handleButtonClick(ev) {
+ if (this._search) {
+ this._searchAddress(ev.target.parentElement.value);
+ return;
+ }
+ this._detectLocation();
+ }
+
+ private _detectLocation() {
+ if (window.isSecureContext && navigator.geolocation) {
+ this._working = true;
+ const options = {
+ enableHighAccuracy: true,
+ timeout: 5000,
+ maximumAge: 0,
+ };
+ navigator.geolocation.getCurrentPosition(
+ async (result) => {
+ this.map.addEventListener(
+ "markers-updated",
+ () => {
+ this.map.fitMarker(LOCATION_MARKER_ID);
+ },
+ {
+ once: true,
+ }
+ );
+ this._location = [result.coords.latitude, result.coords.longitude];
+ if (result.coords.altitude) {
+ this._elevation = String(result.coords.altitude);
+ }
+ try {
+ await this._reverseGeocode();
+ } finally {
+ this._working = false;
+ }
+ },
+ () => {
+ // GPS is not available, get location based on IP
+ this._working = false;
+ this._whoAmI();
+ },
+ options
+ );
+ } else {
+ this._whoAmI();
+ }
+ }
+
+ private async _whoAmI() {
+ const confirm = await showConfirmationDialog(this, {
+ title: this.onboardingLocalize(
+ "ui.panel.page-onboarding.core-config.title_location_detect"
+ ),
+ text: this.onboardingLocalize(
+ "ui.panel.page-onboarding.core-config.intro_location_detect"
+ ),
+ });
+ if (!confirm) {
+ return;
+ }
+ this._working = true;
+ try {
+ const values = await detectCoreConfig(this.hass);
+
+ if (values.latitude && values.longitude) {
+ this.map.addEventListener(
+ "markers-updated",
+ () => {
+ this.map.fitMarker(LOCATION_MARKER_ID);
+ },
+ {
+ once: true,
+ }
+ );
+ this._location = [Number(values.latitude), Number(values.longitude)];
+ }
+ if (values.elevation) {
+ this._elevation = String(values.elevation);
+ }
+ if (values.unit_system) {
+ this._unitSystem = values.unit_system;
+ }
+ if (values.time_zone) {
+ this._timeZone = values.time_zone;
+ }
+ if (values.currency) {
+ this._currency = values.currency;
+ }
+ if (values.country) {
+ this._country = values.country;
+ }
+ } catch (err: any) {
+ this._error = `Failed to detect location information: ${err.message}`;
+ } finally {
+ this._working = false;
+ }
+ }
+
+ private async _save(ev) {
+ if (!this._location) {
+ return;
+ }
+ ev.preventDefault();
+ fireEvent(this, "value-changed", {
+ value: {
+ location: this._location!,
+ country: this._country,
+ elevation: this._elevation,
+ unit_system: this._unitSystem,
+ time_zone: this._timeZone,
+ currency: this._currency,
+ },
+ });
+ }
+
+ static get styles(): CSSResultGroup {
+ return css`
+ p {
+ font-size: 14px;
+ line-height: 20px;
+ }
+ ha-textfield {
+ display: block;
+ }
+ ha-textfield > ha-icon-button {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ --mdc-icon-button-size: 36px;
+ --mdc-icon-size: 20px;
+ color: var(--secondary-text-color);
+ inset-inline-start: initial;
+ inset-inline-end: 10px;
+ direction: var(--direction);
+ }
+ ha-textfield > ha-circular-progress {
+ position: relative;
+ left: 12px;
+ }
+ ha-locations-editor {
+ display: block;
+ height: 300px;
+ margin-top: 8px;
+ border-radius: var(--mdc-shape-small, 4px);
+ overflow: hidden;
+ }
+ mwc-list {
+ width: 100%;
+ border: 1px solid var(--divider-color);
+ box-sizing: border-box;
+ border-top-width: 0;
+ border-bottom-left-radius: var(--mdc-shape-small, 4px);
+ border-bottom-right-radius: var(--mdc-shape-small, 4px);
+ --mdc-list-vertical-padding: 0;
+ }
+ ha-list-item {
+ height: 72px;
+ }
+ .footer {
+ margin-top: 16px;
+ text-align: right;
+ }
+ .attribution {
+ /* textfield helper style */
+ margin: 0;
+ padding: 4px 16px 12px 16px;
+ color: var(--mdc-text-field-label-ink-color, rgba(0, 0, 0, 0.6));
+ font-family: var(
+ --mdc-typography-caption-font-family,
+ var(--mdc-typography-font-family, Roboto, sans-serif)
+ );
+ font-size: var(--mdc-typography-caption-font-size, 0.75rem);
+ font-weight: var(--mdc-typography-caption-font-weight, 400);
+ letter-spacing: var(
+ --mdc-typography-caption-letter-spacing,
+ 0.0333333333em
+ );
+ text-decoration: var(--mdc-typography-caption-text-decoration, inherit);
+ text-transform: var(--mdc-typography-caption-text-transform, inherit);
+ }
+ .attribution a {
+ color: inherit;
+ }
+ `;
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "onboarding-location": OnboardingLocation;
+ }
+}
diff --git a/src/onboarding/onboarding-name.ts b/src/onboarding/onboarding-name.ts
new file mode 100644
index 0000000000..6d8d023137
--- /dev/null
+++ b/src/onboarding/onboarding-name.ts
@@ -0,0 +1,111 @@
+import "@material/mwc-button/mwc-button";
+import { CSSResultGroup, LitElement, TemplateResult, css, html } from "lit";
+import { customElement, property } from "lit/decorators";
+import { fireEvent } from "../common/dom/fire_event";
+import type { LocalizeFunc } from "../common/translations/localize";
+import "../components/ha-alert";
+import "../components/ha-formfield";
+import "../components/ha-radio";
+import "../components/ha-textfield";
+import "../components/map/ha-locations-editor";
+import { ConfigUpdateValues } from "../data/core";
+import type { HomeAssistant } from "../types";
+
+@customElement("onboarding-name")
+class OnboardingName extends LitElement {
+ @property({ attribute: false }) public hass!: HomeAssistant;
+
+ @property() public onboardingLocalize!: LocalizeFunc;
+
+ private _name?: ConfigUpdateValues["location_name"];
+
+ protected render(): TemplateResult {
+ return html`
+
+ ${this.onboardingLocalize(
+ "ui.panel.page-onboarding.core-config.intro",
+ { name: this.hass.user!.name }
+ )}
+
+
+
+
+
+ ${this.onboardingLocalize(
+ "ui.panel.page-onboarding.core-config.intro_core"
+ )}
+
+
+
+ `;
+ }
+
+ protected firstUpdated(changedProps) {
+ super.firstUpdated(changedProps);
+ setTimeout(
+ () => this.renderRoot.querySelector("ha-textfield")!.focus(),
+ 100
+ );
+ this.addEventListener("keyup", (ev) => {
+ if (ev.key === "Enter") {
+ this._save(ev);
+ }
+ });
+ }
+
+ private get _nameValue() {
+ return this._name !== undefined
+ ? this._name
+ : this.onboardingLocalize(
+ "ui.panel.page-onboarding.core-config.location_name_default"
+ );
+ }
+
+ private _nameChanged(ev) {
+ this._name = ev.target.value;
+ }
+
+ private async _save(ev) {
+ ev.preventDefault();
+ fireEvent(this, "value-changed", {
+ value: this._nameValue,
+ });
+ }
+
+ static get styles(): CSSResultGroup {
+ return css`
+ ha-textfield {
+ display: block;
+ }
+ p {
+ font-size: 14px;
+ line-height: 20px;
+ }
+ .footer {
+ margin-top: 16px;
+ text-align: right;
+ }
+ a {
+ color: var(--primary-color);
+ }
+ `;
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "onboarding-name": OnboardingName;
+ }
+}
diff --git a/src/translations/en.json b/src/translations/en.json
index d7673cff1e..04ba3cae2e 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -5589,10 +5589,16 @@
},
"core-config": {
"intro": "Hello {name}, welcome to Home Assistant. How would you like to name your home?",
- "intro_location": "We would like to know where you live. This information will help with displaying information and setting up sun-based automations. This data is never shared outside of your network.",
- "intro_location_detect": "We can help you fill in this information by making a one-time request to an external service.",
+ "intro_core": "We will set up the basics together. You can always change this later in the settings.",
+ "intro_location": "Let's set up the location of your home so that you can display information such as the local weather and use sun-based or presence-based automations. This data is never shared outside of your network.",
+ "location_address": "Powered by {openstreetmap} ({osm_privacy_policy}).",
+ "osm_privacy_policy": "Privacy policy",
+ "title_location_detect": "Do you want us to detect your location?",
+ "intro_location_detect": "We can detect your location by making a one-time request to an external service.",
+ "intro_core_config": "We filled out some details about your location. Please check if they are correct and continue.",
"location_name": "Name of your Home Assistant installation",
"location_name_default": "Home",
+ "address_label": "Search address",
"button_detect": "Detect",
"finish": "Next"
},
From 000288aecbf4cf163bc411834fa6893f6207a2bb Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Tue, 18 Jul 2023 15:01:00 +0200
Subject: [PATCH 068/102] Change button to plus and minus to inc/dec position
(#17194)
---
.../lovelace/components/hui-card-options.ts | 28 +++++++++----------
src/translations/en.json | 4 +--
2 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/src/panels/lovelace/components/hui-card-options.ts b/src/panels/lovelace/components/hui-card-options.ts
index 6f52d6135f..7e3a567839 100644
--- a/src/panels/lovelace/components/hui-card-options.ts
+++ b/src/panels/lovelace/components/hui-card-options.ts
@@ -1,14 +1,14 @@
import "@material/mwc-button";
import { ActionDetail } from "@material/mwc-list/mwc-list-foundation";
import {
- mdiArrowDown,
- mdiArrowUp,
mdiContentCopy,
mdiContentCut,
mdiContentDuplicate,
mdiDelete,
mdiDotsVertical,
mdiFileMoveOutline,
+ mdiMinus,
+ mdiPlus,
} from "@mdi/js";
import deepClone from "deep-clone-simple";
import {
@@ -96,14 +96,12 @@ export class HuiCardOptions extends LitElement {
? html`
`
: nothing}
@@ -291,7 +291,7 @@ export class HuiCardOptions extends LitElement {
this._clipboard = deepClone(cardConfig);
}
- private _cardUp(): void {
+ private _decreaseCardPosiion(): void {
const lovelace = this.lovelace!;
const path = this.path!;
lovelace.saveConfig(
@@ -299,7 +299,7 @@ export class HuiCardOptions extends LitElement {
);
}
- private _cardDown(): void {
+ private _increaseCardPosition(): void {
const lovelace = this.lovelace!;
const path = this.path!;
lovelace.saveConfig(
diff --git a/src/translations/en.json b/src/translations/en.json
index 04ba3cae2e..28579d89f7 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -4571,11 +4571,11 @@
"cut": "Cut",
"duplicate": "Duplicate",
"move": "Move to view",
- "move_up": "Move card up",
- "move_down": "Move card down",
"move_before": "Move card before",
"move_after": "Move card after",
"change_position": "Change card position",
+ "decrease_position": "Decrease card position",
+ "increase_position": "Increase card position",
"options": "More options",
"search_cards": "Search cards"
},
From 4a044fc40ec0c4969c92c4951ea4f7457d8b17b0 Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Tue, 18 Jul 2023 15:22:20 +0200
Subject: [PATCH 069/102] Improve default theme wording (#17336)
* Improve default theme wording
* Remove home assistant translation
---
src/components/ha-theme-picker.ts | 18 ++++++++----------
src/panels/profile/ha-pick-theme-row.ts | 21 +++++++++++----------
src/translations/en.json | 6 ++----
3 files changed, 21 insertions(+), 24 deletions(-)
diff --git a/src/components/ha-theme-picker.ts b/src/components/ha-theme-picker.ts
index 8835a5b186..ef619737b2 100644
--- a/src/components/ha-theme-picker.ts
+++ b/src/components/ha-theme-picker.ts
@@ -42,17 +42,15 @@ export class HaThemePicker extends LitElement {
fixedMenuPosition
naturalMenuWidth
>
- ${this.hass!.localize(
- "ui.components.theme-picker.no_theme"
- )}
+
+ ${this.hass!.localize("ui.components.theme-picker.no_theme")}
+
${this.includeDefault
- ? html`${this.hass!.localize(
- "ui.components.theme-picker.default"
- )}`
+ ? html`
+
+ Home Assistant
+
+ `
: nothing}
${Object.keys(this.hass!.themes.themes)
.sort()
diff --git a/src/panels/profile/ha-pick-theme-row.ts b/src/panels/profile/ha-pick-theme-row.ts
index 1677ff7e15..725955fe98 100644
--- a/src/panels/profile/ha-pick-theme-row.ts
+++ b/src/panels/profile/ha-pick-theme-row.ts
@@ -23,8 +23,8 @@ import {
import { HomeAssistant } from "../../types";
import { documentationUrl } from "../../util/documentation-url";
-const BACKEND_SELECTED_THEME = "Backend-selected";
-const DEFAULT_THEME = "default";
+const USE_DEFAULT_THEME = "__USE_DEFAULT_THEME__";
+const HOME_ASSISTANT_THEME = "default";
@customElement("ha-pick-theme-row")
export class HaPickThemeRow extends LitElement {
@@ -68,15 +68,15 @@ export class HaPickThemeRow extends LitElement {
-
- ${this.hass.localize("ui.panel.profile.themes.backend-selected")}
+
+ ${this.hass.localize("ui.panel.profile.themes.use_default")}
-
- ${this.hass.localize("ui.panel.profile.themes.default")}
+
+ Home Assistant
${this._themeNames.map(
(theme) => html`
@@ -85,7 +85,8 @@ export class HaPickThemeRow extends LitElement {
)}
- ${curTheme === DEFAULT_THEME || this._supportsModeSelection(curTheme)
+ ${curTheme === HOME_ASSISTANT_THEME ||
+ this._supportsModeSelection(curTheme)
? html` `
: ""}
${VACUUM_COMMANDS.some((item) => item.isVisible(stateObj))
@@ -243,6 +240,81 @@ class MoreInfoVacuum extends LitElement {
`;
}
+ private _deviceEntities = memoizeOne(
+ (
+ deviceId: string,
+ entities: HomeAssistant["entities"]
+ ): EntityRegistryDisplayEntry[] => {
+ const entries = Object.values(entities);
+ return entries.filter((entity) => entity.device_id === deviceId);
+ }
+ );
+
+ private _renderBattery() {
+ const stateObj = this.stateObj!;
+
+ const deviceId = this.hass.entities[stateObj.entity_id]?.device_id;
+
+ const entities = deviceId
+ ? this._deviceEntities(deviceId, this.hass.entities)
+ : [];
+
+ const batteryEntity = findBatteryEntity(this.hass, entities);
+ const battery = batteryEntity
+ ? this.hass.states[batteryEntity.entity_id]
+ : undefined;
+
+ const batteryIsBinary =
+ battery && computeStateDomain(battery) === "binary_sensor";
+
+ // Use device battery entity
+ if (battery && (batteryIsBinary || !isNaN(battery.state as any))) {
+ const batteryChargingEntity = findBatteryChargingEntity(
+ this.hass,
+ entities
+ );
+ const batteryCharging = batteryChargingEntity
+ ? this.hass.states[batteryChargingEntity?.entity_id]
+ : undefined;
+
+ return html`
+
+
+ ${batteryIsBinary
+ ? ""
+ : `${Number(battery.state).toFixed()}${blankBeforePercent(
+ this.hass.locale
+ )}%`}
+
+
+
+ `;
+ }
+
+ // Use battery_level and battery_icon deprecated attributes
+ if (
+ supportsFeature(stateObj, VacuumEntityFeature.BATTERY) &&
+ stateObj.attributes.battery_level
+ ) {
+ return html`
+
+
+ ${stateObj.attributes.battery_level.toFixed()}${blankBeforePercent(
+ this.hass.locale
+ )}%
+
+
+
+ `;
+ }
+
+ return nothing;
+ }
+
private callService(ev: CustomEvent) {
const entry = (ev.target! as any).entry as VacuumCommand;
this.hass.callService("vacuum", entry.serviceName, {
From 88259c8de09a3b25763cf8a89a01df0642a31285 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 18 Jul 2023 13:42:30 -0400
Subject: [PATCH 077/102] Update dependency @rollup/plugin-commonjs to v25.0.3
(#17337)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index e1223da8e1..056bda0f2f 100644
--- a/package.json
+++ b/package.json
@@ -163,7 +163,7 @@
"@octokit/rest": "20.0.1",
"@open-wc/dev-server-hmr": "0.1.4",
"@rollup/plugin-babel": "6.0.3",
- "@rollup/plugin-commonjs": "25.0.2",
+ "@rollup/plugin-commonjs": "25.0.3",
"@rollup/plugin-json": "6.0.0",
"@rollup/plugin-node-resolve": "15.1.0",
"@rollup/plugin-replace": "5.0.2",
diff --git a/yarn.lock b/yarn.lock
index 46ebff1f32..22317bf262 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3849,9 +3849,9 @@ __metadata:
languageName: node
linkType: hard
-"@rollup/plugin-commonjs@npm:25.0.2":
- version: 25.0.2
- resolution: "@rollup/plugin-commonjs@npm:25.0.2"
+"@rollup/plugin-commonjs@npm:25.0.3":
+ version: 25.0.3
+ resolution: "@rollup/plugin-commonjs@npm:25.0.3"
dependencies:
"@rollup/pluginutils": ^5.0.1
commondir: ^1.0.1
@@ -3864,7 +3864,7 @@ __metadata:
peerDependenciesMeta:
rollup:
optional: true
- checksum: d8c4e22d264c5b9286f697653c2f9288149c0fe0169d49b83b5dc8b542f96cc0b9113da3f30d241f2f277513fbf3f8c207d95def5559eb3800190f1872add794
+ checksum: 1b94218cc80364d218e5d526e9199620151fe8ac489abc293a75741af5ffb2bfa90da06cffc4a1b9a4091a6f8cda63a6f7c557881b12188f9e0a05f08c147fd0
languageName: node
linkType: hard
@@ -9664,7 +9664,7 @@ __metadata:
"@polymer/paper-toast": 3.0.1
"@polymer/polymer": 3.5.1
"@rollup/plugin-babel": 6.0.3
- "@rollup/plugin-commonjs": 25.0.2
+ "@rollup/plugin-commonjs": 25.0.3
"@rollup/plugin-json": 6.0.0
"@rollup/plugin-node-resolve": 15.1.0
"@rollup/plugin-replace": 5.0.2
From 8171b02b75d9e051f27cc5bd70acba2065ba4213 Mon Sep 17 00:00:00 2001
From: Erik Montnemery
Date: Wed, 19 Jul 2023 10:48:43 +0200
Subject: [PATCH 078/102] Allow changing channel from the thread configuration
panel (#17285)
---
src/data/otbr.ts | 10 +++
.../thread/thread-config-panel.ts | 66 +++++++++++++++++++
src/translations/en.json | 11 +++-
3 files changed, 86 insertions(+), 1 deletion(-)
diff --git a/src/data/otbr.ts b/src/data/otbr.ts
index 93e77a1eda..154d2863ff 100644
--- a/src/data/otbr.ts
+++ b/src/data/otbr.ts
@@ -3,6 +3,7 @@ import { HomeAssistant } from "../types";
export interface OTBRInfo {
url: string;
active_dataset_tlvs: string;
+ channel: number;
}
export const getOTBRInfo = (hass: HomeAssistant): Promise =>
@@ -30,3 +31,12 @@ export const OTBRGetExtendedAddress = (
hass.callWS({
type: "otbr/get_extended_address",
});
+
+export const OTBRSetChannel = (
+ hass: HomeAssistant,
+ channel: number
+): Promise<{ delay: number }> =>
+ hass.callWS({
+ type: "otbr/set_channel",
+ channel,
+ });
diff --git a/src/panels/config/integrations/integration-panels/thread/thread-config-panel.ts b/src/panels/config/integrations/integration-panels/thread/thread-config-panel.ts
index 27defda51a..2fdea52d73 100644
--- a/src/panels/config/integrations/integration-panels/thread/thread-config-panel.ts
+++ b/src/panels/config/integrations/integration-panels/thread/thread-config-panel.ts
@@ -20,6 +20,7 @@ import {
OTBRCreateNetwork,
OTBRGetExtendedAddress,
OTBRInfo,
+ OTBRSetChannel,
OTBRSetNetwork,
} from "../../../../../data/otbr";
import {
@@ -200,6 +201,10 @@ export class ThreadConfigPanel extends SubscribeMixin(LitElement) {
>${this.hass.localize(
"ui.panel.config.thread.reset_border_router"
)}${this.hass.localize(
+ "ui.panel.config.thread.change_channel"
+ )}${network.dataset?.preferred
? ""
: html` 26) {
+ showAlertDialog(this, {
+ title: this.hass.localize(
+ "ui.panel.config.thread.change_channel_invalid"
+ ),
+ text: this.hass.localize("ui.panel.config.thread.change_channel_range"),
+ });
+ return;
+ }
+ try {
+ const result = await OTBRSetChannel(this.hass, channel);
+ showAlertDialog(this, {
+ title: this.hass.localize(
+ "ui.panel.config.thread.change_channel_initiated_title"
+ ),
+ text: this.hass.localize(
+ "ui.panel.config.thread.change_channel_initiated_text",
+ { delay: Math.floor(result.delay / 60) }
+ ),
+ });
+ } catch (err: any) {
+ if (err.code === "multiprotocol_enabled") {
+ showAlertDialog(this, {
+ title: this.hass.localize(
+ "ui.panel.config.thread.change_channel_multiprotocol_enabled_title"
+ ),
+ text: this.hass.localize(
+ "ui.panel.config.thread.change_channel_multiprotocol_enabled_text"
+ ),
+ });
+ return;
+ }
+ showAlertDialog(this, {
+ title: "Error",
+ text: err.message || err,
+ });
+ }
+ this._refresh();
+ }
+
static styles = [
haStyle,
css`
diff --git a/src/translations/en.json b/src/translations/en.json
index 714d2343ba..7d80346d89 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -3684,7 +3684,16 @@
"no_border_routers": "No border routers found",
"border_routers": "{count} border {count, plural,\n one {router}\n other {routers}\n}",
"managed_by_home_assistant": "Managed by Home Assistant",
- "operational_dataset": "Operational dataset"
+ "operational_dataset": "Operational dataset",
+ "change_channel": "Change channel",
+ "change_channel_initiated_title": "Channel change in progress",
+ "change_channel_initiated_text": "The channel change has been initiated and will complete in {delay} minutes.",
+ "change_channel_invalid": "Invalid channel",
+ "change_channel_label": "Channel",
+ "change_channel_multiprotocol_enabled_title": "The Thread radio has multiprotocol enabled",
+ "change_channel_multiprotocol_enabled_text": "To change channel when the Thread radio has multiprotocol enabled, please use the hardware settings menu.",
+ "change_channel_range": "Channel must be in the range 11 to 26",
+ "change_channel_text": "Initiate a channel change for your Thread networks. This is an advanced operation and can leave your Thread networks inoperable if the new channel is congested. Depending on existing network conditions, many of your devices may not migrate to the new channel and will require re-joining before they start working again. Use with caution."
},
"zha": {
"common": {
From efc442da5b9a7c38d7ddc3d3050ef6f7c13ae00d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 19 Jul 2023 13:08:09 +0200
Subject: [PATCH 079/102] Lock file maintenance (#17341)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
yarn.lock | 342 +++++++++++++++++++++++++++++++++---------------------
1 file changed, 210 insertions(+), 132 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index 22317bf262..469e42b4d1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -129,35 +129,35 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-create-class-features-plugin@npm:^7.22.5, @babel/helper-create-class-features-plugin@npm:^7.22.6":
- version: 7.22.6
- resolution: "@babel/helper-create-class-features-plugin@npm:7.22.6"
+"@babel/helper-create-class-features-plugin@npm:^7.22.5, @babel/helper-create-class-features-plugin@npm:^7.22.6, @babel/helper-create-class-features-plugin@npm:^7.22.9":
+ version: 7.22.9
+ resolution: "@babel/helper-create-class-features-plugin@npm:7.22.9"
dependencies:
"@babel/helper-annotate-as-pure": ^7.22.5
"@babel/helper-environment-visitor": ^7.22.5
"@babel/helper-function-name": ^7.22.5
"@babel/helper-member-expression-to-functions": ^7.22.5
"@babel/helper-optimise-call-expression": ^7.22.5
- "@babel/helper-replace-supers": ^7.22.5
+ "@babel/helper-replace-supers": ^7.22.9
"@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
"@babel/helper-split-export-declaration": ^7.22.6
- "@nicolo-ribaudo/semver-v6": ^6.3.3
+ semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10412e8a509a607cde6137288d3f12b1f91acd374e29e6dd6a277b67217e9f4c932a0acd89eeda837c8432916df775a8af6321aeb8d8b131ccdbf7688208dda1
+ checksum: 6c2436d1a5a3f1ff24628d78fa8c6d3120c40285aa3eda7815b1adbf8c5951e0dd73d368cf845825888fa3dc2f207dadce53309825598d7c67953e5ed9dd51d2
languageName: node
linkType: hard
"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.5"
+ version: 7.22.9
+ resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.9"
dependencies:
"@babel/helper-annotate-as-pure": ^7.22.5
regexpu-core: ^5.3.1
- semver: ^6.3.0
+ semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 94932145beeb1f91856be25fea8de30b4b81b63fbc7c5a207ed97a5ddc34cd1e9b04041ed28bd24ec09cdcfbb62e8d66f820e4fe864672afe0aa2f357c784e11
+ checksum: 87cb48a7ee898ab205374274364c3adc70b87b08c7bd07f51019ae4562c0170d7148e654d591f825dee14b5fe11666a0e7966872dfdbfa0d1b94b861ecf0e4e1
languageName: node
linkType: hard
@@ -252,30 +252,28 @@ __metadata:
linkType: hard
"@babel/helper-remap-async-to-generator@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helper-remap-async-to-generator@npm:7.22.5"
+ version: 7.22.9
+ resolution: "@babel/helper-remap-async-to-generator@npm:7.22.9"
dependencies:
"@babel/helper-annotate-as-pure": ^7.22.5
"@babel/helper-environment-visitor": ^7.22.5
- "@babel/helper-wrap-function": ^7.22.5
- "@babel/types": ^7.22.5
+ "@babel/helper-wrap-function": ^7.22.9
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 1e51dcff1c22e97ea3d22034b77788048eb6d8c6860325bd7a1046b7a7135730cefd93b5c96fd9839d76031095d5ffb6f0cd6ee90a5d69a4c7de980d7f4623d9
+ checksum: 05538079447829b13512157491cc77f9cf1ea7e1680e15cff0682c3ed9ee162de0c4862ece20a6d6b2df28177a1520bcfe45993fbeccf2747a81795a7c3f6290
languageName: node
linkType: hard
-"@babel/helper-replace-supers@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helper-replace-supers@npm:7.22.5"
+"@babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9":
+ version: 7.22.9
+ resolution: "@babel/helper-replace-supers@npm:7.22.9"
dependencies:
"@babel/helper-environment-visitor": ^7.22.5
"@babel/helper-member-expression-to-functions": ^7.22.5
"@babel/helper-optimise-call-expression": ^7.22.5
- "@babel/template": ^7.22.5
- "@babel/traverse": ^7.22.5
- "@babel/types": ^7.22.5
- checksum: af29deff6c6dc3fa2d1a517390716aa3f4d329855e8689f1d5c3cb07c1b898e614a5e175f1826bb58e9ff1480e6552885a71a9a0ba5161787aaafa2c79b216cc
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: d41471f56ff2616459d35a5df1900d5f0756ae78b1027040365325ef332d66e08e3be02a9489756d870887585ff222403a228546e93dd7019e19e59c0c0fe586
languageName: node
linkType: hard
@@ -327,15 +325,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-wrap-function@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/helper-wrap-function@npm:7.22.5"
+"@babel/helper-wrap-function@npm:^7.22.9":
+ version: 7.22.9
+ resolution: "@babel/helper-wrap-function@npm:7.22.9"
dependencies:
"@babel/helper-function-name": ^7.22.5
"@babel/template": ^7.22.5
- "@babel/traverse": ^7.22.5
"@babel/types": ^7.22.5
- checksum: a4ba2d7577ad3ce92fadaa341ffce3b0e4b389808099b07c80847f9be0852f4b42344612bc1b3d1b796ffb75be56d5957c5c56a1734f6aee5ccbb7cd9ab12691
+ checksum: 037317dc06dac6593e388738ae1d3e43193bc1d31698f067c0ef3d4dc6f074dbed860ed42aa137b48a67aa7cb87336826c4bdc13189260481bcf67eb7256c789
languageName: node
linkType: hard
@@ -1212,16 +1209,16 @@ __metadata:
linkType: hard
"@babel/plugin-transform-typescript@npm:^7.22.5":
- version: 7.22.5
- resolution: "@babel/plugin-transform-typescript@npm:7.22.5"
+ version: 7.22.9
+ resolution: "@babel/plugin-transform-typescript@npm:7.22.9"
dependencies:
"@babel/helper-annotate-as-pure": ^7.22.5
- "@babel/helper-create-class-features-plugin": ^7.22.5
+ "@babel/helper-create-class-features-plugin": ^7.22.9
"@babel/helper-plugin-utils": ^7.22.5
"@babel/plugin-syntax-typescript": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: d12f1ca1ef1f2a54432eb044d2999705d1205ebe211c2a7f05b12e8eb2d2a461fd7657b5486b2f2f1efe7c0c0dc8e80725b767073d40fe4ae059a7af057b05e4
+ checksum: 6d1317a54d093b302599a4bee8ba9865d0de8b7b6ac1a0746c4316231d632f75b7f086e6e78acb9ac95ba12ba3b9da462dc9ca69370abb4603c4cc987f62e67e
languageName: node
linkType: hard
@@ -1419,7 +1416,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/traverse@npm:^7.22.5, @babel/traverse@npm:^7.22.6, @babel/traverse@npm:^7.22.8":
+"@babel/traverse@npm:^7.22.6, @babel/traverse@npm:^7.22.8":
version: 7.22.8
resolution: "@babel/traverse@npm:7.22.8"
dependencies:
@@ -1525,7 +1522,7 @@ __metadata:
languageName: node
linkType: hard
-"@codemirror/view@npm:6.14.1, @codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.6.0":
+"@codemirror/view@npm:6.14.1":
version: 6.14.1
resolution: "@codemirror/view@npm:6.14.1"
dependencies:
@@ -1536,6 +1533,17 @@ __metadata:
languageName: node
linkType: hard
+"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.6.0":
+ version: 6.15.3
+ resolution: "@codemirror/view@npm:6.15.3"
+ dependencies:
+ "@codemirror/state": ^6.1.4
+ style-mod: ^4.0.0
+ w3c-keyname: ^2.2.4
+ checksum: 048949b1b493a962904a7f77661a939f7c1893a7381022756a135f5dd8daf667f498be1b81da9c37c0e8de85b078ad987c2f75318385c520ed83c95da6313e95
+ languageName: node
+ linkType: hard
+
"@discoveryjs/json-ext@npm:^0.5.0":
version: 0.5.7
resolution: "@discoveryjs/json-ext@npm:0.5.7"
@@ -2003,12 +2011,12 @@ __metadata:
linkType: hard
"@jridgewell/source-map@npm:^0.3.3":
- version: 0.3.3
- resolution: "@jridgewell/source-map@npm:0.3.3"
+ version: 0.3.5
+ resolution: "@jridgewell/source-map@npm:0.3.5"
dependencies:
"@jridgewell/gen-mapping": ^0.3.0
"@jridgewell/trace-mapping": ^0.3.9
- checksum: ae1302146339667da5cd6541260ecbef46ae06819a60f88da8f58b3e64682f787c09359933d050dea5d2173ea7fa40f40dd4d4e7a8d325c5892cccd99aaf8959
+ checksum: 1ad4dec0bdafbade57920a50acec6634f88a0eb735851e0dda906fa9894e7f0549c492678aad1a10f8e144bfe87f238307bf2a914a1bc85b7781d345417e9f6f
languageName: node
linkType: hard
@@ -2069,11 +2077,11 @@ __metadata:
linkType: hard
"@lezer/lr@npm:^1.0.0":
- version: 1.3.6
- resolution: "@lezer/lr@npm:1.3.6"
+ version: 1.3.9
+ resolution: "@lezer/lr@npm:1.3.9"
dependencies:
"@lezer/common": ^1.0.0
- checksum: b2bbcfecc01bd9c801f3ee636ceda333adbbea1f274017cec6f315a23346e7a035a984f325d4f1cd14b157d74d28badda6f794514c29a0b078f7fb3357cdfc32
+ checksum: d10982bae6c0b2f5a3ab8710a41dc689a4f9e81afafd3d2de4f0bec169f5c3fc9a321c0e90010a51682d41a6755ae90e1f3199134ff194b3ff4058ea5bcdf353
languageName: node
linkType: hard
@@ -3365,15 +3373,15 @@ __metadata:
linkType: hard
"@octokit/request@npm:^8.0.0, @octokit/request@npm:^8.0.1, @octokit/request@npm:^8.0.2":
- version: 8.1.0
- resolution: "@octokit/request@npm:8.1.0"
+ version: 8.1.1
+ resolution: "@octokit/request@npm:8.1.1"
dependencies:
"@octokit/endpoint": ^9.0.0
"@octokit/request-error": ^5.0.0
"@octokit/types": ^11.1.0
is-plain-object: ^5.0.0
universal-user-agent: ^6.0.0
- checksum: 00f71e1ca0bff84a1a903ca9f79a7837aac830cae3560d44f03272d062ef98e5a8170fdab8a47169c41db88e6894717cc71387604486d559f9eae409fab93f6f
+ checksum: dec3ba2cba14739159cd8d1653ad8ac6d58095e4ac294d312d20ce2c63c60c3cad2e5499137244dba3d681fd5cd7f74b4b5d4df024a19c0ee1831204e5a3a894
languageName: node
linkType: hard
@@ -4106,12 +4114,12 @@ __metadata:
linkType: hard
"@types/chrome@npm:*":
- version: 0.0.237
- resolution: "@types/chrome@npm:0.0.237"
+ version: 0.0.241
+ resolution: "@types/chrome@npm:0.0.241"
dependencies:
"@types/filesystem": "*"
"@types/har-format": "*"
- checksum: 9dfb0070065ca4667ef2fa9ec45af2f604b9ba98b6429d38607c6bfcc8dc2178e83eea4eeedbe88a8299dfe9dda029c9341e454c4eff7b715b90e9d5fc7b990d
+ checksum: af6cf474ed120b046001c0edf50bb752191369d5205d0b2d1ebcb7548db6b87183a098ee7ab77db1a441eacbf36fbfc3cd5b04a9642a99180a13018ced400984
languageName: node
linkType: hard
@@ -4187,12 +4195,12 @@ __metadata:
linkType: hard
"@types/eslint@npm:*":
- version: 8.40.2
- resolution: "@types/eslint@npm:8.40.2"
+ version: 8.44.0
+ resolution: "@types/eslint@npm:8.44.0"
dependencies:
"@types/estree": "*"
"@types/json-schema": "*"
- checksum: a4780e45e677e3af21c44a900846996cb6d9ae8f71d51940942a047163ae93a05444392c005f491ed46aa169f3b25f8be125ab42c5d8bdb571154bf62a7c828a
+ checksum: 2655f409a4ecdd64bb9dd9eb6715e7a2ac30c0e7f902b414e10dbe9d6d497baa5a0f13105e1f7bd5ad7a913338e2ab4bed1faf192a7a0d27d1acd45ba79d3f69
languageName: node
linkType: hard
@@ -4392,11 +4400,11 @@ __metadata:
linkType: hard
"@types/lodash-es@npm:^4.17.4":
- version: 4.17.7
- resolution: "@types/lodash-es@npm:4.17.7"
+ version: 4.17.8
+ resolution: "@types/lodash-es@npm:4.17.8"
dependencies:
"@types/lodash": "*"
- checksum: 4b1f39fd1d921311c37a846c0e0df9d1fa23e27448a6ad1efd7574e703abd2b2fa5e8f3b5037146000f167ba231d0d01e52747d902654151b4ceeff9f2a9b380
+ checksum: 36356169a1862e2a1b09cde3b11b3790ab2c2e477778d70f825b216479ea93bd1a960767dbefcd00d6604312170a1b15209f0fa1c35ddf8861bc233c9b0d3e56
languageName: node
linkType: hard
@@ -4450,9 +4458,9 @@ __metadata:
linkType: hard
"@types/node@npm:*":
- version: 20.3.1
- resolution: "@types/node@npm:20.3.1"
- checksum: 63a393ab6d947be17320817b35d7277ef03728e231558166ed07ee30b09fd7c08861be4d746f10fdc63ca7912e8cd023939d4eab887ff6580ff704ff24ed810c
+ version: 20.4.2
+ resolution: "@types/node@npm:20.4.2"
+ checksum: 99e544ea7560d51f01f95627fc40394c24a13da8f041121a0da13e4ef0a2aa332932eaf9a5e8d0e30d1c07106e96a183be392cbba62e8cf0bf6a085d5c0f4149
languageName: node
linkType: hard
@@ -4582,12 +4590,13 @@ __metadata:
linkType: hard
"@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10":
- version: 1.15.1
- resolution: "@types/serve-static@npm:1.15.1"
+ version: 1.15.2
+ resolution: "@types/serve-static@npm:1.15.2"
dependencies:
+ "@types/http-errors": "*"
"@types/mime": "*"
"@types/node": "*"
- checksum: 2e078bdc1e458c7dfe69e9faa83cc69194b8896cce57cb745016580543c7ab5af07fdaa8ac1765eb79524208c81017546f66056f44d1204f812d72810613de36
+ checksum: 15c261dbfc57890f7cc17c04d5b22b418dfa0330c912b46c5d8ae2064da5d6f844ef7f41b63c7f4bbf07675e97ebe6ac804b032635ec742ae45d6f1274259b3e
languageName: node
linkType: hard
@@ -5427,11 +5436,11 @@ __metadata:
linkType: hard
"acorn@npm:^8.5.0, acorn@npm:^8.7.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0":
- version: 8.9.0
- resolution: "acorn@npm:8.9.0"
+ version: 8.10.0
+ resolution: "acorn@npm:8.10.0"
bin:
acorn: bin/acorn
- checksum: 25dfb94952386ecfb847e61934de04a4e7c2dc21c2e700fc4e2ef27ce78cb717700c4c4f279cd630bb4774948633c3859fc16063ec8573bda4568e0a312e6744
+ checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d
languageName: node
linkType: hard
@@ -5734,11 +5743,11 @@ __metadata:
linkType: hard
"aria-query@npm:^5.1.3":
- version: 5.2.1
- resolution: "aria-query@npm:5.2.1"
+ version: 5.3.0
+ resolution: "aria-query@npm:5.3.0"
dependencies:
dequal: ^2.0.3
- checksum: fdb7a337d97acf4dae831e4c2c786233aca5ccb779a02c10fe65a65af9849f6e9868073593313ab52b7b0d9817e05cfb22a5cd43ecf22a8e7f2abea2268bdac9
+ checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9
languageName: node
linkType: hard
@@ -5945,6 +5954,20 @@ __metadata:
languageName: node
linkType: hard
+"arraybuffer.prototype.slice@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "arraybuffer.prototype.slice@npm:1.0.1"
+ dependencies:
+ array-buffer-byte-length: ^1.0.0
+ call-bind: ^1.0.2
+ define-properties: ^1.2.0
+ get-intrinsic: ^1.2.1
+ is-array-buffer: ^3.0.2
+ is-shared-array-buffer: ^1.0.2
+ checksum: e3e9b2a3e988ebfeddce4c7e8f69df730c9e48cb04b0d40ff0874ce3d86b3d1339dd520ffde5e39c02610bc172ecfbd4bc93324b1cabd9554c44a56b131ce0ce
+ languageName: node
+ linkType: hard
+
"asap@npm:~2.0.6":
version: 2.0.6
resolution: "asap@npm:2.0.6"
@@ -6507,9 +6530,9 @@ __metadata:
linkType: hard
"caniuse-lite@npm:^1.0.30001503":
- version: 1.0.30001504
- resolution: "caniuse-lite@npm:1.0.30001504"
- checksum: 0256f8ef2f5d6d1559198967d7325952e6451e79ff1b92d3d6ba1ec43efedf49fcd3fbb0735ebed0bfd96c6c6a49730e169535e273c60795d23ef25bd37e3e3d
+ version: 1.0.30001516
+ resolution: "caniuse-lite@npm:1.0.30001516"
+ checksum: 044adf3493b734a356a2922445a30095a0f6de6b9194695cdf74deafe7bef658e85858a31177762c2813f6e1ed2722d832d59eee0ecb2151e93a611ee18cb21f
languageName: node
linkType: hard
@@ -7639,9 +7662,9 @@ __metadata:
linkType: hard
"electron-to-chromium@npm:^1.4.431":
- version: 1.4.433
- resolution: "electron-to-chromium@npm:1.4.433"
- checksum: 106e3bc2fb4ee5eddd4b141363900d5cd731c7579aa6bebd02509c52d6b598a1684aba1b75791e838dfa54dec0a40ddd17ea01199041ea46310aafb206395e43
+ version: 1.4.464
+ resolution: "electron-to-chromium@npm:1.4.464"
+ checksum: 4400ddeee0a300705830dfdb69c352b6efe4bd7a5ff99de87f61b8706008ce84f565214afae83272135512472406d8515f89531bcc27948683f67865bdbc1e3a
languageName: node
linkType: hard
@@ -7734,11 +7757,11 @@ __metadata:
linkType: hard
"envinfo@npm:^7.7.3":
- version: 7.8.1
- resolution: "envinfo@npm:7.8.1"
+ version: 7.10.0
+ resolution: "envinfo@npm:7.10.0"
bin:
envinfo: dist/cli.js
- checksum: de736c98d6311c78523628ff127af138451b162e57af5293c1b984ca821d0aeb9c849537d2fde0434011bed33f6bca5310ca2aab8a51a3f28fc719e89045d648
+ checksum: 05e81a5768c42cbd5c580dc3f274db3401facadd53e9bd52e2aa49dfbb5d8b26f6181c25a6652d79618a6994185bd2b1c137673101690b147f758e4e71d42f7d
languageName: node
linkType: hard
@@ -7759,16 +7782,17 @@ __metadata:
linkType: hard
"es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4":
- version: 1.21.2
- resolution: "es-abstract@npm:1.21.2"
+ version: 1.22.1
+ resolution: "es-abstract@npm:1.22.1"
dependencies:
array-buffer-byte-length: ^1.0.0
+ arraybuffer.prototype.slice: ^1.0.1
available-typed-arrays: ^1.0.5
call-bind: ^1.0.2
es-set-tostringtag: ^2.0.1
es-to-primitive: ^1.2.1
function.prototype.name: ^1.1.5
- get-intrinsic: ^1.2.0
+ get-intrinsic: ^1.2.1
get-symbol-description: ^1.0.0
globalthis: ^1.0.3
gopd: ^1.0.1
@@ -7788,15 +7812,19 @@ __metadata:
object-inspect: ^1.12.3
object-keys: ^1.1.1
object.assign: ^4.1.4
- regexp.prototype.flags: ^1.4.3
+ regexp.prototype.flags: ^1.5.0
+ safe-array-concat: ^1.0.0
safe-regex-test: ^1.0.0
string.prototype.trim: ^1.2.7
string.prototype.trimend: ^1.0.6
string.prototype.trimstart: ^1.0.6
+ typed-array-buffer: ^1.0.0
+ typed-array-byte-length: ^1.0.0
+ typed-array-byte-offset: ^1.0.0
typed-array-length: ^1.0.4
unbox-primitive: ^1.0.2
- which-typed-array: ^1.1.9
- checksum: 037f55ee5e1cdf2e5edbab5524095a4f97144d95b94ea29e3611b77d852fd8c8a40e7ae7101fa6a759a9b9b1405f188c3c70928f2d3cd88d543a07fc0d5ad41a
+ which-typed-array: ^1.1.10
+ checksum: 614e2c1c3717cb8d30b6128ef12ea110e06fd7d75ad77091ca1c5dbfb00da130e62e4bbbbbdda190eada098a22b27fe0f99ae5a1171dac2c8663b1e8be8a3a9b
languageName: node
linkType: hard
@@ -8124,12 +8152,12 @@ __metadata:
linkType: hard
"eslint-scope@npm:^7.2.0":
- version: 7.2.0
- resolution: "eslint-scope@npm:7.2.0"
+ version: 7.2.1
+ resolution: "eslint-scope@npm:7.2.1"
dependencies:
esrecurse: ^4.3.0
estraverse: ^5.2.0
- checksum: 64591a2d8b244ade9c690b59ef238a11d5c721a98bcee9e9f445454f442d03d3e04eda88e95a4daec558220a99fa384309d9faae3d459bd40e7a81b4063980ae
+ checksum: dccda5c8909216f6261969b72c77b95e385f9086bed4bc09d8a6276df8439d8f986810fd9ac3bd02c94c0572cefc7fdbeae392c69df2e60712ab8263986522c5
languageName: node
linkType: hard
@@ -8188,13 +8216,13 @@ __metadata:
linkType: hard
"espree@npm:^9.6.0":
- version: 9.6.0
- resolution: "espree@npm:9.6.0"
+ version: 9.6.1
+ resolution: "espree@npm:9.6.1"
dependencies:
acorn: ^8.9.0
acorn-jsx: ^5.3.2
eslint-visitor-keys: ^3.4.1
- checksum: 1287979510efb052a6a97c73067ea5d0a40701b29adde87bbe2d3eb1667e39ca55e8129e20e2517fed3da570150e7ef470585228459a8f3e3755f45007a1c662
+ checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9
languageName: node
linkType: hard
@@ -8488,16 +8516,16 @@ __metadata:
languageName: node
linkType: hard
-"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.2, fast-glob@npm:^3.2.9":
- version: 3.2.12
- resolution: "fast-glob@npm:3.2.12"
+"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.2, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0":
+ version: 3.3.0
+ resolution: "fast-glob@npm:3.3.0"
dependencies:
"@nodelib/fs.stat": ^2.0.2
"@nodelib/fs.walk": ^1.2.3
glob-parent: ^5.1.2
merge2: ^1.3.0
micromatch: ^4.0.4
- checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2
+ checksum: 20df62be28eb5426fe8e40e0d05601a63b1daceb7c3d87534afcad91bdcf1e4b1743cf2d5247d6e225b120b46df0b9053a032b2691ba34ee121e033acd81f547
languageName: node
linkType: hard
@@ -9031,7 +9059,7 @@ __metadata:
languageName: node
linkType: hard
-"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0":
+"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1":
version: 1.2.1
resolution: "get-intrinsic@npm:1.2.1"
dependencies:
@@ -9282,15 +9310,15 @@ __metadata:
linkType: hard
"globby@npm:^13.1.2":
- version: 13.2.0
- resolution: "globby@npm:13.2.0"
+ version: 13.2.2
+ resolution: "globby@npm:13.2.2"
dependencies:
dir-glob: ^3.0.1
- fast-glob: ^3.2.11
- ignore: ^5.2.0
+ fast-glob: ^3.3.0
+ ignore: ^5.2.4
merge2: ^1.4.1
slash: ^4.0.0
- checksum: 0a3dd786571788adef1c894f22112834cff5bbe061ae6e0a01c5118c39d44b3f1937ef1dae3f8b9bc24756eba84a0923e565b1ad9a4ec52831d7e2a04c035e75
+ checksum: f3d84ced58a901b4fcc29c846983108c426631fe47e94872868b65565495f7bee7b3defd68923bd480582771fd4bbe819217803a164a618ad76f1d22f666f41e
languageName: node
linkType: hard
@@ -9845,9 +9873,9 @@ __metadata:
linkType: hard
"html-entities@npm:^2.3.2":
- version: 2.3.6
- resolution: "html-entities@npm:2.3.6"
- checksum: 559a88dc3a2059b1e8882940dcaf996ea9d8151b9a780409ff223a79dc1d42ee8bb19b3365064f241f2e2543b0f90612d63f9b8e36d14c4c7fbb73540a8f41cb
+ version: 2.4.0
+ resolution: "html-entities@npm:2.4.0"
+ checksum: 25bea32642ce9ebd0eedc4d24381883ecb0335ccb8ac26379a0958b9b16652fdbaa725d70207ce54a51db24103436a698a8e454397d3ba8ad81460224751f1dc
languageName: node
linkType: hard
@@ -10736,15 +10764,11 @@ __metadata:
linkType: hard
"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.9":
- version: 1.1.10
- resolution: "is-typed-array@npm:1.1.10"
+ version: 1.1.12
+ resolution: "is-typed-array@npm:1.1.12"
dependencies:
- available-typed-arrays: ^1.0.5
- call-bind: ^1.0.2
- for-each: ^0.3.3
- gopd: ^1.0.1
- has-tostringtag: ^1.0.0
- checksum: aac6ecb59d4c56a1cdeb69b1f129154ef462bbffe434cb8a8235ca89b42f258b7ae94073c41b3cb7bce37f6a1733ad4499f07882d5d5093a7ba84dfc4ebb8017
+ which-typed-array: ^1.1.11
+ checksum: 4c89c4a3be07186caddadf92197b17fda663a9d259ea0d44a85f171558270d36059d1c386d34a12cba22dfade5aba497ce22778e866adc9406098c8fc4771796
languageName: node
linkType: hard
@@ -10826,6 +10850,13 @@ __metadata:
languageName: node
linkType: hard
+"isarray@npm:^2.0.5":
+ version: 2.0.5
+ resolution: "isarray@npm:2.0.5"
+ checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a
+ languageName: node
+ linkType: hard
+
"isbinaryfile@npm:^5.0.0":
version: 5.0.0
resolution: "isbinaryfile@npm:5.0.0"
@@ -11390,11 +11421,11 @@ __metadata:
linkType: hard
"lit-html@npm:^2.7.0":
- version: 2.7.4
- resolution: "lit-html@npm:2.7.4"
+ version: 2.7.5
+ resolution: "lit-html@npm:2.7.5"
dependencies:
"@types/trusted-types": ^2.0.2
- checksum: 3809d62d8b8e66c047a582fe62d430384c63af8c8444da4ca565b41d03e0295be2ce3eaa3c03b58d35a5d74fd8c98976585902204fc28006cfb9adf29fc1761e
+ checksum: 7a54399f78c02f21ee5584fd9ff21b3edad8416df0aca22964bc5b221f0b57ba74d7bd98ad076acea2403b53b2ea87cc3eb47ba8395f371a645e3d584f2c1e49
languageName: node
linkType: hard
@@ -11942,11 +11973,11 @@ __metadata:
linkType: hard
"minimatch@npm:^9.0.1":
- version: 9.0.1
- resolution: "minimatch@npm:9.0.1"
+ version: 9.0.3
+ resolution: "minimatch@npm:9.0.3"
dependencies:
brace-expansion: ^2.0.1
- checksum: 97f5f5284bb57dc65b9415dec7f17a0f6531a33572193991c60ff18450dcfad5c2dad24ffeaf60b5261dccd63aae58cc3306e2209d57e7f88c51295a532d8ec3
+ checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5
languageName: node
linkType: hard
@@ -12032,9 +12063,9 @@ __metadata:
linkType: hard
"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0":
- version: 7.0.1
- resolution: "minipass@npm:7.0.1"
- checksum: fedd1293f6a1b4e406c242a1cecfb75d0a81422bb2c365d999e33a88642fb68d70a89d95b550e08c640b3c0d9162829310e0c58b9b846b9218de25779818c709
+ version: 7.0.2
+ resolution: "minipass@npm:7.0.2"
+ checksum: 46776de732eb7cef2c7404a15fb28c41f5c54a22be50d47b03c605bf21f5c18d61a173c0a20b49a97e7a65f78d887245066410642551e45fffe04e9ac9e325bc
languageName: node
linkType: hard
@@ -12290,9 +12321,9 @@ __metadata:
linkType: hard
"node-releases@npm:^2.0.12":
- version: 2.0.12
- resolution: "node-releases@npm:2.0.12"
- checksum: b8c56db82c4642a0f443332b331a4396dae452a2ac5a65c8dbd93ef89ecb2fbb0da9d42ac5366d4764973febadca816cf7587dad492dce18d2a6b2af59cda260
+ version: 2.0.13
+ resolution: "node-releases@npm:2.0.13"
+ checksum: 17ec8f315dba62710cae71a8dad3cd0288ba943d2ece43504b3b1aa8625bf138637798ab470b1d9035b0545996f63000a8a926e0f6d35d0996424f8b6d36dda3
languageName: node
linkType: hard
@@ -13192,13 +13223,13 @@ __metadata:
linkType: hard
"postcss@npm:^8.4.14":
- version: 8.4.24
- resolution: "postcss@npm:8.4.24"
+ version: 8.4.26
+ resolution: "postcss@npm:8.4.26"
dependencies:
nanoid: ^3.3.6
picocolors: ^1.0.0
source-map-js: ^1.0.2
- checksum: 814e2126dacfea313588eda09cc99a9b4c26ec55c059188aa7a916d20d26d483483106dc5ff9e560731b59f45c5bb91b945dfadc670aed875cc90ddbbf4e787d
+ checksum: 1cf08ee10d58cbe98f94bf12ac49a5e5ed1588507d333d2642aacc24369ca987274e1f60ff4cbf0081f70d2ab18a5cd3a4a273f188d835b8e7f3ba381b184e57
languageName: node
linkType: hard
@@ -13550,7 +13581,7 @@ __metadata:
languageName: node
linkType: hard
-"regexp.prototype.flags@npm:^1.4.3":
+"regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.0":
version: 1.5.0
resolution: "regexp.prototype.flags@npm:1.5.0"
dependencies:
@@ -13951,6 +13982,18 @@ __metadata:
languageName: node
linkType: hard
+"safe-array-concat@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "safe-array-concat@npm:1.0.0"
+ dependencies:
+ call-bind: ^1.0.2
+ get-intrinsic: ^1.2.0
+ has-symbols: ^1.0.3
+ isarray: ^2.0.5
+ checksum: f43cb98fe3b566327d0c09284de2b15fb85ae964a89495c1b1a5d50c7c8ed484190f4e5e71aacc167e16231940079b326f2c0807aea633d47cc7322f40a6b57f
+ languageName: node
+ linkType: hard
+
"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1":
version: 5.1.2
resolution: "safe-buffer@npm:5.1.2"
@@ -15019,8 +15062,8 @@ __metadata:
linkType: hard
"terser@npm:^5.0.0, terser@npm:^5.15.1, terser@npm:^5.16.8":
- version: 5.18.0
- resolution: "terser@npm:5.18.0"
+ version: 5.19.1
+ resolution: "terser@npm:5.19.1"
dependencies:
"@jridgewell/source-map": ^0.3.3
acorn: ^8.8.2
@@ -15028,7 +15071,7 @@ __metadata:
source-map-support: ~0.5.20
bin:
terser: bin/terser
- checksum: d01eb9805a978b3338b68fd2d9e35c1cd4cad78ea093dc92c7b3c38965232f0af0f95e0c6d90920ecf600a74135c608aebae26302c036c01393a590e1918bb90
+ checksum: 18657b2a282238a1ca9c825efa966f4dd043a33196b2f8a7a2cba406a2006e14f55295b9d9cf6380a18599b697e9579e4092c99b9f40c7871ceec01cc98e3606
languageName: node
linkType: hard
@@ -15267,9 +15310,9 @@ __metadata:
linkType: hard
"tslib@npm:^2.0.1, tslib@npm:^2.0.2, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0":
- version: 2.5.3
- resolution: "tslib@npm:2.5.3"
- checksum: 88902b309afaf83259131c1e13da1dceb0ad1682a213143a1346a649143924d78cf3760c448b84d796938fd76127183894f8d85cbb3bf9c4fddbfcc140c0003c
+ version: 2.6.0
+ resolution: "tslib@npm:2.6.0"
+ checksum: c01066038f950016a18106ddeca4649b4d76caa76ec5a31e2a26e10586a59fceb4ee45e96719bf6c715648e7c14085a81fee5c62f7e9ebee68e77a5396e5538f
languageName: node
linkType: hard
@@ -15427,6 +15470,42 @@ __metadata:
languageName: node
linkType: hard
+"typed-array-buffer@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "typed-array-buffer@npm:1.0.0"
+ dependencies:
+ call-bind: ^1.0.2
+ get-intrinsic: ^1.2.1
+ is-typed-array: ^1.1.10
+ checksum: 3e0281c79b2a40cd97fe715db803884301993f4e8c18e8d79d75fd18f796e8cd203310fec8c7fdb5e6c09bedf0af4f6ab8b75eb3d3a85da69328f28a80456bd3
+ languageName: node
+ linkType: hard
+
+"typed-array-byte-length@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "typed-array-byte-length@npm:1.0.0"
+ dependencies:
+ call-bind: ^1.0.2
+ for-each: ^0.3.3
+ has-proto: ^1.0.1
+ is-typed-array: ^1.1.10
+ checksum: b03db16458322b263d87a702ff25388293f1356326c8a678d7515767ef563ef80e1e67ce648b821ec13178dd628eb2afdc19f97001ceae7a31acf674c849af94
+ languageName: node
+ linkType: hard
+
+"typed-array-byte-offset@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "typed-array-byte-offset@npm:1.0.0"
+ dependencies:
+ available-typed-arrays: ^1.0.5
+ call-bind: ^1.0.2
+ for-each: ^0.3.3
+ has-proto: ^1.0.1
+ is-typed-array: ^1.1.10
+ checksum: 04f6f02d0e9a948a95fbfe0d5a70b002191fae0b8fe0fe3130a9b2336f043daf7a3dda56a31333c35a067a97e13f539949ab261ca0f3692c41603a46a94e960b
+ languageName: node
+ linkType: hard
+
"typed-array-length@npm:^1.0.4":
version: 1.0.4
resolution: "typed-array-length@npm:1.0.4"
@@ -16269,17 +16348,16 @@ __metadata:
languageName: node
linkType: hard
-"which-typed-array@npm:^1.1.9":
- version: 1.1.9
- resolution: "which-typed-array@npm:1.1.9"
+"which-typed-array@npm:^1.1.10, which-typed-array@npm:^1.1.11":
+ version: 1.1.11
+ resolution: "which-typed-array@npm:1.1.11"
dependencies:
available-typed-arrays: ^1.0.5
call-bind: ^1.0.2
for-each: ^0.3.3
gopd: ^1.0.1
has-tostringtag: ^1.0.0
- is-typed-array: ^1.1.10
- checksum: fe0178ca44c57699ca2c0e657b64eaa8d2db2372a4e2851184f568f98c478ae3dc3fdb5f7e46c384487046b0cf9e23241423242b277e03e8ba3dabc7c84c98ef
+ checksum: 711ffc8ef891ca6597b19539075ec3e08bb9b4c2ca1f78887e3c07a977ab91ac1421940505a197758fb5939aa9524976d0a5bbcac34d07ed6faa75cedbb17206
languageName: node
linkType: hard
From f8fcf304d4d7dc59683d6b06d7ba73ea9fbceb75 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 19 Jul 2023 13:35:47 +0200
Subject: [PATCH 080/102] Lock file maintenance (#17344)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
yarn.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index 469e42b4d1..a315d488ec 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6530,9 +6530,9 @@ __metadata:
linkType: hard
"caniuse-lite@npm:^1.0.30001503":
- version: 1.0.30001516
- resolution: "caniuse-lite@npm:1.0.30001516"
- checksum: 044adf3493b734a356a2922445a30095a0f6de6b9194695cdf74deafe7bef658e85858a31177762c2813f6e1ed2722d832d59eee0ecb2151e93a611ee18cb21f
+ version: 1.0.30001517
+ resolution: "caniuse-lite@npm:1.0.30001517"
+ checksum: e4e87436ae1c4408cf4438aac22902b31eb03f3f5bad7f33bc518d12ffb35f3fd9395ccf7efc608ee046f90ce324ec6f7f26f8a8172b8c43c26a06ecee612a29
languageName: node
linkType: hard
From e6a3bd4b8c5be0603c3f70dd093a4c1062617a10 Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Wed, 19 Jul 2023 09:11:20 -0700
Subject: [PATCH 081/102] Add a missing translation (#17351)
---
.../config/integrations/ha-config-integration-page.ts | 6 +++++-
src/translations/en.json | 1 +
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/panels/config/integrations/ha-config-integration-page.ts b/src/panels/config/integrations/ha-config-integration-page.ts
index b05b15b3ba..6ec67086f8 100644
--- a/src/panels/config/integrations/ha-config-integration-page.ts
+++ b/src/panels/config/integrations/ha-config-integration-page.ts
@@ -627,7 +627,11 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) {
}
if (devicesLine.length === 0) {
- devicesLine = ["No devices or entities"];
+ devicesLine = [
+ this.hass.localize(
+ "ui.panel.config.integrations.config_entry.no_devices_or_entities"
+ ),
+ ];
} else if (devicesLine.length === 2) {
devicesLine = [
devicesLine[0],
diff --git a/src/translations/en.json b/src/translations/en.json
index 7d80346d89..4e6590eb7e 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -3455,6 +3455,7 @@
"entities": "{count} {count, plural,\n one {entity}\n other {entities}\n}",
"services": "{count} {count, plural,\n one {service}\n other {services}\n}",
"entries": "{count} {count, plural,\n one {entry}\n other {entries}\n}",
+ "no_devices_or_entities": "No devices or entities",
"rename": "Rename",
"configure": "Configure",
"system_options": "System options",
From 3ce0fc0a2a4a45e1263f3357c6d57e93cd135543 Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Wed, 19 Jul 2023 23:45:38 +0200
Subject: [PATCH 082/102] Add My support for Assist dev tools (#17342)
---
src/panels/my/ha-panel-my.ts | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/panels/my/ha-panel-my.ts b/src/panels/my/ha-panel-my.ts
index 6f2d35c099..a083079f41 100644
--- a/src/panels/my/ha-panel-my.ts
+++ b/src/panels/my/ha-panel-my.ts
@@ -20,6 +20,9 @@ export const getMyRedirects = (hasSupervisor: boolean): Redirects => ({
application_credentials: {
redirect: "/config/application_credentials",
},
+ developer_assist: {
+ redirect: "/developer-tools/assist",
+ },
developer_states: {
redirect: "/developer-tools/state",
},
From 38ea25cf5a1b19121209206f93433c3f05e801ec Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 19 Jul 2023 23:10:47 -0400
Subject: [PATCH 083/102] Lock file maintenance (#17357)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
yarn.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index a315d488ec..fdcc6264c9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7662,9 +7662,9 @@ __metadata:
linkType: hard
"electron-to-chromium@npm:^1.4.431":
- version: 1.4.464
- resolution: "electron-to-chromium@npm:1.4.464"
- checksum: 4400ddeee0a300705830dfdb69c352b6efe4bd7a5ff99de87f61b8706008ce84f565214afae83272135512472406d8515f89531bcc27948683f67865bdbc1e3a
+ version: 1.4.465
+ resolution: "electron-to-chromium@npm:1.4.465"
+ checksum: 1c8509d5bf15004ad88921845386b695744d0ea02beef8e1e8c6abdf673a4d51254395b8cd501a12c1043f732fca18d2981f636aac3cf789673a515424460ccd
languageName: node
linkType: hard
From 11fa9d1ed8768654c84b5d04485826b0e9cc323c Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Thu, 20 Jul 2023 07:14:32 -0700
Subject: [PATCH 084/102] Fix guiMode toggle bugs in element-editor (#17282)
---
.../lovelace/editor/hui-element-editor.ts | 34 +++++++++++--------
1 file changed, 19 insertions(+), 15 deletions(-)
diff --git a/src/panels/lovelace/editor/hui-element-editor.ts b/src/panels/lovelace/editor/hui-element-editor.ts
index f711c63210..2d2b58f4a1 100644
--- a/src/panels/lovelace/editor/hui-element-editor.ts
+++ b/src/panels/lovelace/editor/hui-element-editor.ts
@@ -131,14 +131,16 @@ export abstract class HuiElementEditor extends LitElement {
}
}
- fireEvent(this, "config-changed", {
- config: this.value! as any,
- error: this._errors?.join(", "),
- guiModeAvailable: !(
- this.hasWarning ||
- this.hasError ||
- this._guiSupported === false
- ),
+ this.updateComplete.then(() => {
+ fireEvent(this, "config-changed", {
+ config: this.value! as any,
+ error: this._errors?.join(", "),
+ guiModeAvailable: !(
+ this.hasWarning ||
+ this.hasError ||
+ this._guiSupported === false
+ ),
+ });
});
}
@@ -156,13 +158,15 @@ export abstract class HuiElementEditor extends LitElement {
public set GUImode(guiMode: boolean) {
this._guiMode = guiMode;
- fireEvent(this as HTMLElement, "GUImode-changed", {
- guiMode,
- guiModeAvailable: !(
- this.hasWarning ||
- this.hasError ||
- this._guiSupported === false
- ),
+ this.updateComplete.then(() => {
+ fireEvent(this as HTMLElement, "GUImode-changed", {
+ guiMode,
+ guiModeAvailable: !(
+ this.hasWarning ||
+ this.hasError ||
+ this._guiSupported === false
+ ),
+ });
});
}
From 09e26c8fd79243746860fac9aa26f084b41ef12e Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Thu, 20 Jul 2023 07:15:19 -0700
Subject: [PATCH 085/102] Missing translation in data-table (#17356)
---
src/components/data-table/ha-data-table.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/components/data-table/ha-data-table.ts b/src/components/data-table/ha-data-table.ts
index 6aa6233b6d..5426e1179e 100644
--- a/src/components/data-table/ha-data-table.ts
+++ b/src/components/data-table/ha-data-table.ts
@@ -338,7 +338,8 @@ export class HaDataTable extends LitElement {
- ${this.noDataText || "No data"}
+ ${this.noDataText ||
+ this.hass.localize("ui.components.data-table.no-data")}
From a1748260d31108d501193acffe563da58806e49b Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Thu, 20 Jul 2023 07:15:59 -0700
Subject: [PATCH 086/102] Always show translated labels for
ha-form-multi_select (#17360)
---
src/components/ha-form/ha-form-multi_select.ts | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/components/ha-form/ha-form-multi_select.ts b/src/components/ha-form/ha-form-multi_select.ts
index e56d902b97..66c7d60ca6 100644
--- a/src/components/ha-form/ha-form-multi_select.ts
+++ b/src/components/ha-form/ha-form-multi_select.ts
@@ -91,7 +91,11 @@ export class HaFormMultiSelect extends LitElement implements HaFormElement {
slot="trigger"
.label=${this.label}
.value=${data
- .map((value) => this.schema.options![value] || value)
+ .map(
+ (value) =>
+ optionLabel(options.find((v) => optionValue(v) === value)) ||
+ value
+ )
.join(", ")}
.disabled=${this.disabled}
tabindex="-1"
From 406f8686425bee7124ba7db2bce8fe017346798d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 20 Jul 2023 20:36:44 -0400
Subject: [PATCH 087/102] Update dependency webpack to v5.88.2 (#17372)
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 056bda0f2f..ff72993ca9 100644
--- a/package.json
+++ b/package.json
@@ -242,7 +242,7 @@
"typescript": "5.1.6",
"vinyl-buffer": "1.0.1",
"vinyl-source-stream": "2.0.0",
- "webpack": "5.88.1",
+ "webpack": "5.88.2",
"webpack-cli": "5.1.4",
"webpack-dev-server": "4.15.1",
"webpack-manifest-plugin": "5.0.0",
diff --git a/yarn.lock b/yarn.lock
index fdcc6264c9..c6d661e810 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9820,7 +9820,7 @@ __metadata:
vis-network: 9.1.6
vue: 2.7.14
vue2-daterange-picker: 0.6.8
- webpack: 5.88.1
+ webpack: 5.88.2
webpack-cli: 5.1.4
webpack-dev-server: 4.15.1
webpack-manifest-plugin: 5.0.0
@@ -16224,9 +16224,9 @@ __metadata:
languageName: node
linkType: hard
-"webpack@npm:5.88.1":
- version: 5.88.1
- resolution: "webpack@npm:5.88.1"
+"webpack@npm:5.88.2":
+ version: 5.88.2
+ resolution: "webpack@npm:5.88.2"
dependencies:
"@types/eslint-scope": ^3.7.3
"@types/estree": ^1.0.0
@@ -16257,7 +16257,7 @@ __metadata:
optional: true
bin:
webpack: bin/webpack.js
- checksum: 726e7e05ab2e7c142609a673dd6aa1a711ed97f349418a2a393d650c5ddad172d191257f60e1e37f6b2a77261571c202aabd5ce9240791a686774f0801cf5ec2
+ checksum: 79476a782da31a21f6dd38fbbd06b68da93baf6a62f0d08ca99222367f3b8668f5a1f2086b7bb78e23172e31fa6df6fa7ab09b25e827866c4fc4dc2b30443ce2
languageName: node
linkType: hard
From 795831d4cf14e79fa4fccbee94f1d7c80f084fb6 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 20 Jul 2023 20:47:12 -0400
Subject: [PATCH 088/102] Update typescript-eslint monorepo to v6.1.0 (#17370)
---
package.json | 4 +-
yarn.lock | 139 ++++++++++++++++++++++++---------------------------
2 files changed, 67 insertions(+), 76 deletions(-)
diff --git a/package.json b/package.json
index ff72993ca9..77c8b240f6 100644
--- a/package.json
+++ b/package.json
@@ -184,8 +184,8 @@
"@types/sortablejs": "1.15.1",
"@types/tar": "6.1.5",
"@types/webspeechapi": "0.0.29",
- "@typescript-eslint/eslint-plugin": "6.0.0",
- "@typescript-eslint/parser": "6.0.0",
+ "@typescript-eslint/eslint-plugin": "6.1.0",
+ "@typescript-eslint/parser": "6.1.0",
"@web/dev-server": "0.1.38",
"@web/dev-server-rollup": "0.4.1",
"babel-loader": "9.1.3",
diff --git a/yarn.lock b/yarn.lock
index c6d661e810..74c0ef4897 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1560,7 +1560,7 @@ __metadata:
languageName: node
linkType: hard
-"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.3.0":
+"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
version: 4.4.0
resolution: "@eslint-community/eslint-utils@npm:4.4.0"
dependencies:
@@ -1571,7 +1571,7 @@ __metadata:
languageName: node
linkType: hard
-"@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.5.0":
+"@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.5.1":
version: 4.5.1
resolution: "@eslint-community/regexpp@npm:4.5.1"
checksum: 6d901166d64998d591fab4db1c2f872981ccd5f6fe066a1ad0a93d4e11855ecae6bfb76660869a469563e8882d4307228cebd41142adb409d182f2966771e57e
@@ -4335,7 +4335,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.11, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9":
+"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9":
version: 7.0.12
resolution: "@types/json-schema@npm:7.0.12"
checksum: 00239e97234eeb5ceefb0c1875d98ade6e922bfec39dd365ec6bd360b5c2f825e612ac4f6e5f1d13601b8b30f378f15e6faa805a3a732f4a1bbe61915163d293
@@ -4554,7 +4554,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/semver@npm:^7.3.12":
+"@types/semver@npm:^7.5.0":
version: 7.5.0
resolution: "@types/semver@npm:7.5.0"
checksum: 0a64b9b9c7424d9a467658b18dd70d1d781c2d6f033096a6e05762d20ebbad23c1b69b0083b0484722aabf35640b78ccc3de26368bcae1129c87e9df028a22e2
@@ -4658,22 +4658,21 @@ __metadata:
languageName: node
linkType: hard
-"@typescript-eslint/eslint-plugin@npm:6.0.0":
- version: 6.0.0
- resolution: "@typescript-eslint/eslint-plugin@npm:6.0.0"
+"@typescript-eslint/eslint-plugin@npm:6.1.0":
+ version: 6.1.0
+ resolution: "@typescript-eslint/eslint-plugin@npm:6.1.0"
dependencies:
- "@eslint-community/regexpp": ^4.5.0
- "@typescript-eslint/scope-manager": 6.0.0
- "@typescript-eslint/type-utils": 6.0.0
- "@typescript-eslint/utils": 6.0.0
- "@typescript-eslint/visitor-keys": 6.0.0
+ "@eslint-community/regexpp": ^4.5.1
+ "@typescript-eslint/scope-manager": 6.1.0
+ "@typescript-eslint/type-utils": 6.1.0
+ "@typescript-eslint/utils": 6.1.0
+ "@typescript-eslint/visitor-keys": 6.1.0
debug: ^4.3.4
- grapheme-splitter: ^1.0.4
graphemer: ^1.4.0
ignore: ^5.2.4
natural-compare: ^1.4.0
natural-compare-lite: ^1.4.0
- semver: ^7.5.0
+ semver: ^7.5.4
ts-api-utils: ^1.0.1
peerDependencies:
"@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha
@@ -4681,44 +4680,44 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
- checksum: 863f30b8ceb24d104fc8a41774e4f597a35525533aa99721198293b51628a2d986dcc6413893f27eb9db5a49c2fd2cc91d3aece8ed23d590f3eb4e9939c3d6ad
+ checksum: e1f05d8d49041b47cdbea8fc80f87f03dc0f7273deb2f34f73661831572fe62976ab3780972496428ce6fa31d3f53236a4c90cd9948d45f5004631edbfa3d42a
languageName: node
linkType: hard
-"@typescript-eslint/parser@npm:6.0.0":
- version: 6.0.0
- resolution: "@typescript-eslint/parser@npm:6.0.0"
+"@typescript-eslint/parser@npm:6.1.0":
+ version: 6.1.0
+ resolution: "@typescript-eslint/parser@npm:6.1.0"
dependencies:
- "@typescript-eslint/scope-manager": 6.0.0
- "@typescript-eslint/types": 6.0.0
- "@typescript-eslint/typescript-estree": 6.0.0
- "@typescript-eslint/visitor-keys": 6.0.0
+ "@typescript-eslint/scope-manager": 6.1.0
+ "@typescript-eslint/types": 6.1.0
+ "@typescript-eslint/typescript-estree": 6.1.0
+ "@typescript-eslint/visitor-keys": 6.1.0
debug: ^4.3.4
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
peerDependenciesMeta:
typescript:
optional: true
- checksum: a22f0c8f67eb244134f9d79d78faf1b6e2c0965495d78eef94a5680868f3d0fd9446a3ce5dc1e36dde02587da5d962944f3d83679c712d0b819ac99cdb9f7143
+ checksum: dc59cda4396ca09e3aa2bd5b99d8ef9526df56567d4a9b953668102116db975dfb2426c3369560a2b02e083d49e43b4cebb252144d175e900096eb0b17f7ae3c
languageName: node
linkType: hard
-"@typescript-eslint/scope-manager@npm:6.0.0":
- version: 6.0.0
- resolution: "@typescript-eslint/scope-manager@npm:6.0.0"
+"@typescript-eslint/scope-manager@npm:6.1.0":
+ version: 6.1.0
+ resolution: "@typescript-eslint/scope-manager@npm:6.1.0"
dependencies:
- "@typescript-eslint/types": 6.0.0
- "@typescript-eslint/visitor-keys": 6.0.0
- checksum: 450015be6454f953d0ea0da020ab47597e96a7a15c1002eed16c57430783bd7b045513d57a126606fb35e8971f1ce65fbefd845e3b5496bf75284cbe1681d0b9
+ "@typescript-eslint/types": 6.1.0
+ "@typescript-eslint/visitor-keys": 6.1.0
+ checksum: 57c73b8713be79abebbcfef1d58f78a820ea88a5c37a44d2c9a76130216d9ee824134fae215dde794121cfaf1284370da77e1e5184ba71812aebb1a8cf39f325
languageName: node
linkType: hard
-"@typescript-eslint/type-utils@npm:6.0.0":
- version: 6.0.0
- resolution: "@typescript-eslint/type-utils@npm:6.0.0"
+"@typescript-eslint/type-utils@npm:6.1.0":
+ version: 6.1.0
+ resolution: "@typescript-eslint/type-utils@npm:6.1.0"
dependencies:
- "@typescript-eslint/typescript-estree": 6.0.0
- "@typescript-eslint/utils": 6.0.0
+ "@typescript-eslint/typescript-estree": 6.1.0
+ "@typescript-eslint/utils": 6.1.0
debug: ^4.3.4
ts-api-utils: ^1.0.1
peerDependencies:
@@ -4726,60 +4725,59 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
- checksum: 53f46237891cfa738f6a4bc766a4dbb8d745b1cb9cbe2d2b40f2a4abcf0327d4aa92d9ce5361e87cd26d82e0159f358e28b0c67759eb053c4fd752654dc9dcb1
+ checksum: 83b2ffcf3aa297b60deb2e9ddd946b9c15cc55d0727dfc8a3447e8e5402428f6ee3fc67fb9d5d8ade25da4069ca77e23777caf02bcacd2a1e75b66cfc4d76579
languageName: node
linkType: hard
-"@typescript-eslint/types@npm:6.0.0":
- version: 6.0.0
- resolution: "@typescript-eslint/types@npm:6.0.0"
- checksum: a2e232b66b0b057152f4a94d7e0be75f32e389c9c1ec9ed9901ed5aab6e5df08c07bde9865710e315d835e4400ec2232f9c3c525b6edf8a85675ebfbfb69d3a5
+"@typescript-eslint/types@npm:6.1.0":
+ version: 6.1.0
+ resolution: "@typescript-eslint/types@npm:6.1.0"
+ checksum: c1f55ebfda7af5e63077beb65fe5a82de7ae7afb913a4ebfb023f2889d5ec06f75b6ebca6ee45d6d205508a52fa5a6bf5821182c3e7e4400ac9304083b88f139
languageName: node
linkType: hard
-"@typescript-eslint/typescript-estree@npm:6.0.0":
- version: 6.0.0
- resolution: "@typescript-eslint/typescript-estree@npm:6.0.0"
+"@typescript-eslint/typescript-estree@npm:6.1.0":
+ version: 6.1.0
+ resolution: "@typescript-eslint/typescript-estree@npm:6.1.0"
dependencies:
- "@typescript-eslint/types": 6.0.0
- "@typescript-eslint/visitor-keys": 6.0.0
+ "@typescript-eslint/types": 6.1.0
+ "@typescript-eslint/visitor-keys": 6.1.0
debug: ^4.3.4
globby: ^11.1.0
is-glob: ^4.0.3
- semver: ^7.5.0
+ semver: ^7.5.4
ts-api-utils: ^1.0.1
peerDependenciesMeta:
typescript:
optional: true
- checksum: 6214ff9cc3c4fd7fe03f846e96a498ecf85916083bb60d419bc5a12142cff912670032b1de5ea52ab353ca7eeb4e1cc8fa475a22958b010043c88e274df49859
+ checksum: 42729b8952a78ff9fc7d3833e16de25f1a3502461ebe5d09a28fb4375c8e5978dde0dd1f8a7973bf7470ff9023cce84de82e968b02a09f54a0f753d21d9127e8
languageName: node
linkType: hard
-"@typescript-eslint/utils@npm:6.0.0":
- version: 6.0.0
- resolution: "@typescript-eslint/utils@npm:6.0.0"
+"@typescript-eslint/utils@npm:6.1.0":
+ version: 6.1.0
+ resolution: "@typescript-eslint/utils@npm:6.1.0"
dependencies:
- "@eslint-community/eslint-utils": ^4.3.0
- "@types/json-schema": ^7.0.11
- "@types/semver": ^7.3.12
- "@typescript-eslint/scope-manager": 6.0.0
- "@typescript-eslint/types": 6.0.0
- "@typescript-eslint/typescript-estree": 6.0.0
- eslint-scope: ^5.1.1
- semver: ^7.5.0
+ "@eslint-community/eslint-utils": ^4.4.0
+ "@types/json-schema": ^7.0.12
+ "@types/semver": ^7.5.0
+ "@typescript-eslint/scope-manager": 6.1.0
+ "@typescript-eslint/types": 6.1.0
+ "@typescript-eslint/typescript-estree": 6.1.0
+ semver: ^7.5.4
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
- checksum: 94b9b616282f6fa1ae50ba371a482a3c8c50268ef8039b4e86d29c445e95025c819358a5cc9955c4668482d97ef026e7a49e7f4b3a4685347136ef5bbd297e4d
+ checksum: eb47a6b56e142ca68231f0f43af68d4cf5161235943aaf19c268156e3e751e10dd8ea3e0e297a7c0796b9eb3c5268b3c659821b909799949b55a524707c82e13
languageName: node
linkType: hard
-"@typescript-eslint/visitor-keys@npm:6.0.0":
- version: 6.0.0
- resolution: "@typescript-eslint/visitor-keys@npm:6.0.0"
+"@typescript-eslint/visitor-keys@npm:6.1.0":
+ version: 6.1.0
+ resolution: "@typescript-eslint/visitor-keys@npm:6.1.0"
dependencies:
- "@typescript-eslint/types": 6.0.0
+ "@typescript-eslint/types": 6.1.0
eslint-visitor-keys: ^3.4.1
- checksum: b0d9848a4490174db1d25b5f336548bb11dde4e0ce664c3dc341bed89fb3a3ada091aeb7f5d2d371433815332d93339c6cb77f7a24469c329c3d055b15237bfa
+ checksum: 21c7c9b9a52325e3b67c0015deb99a1603b19703af7c002e87f32e2d8f9910813985877ee7b589dc9938d308e3d082cf97c8ca43c2c95b86a919c426d8913439
languageName: node
linkType: hard
@@ -8141,7 +8139,7 @@ __metadata:
languageName: node
linkType: hard
-"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1":
+"eslint-scope@npm:5.1.1":
version: 5.1.1
resolution: "eslint-scope@npm:5.1.1"
dependencies:
@@ -9354,13 +9352,6 @@ __metadata:
languageName: node
linkType: hard
-"grapheme-splitter@npm:^1.0.4":
- version: 1.0.4
- resolution: "grapheme-splitter@npm:1.0.4"
- checksum: 0c22ec54dee1b05cd480f78cf14f732cb5b108edc073572c4ec205df4cd63f30f8db8025afc5debc8835a8ddeacf648a1c7992fe3dcd6ad38f9a476d84906620
- languageName: node
- linkType: hard
-
"graphemer@npm:^1.4.0":
version: 1.4.0
resolution: "graphemer@npm:1.4.0"
@@ -9714,8 +9705,8 @@ __metadata:
"@types/sortablejs": 1.15.1
"@types/tar": 6.1.5
"@types/webspeechapi": 0.0.29
- "@typescript-eslint/eslint-plugin": 6.0.0
- "@typescript-eslint/parser": 6.0.0
+ "@typescript-eslint/eslint-plugin": 6.1.0
+ "@typescript-eslint/parser": 6.1.0
"@vaadin/combo-box": 24.1.3
"@vaadin/vaadin-themable-mixin": 24.1.3
"@vibrant/color": 3.2.1-alpha.1
@@ -14115,7 +14106,7 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.5.0":
+"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.5.4":
version: 7.5.4
resolution: "semver@npm:7.5.4"
dependencies:
From 308d4b0a62e187a1b0a73a8a2620fa42f42bfd68 Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Thu, 20 Jul 2023 18:02:08 -0700
Subject: [PATCH 089/102] Fix Options flow missing submit button & finish
button. (#17361)
* Fix missing submit button in options flow
* Fix missing header and finish button at end of options flow
* load config translations for options flow
* one more revert
---
src/dialogs/config-flow/show-dialog-config-flow.ts | 2 ++
src/dialogs/config-flow/show-dialog-options-flow.ts | 2 ++
2 files changed, 4 insertions(+)
diff --git a/src/dialogs/config-flow/show-dialog-config-flow.ts b/src/dialogs/config-flow/show-dialog-config-flow.ts
index a575cde11f..f7b3fc7e37 100644
--- a/src/dialogs/config-flow/show-dialog-config-flow.ts
+++ b/src/dialogs/config-flow/show-dialog-config-flow.ts
@@ -23,6 +23,7 @@ export const showConfigFlowDialog = (
createFlow: async (hass, handler) => {
const [step] = await Promise.all([
createConfigFlow(hass, handler),
+ hass.loadFragmentTranslation("config"),
hass.loadBackendTranslation("config", handler),
hass.loadBackendTranslation("selector", handler),
// Used as fallback if no header defined for step
@@ -32,6 +33,7 @@ export const showConfigFlowDialog = (
},
fetchFlow: async (hass, flowId) => {
const step = await fetchConfigFlow(hass, flowId);
+ await hass.loadFragmentTranslation("config");
await hass.loadBackendTranslation("config", step.handler);
await hass.loadBackendTranslation("selector", step.handler);
return step;
diff --git a/src/dialogs/config-flow/show-dialog-options-flow.ts b/src/dialogs/config-flow/show-dialog-options-flow.ts
index 81a7947599..d95a38c29a 100644
--- a/src/dialogs/config-flow/show-dialog-options-flow.ts
+++ b/src/dialogs/config-flow/show-dialog-options-flow.ts
@@ -31,6 +31,7 @@ export const showOptionsFlowDialog = (
createFlow: async (hass, handler) => {
const [step] = await Promise.all([
createOptionsFlow(hass, handler),
+ hass.loadFragmentTranslation("config"),
hass.loadBackendTranslation("options", configEntry.domain),
hass.loadBackendTranslation("selector", configEntry.domain),
]);
@@ -39,6 +40,7 @@ export const showOptionsFlowDialog = (
fetchFlow: async (hass, flowId) => {
const [step] = await Promise.all([
fetchOptionsFlow(hass, flowId),
+ hass.loadFragmentTranslation("config"),
hass.loadBackendTranslation("options", configEntry.domain),
hass.loadBackendTranslation("selector", configEntry.domain),
]);
From 3189ef0701e1150f15141dd7b04b0900907aa040 Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Thu, 20 Jul 2023 23:51:41 -0700
Subject: [PATCH 090/102] Fix dialog-edit-view yaml editor (#17374)
---
src/panels/lovelace/editor/view-editor/hui-dialog-edit-view.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/panels/lovelace/editor/view-editor/hui-dialog-edit-view.ts b/src/panels/lovelace/editor/view-editor/hui-dialog-edit-view.ts
index 99d8c42f64..d873e8d5e1 100644
--- a/src/panels/lovelace/editor/view-editor/hui-dialog-edit-view.ts
+++ b/src/panels/lovelace/editor/view-editor/hui-dialog-edit-view.ts
@@ -21,7 +21,8 @@ import "../../../../components/ha-alert";
import "../../../../components/ha-circular-progress";
import "../../../../components/ha-dialog";
import "../../../../components/ha-dialog-header";
-import { HaYamlEditor } from "../../../../components/ha-yaml-editor";
+import "../../../../components/ha-yaml-editor";
+import type { HaYamlEditor } from "../../../../components/ha-yaml-editor";
import type {
LovelaceBadgeConfig,
LovelaceCardConfig,
From 0eebc9095c26cdcfa963dba8f07dde333890b2f5 Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Fri, 21 Jul 2023 12:18:32 +0200
Subject: [PATCH 091/102] Add event entity (#17332)
---
gallery/src/pages/lovelace/entities-card.ts | 10 ++
src/common/const.ts | 5 +-
src/common/entity/compute_state_display.ts | 12 +-
src/common/entity/domain_icon.ts | 18 ++-
src/common/entity/get_states.ts | 5 +
src/common/entity/state_active.ts | 2 +-
src/data/entity_attributes.ts | 1 +
src/data/logbook.ts | 19 +++
src/data/scene.ts | 1 +
src/dialogs/more-info/const.ts | 1 +
.../ha-automation-condition-numeric_state.ts | 2 +
.../types/ha-automation-condition-state.ts | 1 +
.../ha-automation-trigger-numeric_state.ts | 2 +
.../types/ha-automation-trigger-state.ts | 1 +
.../config/devices/ha-config-device-page.ts | 48 ++++---
.../create-element/create-row-element.ts | 3 +
.../entity-rows/hui-event-entity-row.ts | 129 ++++++++++++++++++
src/state-summary/state-card-content.js | 1 +
src/state-summary/state-card-event.ts | 59 ++++++++
src/translations/en.json | 13 +-
20 files changed, 302 insertions(+), 31 deletions(-)
create mode 100644 src/panels/lovelace/entity-rows/hui-event-entity-row.ts
create mode 100644 src/state-summary/state-card-event.ts
diff --git a/gallery/src/pages/lovelace/entities-card.ts b/gallery/src/pages/lovelace/entities-card.ts
index 075fa73351..aa6368878d 100644
--- a/gallery/src/pages/lovelace/entities-card.ts
+++ b/gallery/src/pages/lovelace/entities-card.ts
@@ -135,6 +135,14 @@ const ENTITIES = [
getEntity("text", "unavailable", "unavailable", {
friendly_name: "Message",
}),
+ getEntity("event", "unavailable", "unavailable", {
+ friendly_name: "Empty remote",
+ }),
+ getEntity("event", "doorbell", "2023-07-17T21:26:11.615+00:00", {
+ friendly_name: "Doorbell",
+ device_class: "doorbell",
+ event_type: "Ding-Dong",
+ }),
];
const CONFIGS = [
@@ -154,6 +162,7 @@ const CONFIGS = [
- input_number.number
- sensor.humidity
- text.message
+ - event.doorbell
`,
},
{
@@ -246,6 +255,7 @@ const CONFIGS = [
- input_number.unavailable
- input_select.unavailable
- text.unavailable
+ - event.unavailable
`,
},
{
diff --git a/src/common/const.ts b/src/common/const.ts
index b4f79e5126..7902662135 100644
--- a/src/common/const.ts
+++ b/src/common/const.ts
@@ -10,6 +10,7 @@ import {
mdiBookmark,
mdiBrightness5,
mdiBullhorn,
+ mdiButtonPointer,
mdiCalendar,
mdiCalendarClock,
mdiCarCoolantLevel,
@@ -28,7 +29,6 @@ import {
mdiFormatListBulleted,
mdiFormTextbox,
mdiGauge,
- mdiGestureTapButton,
mdiGoogleAssistant,
mdiGoogleCirclesCommunities,
mdiHomeAssistant,
@@ -93,7 +93,7 @@ export const FIXED_DOMAIN_ICONS = {
homekit: mdiHomeAutomation,
image: mdiImage,
image_processing: mdiImageFilterFrames,
- input_button: mdiGestureTapButton,
+ input_button: mdiButtonPointer,
input_datetime: mdiCalendarClock,
input_number: mdiRayVertex,
input_select: mdiFormatListBulleted,
@@ -178,6 +178,7 @@ export const DOMAINS_WITH_CARD = [
"climate",
"cover",
"configurator",
+ "event",
"input_button",
"input_select",
"input_number",
diff --git a/src/common/entity/compute_state_display.ts b/src/common/entity/compute_state_display.ts
index 998949b007..4baad8357d 100644
--- a/src/common/entity/compute_state_display.ts
+++ b/src/common/entity/compute_state_display.ts
@@ -185,9 +185,15 @@ export const computeStateDisplayFromEntityAttributes = (
// state is a timestamp
if (
- ["button", "image", "input_button", "scene", "stt", "tts"].includes(
- domain
- ) ||
+ [
+ "button",
+ "event",
+ "image",
+ "input_button",
+ "scene",
+ "stt",
+ "tts",
+ ].includes(domain) ||
(domain === "sensor" && attributes.device_class === "timestamp")
) {
try {
diff --git a/src/common/entity/domain_icon.ts b/src/common/entity/domain_icon.ts
index 3ced61b3f8..eeefc4598c 100644
--- a/src/common/entity/domain_icon.ts
+++ b/src/common/entity/domain_icon.ts
@@ -7,6 +7,7 @@ import {
mdiAudioVideoOff,
mdiBluetooth,
mdiBluetoothConnect,
+ mdiButtonPointer,
mdiCalendar,
mdiCast,
mdiCastConnected,
@@ -16,8 +17,10 @@ import {
mdiClock,
mdiCloseCircleOutline,
mdiCrosshairsQuestion,
+ mdiDoorbell,
mdiFan,
mdiFanOff,
+ mdiGestureTap,
mdiGestureTapButton,
mdiLanConnect,
mdiLanDisconnect,
@@ -25,6 +28,7 @@ import {
mdiLockAlert,
mdiLockClock,
mdiLockOpen,
+ mdiMotionSensor,
mdiPackage,
mdiPackageDown,
mdiPackageUp,
@@ -111,7 +115,7 @@ export const domainIconWithoutDefault = (
case "update":
return mdiPackageUp;
default:
- return mdiGestureTapButton;
+ return mdiButtonPointer;
}
case "camera":
@@ -131,6 +135,18 @@ export const domainIconWithoutDefault = (
}
return compareState === "not_home" ? mdiAccountArrowRight : mdiAccount;
+ case "event":
+ switch (stateObj?.attributes.device_class) {
+ case "doorbell":
+ return mdiDoorbell;
+ case "button":
+ return mdiGestureTapButton;
+ case "motion":
+ return mdiMotionSensor;
+ default:
+ return mdiGestureTap;
+ }
+
case "fan":
return compareState === "off" ? mdiFanOff : mdiFan;
diff --git a/src/common/entity/get_states.ts b/src/common/entity/get_states.ts
index f8d10ad99f..7eaf7bfb81 100644
--- a/src/common/entity/get_states.ts
+++ b/src/common/entity/get_states.ts
@@ -250,6 +250,11 @@ export const getStates = (
result.push("home", "not_home");
}
break;
+ case "event":
+ if (attribute === "event_type") {
+ result.push(...state.attributes.event_types);
+ }
+ break;
case "fan":
if (attribute === "preset_mode") {
result.push(...state.attributes.preset_modes);
diff --git a/src/common/entity/state_active.ts b/src/common/entity/state_active.ts
index a22ee5c9e5..34162fcc0b 100644
--- a/src/common/entity/state_active.ts
+++ b/src/common/entity/state_active.ts
@@ -6,7 +6,7 @@ export function stateActive(stateObj: HassEntity, state?: string): boolean {
const domain = computeDomain(stateObj.entity_id);
const compareState = state !== undefined ? state : stateObj?.state;
- if (["button", "input_button", "scene"].includes(domain)) {
+ if (["button", "event", "input_button", "scene"].includes(domain)) {
return compareState !== UNAVAILABLE;
}
diff --git a/src/data/entity_attributes.ts b/src/data/entity_attributes.ts
index 7e3fae87aa..77dcc0b465 100644
--- a/src/data/entity_attributes.ts
+++ b/src/data/entity_attributes.ts
@@ -9,6 +9,7 @@ export const STATE_ATTRIBUTES = [
"emulated_hue_name",
"emulated_hue",
"entity_picture",
+ "event_types",
"friendly_name",
"haaska_hidden",
"haaska_name",
diff --git a/src/data/logbook.ts b/src/data/logbook.ts
index 37b0737bea..75deda104e 100644
--- a/src/data/logbook.ts
+++ b/src/data/logbook.ts
@@ -12,6 +12,7 @@ import { LocalizeFunc } from "../common/translations/localize";
import { HaEntityPickerEntityFilterFunc } from "../components/entity/ha-entity-picker";
import { HomeAssistant } from "../types";
import { UNAVAILABLE, UNKNOWN } from "./entity";
+import { computeAttributeValueDisplay } from "../common/entity/compute_attribute_display";
const LOGBOOK_LOCALIZE_PATH = "ui.components.logbook.messages";
export const CONTINUOUS_DOMAINS = ["counter", "proximity", "sensor", "zone"];
@@ -156,6 +157,7 @@ export const createHistoricState = (
attributes: {
// Rebuild the historical state by copying static attributes only
device_class: currentStateObj?.attributes.device_class,
+ event_type: currentStateObj?.attributes.event_type,
source_type: currentStateObj?.attributes.source_type,
has_date: currentStateObj?.attributes.has_date,
has_time: currentStateObj?.attributes.has_time,
@@ -343,6 +345,23 @@ export const localizeStateMessage = (
}
break;
+ case "event": {
+ const event_type =
+ computeAttributeValueDisplay(
+ hass!.localize,
+ stateObj,
+ hass.locale,
+ hass.config,
+ hass.entities,
+ "event_type"
+ )?.toString() ||
+ localize(`${LOGBOOK_LOCALIZE_PATH}.detected_unknown_event`);
+
+ return localize(`${LOGBOOK_LOCALIZE_PATH}.detected_event`, {
+ event_type: autoCaseNoun(event_type, hass.language),
+ });
+ }
+
case "lock":
switch (state) {
case "unlocked":
diff --git a/src/data/scene.ts b/src/data/scene.ts
index e8f27d6c26..b9b6fa4d2c 100644
--- a/src/data/scene.ts
+++ b/src/data/scene.ts
@@ -10,6 +10,7 @@ export const SCENE_IGNORED_DOMAINS = [
"button",
"configuration",
"device_tracker",
+ "event",
"image_processing",
"input_button",
"persistent_notification",
diff --git a/src/dialogs/more-info/const.ts b/src/dialogs/more-info/const.ts
index d6d6d615aa..a0dc211937 100644
--- a/src/dialogs/more-info/const.ts
+++ b/src/dialogs/more-info/const.ts
@@ -72,6 +72,7 @@ export const DOMAINS_HIDE_DEFAULT_MORE_INFO = [
"select",
"text",
"update",
+ "event",
];
/** Domains that should have the history hidden in the more info dialog. */
diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-numeric_state.ts b/src/panels/config/automation/condition/types/ha-automation-condition-numeric_state.ts
index a7458813db..ea41ca70d0 100644
--- a/src/panels/config/automation/condition/types/ha-automation-condition-numeric_state.ts
+++ b/src/panels/config/automation/condition/types/ha-automation-condition-numeric_state.ts
@@ -52,6 +52,8 @@ export default class HaNumericStateCondition extends LitElement {
"effect_list",
"effect",
"entity_picture",
+ "event_type",
+ "event_types",
"fan_mode",
"fan_modes",
"fan_speed_list",
diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-state.ts b/src/panels/config/automation/condition/types/ha-automation-condition-state.ts
index e61438ad3e..407699c47e 100644
--- a/src/panels/config/automation/condition/types/ha-automation-condition-state.ts
+++ b/src/panels/config/automation/condition/types/ha-automation-condition-state.ts
@@ -42,6 +42,7 @@ const SCHEMA = [
"editable",
"effect_list",
"entity_picture",
+ "event_types",
"fan_modes",
"fan_speed_list",
"forecast",
diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-numeric_state.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-numeric_state.ts
index 62315025a4..4f27495023 100644
--- a/src/panels/config/automation/trigger/types/ha-automation-trigger-numeric_state.ts
+++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-numeric_state.ts
@@ -51,6 +51,8 @@ export class HaNumericStateTrigger extends LitElement {
"effect",
"entity_id",
"entity_picture",
+ "event_type",
+ "event_types",
"fan_mode",
"fan_modes",
"fan_speed_list",
diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-state.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-state.ts
index 61904a424f..4899fb19ee 100644
--- a/src/panels/config/automation/trigger/types/ha-automation-trigger-state.ts
+++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-state.ts
@@ -76,6 +76,7 @@ export class HaStateTrigger extends LitElement implements TriggerElement {
"effect_list",
"entity_id",
"entity_picture",
+ "event_types",
"fan_modes",
"fan_speed_list",
"friendly_name",
diff --git a/src/panels/config/devices/ha-config-device-page.ts b/src/panels/config/devices/ha-config-device-page.ts
index 2c2051065e..3c3f513507 100644
--- a/src/panels/config/devices/ha-config-device-page.ts
+++ b/src/panels/config/devices/ha-config-device-page.ts
@@ -207,16 +207,25 @@ export class HaConfigDevicePage extends LitElement {
const result = groupBy(entities, (entry) =>
entry.entity_category
? entry.entity_category
+ : computeDomain(entry.entity_id) === "event"
+ ? "event"
: SENSOR_ENTITIES.includes(computeDomain(entry.entity_id))
? "sensor"
: "control"
) as Record<
| "control"
+ | "event"
| "sensor"
| NonNullable,
EntityRegistryStateEntry[]
>;
- for (const key of ["control", "sensor", "diagnostic", "config"]) {
+ for (const key of [
+ "config",
+ "control",
+ "diagnostic",
+ "event",
+ "sensor",
+ ]) {
if (!(key in result)) {
result[key] = [];
}
@@ -877,24 +886,25 @@ export class HaConfigDevicePage extends LitElement {
${!this.narrow ? [automationCard, sceneCard, scriptCard] : ""}
- ${(["control", "sensor", "config", "diagnostic"] as const).map(
- (category) =>
- // Make sure we render controls if no other cards will be rendered
- entitiesByCategory[category].length > 0 ||
- (entities.length === 0 && category === "control")
- ? html`
-
-
- `
- : ""
+ ${(
+ ["control", "sensor", "event", "config", "diagnostic"] as const
+ ).map((category) =>
+ // Make sure we render controls if no other cards will be rendered
+ entitiesByCategory[category].length > 0 ||
+ (entities.length === 0 && category === "control")
+ ? html`
+
+
+ `
+ : ""
)}
import("../entity-rows/hui-cover-entity-row"),
"date-entity": () => import("../entity-rows/hui-date-entity-row"),
"datetime-entity": () => import("../entity-rows/hui-datetime-entity-row"),
+ "event-entity": () => import("../entity-rows/hui-event-entity-row"),
"group-entity": () => import("../entity-rows/hui-group-entity-row"),
"input-button-entity": () =>
import("../entity-rows/hui-input-button-entity-row"),
@@ -65,6 +67,7 @@ const DOMAIN_TO_ELEMENT_TYPE = {
cover: "cover",
date: "date",
datetime: "datetime",
+ event: "event",
fan: "toggle",
group: "group",
humidifier: "humidifier",
diff --git a/src/panels/lovelace/entity-rows/hui-event-entity-row.ts b/src/panels/lovelace/entity-rows/hui-event-entity-row.ts
new file mode 100644
index 0000000000..35c98d1a0d
--- /dev/null
+++ b/src/panels/lovelace/entity-rows/hui-event-entity-row.ts
@@ -0,0 +1,129 @@
+import {
+ css,
+ CSSResultGroup,
+ html,
+ LitElement,
+ PropertyValues,
+ nothing,
+} from "lit";
+import { customElement, property, state } from "lit/decorators";
+import { computeStateDisplay } from "../../../common/entity/compute_state_display";
+import { computeAttributeValueDisplay } from "../../../common/entity/compute_attribute_display";
+import { isUnavailableState } from "../../../data/entity";
+import { ActionHandlerEvent } from "../../../data/lovelace";
+import { HomeAssistant } from "../../../types";
+import { EntitiesCardEntityConfig } from "../cards/types";
+import { actionHandler } from "../common/directives/action-handler-directive";
+import { handleAction } from "../common/handle-action";
+import { hasAction } from "../common/has-action";
+import { hasConfigOrEntityChanged } from "../common/has-changed";
+import "../components/hui-generic-entity-row";
+import "../components/hui-timestamp-display";
+import { createEntityNotFoundWarning } from "../components/hui-warning";
+import { TimestampRenderingFormat } from "../components/types";
+import { LovelaceRow } from "./types";
+
+interface EventEntityConfig extends EntitiesCardEntityConfig {
+ format?: TimestampRenderingFormat;
+}
+
+@customElement("hui-event-entity-row")
+class HuiEventEntityRow extends LitElement implements LovelaceRow {
+ @property({ attribute: false }) public hass?: HomeAssistant;
+
+ @state() private _config?: EventEntityConfig;
+
+ public setConfig(config: EventEntityConfig): void {
+ if (!config) {
+ throw new Error("Invalid configuration");
+ }
+ this._config = config;
+ }
+
+ protected shouldUpdate(changedProps: PropertyValues): boolean {
+ return hasConfigOrEntityChanged(this, changedProps);
+ }
+
+ protected render() {
+ if (!this._config || !this.hass) {
+ return nothing;
+ }
+
+ const stateObj = this.hass.states[this._config.entity];
+
+ if (!stateObj) {
+ return html`
+
+ ${createEntityNotFoundWarning(this.hass, this._config.entity)}
+
+ `;
+ }
+
+ return html`
+
+
+
+ ${isUnavailableState(stateObj.state)
+ ? computeStateDisplay(
+ this.hass!.localize,
+ stateObj,
+ this.hass.locale,
+ this.hass.config,
+ this.hass.entities
+ )
+ : computeAttributeValueDisplay(
+ this.hass!.localize,
+ stateObj,
+ this.hass.locale,
+ this.hass.config,
+ this.hass.entities,
+ "event_type"
+ )}
+
+
+ ${isUnavailableState(stateObj.state)
+ ? ``
+ : html`
+
+ `}
+
+
+
+ `;
+ }
+
+ private _handleAction(ev: ActionHandlerEvent) {
+ handleAction(this, this.hass!, this._config!, ev.detail.action);
+ }
+
+ static get styles(): CSSResultGroup {
+ return css`
+ div {
+ text-align: right;
+ }
+ .when {
+ color: var(--secondary-text-color);
+ }
+ .what {
+ color: var(--primary-text-color);
+ }
+ `;
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "hui-event-entity-row": HuiEventEntityRow;
+ }
+}
diff --git a/src/state-summary/state-card-content.js b/src/state-summary/state-card-content.js
index b1669ae994..4171bd447a 100644
--- a/src/state-summary/state-card-content.js
+++ b/src/state-summary/state-card-content.js
@@ -8,6 +8,7 @@ import "./state-card-humidifier";
import "./state-card-configurator";
import "./state-card-cover";
import "./state-card-display";
+import "./state-card-event";
import "./state-card-input_button";
import "./state-card-input_number";
import "./state-card-input_select";
diff --git a/src/state-summary/state-card-event.ts b/src/state-summary/state-card-event.ts
new file mode 100644
index 0000000000..20d590fb22
--- /dev/null
+++ b/src/state-summary/state-card-event.ts
@@ -0,0 +1,59 @@
+import { HassEntity } from "home-assistant-js-websocket";
+import { CSSResultGroup, html, LitElement } from "lit";
+import { customElement, property } from "lit/decorators";
+import "../components/entity/ha-entity-toggle";
+import "../components/entity/state-info";
+import { HomeAssistant } from "../types";
+import { isUnavailableState } from "../data/entity";
+import { computeAttributeValueDisplay } from "../common/entity/compute_attribute_display";
+import { computeStateDisplay } from "../common/entity/compute_state_display";
+import { haStyle } from "../resources/styles";
+
+@customElement("state-card-event")
+export class StateCardEvent extends LitElement {
+ @property({ attribute: false }) public hass!: HomeAssistant;
+
+ @property() public stateObj!: HassEntity;
+
+ @property({ type: Boolean }) public inDialog = false;
+
+ protected render() {
+ return html`
+
+
+
+ ${isUnavailableState(this.stateObj.state)
+ ? computeStateDisplay(
+ this.hass!.localize,
+ this.stateObj,
+ this.hass.locale,
+ this.hass.config,
+ this.hass.entities
+ )
+ : computeAttributeValueDisplay(
+ this.hass!.localize,
+ this.stateObj,
+ this.hass.locale,
+ this.hass.config,
+ this.hass.entities,
+ "event_type"
+ )}
+
+
+ `;
+ }
+
+ static get styles(): CSSResultGroup {
+ return haStyle;
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "state-card-event": StateCardEvent;
+ }
+}
diff --git a/src/translations/en.json b/src/translations/en.json
index 4e6590eb7e..cad64bcb46 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -357,7 +357,9 @@
"became_unavailable": "became unavailable",
"became_unknown": "became unknown",
"detected_tampering": "detected tampering",
- "cleared_tampering": "cleared tampering"
+ "cleared_tampering": "cleared tampering",
+ "detected_event": "{event_type} event detected",
+ "detected_unknown_event": "detected an unknown event"
}
},
"entity": {
@@ -2322,7 +2324,7 @@
}
},
"event": {
- "label": "Event",
+ "label": "Manual event",
"event_type": "Event type",
"event_data": "Event data",
"context_users": "Limit to events triggered by",
@@ -2640,11 +2642,11 @@
"label": "Condition"
},
"event": {
- "label": "Event",
- "event": "[%key:ui::panel::config::automation::editor::triggers::type::event::label%]",
+ "label": "Manual event",
+ "event": "[%key:ui::panel::config::automation::editor::triggers::type::event::event_type%]",
"event_data": "[%key:ui::panel::config::automation::editor::triggers::type::event::event_data%]",
"description": {
- "full": "Fire event {name}",
+ "full": "Manually fire event {name}",
"template": "based on a template"
}
},
@@ -3212,6 +3214,7 @@
"entities": {
"entities": "Entities",
"control": "Controls",
+ "event": "Events",
"sensor": "Sensors",
"diagnostic": "Diagnostic",
"config": "Configuration",
From ec58862f3eec36f6f89d17fdd60ed81955396b02 Mon Sep 17 00:00:00 2001
From: G Johansson
Date: Fri, 21 Jul 2023 17:30:59 +0200
Subject: [PATCH 092/102] Implement forecast types for Weather (#15028)
* Implement forecast types
* editor
* Fix twice_daily
* All cards
* Review comments
* hasforecast
* card-editor
* forecast default
* Review comments
* fix entity row
* Remove legacy option
* Check if selected forecast is supported when picking entity
* Always show weather_to_show selector
* comments
* Update types.ts
* Hourly before twice-daily
* Expose forecast via WS instead of as state attributes
* Unsubscribe on disconnect
* lint
* prettier
* Fix _forecastSupported
* Improve conditions for subscribing to forecast updates
* Teach weather entity row and more info to subscribe
* Fix subscribing
* Deduplicate code in getForecast
* Simplify
* Tweak subscribe logic
* Address review comments
---------
Co-authored-by: Erik
Co-authored-by: Bram Kragten
---
src/data/weather.ts | 143 +++++++++++++++---
.../more-info/controls/more-info-weather.ts | 79 +++++++++-
.../cards/hui-weather-forecast-card.ts | 90 ++++++++---
src/panels/lovelace/cards/types.ts | 2 +
.../hui-weather-forecast-card-editor.ts | 134 ++++++++++++++--
.../entity-rows/hui-weather-entity-row.ts | 58 ++++++-
src/translations/en.json | 10 +-
7 files changed, 460 insertions(+), 56 deletions(-)
diff --git a/src/data/weather.ts b/src/data/weather.ts
index 619240354d..d18c41ccab 100644
--- a/src/data/weather.ts
+++ b/src/data/weather.ts
@@ -24,10 +24,19 @@ import {
} from "home-assistant-js-websocket";
import { css, html, svg, SVGTemplateResult, TemplateResult } from "lit";
import { styleMap } from "lit/directives/style-map";
+import { supportsFeature } from "../common/entity/supports-feature";
import { formatNumber } from "../common/number/format_number";
import "../components/ha-svg-icon";
import type { HomeAssistant } from "../types";
+export const enum WeatherEntityFeature {
+ FORECAST_DAILY = 1,
+ FORECAST_HOURLY = 2,
+ FORECAST_TWICE_DAILY = 4,
+}
+
+export type ForecastType = "legacy" | "hourly" | "daily" | "twice_daily";
+
interface ForecastAttribute {
temperature: number;
datetime: string;
@@ -36,7 +45,7 @@ interface ForecastAttribute {
precipitation_probability?: number;
humidity?: number;
condition?: string;
- daytime?: boolean;
+ is_daytime?: boolean;
pressure?: number;
wind_speed?: string;
}
@@ -45,6 +54,7 @@ interface WeatherEntityAttributes extends HassEntityAttributeBase {
attribution?: string;
humidity?: number;
forecast?: ForecastAttribute[];
+ is_daytime?: boolean;
pressure?: number;
temperature?: number;
visibility?: number;
@@ -57,6 +67,11 @@ interface WeatherEntityAttributes extends HassEntityAttributeBase {
wind_speed_unit: string;
}
+export interface ForecastEvent {
+ type: "hourly" | "daily" | "twice_daily";
+ forecast: [ForecastAttribute] | null;
+}
+
export interface WeatherEntity extends HassEntityBase {
attributes: WeatherEntityAttributes;
}
@@ -225,9 +240,10 @@ export const getWeatherUnit = (
export const getSecondaryWeatherAttribute = (
hass: HomeAssistant,
- stateObj: WeatherEntity
+ stateObj: WeatherEntity,
+ forecast: ForecastAttribute[]
): TemplateResult | undefined => {
- const extrema = getWeatherExtrema(hass, stateObj);
+ const extrema = getWeatherExtrema(hass, stateObj, forecast);
if (extrema) {
return extrema;
@@ -237,11 +253,11 @@ export const getSecondaryWeatherAttribute = (
let attribute: string;
if (
- stateObj.attributes.forecast?.length &&
- stateObj.attributes.forecast[0].precipitation !== undefined &&
- stateObj.attributes.forecast[0].precipitation !== null
+ forecast?.length &&
+ forecast[0].precipitation !== undefined &&
+ forecast[0].precipitation !== null
) {
- value = stateObj.attributes.forecast[0].precipitation!;
+ value = forecast[0].precipitation!;
attribute = "precipitation";
} else if ("humidity" in stateObj.attributes) {
value = stateObj.attributes.humidity!;
@@ -265,9 +281,10 @@ export const getSecondaryWeatherAttribute = (
const getWeatherExtrema = (
hass: HomeAssistant,
- stateObj: WeatherEntity
+ stateObj: WeatherEntity,
+ forecast: ForecastAttribute[]
): TemplateResult | undefined => {
- if (!stateObj.attributes.forecast?.length) {
+ if (!forecast?.length) {
return undefined;
}
@@ -275,18 +292,18 @@ const getWeatherExtrema = (
let tempHigh: number | undefined;
const today = new Date().getDate();
- for (const forecast of stateObj.attributes.forecast!) {
- if (new Date(forecast.datetime).getDate() !== today) {
+ for (const fc of forecast!) {
+ if (new Date(fc.datetime).getDate() !== today) {
break;
}
- if (!tempHigh || forecast.temperature > tempHigh) {
- tempHigh = forecast.temperature;
+ if (!tempHigh || fc.temperature > tempHigh) {
+ tempHigh = fc.temperature;
}
- if (!tempLow || (forecast.templow && forecast.templow < tempLow)) {
- tempLow = forecast.templow;
+ if (!tempLow || (fc.templow && fc.templow < tempLow)) {
+ tempLow = fc.templow;
}
- if (!forecast.templow && (!tempLow || forecast.temperature < tempLow)) {
- tempLow = forecast.temperature;
+ if (!fc.templow && (!tempLow || fc.temperature < tempLow)) {
+ tempLow = fc.temperature;
}
}
@@ -510,7 +527,7 @@ export const weatherIcon = (state?: string, nightTime?: boolean): string =>
const DAY_IN_MILLISECONDS = 86400000;
-export const isForecastHourly = (
+const isForecastHourly = (
forecast?: ForecastAttribute[]
): boolean | undefined => {
if (forecast && forecast?.length && forecast?.length > 2) {
@@ -538,3 +555,93 @@ export const getWeatherConvertibleUnits = (
hass.callWS({
type: "weather/convertible_units",
});
+
+const getLegacyForecast = (
+ weather_attributes?: WeatherEntityAttributes | undefined
+):
+ | {
+ forecast: ForecastAttribute[];
+ type: "daily" | "hourly" | "twice_daily";
+ }
+ | undefined => {
+ if (weather_attributes?.forecast && weather_attributes.forecast.length > 2) {
+ const hourly = isForecastHourly(weather_attributes.forecast);
+ if (hourly === true) {
+ const dateFirst = new Date(weather_attributes.forecast![0].datetime);
+ const datelast = new Date(
+ weather_attributes.forecast![
+ weather_attributes.forecast!.length - 1
+ ].datetime
+ );
+ const dayDiff = datelast.getTime() - dateFirst.getTime();
+ const dayNight = dayDiff > DAY_IN_MILLISECONDS;
+ return {
+ forecast: weather_attributes.forecast,
+ type: dayNight ? "twice_daily" : "hourly",
+ };
+ }
+ return { forecast: weather_attributes.forecast, type: "daily" };
+ }
+ return undefined;
+};
+
+export const getForecast = (
+ weather_attributes?: WeatherEntityAttributes | undefined,
+ forecast_event?: ForecastEvent,
+ forecast_type?: ForecastType | undefined
+):
+ | {
+ forecast: ForecastAttribute[];
+ type: "daily" | "hourly" | "twice_daily";
+ }
+ | undefined => {
+ if (forecast_type === undefined) {
+ if (
+ forecast_event?.type !== undefined &&
+ forecast_event?.forecast &&
+ forecast_event?.forecast?.length > 2
+ ) {
+ return { forecast: forecast_event.forecast, type: forecast_event?.type };
+ }
+ return getLegacyForecast(weather_attributes);
+ }
+
+ if (forecast_type === "legacy") {
+ return getLegacyForecast(weather_attributes);
+ }
+
+ if (
+ forecast_type === forecast_event?.type &&
+ forecast_event?.forecast &&
+ forecast_event?.forecast?.length > 2
+ ) {
+ return { forecast: forecast_event.forecast, type: forecast_type };
+ }
+
+ return undefined;
+};
+
+export const subscribeForecast = (
+ hass: HomeAssistant,
+ entity_id: string,
+ forecast_type: "daily" | "hourly" | "twice_daily",
+ callback: (forecastevent: ForecastEvent) => void
+) =>
+ hass.connection.subscribeMessage(callback, {
+ type: "weather/subscribe_forecast",
+ forecast_type,
+ entity_id,
+ });
+
+export const getDefaultForecastType = (stateObj: HassEntityBase) => {
+ if (supportsFeature(stateObj, WeatherEntityFeature.FORECAST_DAILY)) {
+ return "daily";
+ }
+ if (supportsFeature(stateObj, WeatherEntityFeature.FORECAST_HOURLY)) {
+ return "hourly";
+ }
+ if (supportsFeature(stateObj, WeatherEntityFeature.FORECAST_TWICE_DAILY)) {
+ return "twice_daily";
+ }
+ return undefined;
+};
diff --git a/src/dialogs/more-info/controls/more-info-weather.ts b/src/dialogs/more-info/controls/more-info-weather.ts
index 628886339d..f76e2517f1 100644
--- a/src/dialogs/more-info/controls/more-info-weather.ts
+++ b/src/dialogs/more-info/controls/more-info-weather.ts
@@ -13,15 +13,18 @@ import {
PropertyValues,
nothing,
} from "lit";
-import { customElement, property } from "lit/decorators";
+import { customElement, property, state } from "lit/decorators";
import { formatDateWeekdayDay } from "../../../common/datetime/format_date";
import { formatTimeWeekday } from "../../../common/datetime/format_time";
import { formatNumber } from "../../../common/number/format_number";
import "../../../components/ha-svg-icon";
import {
+ getDefaultForecastType,
+ getForecast,
getWeatherUnit,
getWind,
- isForecastHourly,
+ subscribeForecast,
+ ForecastEvent,
WeatherEntity,
weatherIcons,
} from "../../../data/weather";
@@ -33,6 +36,48 @@ class MoreInfoWeather extends LitElement {
@property() public stateObj?: WeatherEntity;
+ @state() private _forecastEvent?: ForecastEvent;
+
+ @state() private _subscribed?: Promise<() => void>;
+
+ private _unsubscribeForecastEvents() {
+ if (this._subscribed) {
+ this._subscribed.then((unsub) => unsub());
+ this._subscribed = undefined;
+ }
+ }
+
+ private async _subscribeForecastEvents() {
+ this._unsubscribeForecastEvents();
+ if (!this.isConnected || !this.hass || !this.stateObj) {
+ return;
+ }
+
+ const forecastType = getDefaultForecastType(this.stateObj);
+ if (forecastType) {
+ this._subscribed = subscribeForecast(
+ this.hass!,
+ this.stateObj!.entity_id,
+ forecastType,
+ (event) => {
+ this._forecastEvent = event;
+ }
+ );
+ }
+ }
+
+ public connectedCallback() {
+ super.connectedCallback();
+ if (this.hasUpdated) {
+ this._subscribeForecastEvents();
+ }
+ }
+
+ public disconnectedCallback(): void {
+ super.disconnectedCallback();
+ this._unsubscribeForecastEvents();
+ }
+
protected shouldUpdate(changedProps: PropertyValues): boolean {
if (changedProps.has("stateObj")) {
return true;
@@ -50,12 +95,33 @@ class MoreInfoWeather extends LitElement {
return false;
}
+ protected updated(changedProps: PropertyValues): void {
+ super.updated(changedProps);
+
+ if (changedProps.has("stateObj") || !this._subscribed) {
+ const oldState = changedProps.get("stateObj") as
+ | WeatherEntity
+ | undefined;
+ if (
+ oldState?.entity_id !== this.stateObj?.entity_id ||
+ !this._subscribed
+ ) {
+ this._subscribeForecastEvents();
+ }
+ }
+ }
+
protected render() {
if (!this.hass || !this.stateObj) {
return nothing;
}
- const hourly = isForecastHourly(this.stateObj.attributes.forecast);
+ const forecastData = getForecast(
+ this.stateObj.attributes,
+ this._forecastEvent
+ );
+ const forecast = forecastData?.forecast;
+ const hourly = forecastData?.type === "hourly";
return html`
${this._showValue(this.stateObj.attributes.temperature)
@@ -144,12 +210,12 @@ class MoreInfoWeather extends LitElement {
`
: ""}
- ${this.stateObj.attributes.forecast
+ ${forecast
? html`
${this.hass.localize("ui.card.weather.forecast")}:
- ${this.stateObj.attributes.forecast.map((item) =>
+ ${forecast.map((item) =>
this._showValue(item.templow) || this._showValue(item.temperature)
? html`
${item.condition
@@ -176,6 +242,9 @@ class MoreInfoWeather extends LitElement {
this.hass.locale,
this.hass.config
)}
+ ${item.is_daytime !== false
+ ? this.hass!.localize("ui.card.weather.day")
+ : this.hass!.localize("ui.card.weather.night")}
`}
diff --git a/src/panels/lovelace/cards/hui-weather-forecast-card.ts b/src/panels/lovelace/cards/hui-weather-forecast-card.ts
index 85f29fc0a4..b5ee99fc86 100644
--- a/src/panels/lovelace/cards/hui-weather-forecast-card.ts
+++ b/src/panels/lovelace/cards/hui-weather-forecast-card.ts
@@ -20,11 +20,13 @@ import "../../../components/ha-svg-icon";
import { UNAVAILABLE } from "../../../data/entity";
import { ActionHandlerEvent } from "../../../data/lovelace";
import {
+ getForecast,
getSecondaryWeatherAttribute,
getWeatherStateIcon,
getWeatherUnit,
getWind,
- isForecastHourly,
+ subscribeForecast,
+ ForecastEvent,
weatherAttrIcons,
WeatherEntity,
weatherSVGStyles,
@@ -41,8 +43,6 @@ import type { LovelaceCard, LovelaceCardEditor } from "../types";
import type { WeatherForecastCardConfig } from "./types";
import { formatDateWeekdayShort } from "../../../common/datetime/format_date";
-const DAY_IN_MILLISECONDS = 86400000;
-
@customElement("hui-weather-forecast-card")
class HuiWeatherForecastCard extends LitElement implements LovelaceCard {
public static async getConfigElement(): Promise {
@@ -72,13 +72,54 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard {
@state() private _config?: WeatherForecastCardConfig;
+ @state() private _forecastEvent?: ForecastEvent;
+
+ @state() private _subscribed?: Promise<() => void>;
+
@property({ type: Boolean, reflect: true, attribute: "veryverynarrow" })
private _veryVeryNarrow = false;
private _resizeObserver?: ResizeObserver;
+ private _needForecastSubscription() {
+ return (
+ this._config!.forecast_type && this._config!.forecast_type !== "legacy"
+ );
+ }
+
+ private _unsubscribeForecastEvents() {
+ if (this._subscribed) {
+ this._subscribed.then((unsub) => unsub());
+ this._subscribed = undefined;
+ }
+ }
+
+ private async _subscribeForecastEvents() {
+ this._unsubscribeForecastEvents();
+ if (
+ !this.isConnected ||
+ !this.hass ||
+ !this._config ||
+ !this._needForecastSubscription()
+ ) {
+ return;
+ }
+
+ this._subscribed = subscribeForecast(
+ this.hass!,
+ this._config!.entity,
+ this._config!.forecast_type as "daily" | "hourly" | "twice_daily",
+ (event) => {
+ this._forecastEvent = event;
+ }
+ );
+ }
+
public connectedCallback(): void {
super.connectedCallback();
+ if (this.hasUpdated && this._config && this.hass) {
+ this._subscribeForecastEvents();
+ }
this.updateComplete.then(() => this._attachObserver());
}
@@ -86,6 +127,7 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard {
if (this._resizeObserver) {
this._resizeObserver.disconnect();
}
+ this._unsubscribeForecastEvents();
}
public getCardSize(): number {
@@ -111,7 +153,10 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard {
}
protected shouldUpdate(changedProps: PropertyValues): boolean {
- return hasConfigOrEntityChanged(this, changedProps);
+ return (
+ hasConfigOrEntityChanged(this, changedProps) ||
+ changedProps.has("forecastEvent")
+ );
}
public willUpdate(): void {
@@ -130,6 +175,10 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard {
return;
}
+ if (changedProps.has("_config") || !this._subscribed) {
+ this._subscribeForecastEvents();
+ }
+
const oldHass = changedProps.get("hass") as HomeAssistant | undefined;
const oldConfig = changedProps.get("_config") as
| WeatherForecastCardConfig
@@ -172,23 +221,19 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard {
`;
}
+ const forecastData = getForecast(
+ stateObj.attributes,
+ this._forecastEvent,
+ this._config?.forecast_type
+ );
const forecast =
- this._config?.show_forecast !== false &&
- stateObj.attributes.forecast?.length
- ? stateObj.attributes.forecast.slice(0, this._veryVeryNarrow ? 3 : 5)
+ this._config?.show_forecast !== false && forecastData?.forecast?.length
+ ? forecastData.forecast.slice(0, this._veryVeryNarrow ? 3 : 5)
: undefined;
const weather = !forecast || this._config?.show_current !== false;
- const hourly = isForecastHourly(forecast);
- let dayNight: boolean | undefined;
-
- if (hourly) {
- const dateFirst = new Date(forecast![0].datetime);
- const datelast = new Date(forecast![forecast!.length - 1].datetime);
- const dayDiff = datelast.getTime() - dateFirst.getTime();
-
- dayNight = dayDiff > DAY_IN_MILLISECONDS;
- }
+ const hourly = forecastData?.type === "hourly";
+ const dayNight = forecastData?.type === "twice_daily";
const weatherStateIcon = getWeatherStateIcon(stateObj.state, this);
const name = this._config.name ?? computeStateName(stateObj);
@@ -285,7 +330,11 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard {
)}
`}
`
- : getSecondaryWeatherAttribute(this.hass, stateObj)}
+ : getSecondaryWeatherAttribute(
+ this.hass,
+ stateObj,
+ forecast!
+ )}
@@ -308,7 +357,7 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard {
{ weekday: "short" }
)}
- ${item.daytime === undefined || item.daytime
+ ${item.is_daytime !== false
? this.hass!.localize(
"ui.card.weather.day"
)
@@ -340,7 +389,8 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard {
item.condition!,
this,
!(
- item.daytime || item.daytime === undefined
+ item.is_daytime ||
+ item.is_daytime === undefined
)
)}
diff --git a/src/panels/lovelace/cards/types.ts b/src/panels/lovelace/cards/types.ts
index 082b6c4b53..0a7c8ee412 100644
--- a/src/panels/lovelace/cards/types.ts
+++ b/src/panels/lovelace/cards/types.ts
@@ -12,6 +12,7 @@ import {
import { LovelaceHeaderFooterConfig } from "../header-footer/types";
import { HaDurationData } from "../../../components/ha-duration-input";
import { LovelaceTileFeatureConfig } from "../tile-features/types";
+import { ForecastType } from "../../../data/weather";
export interface AlarmPanelCardConfig extends LovelaceCardConfig {
entity: string;
@@ -444,6 +445,7 @@ export interface WeatherForecastCardConfig extends LovelaceCardConfig {
name?: string;
show_current?: boolean;
show_forecast?: boolean;
+ forecast_type?: ForecastType;
secondary_info_attribute?: keyof TranslationDict["ui"]["card"]["weather"]["attributes"];
theme?: string;
tap_action?: ActionConfig;
diff --git a/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts
index 2be07c183b..a758959aeb 100644
--- a/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts
+++ b/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts
@@ -7,12 +7,14 @@ import type { LocalizeFunc } from "../../../../common/translations/localize";
import "../../../../components/ha-form/ha-form";
import type { SchemaUnion } from "../../../../components/ha-form/types";
import { UNAVAILABLE } from "../../../../data/entity";
-import type { WeatherEntity } from "../../../../data/weather";
+import type { ForecastType, WeatherEntity } from "../../../../data/weather";
+import { WeatherEntityFeature } from "../../../../data/weather";
import type { HomeAssistant } from "../../../../types";
import type { WeatherForecastCardConfig } from "../../cards/types";
import type { LovelaceCardEditor } from "../../types";
import { actionConfigStruct } from "../structs/action-struct";
import { baseLovelaceCardConfig } from "../structs/base-card-struct";
+import { supportsFeature } from "../../../../common/entity/supports-feature";
const cardConfigStruct = assign(
baseLovelaceCardConfig,
@@ -22,6 +24,7 @@ const cardConfigStruct = assign(
theme: optional(string()),
show_current: optional(boolean()),
show_forecast: optional(boolean()),
+ forecast_type: optional(string()),
secondary_info_attribute: optional(string()),
tap_action: optional(actionConfigStruct),
hold_action: optional(actionConfigStruct),
@@ -44,7 +47,7 @@ export class HuiWeatherForecastCardEditor
if (
/* cannot show forecast in case it is unavailable on the entity */
- (config.show_forecast === true && this._has_forecast === false) ||
+ (config.show_forecast === true && this._hasForecast === false) ||
/* cannot hide both weather and forecast, need one of them */
(config.show_current === false && config.show_forecast === false)
) {
@@ -53,20 +56,72 @@ export class HuiWeatherForecastCardEditor
config: { ...config, show_current: true, show_forecast: false },
});
}
+ if (
+ !config.forecast_type ||
+ !this._forecastSupported(config.forecast_type)
+ ) {
+ let forecastType: string | undefined;
+ if (this._forecastSupported("daily")) {
+ forecastType = "daily";
+ } else if (this._forecastSupported("hourly")) {
+ forecastType = "hourly";
+ } else if (this._forecastSupported("twice_daily")) {
+ forecastType = "twice_daily";
+ } else if (this._forecastSupported("legacy")) {
+ forecastType = "legacy";
+ }
+ fireEvent(this, "config-changed", {
+ config: { ...config, forecast_type: forecastType },
+ });
+ }
}
- get _has_forecast(): boolean | undefined {
+ private get _stateObj(): WeatherEntity | undefined {
if (this.hass && this._config) {
- const stateObj = this.hass.states[this._config.entity] as WeatherEntity;
- if (stateObj && stateObj.state !== UNAVAILABLE) {
- return !!stateObj.attributes.forecast?.length;
- }
+ return this.hass.states[this._config.entity] as WeatherEntity;
}
return undefined;
}
+ private get _hasForecast(): boolean | undefined {
+ const stateObj = this._stateObj as WeatherEntity;
+ if (stateObj && stateObj.state !== UNAVAILABLE) {
+ return !!(
+ stateObj.attributes.forecast?.length ||
+ stateObj.attributes.supported_features
+ );
+ }
+ return undefined;
+ }
+
+ private _forecastSupported(forecastType: ForecastType): boolean {
+ const stateObj = this._stateObj as WeatherEntity;
+ if (forecastType === "legacy") {
+ return !!stateObj.attributes.forecast?.length;
+ }
+ if (forecastType === "daily") {
+ return supportsFeature(stateObj, WeatherEntityFeature.FORECAST_DAILY);
+ }
+ if (forecastType === "hourly") {
+ return supportsFeature(stateObj, WeatherEntityFeature.FORECAST_HOURLY);
+ }
+ if (forecastType === "twice_daily") {
+ return supportsFeature(
+ stateObj,
+ WeatherEntityFeature.FORECAST_TWICE_DAILY
+ );
+ }
+ return false;
+ }
+
private _schema = memoizeOne(
- (localize: LocalizeFunc, hasForecast?: boolean) =>
+ (
+ localize: LocalizeFunc,
+ hasForecastLegacy?: boolean,
+ hasForecastDaily?: boolean,
+ hasForecastHourly?: boolean,
+ hasForecastTwiceDaily?: boolean
+ ) =>
[
{
name: "entity",
@@ -86,7 +141,54 @@ export class HuiWeatherForecastCardEditor
{ name: "theme", selector: { theme: {} } },
],
},
- ...(hasForecast
+ ...(!hasForecastLegacy &&
+ (hasForecastDaily || hasForecastHourly || hasForecastTwiceDaily)
+ ? ([
+ {
+ name: "forecast_type",
+ selector: {
+ select: {
+ options: [
+ ...(hasForecastDaily
+ ? ([
+ {
+ value: "daily",
+ label: localize(
+ "ui.panel.lovelace.editor.card.weather-forecast.daily"
+ ),
+ },
+ ] as const)
+ : []),
+ ...(hasForecastHourly
+ ? ([
+ {
+ value: "hourly",
+ label: localize(
+ "ui.panel.lovelace.editor.card.weather-forecast.hourly"
+ ),
+ },
+ ] as const)
+ : []),
+ ...(hasForecastTwiceDaily
+ ? ([
+ {
+ value: "twice_daily",
+ label: localize(
+ "ui.panel.lovelace.editor.card.weather-forecast.twice_daily"
+ ),
+ },
+ ] as const)
+ : []),
+ ],
+ },
+ },
+ },
+ ] as const)
+ : []),
+ ...(hasForecastDaily ||
+ hasForecastHourly ||
+ hasForecastTwiceDaily ||
+ hasForecastLegacy
? ([
{
name: "forecast",
@@ -125,11 +227,17 @@ export class HuiWeatherForecastCardEditor
return nothing;
}
- const schema = this._schema(this.hass.localize, this._has_forecast);
+ const schema = this._schema(
+ this.hass.localize,
+ this._forecastSupported("legacy"),
+ this._forecastSupported("daily"),
+ this._forecastSupported("hourly"),
+ this._forecastSupported("twice_daily")
+ );
const data: WeatherForecastCardConfig = {
show_current: true,
- show_forecast: this._has_forecast,
+ show_forecast: this._hasForecast,
...this._config,
};
@@ -184,6 +292,10 @@ export class HuiWeatherForecastCardEditor
)} (${this.hass!.localize(
"ui.panel.lovelace.editor.card.config.optional"
)})`;
+ case "forecast_type":
+ return this.hass!.localize(
+ "ui.panel.lovelace.editor.card.weather-forecast.forecast_type"
+ );
case "forecast":
return this.hass!.localize(
"ui.panel.lovelace.editor.card.weather-forecast.weather_to_show"
diff --git a/src/panels/lovelace/entity-rows/hui-weather-entity-row.ts b/src/panels/lovelace/entity-rows/hui-weather-entity-row.ts
index f8badf7b10..90351e76d6 100644
--- a/src/panels/lovelace/entity-rows/hui-weather-entity-row.ts
+++ b/src/panels/lovelace/entity-rows/hui-weather-entity-row.ts
@@ -16,9 +16,13 @@ import "../../../components/entity/state-badge";
import { isUnavailableState } from "../../../data/entity";
import { ActionHandlerEvent } from "../../../data/lovelace";
import {
+ getDefaultForecastType,
+ getForecast,
getSecondaryWeatherAttribute,
getWeatherStateIcon,
getWeatherUnit,
+ subscribeForecast,
+ ForecastEvent,
WeatherEntity,
weatherSVGStyles,
} from "../../../data/weather";
@@ -38,6 +42,48 @@ class HuiWeatherEntityRow extends LitElement implements LovelaceRow {
@state() private _config?: EntitiesCardEntityConfig;
+ @state() private _forecastEvent?: ForecastEvent;
+
+ @state() private _subscribed?: Promise<() => void>;
+
+ private _unsubscribeForecastEvents() {
+ if (this._subscribed) {
+ this._subscribed.then((unsub) => unsub());
+ this._subscribed = undefined;
+ }
+ }
+
+ private async _subscribeForecastEvents() {
+ this._unsubscribeForecastEvents();
+ if (!this.hass || !this._config || !this.isConnected) {
+ return;
+ }
+ const stateObj = this.hass!.states[this._config!.entity];
+ const forecastType = getDefaultForecastType(stateObj);
+ if (forecastType) {
+ this._subscribed = subscribeForecast(
+ this.hass!,
+ stateObj.entity_id,
+ forecastType,
+ (event) => {
+ this._forecastEvent = event;
+ }
+ );
+ }
+ }
+
+ public connectedCallback() {
+ super.connectedCallback();
+ if (this.hasUpdated) {
+ this._subscribeForecastEvents();
+ }
+ }
+
+ public disconnectedCallback(): void {
+ super.disconnectedCallback();
+ this._unsubscribeForecastEvents();
+ }
+
public setConfig(config: EntitiesCardEntityConfig): void {
if (!config?.entity) {
throw new Error("Entity must be specified");
@@ -50,6 +96,13 @@ class HuiWeatherEntityRow extends LitElement implements LovelaceRow {
return hasConfigOrEntityChanged(this, changedProps);
}
+ protected updated(changedProps: PropertyValues): void {
+ super.updated(changedProps);
+ if (changedProps.has("_config") || !this._subscribed) {
+ this._subscribeForecastEvents();
+ }
+ }
+
protected render() {
if (!this.hass || !this._config) {
return nothing;
@@ -72,6 +125,9 @@ class HuiWeatherEntityRow extends LitElement implements LovelaceRow {
const hasSecondary = this._config.secondary_info;
const weatherStateIcon = getWeatherStateIcon(stateObj.state, this);
+ const forecastData = getForecast(stateObj.attributes, this._forecastEvent);
+ const forecast = forecastData?.forecast;
+
return html`
- ${getSecondaryWeatherAttribute(this.hass!, stateObj)}
+ ${getSecondaryWeatherAttribute(this.hass!, stateObj, forecast!)}
`;
diff --git a/src/translations/en.json b/src/translations/en.json
index cad64bcb46..a77a941d7e 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -254,6 +254,9 @@
"day": "Day",
"night": "Night",
"forecast": "Forecast",
+ "forecast_daily": "Forecast daily",
+ "forecast_hourly": "Forecast hourly",
+ "forecast_twice_daily": "Forecast twice daily",
"high": "High",
"low": "Low"
}
@@ -4975,7 +4978,12 @@
"weather_to_show": "Weather to Show",
"show_both": "Show current Weather and Forecast",
"show_only_current": "Show only current Weather",
- "show_only_forecast": "Show only Forecast"
+ "show_only_forecast": "Show only Forecast",
+ "forecast_type": "Select forecast type",
+ "no_type": "No type",
+ "daily": "Daily",
+ "hourly": "Hourly",
+ "twice_daily": "Twice daily"
}
},
"view": {
From c7cf49de05529f13a0ef59f291ee8bb0c4cd6e06 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 21 Jul 2023 23:25:23 -0400
Subject: [PATCH 093/102] Update dependency hls.js to v1.4.10 (#17383)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 77c8b240f6..64be316ada 100644
--- a/package.json
+++ b/package.json
@@ -113,7 +113,7 @@
"deep-freeze": "0.0.1",
"fuse.js": "6.6.2",
"google-timezones-json": "1.2.0",
- "hls.js": "1.4.9",
+ "hls.js": "1.4.10",
"home-assistant-js-websocket": "8.2.0",
"idb-keyval": "6.2.1",
"intl-messageformat": "10.5.0",
diff --git a/yarn.lock b/yarn.lock
index 74c0ef4897..a15e2150f2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9593,10 +9593,10 @@ __metadata:
languageName: node
linkType: hard
-"hls.js@npm:1.4.9":
- version: 1.4.9
- resolution: "hls.js@npm:1.4.9"
- checksum: 51e469eb99e7093a1b71a7531731d9da8609104730f1030797d25c4e25d9d7d8a6d22603921cb9a9ee6ab26b28c569e91c68a37be92dc1f34bc58e0c5af65b99
+"hls.js@npm:1.4.10":
+ version: 1.4.10
+ resolution: "hls.js@npm:1.4.10"
+ checksum: c084000598fd7422b7445c7e313dc28133261579b5783bbb3881c7fcb609365d02157e3d3a74d0b41ac7440de405d1c69e64e14634370dc357c473d23e4afd44
languageName: node
linkType: hard
@@ -9753,7 +9753,7 @@ __metadata:
gulp-merge-json: 2.1.2
gulp-rename: 2.0.0
gulp-zopfli-green: 6.0.1
- hls.js: 1.4.9
+ hls.js: 1.4.10
home-assistant-js-websocket: 8.2.0
html-minifier-terser: 7.2.0
husky: 8.0.3
From e21f95136818a79565927244f91729f521962bff Mon Sep 17 00:00:00 2001
From: Steve Repsher
Date: Sat, 22 Jul 2023 13:52:57 -0400
Subject: [PATCH 094/102] Enable cache in CI and locally for ESLint and
Prettier (#17384)
---
.github/workflows/ci.yaml | 8 ++++++++
lint-staged.config.js | 7 +++++--
package.json | 8 ++++----
3 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 94f4e6413a..a7a7da4f92 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -36,6 +36,14 @@ jobs:
run: yarn dedupe --check
- name: Build resources
run: ./node_modules/.bin/gulp gen-icons-json build-translations build-locale-data gather-gallery-pages
+ - name: Setup lint cache
+ uses: actions/cache@v3.3.1
+ with:
+ path: |
+ node_modules/.cache/prettier
+ node_modules/.cache/eslint
+ key: lint-${{ github.sha }}
+ restore-keys: lint-
- name: Run eslint
run: yarn run lint:eslint --quiet
- name: Run tsc
diff --git a/lint-staged.config.js b/lint-staged.config.js
index 27204507ea..8740aaab19 100644
--- a/lint-staged.config.js
+++ b/lint-staged.config.js
@@ -1,6 +1,9 @@
export default {
- "*.?(c|m){js,ts}": ["eslint --fix", "prettier --write"],
- "*.{json,css,md,markdown,html,y?aml}": "prettier --write",
+ "*.?(c|m){js,ts}": [
+ "eslint --cache --cache-strategy=content --cache-location=node_modules/.cache/eslint/.eslintcache --fix",
+ "prettier --cache --write",
+ ],
+ "*.{json,css,md,markdown,html,y?aml}": "prettier --cache --write",
"translations/*/*.json": (files) =>
'printf "%s\n" "Translation files should not be added or modified here. Instead, make the necessary modifications in src/translations/en.json. Other languages are managed externally. Please see https://developers.home-assistant.io/docs/translations/ for details." ' +
files.join(" ") +
diff --git a/package.json b/package.json
index 64be316ada..a44afdb38b 100644
--- a/package.json
+++ b/package.json
@@ -8,10 +8,10 @@
"version": "1.0.0",
"scripts": {
"build": "script/build_frontend",
- "lint:eslint": "eslint \"**/src/**/*.{js,ts,html}\" --ignore-path .gitignore",
- "format:eslint": "eslint \"**/src/**/*.{js,ts,html}\" --fix --ignore-path .gitignore",
- "lint:prettier": "prettier . --check",
- "format:prettier": "prettier . --write",
+ "lint:eslint": "eslint \"**/src/**/*.{js,ts,html}\" --cache --cache-strategy=content --cache-location=node_modules/.cache/eslint/.eslintcache --ignore-path=.gitignore",
+ "format:eslint": "eslint \"**/src/**/*.{js,ts,html}\" --cache --cache-strategy=content --cache-location=node_modules/.cache/eslint/.eslintcache --ignore-path=.gitignore --fix",
+ "lint:prettier": "prettier . --cache --check",
+ "format:prettier": "prettier . --cache --write",
"lint:types": "tsc",
"lint:lit": "lit-analyzer \"**/src/**/*.ts\" --format markdown --outFile result.md",
"lint": "yarn run lint:eslint && yarn run lint:prettier && yarn run lint:types",
From d6e279e8f4e1f4266b45ba73ee31141c5a698c64 Mon Sep 17 00:00:00 2001
From: Miguel Camba
Date: Sun, 23 Jul 2023 18:50:40 +0200
Subject: [PATCH 095/102] Add device_class PH, including default icon (#17385)
---
gallery/src/pages/misc/entity-state.ts | 1 +
src/common/const.ts | 2 ++
src/common/entity/get_states.ts | 1 +
3 files changed, 4 insertions(+)
diff --git a/gallery/src/pages/misc/entity-state.ts b/gallery/src/pages/misc/entity-state.ts
index c35c9fae1e..8a738ca873 100644
--- a/gallery/src/pages/misc/entity-state.ts
+++ b/gallery/src/pages/misc/entity-state.ts
@@ -35,6 +35,7 @@ const SENSOR_DEVICE_CLASSES = [
"nitrogen_monoxide",
"nitrous_oxide",
"ozone",
+ "ph",
"pm1",
"pm10",
"pm25",
diff --git a/src/common/const.ts b/src/common/const.ts
index 7902662135..56b632d4be 100644
--- a/src/common/const.ts
+++ b/src/common/const.ts
@@ -45,6 +45,7 @@ import {
mdiMoleculeCo,
mdiMoleculeCo2,
mdiPalette,
+ mdiPh,
mdiProgressClock,
mdiRayVertex,
mdiRemote,
@@ -148,6 +149,7 @@ export const FIXED_DEVICE_CLASS_ICONS = {
nitrogen_monoxide: mdiMolecule,
nitrous_oxide: mdiMolecule,
ozone: mdiMolecule,
+ ph: mdiPh,
pm1: mdiMolecule,
pm10: mdiMolecule,
pm25: mdiMolecule,
diff --git a/src/common/entity/get_states.ts b/src/common/entity/get_states.ts
index 7eaf7bfb81..17140b2166 100644
--- a/src/common/entity/get_states.ts
+++ b/src/common/entity/get_states.ts
@@ -186,6 +186,7 @@ const FIXED_DOMAIN_ATTRIBUTE_STATES = {
"nitrogen_monoxide",
"nitrous_oxide",
"ozone",
+ "ph",
"pm1",
"pm10",
"pm25",
From 2c7e17ce89002235e3ed15d8f812fdafb3642ebf Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 24 Jul 2023 01:17:23 -0400
Subject: [PATCH 096/102] Update dependency @types/luxon to v3.3.1 (#17396)
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index a44afdb38b..5bd5b18910 100644
--- a/package.json
+++ b/package.json
@@ -176,7 +176,7 @@
"@types/js-yaml": "4.0.5",
"@types/leaflet": "1.9.3",
"@types/leaflet-draw": "1.0.7",
- "@types/luxon": "3.3.0",
+ "@types/luxon": "3.3.1",
"@types/marked": "4.3.1",
"@types/mocha": "10.0.1",
"@types/qrcode": "1.5.1",
diff --git a/yarn.lock b/yarn.lock
index a15e2150f2..8364390247 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4415,10 +4415,10 @@ __metadata:
languageName: node
linkType: hard
-"@types/luxon@npm:3.3.0":
- version: 3.3.0
- resolution: "@types/luxon@npm:3.3.0"
- checksum: f7e3a89fc3ca404fbc3ea538653ed6860bc28f570a8c4d6d24449b89b9b553b7d6ad6cc94a9e129c5b8c9a2b97f0c365b3017f811e59c4a859a9c219a1c918e0
+"@types/luxon@npm:3.3.1":
+ version: 3.3.1
+ resolution: "@types/luxon@npm:3.3.1"
+ checksum: da8f6158edacae1430f3eca5f4ab4891200ffb34aa521ef6bae407a3c50b3854907098bc4535fb2a66a2779738f3c6c48fdfd86f01117a6f4844b18536cdb7c0
languageName: node
linkType: hard
@@ -9697,7 +9697,7 @@ __metadata:
"@types/js-yaml": 4.0.5
"@types/leaflet": 1.9.3
"@types/leaflet-draw": 1.0.7
- "@types/luxon": 3.3.0
+ "@types/luxon": 3.3.1
"@types/marked": 4.3.1
"@types/mocha": 10.0.1
"@types/qrcode": 1.5.1
From 4fd5dfd6ae5b991c7250e4040ed7f68666d39bc0 Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Mon, 24 Jul 2023 15:57:13 +0200
Subject: [PATCH 097/102] Add My support for companion app settings (#17398)
---
src/panels/my/ha-panel-my.ts | 24 ++++++++++++++++++++++++
src/translations/en.json | 2 ++
2 files changed, 26 insertions(+)
diff --git a/src/panels/my/ha-panel-my.ts b/src/panels/my/ha-panel-my.ts
index a083079f41..9810837ccf 100644
--- a/src/panels/my/ha-panel-my.ts
+++ b/src/panels/my/ha-panel-my.ts
@@ -51,6 +51,9 @@ export const getMyRedirects = (hasSupervisor: boolean): Redirects => ({
component: "calendar",
redirect: "/calendar",
},
+ companion_app: {
+ redirect: "#external-app-configuration",
+ },
config: {
redirect: "/config/dashboard",
},
@@ -323,6 +326,15 @@ class HaPanelMy extends LitElement {
return;
}
+ if (this._redirect.redirect === "#external-app-configuration") {
+ if (this.hass.auth.external?.config.hasSettingsScreen) {
+ this.hass.auth.external!.fireMessage({ type: "config_screen/show" });
+ return;
+ }
+ this._error = "not_app";
+ return;
+ }
+
if (
this._redirect.component &&
!isComponentLoaded(this.hass, this._redirect.component)
@@ -410,6 +422,18 @@ class HaPanelMy extends LitElement {
>`
);
break;
+ case "not_app":
+ error = this.hass.localize(
+ "ui.panel.my.not_app",
+ "link",
+ html`${this.hass.localize("ui.panel.my.download_app")}`
+ );
+ break;
default:
error = this.hass.localize("ui.panel.my.error") || "Unknown error";
}
diff --git a/src/translations/en.json b/src/translations/en.json
index a77a941d7e..8834f0583e 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -1473,7 +1473,9 @@
"not_supported": "This redirect is not supported by your Home Assistant instance. Check the {link} for the supported redirects and the version they where introduced.",
"component_not_loaded": "This redirect is not supported by your Home Assistant instance. You need the integration {integration} to use this redirect.",
"no_supervisor": "This redirect is not supported by your Home Assistant installation. It needs either the Home Assistant Operating System or Home Assistant Supervised installation method. For more information, see the {docs_link}.",
+ "not_app": "This redirect only works from a mobile device that has the Home Assistant Companion app installed. {link}.",
"documentation": "documentation",
+ "download_app": "Click here to download the app",
"faq_link": "My Home Assistant FAQ",
"error": "An unknown error occurred"
},
From 02f01aba0e01560a871ac7a5d429d5037e8998d5 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 24 Jul 2023 10:35:43 -0400
Subject: [PATCH 098/102] Update vaadinWebComponents monorepo to v24.1.4
(#17397)
---
package.json | 4 +-
yarn.lock | 166 +++++++++++++++++++++++++--------------------------
2 files changed, 85 insertions(+), 85 deletions(-)
diff --git a/package.json b/package.json
index 5bd5b18910..c8d3aa3f88 100644
--- a/package.json
+++ b/package.json
@@ -94,8 +94,8 @@
"@polymer/paper-toast": "3.0.1",
"@polymer/polymer": "3.5.1",
"@thomasloven/round-slider": "0.6.0",
- "@vaadin/combo-box": "24.1.3",
- "@vaadin/vaadin-themable-mixin": "24.1.3",
+ "@vaadin/combo-box": "24.1.4",
+ "@vaadin/vaadin-themable-mixin": "24.1.4",
"@vibrant/color": "3.2.1-alpha.1",
"@vibrant/core": "3.2.1-alpha.1",
"@vibrant/quantizer-mmcq": "3.2.1-alpha.1",
diff --git a/yarn.lock b/yarn.lock
index 8364390247..cd99f0bce9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4781,126 +4781,126 @@ __metadata:
languageName: node
linkType: hard
-"@vaadin/a11y-base@npm:~24.1.3":
- version: 24.1.3
- resolution: "@vaadin/a11y-base@npm:24.1.3"
+"@vaadin/a11y-base@npm:~24.1.4":
+ version: 24.1.4
+ resolution: "@vaadin/a11y-base@npm:24.1.4"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
"@polymer/polymer": ^3.0.0
- "@vaadin/component-base": ~24.1.3
+ "@vaadin/component-base": ~24.1.4
lit: ^2.0.0
- checksum: f2e365ea5d77bec664e02499dde31ff12b7e636bc726d33944afd428cf8c613f5d0adb1fb29237caebba0937bafe1a8027e950246ecba822545c3a9079e56aaa
+ checksum: 1b5ddc2af1418c530d12ac00cd1ad9f896ef118730157c901662906409806ef6a46d18be4daf9d883784727c8ce4186700c0fdfa3ccc521c58693e494be98cc0
languageName: node
linkType: hard
-"@vaadin/combo-box@npm:24.1.3":
- version: 24.1.3
- resolution: "@vaadin/combo-box@npm:24.1.3"
+"@vaadin/combo-box@npm:24.1.4":
+ version: 24.1.4
+ resolution: "@vaadin/combo-box@npm:24.1.4"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
"@polymer/polymer": ^3.0.0
- "@vaadin/a11y-base": ~24.1.3
- "@vaadin/component-base": ~24.1.3
- "@vaadin/field-base": ~24.1.3
- "@vaadin/input-container": ~24.1.3
- "@vaadin/item": ~24.1.3
- "@vaadin/lit-renderer": ~24.1.3
- "@vaadin/overlay": ~24.1.3
- "@vaadin/vaadin-lumo-styles": ~24.1.3
- "@vaadin/vaadin-material-styles": ~24.1.3
- "@vaadin/vaadin-themable-mixin": ~24.1.3
- checksum: a31da1b4694a6d322156bb59af06b07bfdb6b7cbb8bb91ecc96d20969b42cfd70353faa2f44bc63e9ed97cfd20e29e8399402d885a70a0620588de9a73146e1d
+ "@vaadin/a11y-base": ~24.1.4
+ "@vaadin/component-base": ~24.1.4
+ "@vaadin/field-base": ~24.1.4
+ "@vaadin/input-container": ~24.1.4
+ "@vaadin/item": ~24.1.4
+ "@vaadin/lit-renderer": ~24.1.4
+ "@vaadin/overlay": ~24.1.4
+ "@vaadin/vaadin-lumo-styles": ~24.1.4
+ "@vaadin/vaadin-material-styles": ~24.1.4
+ "@vaadin/vaadin-themable-mixin": ~24.1.4
+ checksum: 598800430645af9c5da1b6195ee326827d0069c31219a3c48145c877f8c08e739b5c68261cd54f3b6d1e6d34cac33165f643744594ff1737731e8fa2f7b2a9e0
languageName: node
linkType: hard
-"@vaadin/component-base@npm:~24.1.3":
- version: 24.1.3
- resolution: "@vaadin/component-base@npm:24.1.3"
+"@vaadin/component-base@npm:~24.1.4":
+ version: 24.1.4
+ resolution: "@vaadin/component-base@npm:24.1.4"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
"@polymer/polymer": ^3.0.0
"@vaadin/vaadin-development-mode-detector": ^2.0.0
"@vaadin/vaadin-usage-statistics": ^2.1.0
lit: ^2.0.0
- checksum: 069c50059ea57c48e4ca02dee2e5624decadce90304c62bd32195beb368afd59a67e88c669fe6f31fb840bd8b3c5c7901d83787f50816cbb55b01f4488556700
+ checksum: dc0d4dfa898fb37103cc52e385dc98f14d074e4bc846f377ef391e24b14317c4cca939667aa4e67984815021d89706fc70183e62cbaa3cd98f5168d254492db2
languageName: node
linkType: hard
-"@vaadin/field-base@npm:~24.1.3":
- version: 24.1.3
- resolution: "@vaadin/field-base@npm:24.1.3"
+"@vaadin/field-base@npm:~24.1.4":
+ version: 24.1.4
+ resolution: "@vaadin/field-base@npm:24.1.4"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
"@polymer/polymer": ^3.0.0
- "@vaadin/a11y-base": ~24.1.3
- "@vaadin/component-base": ~24.1.3
+ "@vaadin/a11y-base": ~24.1.4
+ "@vaadin/component-base": ~24.1.4
lit: ^2.0.0
- checksum: bc06b5b4da182c2917108657557de379ffe79b38fd61d0dc28f872420b48c63eceed92410618513a0c19a35be06cc07367bf7d1cc570f8489b2adf5bc5355a6b
+ checksum: 6767702f0b501a7463eb17d0254410d49ede194b9c46dbc784db1dc9aa454e4dd79094e1c6166f31ee6c913b3532eda4c12a9dbd7ef51ca6c5a407050b322788
languageName: node
linkType: hard
-"@vaadin/icon@npm:~24.1.3":
- version: 24.1.3
- resolution: "@vaadin/icon@npm:24.1.3"
+"@vaadin/icon@npm:~24.1.4":
+ version: 24.1.4
+ resolution: "@vaadin/icon@npm:24.1.4"
dependencies:
"@polymer/polymer": ^3.0.0
- "@vaadin/component-base": ~24.1.3
- "@vaadin/vaadin-lumo-styles": ~24.1.3
- "@vaadin/vaadin-themable-mixin": ~24.1.3
+ "@vaadin/component-base": ~24.1.4
+ "@vaadin/vaadin-lumo-styles": ~24.1.4
+ "@vaadin/vaadin-themable-mixin": ~24.1.4
lit: ^2.0.0
- checksum: 0901f6e558d440f672e6ca80995f6fdcc4ec06fe1f8cf57f305a029213138299b472c1bf23755d5b539335bd6ff0c9d218a55d4f1de3c068da6427322b6e9634
+ checksum: 880476ab0ba49bfdc4402a3c3facedd17673dd2c5b85c8e0240ac780c5a889c8c7bc2297ec0479e1551c50dd1e7d01d68ca9c24eb140a1f2daa5d43782d8e747
languageName: node
linkType: hard
-"@vaadin/input-container@npm:~24.1.3":
- version: 24.1.3
- resolution: "@vaadin/input-container@npm:24.1.3"
+"@vaadin/input-container@npm:~24.1.4":
+ version: 24.1.4
+ resolution: "@vaadin/input-container@npm:24.1.4"
dependencies:
"@polymer/polymer": ^3.0.0
- "@vaadin/component-base": ~24.1.3
- "@vaadin/vaadin-lumo-styles": ~24.1.3
- "@vaadin/vaadin-material-styles": ~24.1.3
- "@vaadin/vaadin-themable-mixin": ~24.1.3
- checksum: 429387239df99d36685b31d1264e4c4d04b2085c80da43cd0ae01836bce2ad7cbddcc557eca517b39686581622f8589b0d08f90026ad4d5cf34993b85eb96de2
+ "@vaadin/component-base": ~24.1.4
+ "@vaadin/vaadin-lumo-styles": ~24.1.4
+ "@vaadin/vaadin-material-styles": ~24.1.4
+ "@vaadin/vaadin-themable-mixin": ~24.1.4
+ checksum: 1851ac7a85bbaf02fbcbe3de99efe94aee2921873d5226b48d77a42d35cdf2d5f6f99b0a8bce9c559f90edfcb79efbe47e486db3bfe2991071af1f271d10a07d
languageName: node
linkType: hard
-"@vaadin/item@npm:~24.1.3":
- version: 24.1.3
- resolution: "@vaadin/item@npm:24.1.3"
+"@vaadin/item@npm:~24.1.4":
+ version: 24.1.4
+ resolution: "@vaadin/item@npm:24.1.4"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
"@polymer/polymer": ^3.0.0
- "@vaadin/a11y-base": ~24.1.3
- "@vaadin/component-base": ~24.1.3
- "@vaadin/vaadin-lumo-styles": ~24.1.3
- "@vaadin/vaadin-material-styles": ~24.1.3
- "@vaadin/vaadin-themable-mixin": ~24.1.3
- checksum: f6b89f9efb1c25a41f387a2585c5ef7d51058607a33f431456d539aa48b0fb3d655aee069a47418632c046c2064f08157113779979041a68b5b9ce9ef3504a2b
+ "@vaadin/a11y-base": ~24.1.4
+ "@vaadin/component-base": ~24.1.4
+ "@vaadin/vaadin-lumo-styles": ~24.1.4
+ "@vaadin/vaadin-material-styles": ~24.1.4
+ "@vaadin/vaadin-themable-mixin": ~24.1.4
+ checksum: 5694a54c156516a41be7c92f7486fe417b227caaa39186322720426d9586d87f17775faae11ec8d16d249826c9b0cf753ed7061b2d4b9ac2cbcb614ce4b35714
languageName: node
linkType: hard
-"@vaadin/lit-renderer@npm:~24.1.3":
- version: 24.1.3
- resolution: "@vaadin/lit-renderer@npm:24.1.3"
+"@vaadin/lit-renderer@npm:~24.1.4":
+ version: 24.1.4
+ resolution: "@vaadin/lit-renderer@npm:24.1.4"
dependencies:
lit: ^2.0.0
- checksum: 2a906603ab8775de8be91323b9b5c820730531231c7ba82c655cba4bca411ef1aeb8679a440f888bf6b9577463ff54584bb61a668ee468dfd7d9755aee088337
+ checksum: ac69537651be8733de209333cbbdd1b5b6e17394d6869d7de8c6b06bd63952a478de1f72120dfe826a72073788094032f5284d8cdbe19de5edf57a836de476b0
languageName: node
linkType: hard
-"@vaadin/overlay@npm:~24.1.3":
- version: 24.1.3
- resolution: "@vaadin/overlay@npm:24.1.3"
+"@vaadin/overlay@npm:~24.1.4":
+ version: 24.1.4
+ resolution: "@vaadin/overlay@npm:24.1.4"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
"@polymer/polymer": ^3.0.0
- "@vaadin/a11y-base": ~24.1.3
- "@vaadin/component-base": ~24.1.3
- "@vaadin/vaadin-lumo-styles": ~24.1.3
- "@vaadin/vaadin-material-styles": ~24.1.3
- "@vaadin/vaadin-themable-mixin": ~24.1.3
- checksum: e210a9b8cbb3edebea48dea196b95cc1369d2ceddeb0ba6bfb094b31147514f6e6a08c6f3a86d99e36a5e7b08e9913f5df3f89384e6907abca4eb3de2f33e68b
+ "@vaadin/a11y-base": ~24.1.4
+ "@vaadin/component-base": ~24.1.4
+ "@vaadin/vaadin-lumo-styles": ~24.1.4
+ "@vaadin/vaadin-material-styles": ~24.1.4
+ "@vaadin/vaadin-themable-mixin": ~24.1.4
+ checksum: 44a664cd249b66345240a1ab6cd9c466f7d43c496a13c6d30d2cfdc1e67550f4b8562d43b16d0b974a2dc61bbde5d10671a63f97b9171f71ca75cb4d7de684cf
languageName: node
linkType: hard
@@ -4911,34 +4911,34 @@ __metadata:
languageName: node
linkType: hard
-"@vaadin/vaadin-lumo-styles@npm:~24.1.3":
- version: 24.1.3
- resolution: "@vaadin/vaadin-lumo-styles@npm:24.1.3"
+"@vaadin/vaadin-lumo-styles@npm:~24.1.4":
+ version: 24.1.4
+ resolution: "@vaadin/vaadin-lumo-styles@npm:24.1.4"
dependencies:
"@polymer/polymer": ^3.0.0
- "@vaadin/icon": ~24.1.3
- "@vaadin/vaadin-themable-mixin": ~24.1.3
- checksum: 54d94bde98a2c15e7410ada28f082e43c8db9d1d5ce0a5255f02467ff7db706c805d425c5d172d545fe844a4ced147f8828b50a6cff7bea8732d6cecf4fc1211
+ "@vaadin/icon": ~24.1.4
+ "@vaadin/vaadin-themable-mixin": ~24.1.4
+ checksum: 358dfa2ca955d86119b675e4e32982a51be12327fd675cdf3601b79a9fc9c8388e31299e593aabc62bb72afb17ba3856b904dfbecd7408f82719c9ce015fd883
languageName: node
linkType: hard
-"@vaadin/vaadin-material-styles@npm:~24.1.3":
- version: 24.1.3
- resolution: "@vaadin/vaadin-material-styles@npm:24.1.3"
+"@vaadin/vaadin-material-styles@npm:~24.1.4":
+ version: 24.1.4
+ resolution: "@vaadin/vaadin-material-styles@npm:24.1.4"
dependencies:
"@polymer/polymer": ^3.0.0
- "@vaadin/vaadin-themable-mixin": ~24.1.3
- checksum: c1af4802118864fc37a0019c4369de9f05c570382982f1cc79e96f46617860e2db453d707d3671e133d66ca3040d741ec3a414af44eabb1375fb3cf15d951e2a
+ "@vaadin/vaadin-themable-mixin": ~24.1.4
+ checksum: 0289b667dbf54d2a81ffb74dd1caeccefed7cd7e0d02163c31775ab03f5d8fb15647578c4744592d753a2657b47216f221468f19f497d920e21f443e84699bf4
languageName: node
linkType: hard
-"@vaadin/vaadin-themable-mixin@npm:24.1.3, @vaadin/vaadin-themable-mixin@npm:~24.1.3":
- version: 24.1.3
- resolution: "@vaadin/vaadin-themable-mixin@npm:24.1.3"
+"@vaadin/vaadin-themable-mixin@npm:24.1.4, @vaadin/vaadin-themable-mixin@npm:~24.1.4":
+ version: 24.1.4
+ resolution: "@vaadin/vaadin-themable-mixin@npm:24.1.4"
dependencies:
"@open-wc/dedupe-mixin": ^1.3.0
lit: ^2.0.0
- checksum: b6a57ec5ce54907f61be82413494639500fd8ef9ae2dff58628369b9581bc442b88b4356c7ef9f9202ca1cc67677f1d489df56cd0ec2ea96a357976e583f582d
+ checksum: db2993360d741f50011c0ca3229afb67d6965bd2fcb4915108e8bd462071c82d5f0a60877e250db1611b5712cbb17d3ab97fef932f97c43b63cb15a0357646ea
languageName: node
linkType: hard
@@ -9707,8 +9707,8 @@ __metadata:
"@types/webspeechapi": 0.0.29
"@typescript-eslint/eslint-plugin": 6.1.0
"@typescript-eslint/parser": 6.1.0
- "@vaadin/combo-box": 24.1.3
- "@vaadin/vaadin-themable-mixin": 24.1.3
+ "@vaadin/combo-box": 24.1.4
+ "@vaadin/vaadin-themable-mixin": 24.1.4
"@vibrant/color": 3.2.1-alpha.1
"@vibrant/core": 3.2.1-alpha.1
"@vibrant/quantizer-mmcq": 3.2.1-alpha.1
From 17c9e910926f18ba08f2a9265dde7b0c6fef5afb Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Mon, 24 Jul 2023 17:43:20 +0200
Subject: [PATCH 099/102] Adjust default icon of event entity (#17401)
---
src/common/entity/domain_icon.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/common/entity/domain_icon.ts b/src/common/entity/domain_icon.ts
index eeefc4598c..1ea45fa095 100644
--- a/src/common/entity/domain_icon.ts
+++ b/src/common/entity/domain_icon.ts
@@ -18,9 +18,9 @@ import {
mdiCloseCircleOutline,
mdiCrosshairsQuestion,
mdiDoorbell,
+ mdiEyeCheck,
mdiFan,
mdiFanOff,
- mdiGestureTap,
mdiGestureTapButton,
mdiLanConnect,
mdiLanDisconnect,
@@ -144,7 +144,7 @@ export const domainIconWithoutDefault = (
case "motion":
return mdiMotionSensor;
default:
- return mdiGestureTap;
+ return mdiEyeCheck;
}
case "fan":
From 5ed767804ce8dcc72ef22a72e9bd67d12733bc5d Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Mon, 24 Jul 2023 17:43:31 +0200
Subject: [PATCH 100/102] Complete service translation support in service dev
tools (#17399)
---
.../service/developer-tools-service.ts | 36 +++++++++++++++++--
1 file changed, 33 insertions(+), 3 deletions(-)
diff --git a/src/panels/developer-tools/service/developer-tools-service.ts b/src/panels/developer-tools/service/developer-tools-service.ts
index d0600df766..8ffd198e78 100644
--- a/src/panels/developer-tools/service/developer-tools-service.ts
+++ b/src/panels/developer-tools/service/developer-tools-service.ts
@@ -58,6 +58,9 @@ class HaPanelDevService extends LitElement {
protected firstUpdated(params) {
super.firstUpdated(params);
+ this.hass.loadBackendTranslation("services");
+ this.hass.loadBackendTranslation("selector");
+
const serviceParam = extractSearchParam("service");
if (serviceParam) {
this._serviceData = {
@@ -95,6 +98,14 @@ class HaPanelDevService extends LitElement {
const isValid = this._isValid(this._serviceData, fields, target);
+ const domain = this._serviceData?.service
+ ? computeDomain(this._serviceData?.service)
+ : undefined;
+
+ const serviceName = this._serviceData?.service
+ ? computeObjectId(this._serviceData?.service)
+ : undefined;
+
return html`
@@ -251,8 +262,16 @@ class HaPanelDevService extends LitElement {
(field) =>
html`
${field.key} |
- ${field.description} |
- ${field.example} |
+
+ ${this.hass.localize(
+ `component.${domain}.services.${serviceName}.fields.${field.key}.description`
+ ) || field.description}
+ |
+
+ ${this.hass.localize(
+ `component.${domain}.services.${serviceName}.fields.${field.key}.example`
+ ) || field.example}
+ |
`
)}
@@ -430,6 +449,14 @@ class HaPanelDevService extends LitElement {
this.hass.services,
this._serviceData?.service
);
+ const domain = this._serviceData?.service
+ ? computeDomain(this._serviceData?.service)
+ : undefined;
+
+ const serviceName = this._serviceData?.service
+ ? computeObjectId(this._serviceData?.service)
+ : undefined;
+
const example = {};
fields.forEach((field) => {
if (field.example) {
@@ -437,7 +464,10 @@ class HaPanelDevService extends LitElement {
try {
value = load(field.example);
} catch (err: any) {
- value = field.example;
+ value =
+ this.hass.localize(
+ `component.${domain}.services.${serviceName}.fields.${field.key}.example`
+ ) || field.example;
}
example[field.key] = value;
}
From 89b5a082e567a33d776774ebb01b4150a7d8bc4c Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 24 Jul 2023 11:54:57 -0400
Subject: [PATCH 101/102] Update CodeMirror (#17376)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
package.json | 6 +++---
yarn.lock | 35 ++++++++++++-----------------------
2 files changed, 15 insertions(+), 26 deletions(-)
diff --git a/package.json b/package.json
index c8d3aa3f88..4689fad4b6 100644
--- a/package.json
+++ b/package.json
@@ -27,13 +27,13 @@
"dependencies": {
"@babel/runtime": "7.22.6",
"@braintree/sanitize-url": "6.0.2",
- "@codemirror/autocomplete": "6.8.1",
+ "@codemirror/autocomplete": "6.9.0",
"@codemirror/commands": "6.2.4",
"@codemirror/language": "6.8.0",
- "@codemirror/legacy-modes": "6.3.2",
+ "@codemirror/legacy-modes": "6.3.3",
"@codemirror/search": "6.5.0",
"@codemirror/state": "6.2.1",
- "@codemirror/view": "6.14.1",
+ "@codemirror/view": "6.15.3",
"@egjs/hammerjs": "2.0.17",
"@formatjs/intl-datetimeformat": "6.10.0",
"@formatjs/intl-displaynames": "6.5.0",
diff --git a/yarn.lock b/yarn.lock
index cd99f0bce9..8ade02b4c4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1452,9 +1452,9 @@ __metadata:
languageName: node
linkType: hard
-"@codemirror/autocomplete@npm:6.8.1":
- version: 6.8.1
- resolution: "@codemirror/autocomplete@npm:6.8.1"
+"@codemirror/autocomplete@npm:6.9.0":
+ version: 6.9.0
+ resolution: "@codemirror/autocomplete@npm:6.9.0"
dependencies:
"@codemirror/language": ^6.0.0
"@codemirror/state": ^6.0.0
@@ -1465,7 +1465,7 @@ __metadata:
"@codemirror/state": ^6.0.0
"@codemirror/view": ^6.0.0
"@lezer/common": ^1.0.0
- checksum: 8599cd91defa3fea5276a7f9aff43ced323d9c4401dfb867e43608ba72ded48cb458256c5c784949a6332c0c20ba2fedac16a5708335cd809d269e4ea5076957
+ checksum: a5f661944c75f40b02c90a193c9a459c0fd7e335c0ac5973420c19157dfb46010f573c2b70731591fe477e7a2ad10121ff3ae394a72d450946d7b886c28b0368
languageName: node
linkType: hard
@@ -1495,12 +1495,12 @@ __metadata:
languageName: node
linkType: hard
-"@codemirror/legacy-modes@npm:6.3.2":
- version: 6.3.2
- resolution: "@codemirror/legacy-modes@npm:6.3.2"
+"@codemirror/legacy-modes@npm:6.3.3":
+ version: 6.3.3
+ resolution: "@codemirror/legacy-modes@npm:6.3.3"
dependencies:
"@codemirror/language": ^6.0.0
- checksum: fa5f5477fb9e19267251e2ecd3de8c1a4c2512813555bb60111dce3951f2c3f6080a2985a573b7542534ba1d2c34115f7e39ee23fdf8f6f81db6f8ce447c1efc
+ checksum: 3cd32b0f011b0a193e0948e5901b625f38aa6d9a8b24344531d6e142eb6fbb3e6cb5969429102044f3d04fbe53c4deaebd9f659c05067a0b18d17766290c9e05
languageName: node
linkType: hard
@@ -1522,18 +1522,7 @@ __metadata:
languageName: node
linkType: hard
-"@codemirror/view@npm:6.14.1":
- version: 6.14.1
- resolution: "@codemirror/view@npm:6.14.1"
- dependencies:
- "@codemirror/state": ^6.1.4
- style-mod: ^4.0.0
- w3c-keyname: ^2.2.4
- checksum: 19114ee05b3795ebe07a69cf00c36e8351b3500ce105b8412d90e757d459f71370ead3de852f0fda069041803276e6c38e6f1f943f77e85c9b5c279ab7fa1c4a
- languageName: node
- linkType: hard
-
-"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.6.0":
+"@codemirror/view@npm:6.15.3, @codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.6.0":
version: 6.15.3
resolution: "@codemirror/view@npm:6.15.3"
dependencies:
@@ -9611,13 +9600,13 @@ __metadata:
"@babel/preset-typescript": 7.22.5
"@babel/runtime": 7.22.6
"@braintree/sanitize-url": 6.0.2
- "@codemirror/autocomplete": 6.8.1
+ "@codemirror/autocomplete": 6.9.0
"@codemirror/commands": 6.2.4
"@codemirror/language": 6.8.0
- "@codemirror/legacy-modes": 6.3.2
+ "@codemirror/legacy-modes": 6.3.3
"@codemirror/search": 6.5.0
"@codemirror/state": 6.2.1
- "@codemirror/view": 6.14.1
+ "@codemirror/view": 6.15.3
"@egjs/hammerjs": 2.0.17
"@formatjs/intl-datetimeformat": 6.10.0
"@formatjs/intl-displaynames": 6.5.0
From de4d5179181245f76bd8d08f5315b5ca7ac3df7f Mon Sep 17 00:00:00 2001
From: Franck Nijhof
Date: Tue, 25 Jul 2023 17:35:49 +0200
Subject: [PATCH 102/102] Bumped version to 20230725.0
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index 4c2a8ff47e..e3972f0f8b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "home-assistant-frontend"
-version = "20230705.1"
+version = "20230725.0"
license = {text = "Apache-2.0"}
description = "The Home Assistant frontend"
readme = "README.md"