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" 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) { 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` 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() { 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 { 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/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]; 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` `