From 303538ac219845d8ab641ddd7036b91fdabddee1 Mon Sep 17 00:00:00 2001 From: DAccord Date: Thu, 8 Jan 2026 10:58:38 +0100 Subject: [PATCH 1/7] Handling empty history (#28852) Co-authored-by: DAccord <11232265+DAccord@users.noreply.github.com> --- src/panels/lovelace/common/graph/coordinates.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/panels/lovelace/common/graph/coordinates.ts b/src/panels/lovelace/common/graph/coordinates.ts index 7d49103f5c..c6c279083d 100644 --- a/src/panels/lovelace/common/graph/coordinates.ts +++ b/src/panels/lovelace/common/graph/coordinates.ts @@ -7,6 +7,11 @@ const calcPoints = ( height: number, limits?: { minX?: number; maxX?: number; minY?: number; maxY?: number } ) => { + // handling empty history (for example unavailable for long time) + if (history.length === 0) { + return { points: [], yAxisOrigin: height }; + } + let yAxisOrigin = height; let minY = limits?.minY ?? history[0][1]; let maxY = limits?.maxY ?? history[0][1]; From 201169c3d8dba7429b736218a07ca0a6b2a16b0a Mon Sep 17 00:00:00 2001 From: dcapslock Date: Thu, 8 Jan 2026 20:20:42 +1100 Subject: [PATCH 2/7] Fix choose selector active_choice when card editor config changes (#28858) --- src/components/ha-selector/ha-selector-choose.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/components/ha-selector/ha-selector-choose.ts b/src/components/ha-selector/ha-selector-choose.ts index a7ba8430b2..10bcb44c33 100644 --- a/src/components/ha-selector/ha-selector-choose.ts +++ b/src/components/ha-selector/ha-selector-choose.ts @@ -38,6 +38,13 @@ export class HaChooseSelector extends LitElement { ) { this._setActiveChoice(); } + if ( + changedProperties.has("value") && + changedProperties.get("value")?.active_choice && + changedProperties.get("value")?.active_choice !== this._activeChoice + ) { + this._setActiveChoice(); + } } protected render() { From 6fc8c17909aece3c58b0282c57bd835cc9165be9 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 8 Jan 2026 11:14:03 +0100 Subject: [PATCH 3/7] Fix color palette creation (#28867) --- src/common/color/palette.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/color/palette.ts b/src/common/color/palette.ts index 6e657922cb..973da37414 100644 --- a/src/common/color/palette.ts +++ b/src/common/color/palette.ts @@ -79,7 +79,7 @@ export const generateColorPalette = ( } return steps.map((step) => { - const name = `color-${label}-${step}`; + const name = `ha-color-${label}-${step}`; // Base color at 50% if (step === 50) { From d98ee7e0b54de7a86f86ed57fcd08e79a2117439 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Fri, 9 Jan 2026 19:57:32 +0100 Subject: [PATCH 4/7] Add support for choose selector to initial form data (#28876) * Add support for choose selector to initial form data * Update compute-initial-ha-form-data.ts --- .../ha-form/compute-initial-ha-form-data.ts | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/components/ha-form/compute-initial-ha-form-data.ts b/src/components/ha-form/compute-initial-ha-form-data.ts index d94a0bfb27..c181de6c11 100644 --- a/src/components/ha-form/compute-initial-ha-form-data.ts +++ b/src/components/ha-form/compute-initial-ha-form-data.ts @@ -1,5 +1,21 @@ import type { Selector } from "../../data/selector"; -import type { HaFormSchema } from "./types"; +import type { HaFormData, HaFormSchema } from "./types"; + +const setDefaultValue = ( + field: HaFormSchema, + value: HaFormData | undefined +) => { + if ("selector" in field && "choose" in field.selector) { + const firstChoice = Object.keys(field.selector.choose.choices)[0]; + if (firstChoice) { + return { + active_choice: firstChoice, + [firstChoice]: value, + }; + } + } + return value; +}; export const computeInitialHaFormData = ( schema: HaFormSchema[] | readonly HaFormSchema[] @@ -10,9 +26,12 @@ export const computeInitialHaFormData = ( field.description?.suggested_value !== undefined && field.description?.suggested_value !== null ) { - data[field.name] = field.description.suggested_value; + data[field.name] = setDefaultValue( + field, + field.description.suggested_value + ); } else if ("default" in field) { - data[field.name] = field.default; + data[field.name] = setDefaultValue(field, field.default); } else if (field.type === "expandable") { const expandableData = computeInitialHaFormData(field.schema); if (field.required || Object.keys(expandableData).length) { @@ -108,6 +127,21 @@ export const computeInitialHaFormData = ( data[field.name] = {}; } else if ("state" in selector) { data[field.name] = selector.state?.multiple ? [] : ""; + } else if ("choose" in selector) { + const firstChoice = Object.keys(selector.choose.choices)[0]; + if (!firstChoice) { + data[field.name] = {}; + } else { + data[field.name] = { + active_choice: firstChoice, + [firstChoice]: computeInitialHaFormData([ + { + name: firstChoice, + selector: selector.choose.choices[firstChoice].selector, + }, + ])[firstChoice], + }; + } } else { throw new Error( `Selector ${Object.keys(selector)[0]} not supported in initial form data` From e519a0203e7b3081108dce8ec237743f26b16d29 Mon Sep 17 00:00:00 2001 From: Yosi Levy <37745463+yosilevy@users.noreply.github.com> Date: Fri, 9 Jan 2026 19:31:25 +0200 Subject: [PATCH 5/7] Arrow fixes in media browser (#28890) --- src/components/media-player/dialog-media-player-browse.ts | 7 +++---- src/panels/media-browser/ha-panel-media-browser.ts | 2 -- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/components/media-player/dialog-media-player-browse.ts b/src/components/media-player/dialog-media-player-browse.ts index 17dbf7eb35..0b5c35c157 100644 --- a/src/components/media-player/dialog-media-player-browse.ts +++ b/src/components/media-player/dialog-media-player-browse.ts @@ -1,7 +1,6 @@ import type { ActionDetail } from "@material/mwc-list"; import { mdiAlphaABoxOutline, - mdiArrowLeft, mdiClose, mdiDotsVertical, mdiGrid, @@ -24,6 +23,7 @@ import type { HomeAssistant } from "../../types"; import "../ha-dialog"; import "../ha-dialog-header"; import "../ha-list-item"; +import "../ha-icon-button-arrow-prev"; import "./ha-media-manage-button"; import "./ha-media-player-browse"; import type { @@ -88,11 +88,10 @@ class DialogMediaPlayerBrowse extends LitElement { ${this._navigateIds.length > (this._params.minimumNavigateLevel ?? 1) ? html` - + > ` : nothing} diff --git a/src/panels/media-browser/ha-panel-media-browser.ts b/src/panels/media-browser/ha-panel-media-browser.ts index 188a5e7d72..8272c84205 100644 --- a/src/panels/media-browser/ha-panel-media-browser.ts +++ b/src/panels/media-browser/ha-panel-media-browser.ts @@ -1,7 +1,6 @@ import type { ActionDetail } from "@material/mwc-list"; import { mdiAlphaABoxOutline, - mdiArrowLeft, mdiDotsVertical, mdiGrid, mdiListBoxOutline, @@ -97,7 +96,6 @@ class PanelMediaBrowser extends LitElement { ? html` ` From ea73fd3f012d6ac5c06766b3b9e1e4a7076bd243 Mon Sep 17 00:00:00 2001 From: Yosi Levy <37745463+yosilevy@users.noreply.github.com> Date: Fri, 9 Jan 2026 19:30:45 +0200 Subject: [PATCH 6/7] Fix for volume scroll in media player (#28891) --- src/components/ha-slider.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/ha-slider.ts b/src/components/ha-slider.ts index 94ef1cb0f0..57d35a28e0 100644 --- a/src/components/ha-slider.ts +++ b/src/components/ha-slider.ts @@ -57,6 +57,7 @@ export class HaSlider extends Slider { #thumb { border: none; background-color: var(--ha-slider-thumb-color, var(--primary-color)); + overflow: hidden; } #thumb:after { From 905435db3e78caf32b01c92e964fe2b672a7ca9c Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Fri, 9 Jan 2026 23:26:47 +0100 Subject: [PATCH 7/7] Bumped version to 20260107.1 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 704978fb8e..3bd9896fa5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "home-assistant-frontend" -version = "20260107.0" +version = "20260107.1" license = "Apache-2.0" license-files = ["LICENSE*"] description = "The Home Assistant frontend"