+
${repeat(
badges,
(badge) => this._getBadgeKey(badge),
@@ -185,6 +186,8 @@ export class HuiViewBadges extends LitElement {
hui-badge-edit-mode {
display: block;
position: relative;
+ min-width: 36px;
+ min-height: 36px;
}
.add {
diff --git a/src/panels/lovelace/sections/hui-grid-section.ts b/src/panels/lovelace/sections/hui-grid-section.ts
index b470416f44ca..73894cc3bbf6 100644
--- a/src/panels/lovelace/sections/hui-grid-section.ts
+++ b/src/panels/lovelace/sections/hui-grid-section.ts
@@ -204,6 +204,10 @@ export class GridSection extends LitElement implements LovelaceSectionElement {
grid-column: span min(var(--column-size, 1), var(--grid-column-count));
}
+ .container.edit-mode .card {
+ min-height: calc((var(--row-height) - var(--row-gap)) / 2);
+ }
+
.card.fit-rows {
height: calc(
(var(--row-size, 1) * (var(--row-height) + var(--row-gap))) - var(
From c778b881ab95444052ead2fd85adc4fef57eb71b Mon Sep 17 00:00:00 2001
From: Simon Lamon <32477463+silamon@users.noreply.github.com>
Date: Mon, 7 Oct 2024 09:23:48 +0200
Subject: [PATCH 08/24] Fixup service/action when entity is picked in activate
scene (#22259)
Fixup service/action when entity is picked
---
.../action/types/ha-automation-action-activate_scene.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/panels/config/automation/action/types/ha-automation-action-activate_scene.ts b/src/panels/config/automation/action/types/ha-automation-action-activate_scene.ts
index f7f54fe8e057..bd5abb2145db 100644
--- a/src/panels/config/automation/action/types/ha-automation-action-activate_scene.ts
+++ b/src/panels/config/automation/action/types/ha-automation-action-activate_scene.ts
@@ -55,12 +55,12 @@ export class HaSceneAction extends LitElement implements ActionElement {
fireEvent(this, "value-changed", {
value: {
...this.action,
- service: "scene.turn_on",
+ action: "scene.turn_on",
target: {
entity_id: ev.detail.value,
},
metadata: {},
- },
+ } as SceneAction,
});
}
}
From 35aafd45dc3475d7fa0a0f75d655ef09a93bad4c Mon Sep 17 00:00:00 2001
From: Bram Kragten
Date: Fri, 4 Oct 2024 14:13:21 +0200
Subject: [PATCH 09/24] Fix and update step flow create (#22223)
* Fix and update step flow create
* cleanup
---
.../config-flow/dialog-data-entry-flow.ts | 81 +++----------------
.../config-flow/show-dialog-config-flow.ts | 2 +-
.../show-dialog-data-entry-flow.ts | 5 +-
.../config-flow/show-dialog-options-flow.ts | 2 +-
.../config-flow/step-flow-create-entry.ts | 77 +++++++++++-------
.../config/repairs/show-dialog-repair-flow.ts | 2 +-
6 files changed, 64 insertions(+), 105 deletions(-)
diff --git a/src/dialogs/config-flow/dialog-data-entry-flow.ts b/src/dialogs/config-flow/dialog-data-entry-flow.ts
index 8fd26b47cba2..0bed35966538 100644
--- a/src/dialogs/config-flow/dialog-data-entry-flow.ts
+++ b/src/dialogs/config-flow/dialog-data-entry-flow.ts
@@ -9,23 +9,15 @@ import {
html,
nothing,
} from "lit";
-import { customElement, state } from "lit/decorators";
+import { customElement, property, state } from "lit/decorators";
import { HASSDomEvent, fireEvent } from "../../common/dom/fire_event";
import "../../components/ha-circular-progress";
import "../../components/ha-dialog";
import "../../components/ha-icon-button";
-import {
- AreaRegistryEntry,
- subscribeAreaRegistry,
-} from "../../data/area_registry";
import {
DataEntryFlowStep,
subscribeDataEntryFlowProgressed,
} from "../../data/data_entry_flow";
-import {
- DeviceRegistryEntry,
- subscribeDeviceRegistry,
-} from "../../data/device_registry";
import { haStyleDialog } from "../../resources/styles";
import type { HomeAssistant } from "../../types";
import { documentationUrl } from "../../util/documentation-url";
@@ -62,7 +54,7 @@ declare global {
@customElement("dialog-data-entry-flow")
class DataEntryFlowDialog extends LitElement {
- public hass!: HomeAssistant;
+ @property({ attribute: false }) public hass!: HomeAssistant;
@state() private _params?: DataEntryFlowDialogParams;
@@ -76,16 +68,8 @@ class DataEntryFlowDialog extends LitElement {
// Null means we need to pick a config flow
| null;
- @state() private _devices?: DeviceRegistryEntry[];
-
- @state() private _areas?: AreaRegistryEntry[];
-
@state() private _handler?: string;
- private _unsubAreas?: UnsubscribeFunc;
-
- private _unsubDevices?: UnsubscribeFunc;
-
private _unsubDataEntryFlowProgressed?: Promise;
public async showDialog(params: DataEntryFlowDialogParams): Promise {
@@ -183,16 +167,7 @@ class DataEntryFlowDialog extends LitElement {
this._loading = undefined;
this._step = undefined;
this._params = undefined;
- this._devices = undefined;
this._handler = undefined;
- if (this._unsubAreas) {
- this._unsubAreas();
- this._unsubAreas = undefined;
- }
- if (this._unsubDevices) {
- this._unsubDevices();
- this._unsubDevices = undefined;
- }
if (this._unsubDataEntryFlowProgressed) {
this._unsubDataEntryFlowProgressed.then((unsub) => {
unsub();
@@ -309,25 +284,13 @@ class DataEntryFlowDialog extends LitElement {
.hass=${this.hass}
>
`
- : this._devices === undefined ||
- this._areas === undefined
- ? // When it's a create entry result, we will fetch device & area registry
- html`
-
- `
- : html`
-
- `}
+ : html`
+
+ `}
`}
@@ -351,32 +314,6 @@ class DataEntryFlowDialog extends LitElement {
// external and progress step will send update event from the backend, so we should subscribe to them
this._subscribeDataEntryFlowProgressed();
}
- if (this._step.type === "create_entry") {
- if (this._step.result && this._params!.flowConfig.loadDevicesAndAreas) {
- this._fetchDevices(this._step.result.entry_id);
- this._fetchAreas();
- } else {
- this._devices = [];
- this._areas = [];
- }
- }
- }
-
- private async _fetchDevices(configEntryId) {
- this._unsubDevices = subscribeDeviceRegistry(
- this.hass.connection,
- (devices) => {
- this._devices = devices.filter((device) =>
- device.config_entries.includes(configEntryId)
- );
- }
- );
- }
-
- private async _fetchAreas() {
- this._unsubAreas = subscribeAreaRegistry(this.hass.connection, (areas) => {
- this._areas = areas;
- });
}
private async _processStep(
diff --git a/src/dialogs/config-flow/show-dialog-config-flow.ts b/src/dialogs/config-flow/show-dialog-config-flow.ts
index 33609402b28e..6101e0246631 100644
--- a/src/dialogs/config-flow/show-dialog-config-flow.ts
+++ b/src/dialogs/config-flow/show-dialog-config-flow.ts
@@ -20,7 +20,7 @@ export const showConfigFlowDialog = (
): void =>
showFlowDialog(element, dialogParams, {
flowType: "config_flow",
- loadDevicesAndAreas: true,
+ showDevices: true,
createFlow: async (hass, handler) => {
const [step] = await Promise.all([
createConfigFlow(hass, handler, dialogParams.entryId),
diff --git a/src/dialogs/config-flow/show-dialog-data-entry-flow.ts b/src/dialogs/config-flow/show-dialog-data-entry-flow.ts
index f35d8d88d67b..62f71eb18453 100644
--- a/src/dialogs/config-flow/show-dialog-data-entry-flow.ts
+++ b/src/dialogs/config-flow/show-dialog-data-entry-flow.ts
@@ -17,7 +17,7 @@ import type { HomeAssistant } from "../../types";
export interface FlowConfig {
flowType: FlowType;
- loadDevicesAndAreas: boolean;
+ showDevices: boolean;
createFlow(hass: HomeAssistant, handler: string): Promise
;
@@ -134,8 +134,7 @@ export interface FlowConfig {
export type LoadingReason =
| "loading_handlers"
| "loading_flow"
- | "loading_step"
- | "loading_devices_areas";
+ | "loading_step";
export interface DataEntryFlowDialogParams {
startFlowHandler?: string;
diff --git a/src/dialogs/config-flow/show-dialog-options-flow.ts b/src/dialogs/config-flow/show-dialog-options-flow.ts
index 089f0eee3360..a58b304ad716 100644
--- a/src/dialogs/config-flow/show-dialog-options-flow.ts
+++ b/src/dialogs/config-flow/show-dialog-options-flow.ts
@@ -29,7 +29,7 @@ export const showOptionsFlowDialog = (
},
{
flowType: "options_flow",
- loadDevicesAndAreas: false,
+ showDevices: false,
createFlow: async (hass, handler) => {
const [step] = await Promise.all([
createOptionsFlow(hass, handler),
diff --git a/src/dialogs/config-flow/step-flow-create-entry.ts b/src/dialogs/config-flow/step-flow-create-entry.ts
index a897378c045a..095a8af13644 100644
--- a/src/dialogs/config-flow/step-flow-create-entry.ts
+++ b/src/dialogs/config-flow/step-flow-create-entry.ts
@@ -4,6 +4,7 @@ import {
CSSResultGroup,
html,
LitElement,
+ nothing,
PropertyValues,
TemplateResult,
} from "lit";
@@ -34,7 +35,16 @@ class StepFlowCreateEntry extends LitElement {
@property({ attribute: false }) public step!: DataEntryFlowStepCreateEntry;
- @property({ attribute: false }) public devices!: DeviceRegistryEntry[];
+ private _devices = memoizeOne(
+ (
+ showDevices: boolean,
+ devices: DeviceRegistryEntry[],
+ entry_id?: string
+ ) =>
+ showDevices && entry_id
+ ? devices.filter((device) => device.config_entries.includes(entry_id))
+ : []
+ );
private _deviceEntities = memoizeOne(
(
@@ -50,35 +60,48 @@ class StepFlowCreateEntry extends LitElement {
);
protected willUpdate(changedProps: PropertyValues) {
+ if (!changedProps.has("devices") && !changedProps.has("hass")) {
+ return;
+ }
+
+ const devices = this._devices(
+ this.flowConfig.showDevices,
+ Object.values(this.hass.devices),
+ this.step.result?.entry_id
+ );
+
+ if (
+ devices.length !== 1 ||
+ devices[0].primary_config_entry !== this.step.result?.entry_id
+ ) {
+ return;
+ }
+
+ const assistSatellites = this._deviceEntities(
+ devices[0].id,
+ Object.values(this.hass.entities),
+ "assist_satellite"
+ );
if (
- (changedProps.has("devices") || changedProps.has("hass")) &&
- this.devices.length === 1
+ assistSatellites.length &&
+ assistSatellites.some((satellite) =>
+ assistSatelliteSupportsSetupFlow(this.hass.states[satellite.entity_id])
+ )
) {
- // integration_type === "device"
- const assistSatellites = this._deviceEntities(
- this.devices[0].id,
- Object.values(this.hass.entities),
- "assist_satellite"
- );
- if (
- assistSatellites.length &&
- assistSatellites.some((satellite) =>
- assistSatelliteSupportsSetupFlow(
- this.hass.states[satellite.entity_id]
- )
- )
- ) {
- this._flowDone();
- showVoiceAssistantSetupDialog(this, {
- deviceId: this.devices[0].id,
- });
- }
+ this._flowDone();
+ showVoiceAssistantSetupDialog(this, {
+ deviceId: devices[0].id,
+ });
}
}
protected render(): TemplateResult {
const localize = this.hass.localize;
-
+ const devices = this._devices(
+ this.flowConfig.showDevices,
+ Object.values(this.hass.devices),
+ this.step.result?.entry_id
+ );
return html`
${localize("ui.panel.config.integrations.config_flow.success")}!
@@ -89,9 +112,9 @@ class StepFlowCreateEntry extends LitElement {
"ui.panel.config.integrations.config_flow.not_loaded"
)}`
- : ""}
- ${this.devices.length === 0
- ? ""
+ : nothing}
+ ${devices.length === 0
+ ? nothing
: html`
${localize(
@@ -99,7 +122,7 @@ class StepFlowCreateEntry extends LitElement {
)}:
- ${this.devices.map(
+ ${devices.map(
(device) => html`
diff --git a/src/panels/config/repairs/show-dialog-repair-flow.ts b/src/panels/config/repairs/show-dialog-repair-flow.ts
index 890c51eeca5c..149da94cf130 100644
--- a/src/panels/config/repairs/show-dialog-repair-flow.ts
+++ b/src/panels/config/repairs/show-dialog-repair-flow.ts
@@ -47,7 +47,7 @@ export const showRepairsFlowDialog = (
},
{
flowType: "repair_flow",
- loadDevicesAndAreas: false,
+ showDevices: false,
createFlow: async (hass, handler) => {
const [step] = await Promise.all([
createRepairsFlow(hass, handler, issue.issue_id),
From 2dd4090db3a4320018539c23f2e6ddb607c79596 Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Thu, 3 Oct 2024 11:31:36 +0200
Subject: [PATCH 10/24] Fix potential undefined select element in color picker
(#22212)
---
src/components/ha-color-picker.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/components/ha-color-picker.ts b/src/components/ha-color-picker.ts
index f9d4d032dd5d..a126982e444b 100644
--- a/src/components/ha-color-picker.ts
+++ b/src/components/ha-color-picker.ts
@@ -33,12 +33,12 @@ export class HaColorPicker extends LitElement {
@property({ type: Boolean }) public disabled = false;
- @query("ha-select") private _select!: HaSelect;
+ @query("ha-select") private _select?: HaSelect;
connectedCallback(): void {
super.connectedCallback();
// Refresh layout options when the field is connected to the DOM to ensure current value displayed
- this._select.layoutOptions();
+ this._select?.layoutOptions();
}
private _valueSelected(ev) {
From 5de888c91a957971d8669d02537aaa87ea5a93eb Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Thu, 3 Oct 2024 11:15:13 +0200
Subject: [PATCH 11/24] Update heading entity schema to allow empty entity id
(#22211)
---
.../heading-badge-editor/hui-entity-heading-badge-editor.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/panels/lovelace/editor/heading-badge-editor/hui-entity-heading-badge-editor.ts b/src/panels/lovelace/editor/heading-badge-editor/hui-entity-heading-badge-editor.ts
index 1d4c8645a4e3..a4671aa218b5 100644
--- a/src/panels/lovelace/editor/heading-badge-editor/hui-entity-heading-badge-editor.ts
+++ b/src/panels/lovelace/editor/heading-badge-editor/hui-entity-heading-badge-editor.ts
@@ -36,7 +36,7 @@ export const DEFAULT_CONFIG: Partial = {
const entityConfigStruct = object({
type: optional(string()),
- entity: string(),
+ entity: optional(string()),
name: optional(string()),
icon: optional(string()),
state_content: optional(union([string(), array(string())])),
From a21e17fb23b9fe5e8cb8773412ea89bb362e3307 Mon Sep 17 00:00:00 2001
From: Adam Kapos
Date: Thu, 3 Oct 2024 10:45:29 +0300
Subject: [PATCH 12/24] Disable backdrop filter on Heading Card (#22204)
---
src/panels/lovelace/cards/hui-heading-card.ts | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/panels/lovelace/cards/hui-heading-card.ts b/src/panels/lovelace/cards/hui-heading-card.ts
index 5058f2560ce7..d421577ef6da 100644
--- a/src/panels/lovelace/cards/hui-heading-card.ts
+++ b/src/panels/lovelace/cards/hui-heading-card.ts
@@ -129,6 +129,8 @@ export class HuiHeadingCard extends LitElement implements LovelaceCard {
return css`
ha-card {
background: none;
+ backdrop-filter: none;
+ -webkit-backdrop-filter: none;
border: none;
box-shadow: none;
padding: 0;
From 1f0cfb5fd6feb8b4044c2f54a0ff659ecc9578ee Mon Sep 17 00:00:00 2001
From: Bram Kragten
Date: Thu, 10 Oct 2024 17:08:10 +0200
Subject: [PATCH 13/24] Bumped version to 20241002.3
---
pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pyproject.toml b/pyproject.toml
index f536a806616a..feff691f817d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "home-assistant-frontend"
-version = "20241002.2"
+version = "20241002.3"
license = {text = "Apache-2.0"}
description = "The Home Assistant frontend"
readme = "README.md"
From f6e00e726213d79972494bd66ed5af7ba22d606c Mon Sep 17 00:00:00 2001
From: Bram Kragten
Date: Fri, 11 Oct 2024 13:13:17 +0200
Subject: [PATCH 14/24] =?UTF-8?q?Fix=20entity=20id=20setting=20on=20newly?=
=?UTF-8?q?=20created=20scripts,=20handle=20update=20of=20enti=E2=80=A6=20?=
=?UTF-8?q?(#22272)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fix entity id setting on newly created scripts, handle update of entity id
---
src/panels/config/script/ha-script-editor.ts | 41 +++++++-------------
src/translations/en.json | 3 --
2 files changed, 13 insertions(+), 31 deletions(-)
diff --git a/src/panels/config/script/ha-script-editor.ts b/src/panels/config/script/ha-script-editor.ts
index 551c3f159249..3f69de66a173 100644
--- a/src/panels/config/script/ha-script-editor.ts
+++ b/src/panels/config/script/ha-script-editor.ts
@@ -83,8 +83,6 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
@state() private _config?: ScriptConfig;
- @state() private _idError = false;
-
@state() private _dirty = false;
@state() private _errors?: string;
@@ -414,6 +412,18 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
this._loadConfig();
}
+ if (
+ (changedProps.has("scriptId") || changedProps.has("entityRegistry")) &&
+ this.scriptId &&
+ this.entityRegistry
+ ) {
+ // find entity for when script entity id changed
+ const entity = this.entityRegistry.find(
+ (ent) => ent.platform === "script" && ent.unique_id === this.scriptId
+ );
+ this._entityId = entity?.entity_id;
+ }
+
if (changedProps.has("scriptId") && !this.scriptId && this.hass) {
const initData = getScriptEditorInitData();
this._dirty = !!initData;
@@ -448,15 +458,6 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
}
}
- private _setEntityId(id?: string) {
- this._entityId = id;
- if (this.hass.states[`script.${this._entityId}`]) {
- this._idError = true;
- } else {
- this._idError = false;
- }
- }
-
private async _checkValidation() {
this._validationErrors = undefined;
if (!this._entityId || !this._config) {
@@ -766,28 +767,12 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) {
}
private async _saveScript(): Promise {
- if (this._idError) {
- showToast(this, {
- message: this.hass.localize(
- "ui.panel.config.script.editor.id_already_exists_save_error"
- ),
- dismissable: false,
- duration: -1,
- action: {
- action: () => {},
- text: this.hass.localize("ui.dialogs.generic.ok"),
- },
- });
- return;
- }
-
if (!this.scriptId) {
const saved = await this._promptScriptAlias();
if (!saved) {
return;
}
- const entityId = this._computeEntityIdFromAlias(this._config!.alias);
- this._setEntityId(entityId);
+ this._entityId = this._computeEntityIdFromAlias(this._config!.alias);
}
const id = this.scriptId || this._entityId || Date.now();
diff --git a/src/translations/en.json b/src/translations/en.json
index 029a4cffc85f..64f46f333072 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -3684,9 +3684,6 @@
"editor": {
"alias": "Name",
"icon": "Icon",
- "id": "Entity ID",
- "id_already_exists_save_error": "You can't save this script because the ID is not unique, pick another ID or leave it blank to automatically generate one.",
- "id_already_exists": "This ID already exists",
"introduction": "Use scripts to run a sequence of actions.",
"show_trace": "[%key:ui::panel::config::automation::editor::show_trace%]",
"show_info": "[%key:ui::panel::config::automation::editor::show_info%]",
From 5c9b53ffb73d143eec4046d25833200bba893ec8 Mon Sep 17 00:00:00 2001
From: Paul Bottein
Date: Thu, 10 Oct 2024 17:19:14 +0200
Subject: [PATCH 15/24] Use default font for heading card (#22322)
---
src/panels/lovelace/cards/hui-heading-card.ts | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/panels/lovelace/cards/hui-heading-card.ts b/src/panels/lovelace/cards/hui-heading-card.ts
index d421577ef6da..a0028ca5b9c9 100644
--- a/src/panels/lovelace/cards/hui-heading-card.ts
+++ b/src/panels/lovelace/cards/hui-heading-card.ts
@@ -187,7 +187,6 @@ export class HuiHeadingCard extends LitElement implements LovelaceCard {
}
.content p {
margin: 0;
- font-family: Roboto;
font-style: normal;
white-space: nowrap;
overflow: hidden;
From 2f46caa8060e808547febfb9ccaa3b39ead40dc3 Mon Sep 17 00:00:00 2001
From: Wendelin <12148533+wendevlin@users.noreply.github.com>
Date: Mon, 14 Oct 2024 15:47:12 +0200
Subject: [PATCH 16/24] Fix tooltip firefox bug in persistent-notification-item
(#22363)
---
src/dialogs/notifications/persistent-notification-item.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/dialogs/notifications/persistent-notification-item.ts b/src/dialogs/notifications/persistent-notification-item.ts
index 16a615296511..45dd3bcfd44c 100644
--- a/src/dialogs/notifications/persistent-notification-item.ts
+++ b/src/dialogs/notifications/persistent-notification-item.ts
@@ -51,6 +51,7 @@ export class HuiPersistentNotificationItem extends LitElement {
static get styles(): CSSResultGroup {
return css`
.time {
+ position: relative;
display: flex;
justify-content: flex-end;
margin-top: 6px;
From f096e1698ce76e2f4ce635da972aeb11a9a35c95 Mon Sep 17 00:00:00 2001
From: karwosts <32912880+karwosts@users.noreply.github.com>
Date: Tue, 15 Oct 2024 06:09:07 -0700
Subject: [PATCH 17/24] Update devtools/statistics for renamed issue type
(#22371)
---
.../statistics/developer-tools-statistics.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/panels/developer-tools/statistics/developer-tools-statistics.ts b/src/panels/developer-tools/statistics/developer-tools-statistics.ts
index 1b9debf9b0e4..1eff8e2446c5 100644
--- a/src/panels/developer-tools/statistics/developer-tools-statistics.ts
+++ b/src/panels/developer-tools/statistics/developer-tools-statistics.ts
@@ -49,7 +49,7 @@ import { showConfirmationDialog } from "../../lovelace/custom-card-helpers";
import { fixStatisticsIssue } from "./fix-statistics";
import { showStatisticsAdjustSumDialog } from "./show-dialog-statistics-adjust-sum";
-const FIX_ISSUES_ORDER = {
+const FIX_ISSUES_ORDER: Record = {
no_state: 0,
entity_no_longer_recorded: 1,
entity_not_recorded: 1,
@@ -57,10 +57,10 @@ const FIX_ISSUES_ORDER = {
units_changed: 3,
};
-const FIXABLE_ISSUES = [
+const FIXABLE_ISSUES: StatisticsValidationResult["type"][] = [
"no_state",
"entity_no_longer_recorded",
- "unsupported_state_class",
+ "state_class_removed",
"units_changed",
];
From 1693f5b5c9d50fe7f16fabed030360c2649786aa Mon Sep 17 00:00:00 2001
From: Bram Kragten
Date: Tue, 15 Oct 2024 12:07:12 +0200
Subject: [PATCH 18/24] Forward change event in password field (#22377)
---
src/components/ha-password-field.ts | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/components/ha-password-field.ts b/src/components/ha-password-field.ts
index d97c23c4de6f..6dc794992d6d 100644
--- a/src/components/ha-password-field.ts
+++ b/src/components/ha-password-field.ts
@@ -118,6 +118,7 @@ export class HaPasswordField extends LitElement {
.type=${this._unmaskedPassword ? "text" : "password"}
.suffix=${html``}
@input=${this._handleInputChange}
+ @change=${this._reDispatchEvent}
>
Date: Mon, 21 Oct 2024 15:55:17 +0200
Subject: [PATCH 19/24] Fix integration configure on failed setup (#22407)
* Fix integration configure button when setup failed
* Use ha-button instead of mwc-button in ha-config-integration-page
---
.../ha-config-integration-page.ts | 26 +++++++------------
1 file changed, 10 insertions(+), 16 deletions(-)
diff --git a/src/panels/config/integrations/ha-config-integration-page.ts b/src/panels/config/integrations/ha-config-integration-page.ts
index 9ec4756effda..7eff25cc8858 100644
--- a/src/panels/config/integrations/ha-config-integration-page.ts
+++ b/src/panels/config/integrations/ha-config-integration-page.ts
@@ -774,27 +774,29 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) {
: ""}
${item.disabled_by === "user"
- ? html`
+ ? html`
${this.hass.localize("ui.common.enable")}
- `
+ `
: configPanel &&
- (item.domain !== "matter" || isDevVersion(this.hass.config.version))
+ (item.domain !== "matter" ||
+ isDevVersion(this.hass.config.version)) &&
+ !stateText
? html`
+ >
${this.hass.localize(
"ui.panel.config.integrations.config_entry.configure"
)}
- `
- : item.supports_options && !stateText
+ : item.supports_options
? html`
-
+
${this.hass.localize(
"ui.panel.config.integrations.config_entry.configure"
)}
-
+
`
: ""}
@@ -803,14 +805,6 @@ class HaConfigIntegrationPage extends SubscribeMixin(LitElement) {
.label=${this.hass.localize("ui.common.menu")}
.path=${mdiDotsVertical}
>
- ${item.supports_options && stateText
- ? html`
-
- ${this.hass.localize(
- "ui.panel.config.integrations.config_entry.configure"
- )}
- `
- : ""}
${item.disabled_by && devices.length
? html`
Date: Mon, 21 Oct 2024 17:01:00 +0200
Subject: [PATCH 20/24] Place icon next to the text in control button (#22451)
---
src/components/ha-control-button.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/ha-control-button.ts b/src/components/ha-control-button.ts
index 862767c62df9..6b90c06ac12a 100644
--- a/src/components/ha-control-button.ts
+++ b/src/components/ha-control-button.ts
@@ -45,7 +45,7 @@ export class HaControlButton extends LitElement {
position: relative;
cursor: pointer;
display: flex;
- flex-direction: column;
+ flex-direction: row;
align-items: center;
justify-content: center;
text-align: center;
From f4d9d55ecdde977e8b06f10aadfa855a57ef2cd7 Mon Sep 17 00:00:00 2001
From: Wendelin <12148533+wendevlin@users.noreply.github.com>
Date: Tue, 22 Oct 2024 12:25:24 +0200
Subject: [PATCH 21/24] Fix old safari but for relative time (#22457)
---
src/components/ha-relative-time.ts | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/components/ha-relative-time.ts b/src/components/ha-relative-time.ts
index b7c950942d7a..b638cf12438e 100644
--- a/src/components/ha-relative-time.ts
+++ b/src/components/ha-relative-time.ts
@@ -1,4 +1,5 @@
import { PropertyValues, ReactiveElement } from "lit";
+import { parseISO } from "date-fns";
import { customElement, property } from "lit/decorators";
import { relativeTime } from "../common/datetime/relative_time";
import { capitalizeFirstLetter } from "../common/string/capitalize-first-letter";
@@ -58,7 +59,12 @@ class HaRelativeTime extends ReactiveElement {
if (!this.datetime) {
this.innerHTML = this.hass.localize("ui.components.relative_time.never");
} else {
- const relTime = relativeTime(new Date(this.datetime), this.hass.locale);
+ const date =
+ typeof this.datetime === "string"
+ ? parseISO(this.datetime)
+ : this.datetime;
+
+ const relTime = relativeTime(date, this.hass.locale);
this.innerHTML = this.capitalize
? capitalizeFirstLetter(relTime)
: relTime;
From 58f210f45baf41cd1e8ef05af85dac98dd334a39 Mon Sep 17 00:00:00 2001
From: Bram Kragten
Date: Wed, 23 Oct 2024 15:14:11 +0200
Subject: [PATCH 22/24] Update voice wizard (#22472)
---
public/static/icons/casita/loading.png | Bin 3967 -> 0 bytes
public/static/icons/casita/loving.png | Bin 4644 -> 0 bytes
public/static/icons/casita/normal.png | Bin 4699 -> 0 bytes
public/static/icons/casita/sad.png | Bin 2382 -> 0 bytes
public/static/icons/casita/sleeping.png | Bin 4468 -> 0 bytes
public/static/icons/casita/smiling.png | Bin 4500 -> 0 bytes
public/static/images/logo_nabu_casa_dark.png | Bin 0 -> 1435 bytes
public/static/images/voice-assistant/area.gif | Bin 0 -> 381459 bytes
.../voice-assistant/change-wake-word.gif | Bin 0 -> 392299 bytes
.../static/images/voice-assistant/error.gif | Bin 0 -> 386392 bytes
.../static/images/voice-assistant/heart.gif | Bin 0 -> 398047 bytes
public/static/images/voice-assistant/hi.gif | Bin 0 -> 387908 bytes
.../static/images/voice-assistant/ok-nabu.gif | Bin 0 -> 389978 bytes
.../static/images/voice-assistant/sleep.gif | Bin 0 -> 383026 bytes
.../static/images/voice-assistant/update.gif | Bin 0 -> 388265 bytes
src/dialogs/voice-assistant-setup/styles.ts | 3 +
.../voice-assistant-setup-dialog.ts | 28 ++-
.../voice-assistant-setup-step-addons.ts | 185 ------------------
.../voice-assistant-setup-step-area.ts | 2 +-
...e-assistant-setup-step-change-wake-word.ts | 8 +-
.../voice-assistant-setup-step-check.ts | 57 +++---
.../voice-assistant-setup-step-cloud.ts | 145 ++++++++++++--
.../voice-assistant-setup-step-pipeline.ts | 136 ++++++++-----
.../voice-assistant-setup-step-success.ts | 8 +-
.../voice-assistant-setup-step-update.ts | 38 ++--
.../voice-assistant-setup-step-wake-word.ts | 6 +-
26 files changed, 305 insertions(+), 311 deletions(-)
delete mode 100644 public/static/icons/casita/loading.png
delete mode 100644 public/static/icons/casita/loving.png
delete mode 100644 public/static/icons/casita/normal.png
delete mode 100644 public/static/icons/casita/sad.png
delete mode 100644 public/static/icons/casita/sleeping.png
delete mode 100644 public/static/icons/casita/smiling.png
create mode 100644 public/static/images/logo_nabu_casa_dark.png
create mode 100644 public/static/images/voice-assistant/area.gif
create mode 100644 public/static/images/voice-assistant/change-wake-word.gif
create mode 100644 public/static/images/voice-assistant/error.gif
create mode 100644 public/static/images/voice-assistant/heart.gif
create mode 100644 public/static/images/voice-assistant/hi.gif
create mode 100644 public/static/images/voice-assistant/ok-nabu.gif
create mode 100644 public/static/images/voice-assistant/sleep.gif
create mode 100644 public/static/images/voice-assistant/update.gif
delete mode 100644 src/dialogs/voice-assistant-setup/voice-assistant-setup-step-addons.ts
diff --git a/public/static/icons/casita/loading.png b/public/static/icons/casita/loading.png
deleted file mode 100644
index b2bcd76052d9f62cbddacf1e079673832a62907a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3967
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
I>UsD70MO&7fdBvi
diff --git a/public/static/icons/casita/normal.png b/public/static/icons/casita/normal.png
deleted file mode 100644
index 0b72c54b990551cb9a1dbdefd313b8e86dd5fc1f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4699
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
diff --git a/public/static/icons/casita/sad.png b/public/static/icons/casita/sad.png
deleted file mode 100644
index d97183685e1646e62dc9f3a05724f78b39a06ec8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 2382
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
diff --git a/public/static/icons/casita/smiling.png b/public/static/icons/casita/smiling.png
deleted file mode 100644
index 5fb4d9458757e539a559e0ffa5620ac291242541..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4500
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
XF%_P`pfM-@{t?l?VysiCjeqbTecBMi
diff --git a/public/static/images/logo_nabu_casa_dark.png b/public/static/images/logo_nabu_casa_dark.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8a3b3b4b91fc06f5479afac018e3ffe3a15cd42
GIT binary patch
literal 1435
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