diff --git a/src/common/dom/apply_themes_on_element.ts b/src/common/dom/apply_themes_on_element.ts index c8f1365102..90143f9bcf 100644 --- a/src/common/dom/apply_themes_on_element.ts +++ b/src/common/dom/apply_themes_on_element.ts @@ -39,7 +39,7 @@ export const applyThemesOnElement = ( if (themeSettings) { if (themeSettings.dark) { cacheKey = `${cacheKey}__dark`; - themeRules = darkStyles; + themeRules = { ...darkStyles }; } if (selectedTheme === "default") { diff --git a/src/state/themes-mixin.ts b/src/state/themes-mixin.ts index b2aae4e43b..9ef9778014 100644 --- a/src/state/themes-mixin.ts +++ b/src/state/themes-mixin.ts @@ -67,15 +67,16 @@ export default >(superClass: T) => if (!this.hass) { return; } - const themeName = - this.hass.selectedThemeSettings?.theme || - (darkPreferred && this.hass.themes.default_dark_theme - ? this.hass.themes.default_dark_theme! - : this.hass.themes.default_theme); let themeSettings: Partial = this .hass!.selectedThemeSettings; + const themeName = + themeSettings?.theme || + (darkPreferred && this.hass.themes.default_dark_theme + ? this.hass.themes.default_dark_theme! + : this.hass.themes.default_theme); + let darkMode = themeSettings?.dark === undefined ? darkPreferred : themeSettings?.dark; @@ -84,18 +85,8 @@ export default >(superClass: T) => ? this.hass.themes.themes[themeSettings.theme] : undefined; - if (selectedTheme) { - // Override dark mode selection depending on what the theme actually provides. - // Leave the selection as-is if the theme supports the requested mode. - if (darkMode && !selectedTheme.modes?.dark) { - darkMode = false; - } else if ( - !darkMode && - !selectedTheme.modes?.light && - selectedTheme.modes?.dark - ) { - darkMode = true; - } + if (selectedTheme && darkMode && !selectedTheme.modes) { + darkMode = false; } themeSettings = { ...this.hass.selectedThemeSettings, dark: darkMode };