From 42815c4d5e086e04efa87942c9f607c7e9cb5f26 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 26 Jun 2025 07:57:16 +0200 Subject: [PATCH 01/66] Update confirm disable messages (#25919) --- src/panels/config/devices/ha-config-device-page.ts | 8 ++++++-- .../integrations/ha-config-entry-device-row.ts | 14 +++++++++++--- src/translations/en.json | 6 ++++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/panels/config/devices/ha-config-device-page.ts b/src/panels/config/devices/ha-config-device-page.ts index 4220645aaa..34f511b9c0 100644 --- a/src/panels/config/devices/ha-config-device-page.ts +++ b/src/panels/config/devices/ha-config-device-page.ts @@ -1317,9 +1317,13 @@ export class HaConfigDevicePage extends LitElement { // eslint-disable-next-line no-await-in-loop (await showConfirmationDialog(this, { title: this.hass.localize( - "ui.panel.config.devices.confirm_disable_config_entry", - { entry_name: config_entry.title } + "ui.panel.config.devices.confirm_disable_config_entry_title" ), + text: this.hass.localize( + "ui.panel.config.devices.confirm_disable_config_entry_message", + { name: config_entry.title } + ), + destructive: true, confirmText: this.hass.localize("ui.common.yes"), dismissText: this.hass.localize("ui.common.no"), })) diff --git a/src/panels/config/integrations/ha-config-entry-device-row.ts b/src/panels/config/integrations/ha-config-entry-device-row.ts index 9401e42491..58dfc11da7 100644 --- a/src/panels/config/integrations/ha-config-entry-device-row.ts +++ b/src/panels/config/integrations/ha-config-entry-device-row.ts @@ -196,9 +196,13 @@ class HaConfigEntryDeviceRow extends LitElement { !config_entry.disabled_by && (await showConfirmationDialog(this, { title: this.hass.localize( - "ui.panel.config.devices.confirm_disable_config_entry", - { entry_name: config_entry.title } + "ui.panel.config.devices.confirm_disable_config_entry_title" ), + text: this.hass.localize( + "ui.panel.config.devices.confirm_disable_config_entry_message", + { name: config_entry.title } + ), + destructive: true, confirmText: this.hass.localize("ui.common.yes"), dismissText: this.hass.localize("ui.common.no"), })) @@ -230,9 +234,13 @@ class HaConfigEntryDeviceRow extends LitElement { if (disable) { const confirm = await showConfirmationDialog(this, { title: this.hass.localize( - "ui.panel.config.integrations.config_entry.device.confirm_disable", + "ui.panel.config.integrations.config_entry.device.confirm_disable_title" + ), + text: this.hass.localize( + "ui.panel.config.integrations.config_entry.device.confirm_disable_message", { name: computeDeviceNameDisplay(this.device, this.hass) } ), + destructive: true, confirmText: this.hass.localize("ui.common.yes"), dismissText: this.hass.localize("ui.common.no"), }); diff --git a/src/translations/en.json b/src/translations/en.json index cb2e4be369..bbd1222d5a 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -5128,7 +5128,8 @@ "disabled_entities": "+{count} disabled {count, plural,\n one {entity}\n other {entities}\n}", "hidden": "Hidden" }, - "confirm_disable_config_entry": "There are no more devices for the config entry {entry_name}, do you want to instead disable the config entry?", + "confirm_disable_config_entry_title": "Disable config entry?", + "confirm_disable_config_entry_message": "There are no more devices for the config entry {name}, do you want to instead disable the config entry?", "update_device_error": "Updating the device failed", "disabled": "Disabled", "data_table": { @@ -5379,7 +5380,8 @@ "device": { "enable": "Enable device", "disable": "Disable device", - "confirm_disable": "Are you sure you want to disable {name}?", + "confirm_disable_title": "Disable device?", + "confirm_disable_message": "Are you sure you want to disable {name} and all of it’s entities?", "configure": "Configure device", "delete": "Remove device" }, From 3d1a3e2335858f79984908f55678057e7ca95e93 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 25 Jun 2025 23:31:43 +0200 Subject: [PATCH 02/66] Only show own devices when there are devices... (#25920) only show own devices when there are devices... --- .../integrations/ha-config-entry-row.ts | 85 ++++++++++--------- .../ha-config-integration-page.ts | 3 +- 2 files changed, 47 insertions(+), 41 deletions(-) diff --git a/src/panels/config/integrations/ha-config-entry-row.ts b/src/panels/config/integrations/ha-config-entry-row.ts index 2d1c80a3fe..9fd08a91a1 100644 --- a/src/panels/config/integrations/ha-config-entry-row.ts +++ b/src/panels/config/integrations/ha-config-entry-row.ts @@ -405,47 +405,52 @@ class HaConfigEntryRow extends LitElement { ${this._expanded ? subEntries.length - ? html` - - + - - ${this.hass.localize( - "ui.panel.config.integrations.config_entry.devices_without_subentry" - )} - - ${this._devicesExpanded - ? ownDevices.map( - (device) => - html`` - ) - : nothing} - - ${subEntries.map( - (subEntry) => html` - - ` - )}` + + + ${this.hass.localize( + "ui.panel.config.integrations.config_entry.devices_without_subentry" + )} + + ${this._devicesExpanded + ? ownDevices.map( + (device) => + html`` + ) + : nothing} + ` + : nothing} + ${subEntries.map( + (subEntry) => html` + + ` + )}` : html` ${ownDevices.map( (device) => diff --git a/src/panels/config/integrations/ha-config-integration-page.ts b/src/panels/config/integrations/ha-config-integration-page.ts index 50334c6664..e3101c63ce 100644 --- a/src/panels/config/integrations/ha-config-integration-page.ts +++ b/src/panels/config/integrations/ha-config-integration-page.ts @@ -541,8 +541,9 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) { ${this.hass.localize("ui.common.disable")} + ${this.hass.localize("ui.common.disable")} + ` : nothing} From d9a3a27245cd3886e4dc0e01e83f1b06243f2507 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 25 Jun 2025 23:34:12 +0200 Subject: [PATCH 03/66] Dont show internal quality scale (#25921) dont show internal quality scale --- src/data/integration_quality_scale.ts | 6 ------ .../config/integrations/ha-config-integration-page.ts | 3 --- src/translations/en.json | 1 - 3 files changed, 10 deletions(-) diff --git a/src/data/integration_quality_scale.ts b/src/data/integration_quality_scale.ts index e49bbc835d..d4c06a0162 100644 --- a/src/data/integration_quality_scale.ts +++ b/src/data/integration_quality_scale.ts @@ -1,5 +1,4 @@ import { mdiContentSave, mdiMedal, mdiTrophy } from "@mdi/js"; -import { mdiHomeAssistant } from "../resources/home-assistant-logo-svg"; import type { LocalizeKeys } from "../common/translations/localize"; /** @@ -26,11 +25,6 @@ export const QUALITY_SCALE_MAP: Record< translationKey: "ui.panel.config.integrations.config_entry.platinum_quality", }, - internal: { - icon: mdiHomeAssistant, - translationKey: - "ui.panel.config.integrations.config_entry.internal_integration", - }, legacy: { icon: mdiContentSave, translationKey: diff --git a/src/panels/config/integrations/ha-config-integration-page.ts b/src/panels/config/integrations/ha-config-integration-page.ts index e3101c63ce..9ff686a174 100644 --- a/src/panels/config/integrations/ha-config-integration-page.ts +++ b/src/panels/config/integrations/ha-config-integration-page.ts @@ -1008,9 +1008,6 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) { ha-svg-icon.platinum-quality { color: #727272; } - ha-svg-icon.internal-quality { - color: var(--primary-color); - } ha-svg-icon.legacy-quality { color: var(--mdc-theme-text-icon-on-background, rgba(0, 0, 0, 0.38)); animation: unset; diff --git a/src/translations/en.json b/src/translations/en.json index bbd1222d5a..8bca733f1f 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -5435,7 +5435,6 @@ } }, "custom_integration": "Custom integration", - "internal_integration": "Internal integration", "legacy_integration": "Legacy integration", "custom_overwrites_core": "Custom integration that replaces a core component", "depends_on_cloud": "Requires Internet", From 570c63c50a49cbe0d5f24a9167ab9d292d2c8256 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 26 Jun 2025 12:17:00 +0200 Subject: [PATCH 04/66] Prevent overflow of ripple on device row on integration page (#25922) --- src/panels/config/integrations/ha-config-entry-row.ts | 11 +++++++++++ src/translations/en.json | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/panels/config/integrations/ha-config-entry-row.ts b/src/panels/config/integrations/ha-config-entry-row.ts index 9fd08a91a1..bd460a7a57 100644 --- a/src/panels/config/integrations/ha-config-entry-row.ts +++ b/src/panels/config/integrations/ha-config-entry-row.ts @@ -410,6 +410,9 @@ class HaConfigEntryRow extends LitElement { Date: Thu, 26 Jun 2025 03:41:39 -0400 Subject: [PATCH 05/66] Make the config entry row section wider on mobile (#25924) --- src/panels/config/integrations/ha-config-entry-row.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/panels/config/integrations/ha-config-entry-row.ts b/src/panels/config/integrations/ha-config-entry-row.ts index bd460a7a57..afee3d8efb 100644 --- a/src/panels/config/integrations/ha-config-entry-row.ts +++ b/src/panels/config/integrations/ha-config-entry-row.ts @@ -748,6 +748,10 @@ class HaConfigEntryRow extends LitElement { border-radius: var(--ha-card-border-radius, 12px); padding: 0; } + :host([narrow]) { + margin-left: -12px; + margin-right: -12px; + } ha-md-list.devices { margin: 16px; margin-top: 0; From 0b488e1ffdabb7c9732b26ce807eabd44ae664e9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 26 Jun 2025 03:41:10 -0400 Subject: [PATCH 06/66] Fix wrapping of add subentry buttons (#25925) --- src/panels/config/integrations/ha-config-integration-page.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/panels/config/integrations/ha-config-integration-page.ts b/src/panels/config/integrations/ha-config-integration-page.ts index 9ff686a174..639255962a 100644 --- a/src/panels/config/integrations/ha-config-integration-page.ts +++ b/src/panels/config/integrations/ha-config-integration-page.ts @@ -954,6 +954,7 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) { } .actions { display: flex; + flex-wrap: wrap; gap: 8px; } .section { From e88d9a1ffb8045f0ae37ef9763bab8a2b47797d9 Mon Sep 17 00:00:00 2001 From: Eric Stern Date: Thu, 26 Jun 2025 00:42:43 -0700 Subject: [PATCH 07/66] Fix logbook stream subscription (#25927) --- src/data/logbook.ts | 8 ++++++-- src/panels/logbook/ha-logbook.ts | 11 ++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/data/logbook.ts b/src/data/logbook.ts index d57e27fd26..21822d0916 100644 --- a/src/data/logbook.ts +++ b/src/data/logbook.ts @@ -114,9 +114,13 @@ const getLogbookDataFromServer = ( export const subscribeLogbook = ( hass: HomeAssistant, - callbackFunction: (message: LogbookStreamMessage) => void, + callbackFunction: ( + message: LogbookStreamMessage, + subscriptionId: number + ) => void, startDate: string, endDate: string, + subscriptionId: number, entityIds?: string[], deviceIds?: string[] ): Promise => { @@ -140,7 +144,7 @@ export const subscribeLogbook = ( params.device_ids = deviceIds; } return hass.connection.subscribeMessage( - (message) => callbackFunction(message), + (message) => callbackFunction(message, subscriptionId), params ); }; diff --git a/src/panels/logbook/ha-logbook.ts b/src/panels/logbook/ha-logbook.ts index 2f404ed0aa..230e8fd905 100644 --- a/src/panels/logbook/ha-logbook.ts +++ b/src/panels/logbook/ha-logbook.ts @@ -88,6 +88,8 @@ export class HaLogbook extends LitElement { 1000 ); + private _logbookSubscriptionId = 0; + protected render() { if (!isComponentLoaded(this.hass, "logbook")) { return nothing; @@ -278,13 +280,20 @@ export class HaLogbook extends LitElement { } try { + this._logbookSubscriptionId++; + this._unsubLogbook = subscribeLogbook( this.hass, - (streamMessage) => { + (streamMessage, subscriptionId) => { + if (subscriptionId !== this._logbookSubscriptionId) { + // Ignore messages from previous subscriptions + return; + } this._processOrQueueStreamMessage(streamMessage); }, logbookPeriod.startTime.toISOString(), logbookPeriod.endTime.toISOString(), + this._logbookSubscriptionId, this.entityIds, this.deviceIds ); From 3456aa96e8a6b23a0f496253ef97ff61c7201031 Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Thu, 26 Jun 2025 12:18:34 +0200 Subject: [PATCH 08/66] Better handle case when no floors in areas dashboard (#25933) --- .../ha-areas-floors-display-editor.ts | 55 +++++++++++-------- .../areas/areas-overview-view-strategy.ts | 29 ++++++---- src/translations/en.json | 3 +- 3 files changed, 51 insertions(+), 36 deletions(-) diff --git a/src/components/ha-areas-floors-display-editor.ts b/src/components/ha-areas-floors-display-editor.ts index 414e2550c7..03ecec9ac2 100644 --- a/src/components/ha-areas-floors-display-editor.ts +++ b/src/components/ha-areas-floors-display-editor.ts @@ -1,6 +1,6 @@ import { mdiTextureBox } from "@mdi/js"; import type { TemplateResult } from "lit"; -import { LitElement, css, html } from "lit"; +import { LitElement, css, html, nothing } from "lit"; import { customElement, property } from "lit/decorators"; import memoizeOne from "memoize-one"; import { fireEvent } from "../common/dom/fire_event"; @@ -64,26 +64,30 @@ export class HaAreasFloorsDisplayEditor extends LitElement { .expanded=${this.expanded} > - ${filteredFloors.map( - (floor) => html` + ${filteredFloors.map((floor, _, array) => { + const noFloors = + array.length === 1 && floor.floor_id === UNASSIGNED_FLOOR; + return html`
-
- -

${computeFloorName(floor)}

-
+ ${noFloors + ? nothing + : html`
+ +

${computeFloorName(floor)}

+
`}
- ` - )} + `; + })} `; } @@ -134,10 +138,10 @@ export class HaAreasFloorsDisplayEditor extends LitElement { floors.push({ floor_id: UNASSIGNED_FLOOR, name: this.hass.localize( - "ui.panel.lovelace.strategy.areas.unassigned_areas" + "ui.panel.lovelace.strategy.areas.others_areas" ), icon: null, - level: 999999, + level: null, aliases: [], created_at: 0, modified_at: 0, @@ -155,25 +159,30 @@ export class HaAreasFloorsDisplayEditor extends LitElement { (floor) => floor.floor_id ); + const oldHidden = this.value?.hidden ?? []; + const oldOrder = this.value?.order ?? []; + const newHidden: string[] = []; const newOrder: string[] = []; for (const floorId of floorIds) { - if (currentFloorId === floorId) { + if ((currentFloorId ?? UNASSIGNED_FLOOR) === floorId) { newHidden.push(...(value.hidden ?? [])); newOrder.push(...(value.order ?? [])); continue; } - const hidden = this.value?.hidden?.filter( - (areaId) => this.hass.areas[areaId]?.floor_id === floorId - ); - if (hidden) { + const hidden = oldHidden.filter((areaId) => { + const id = this.hass.areas[areaId]?.floor_id ?? UNASSIGNED_FLOOR; + return id === floorId; + }); + if (hidden?.length) { newHidden.push(...hidden); } - const order = this.value?.order?.filter( - (areaId) => this.hass.areas[areaId]?.floor_id === floorId - ); - if (order) { + const order = oldOrder.filter((areaId) => { + const id = this.hass.areas[areaId]?.floor_id ?? UNASSIGNED_FLOOR; + return id === floorId; + }); + if (order?.length) { newOrder.push(...order); } } @@ -188,7 +197,7 @@ export class HaAreasFloorsDisplayEditor extends LitElement { if (newValue.order?.length === 0) { delete newValue.order; } - + this.value = newValue; fireEvent(this, "value-changed", { value: newValue }); } @@ -199,7 +208,7 @@ export class HaAreasFloorsDisplayEditor extends LitElement { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; - flex: 1: + flex: 1; } .floor .header { margin: 16px 0 8px 0; diff --git a/src/panels/lovelace/strategies/areas/areas-overview-view-strategy.ts b/src/panels/lovelace/strategies/areas/areas-overview-view-strategy.ts index 99feb34b5a..0d0e43e8c9 100644 --- a/src/panels/lovelace/strategies/areas/areas-overview-view-strategy.ts +++ b/src/panels/lovelace/strategies/areas/areas-overview-view-strategy.ts @@ -32,7 +32,7 @@ export class AreasOverviewViewStrategy extends ReactiveElement { config: AreasViewStrategyConfig, hass: HomeAssistant ): Promise { - const areas = getAreas( + const displayedAreas = getAreas( hass.areas, config.areas_display?.hidden, config.areas_display?.order @@ -50,25 +50,23 @@ export class AreasOverviewViewStrategy extends ReactiveElement { ...floors, { floor_id: UNASSIGNED_FLOOR, - name: hass.localize( - "ui.panel.lovelace.strategy.areas.unassigned_areas" - ), + name: hass.localize("ui.panel.lovelace.strategy.areas.others_areas"), level: null, icon: null, }, ] - .map((floor) => { - const areasInFloors = areas.filter( + .map((floor) => { + const areasInFloors = displayedAreas.filter( (area) => area.floor_id === floor.floor_id || (!area.floor_id && floor.floor_id === UNASSIGNED_FLOOR) ); - if (areasInFloors.length === 0) { - return undefined; - } - - const areasCards = areasInFloors.map((area) => { + return [floor, areasInFloors] as const; + }) + .filter(([_, areas]) => areas.length) + .map(([floor, areas], _, array) => { + const areasCards = areas.map((area) => { const path = computeAreaPath(area.area_id); const areaOptions = config.areas_options?.[area.area_id] || {}; @@ -123,10 +121,17 @@ export class AreasOverviewViewStrategy extends ReactiveElement { }; }); + const noFloors = + array.length === 1 && floor.floor_id === UNASSIGNED_FLOOR; + + const headingTitle = noFloors + ? hass.localize("ui.panel.lovelace.strategy.areas.areas") + : floor.name; + const headingCard: HeadingCardConfig = { type: "heading", heading_style: "title", - heading: floor.name, + heading: headingTitle, icon: floor.icon || floorDefaultIcon(floor), }; diff --git a/src/translations/en.json b/src/translations/en.json index 9189b23ba3..215c53309e 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -6685,7 +6685,8 @@ "actions": "Actions", "others": "Others" }, - "unassigned_areas": "[%key:ui::panel::config::areas::picker::unassigned_areas%]" + "others_areas": "Other areas", + "areas": "Areas" } }, "cards": { From b9fb981fb2bdc82e498b97593907ac383f2fdc40 Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Thu, 26 Jun 2025 13:05:05 +0200 Subject: [PATCH 09/66] Remove alert classes and only use slot sensors for areas dashboard (#25937) * Remove alert classes and only used slot sensors for areas dashboard * Rename group to sensors * Rename group to sensors --- .../ha-areas-floors-display-editor.ts | 7 ++++ .../areas/areas-overview-view-strategy.ts | 19 +++++----- .../hui-areas-dashboard-strategy-editor.ts | 36 ++++++++++++------- src/translations/en.json | 4 +-- 4 files changed, 41 insertions(+), 25 deletions(-) diff --git a/src/components/ha-areas-floors-display-editor.ts b/src/components/ha-areas-floors-display-editor.ts index 03ecec9ac2..cd56b94ffc 100644 --- a/src/components/ha-areas-floors-display-editor.ts +++ b/src/components/ha-areas-floors-display-editor.ts @@ -218,6 +218,13 @@ export class HaAreasFloorsDisplayEditor extends LitElement { align-items: center; gap: 8px; } + ha-expansion-panel { + margin-bottom: 8px; + --expansion-panel-summary-padding: 0 16px; + } + ha-expansion-panel [slot="leading-icon"] { + margin-inline-end: 16px; + } `; } diff --git a/src/panels/lovelace/strategies/areas/areas-overview-view-strategy.ts b/src/panels/lovelace/strategies/areas/areas-overview-view-strategy.ts index 0d0e43e8c9..9c47f38ddd 100644 --- a/src/panels/lovelace/strategies/areas/areas-overview-view-strategy.ts +++ b/src/panels/lovelace/strategies/areas/areas-overview-view-strategy.ts @@ -89,20 +89,19 @@ export class AreasOverviewViewStrategy extends ReactiveElement { (control) => controlEntities[control].length > 0 ); + const sensorClasses: string[] = []; + if (area.temperature_entity_id) { + sensorClasses.push("temperature"); + } + if (area.humidity_entity_id) { + sensorClasses.push("humidity"); + } + return { type: "area", area: area.area_id, display_type: "compact", - sensor_classes: ["temperature", "humidity"], - alert_classes: [ - "water_leak", - "smoke", - "gas", - "co", - "motion", - "occupancy", - "presence", - ], + sensor_classes: sensorClasses, exclude_entities: hiddenEntities, features: filteredControls.length ? [ diff --git a/src/panels/lovelace/strategies/areas/editor/hui-areas-dashboard-strategy-editor.ts b/src/panels/lovelace/strategies/areas/editor/hui-areas-dashboard-strategy-editor.ts index 311641caa2..73e7d890bb 100644 --- a/src/panels/lovelace/strategies/areas/editor/hui-areas-dashboard-strategy-editor.ts +++ b/src/panels/lovelace/strategies/areas/editor/hui-areas-dashboard-strategy-editor.ts @@ -1,28 +1,30 @@ +import { mdiThermometerWater } from "@mdi/js"; import { css, html, LitElement, nothing } from "lit"; import { customElement, property, state } from "lit/decorators"; import { fireEvent } from "../../../../../common/dom/fire_event"; import "../../../../../components/ha-areas-display-editor"; import type { AreasDisplayValue } from "../../../../../components/ha-areas-display-editor"; +import "../../../../../components/ha-areas-floors-display-editor"; import "../../../../../components/ha-entities-display-editor"; +import "../../../../../components/ha-icon"; import "../../../../../components/ha-icon-button"; import "../../../../../components/ha-icon-button-prev"; -import "../../../../../components/ha-icon"; +import "../../../../../components/ha-svg-icon"; +import { + updateAreaRegistryEntry, + type AreaRegistryEntry, +} from "../../../../../data/area_registry"; +import { buttonLinkStyle } from "../../../../../resources/styles"; import type { HomeAssistant } from "../../../../../types"; +import { showAreaRegistryDetailDialog } from "../../../../config/areas/show-dialog-area-registry-detail"; +import type { LovelaceStrategyEditor } from "../../types"; +import type { AreasDashboardStrategyConfig } from "../areas-dashboard-strategy"; import type { AreaStrategyGroup } from "../helpers/areas-strategy-helper"; import { AREA_STRATEGY_GROUP_ICONS, AREA_STRATEGY_GROUPS, getAreaGroupedEntities, } from "../helpers/areas-strategy-helper"; -import type { LovelaceStrategyEditor } from "../../types"; -import type { AreasDashboardStrategyConfig } from "../areas-dashboard-strategy"; -import { showAreaRegistryDetailDialog } from "../../../../config/areas/show-dialog-area-registry-detail"; -import { - updateAreaRegistryEntry, - type AreaRegistryEntry, -} from "../../../../../data/area_registry"; -import { buttonLinkStyle } from "../../../../../resources/styles"; -import "../../../../../components/ha-areas-floors-display-editor"; @customElement("hui-areas-dashboard-strategy-editor") export class HuiAreasDashboardStrategyEditor @@ -58,14 +60,18 @@ export class HuiAreasDashboardStrategyEditor +

${this.hass!.localize( - `ui.panel.lovelace.strategy.areas.header_description`, + `ui.panel.lovelace.strategy.areas.sensors_description`, { edit_the_area: html`