diff --git a/custom_components/houseplan/const.py b/custom_components/houseplan/const.py index b510f5b..b7d91e1 100755 --- a/custom_components/houseplan/const.py +++ b/custom_components/houseplan/const.py @@ -11,7 +11,7 @@ PLANS_DIR = "houseplan/plans" # relative to the HA configuration directory FILES_URL = "/houseplan_files/files" FILES_DIR = "houseplan/files" CONF_ADMIN_ONLY = "admin_only" -VERSION = "1.15.4" +VERSION = "1.15.5" DEFAULT_CONFIG: dict = { "spaces": [], diff --git a/custom_components/houseplan/frontend/houseplan-card.js b/custom_components/houseplan/frontend/houseplan-card.js index dfcd2ec..fa79125 100755 --- a/custom_components/houseplan/frontend/houseplan-card.js +++ b/custom_components/houseplan/frontend/houseplan-card.js @@ -194,7 +194,7 @@ const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow stroke: transparent; stroke-width: 2; } - .room.overlay:hover { + .room.overlay:not(.styled):hover { fill: #9aa0a6; fill-opacity: 0.22; stroke: var(--hp-muted); @@ -204,7 +204,7 @@ const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow stroke: #4b8c5a; stroke-width: 2; } - .room.yard:hover { + .room.yard:not(.styled):hover { fill: rgba(75, 140, 90, 0.24); stroke: #6fbf86; } @@ -1315,4 +1315,4 @@ const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow - `}}Yt.properties={hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_markup:{state:!0},_tool:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},Yt.styles=Lt,customElements.get("houseplan-card")||customElements.define("houseplan-card",Yt),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.15.4 ","background:#3ea6ff;color:#04121f;font-weight:700",""); + `}}Yt.properties={hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_markup:{state:!0},_tool:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},Yt.styles=Lt,customElements.get("houseplan-card")||customElements.define("houseplan-card",Yt),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.15.5 ","background:#3ea6ff;color:#04121f;font-weight:700",""); diff --git a/custom_components/houseplan/manifest.json b/custom_components/houseplan/manifest.json index 23c6305..ac19461 100755 --- a/custom_components/houseplan/manifest.json +++ b/custom_components/houseplan/manifest.json @@ -16,5 +16,5 @@ "issue_tracker": "https://github.com/Matysh/houseplan-card/issues", "requirements": [], "single_config_entry": true, - "version": "1.15.4" + "version": "1.15.5" } diff --git a/dist/houseplan-card.js b/dist/houseplan-card.js index dfcd2ec..fa79125 100755 --- a/dist/houseplan-card.js +++ b/dist/houseplan-card.js @@ -194,7 +194,7 @@ const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow stroke: transparent; stroke-width: 2; } - .room.overlay:hover { + .room.overlay:not(.styled):hover { fill: #9aa0a6; fill-opacity: 0.22; stroke: var(--hp-muted); @@ -204,7 +204,7 @@ const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow stroke: #4b8c5a; stroke-width: 2; } - .room.yard:hover { + .room.yard:not(.styled):hover { fill: rgba(75, 140, 90, 0.24); stroke: #6fbf86; } @@ -1315,4 +1315,4 @@ const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow - `}}Yt.properties={hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_markup:{state:!0},_tool:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},Yt.styles=Lt,customElements.get("houseplan-card")||customElements.define("houseplan-card",Yt),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.15.4 ","background:#3ea6ff;color:#04121f;font-weight:700",""); + `}}Yt.properties={hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_markup:{state:!0},_tool:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},Yt.styles=Lt,customElements.get("houseplan-card")||customElements.define("houseplan-card",Yt),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.15.5 ","background:#3ea6ff;color:#04121f;font-weight:700",""); diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index d53f876..b184672 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## v1.15.5 — 2026-07-08 (fix: room hover was always grey even when filled) +- Room hover now **darkens the current fill** for filled rooms and only greys **unfilled** + ones (as intended since v1.15.1). The legacy `.room.overlay:hover` / `.room.yard:hover` + grey rules were still matching styled rooms and, being applied to `fill` directly, beat + the `--room-fill` variable — so a temperature/light/zigbee-filled room turned grey on + hover. Scoped those legacy rules with `:not(.styled)`; styled rooms are now governed only + by `.styled.filled:hover` (brightness 0.78) and `.styled:not(.filled):hover` (grey). + ## v1.15.4 — 2026-07-08 (fix: device icon vertical centering — proper root cause) - **Root cause of the off-centre icon, found in the live app** (the demo stub hid it): HA's real `` host is `display:block` with a large inherited `line-height` diff --git a/docs/STATUS.md b/docs/STATUS.md index 39b7269..fb8b8fd 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -13,7 +13,7 @@ | Item | State | |---|---| -| Version | **v1.15.4** everywhere (manifest, const.py, package.json, CARD_VERSION) | +| Version | **v1.15.5** everywhere (manifest, const.py, package.json, CARD_VERSION) | | GitHub | https://github.com/Matysh/houseplan-card — branch `main`, releases v1.9.3…v1.11.2 | | CI | `.github/workflows/validate.yml` (hacs + hassfest + frontend + backend) — **fully green** since v1.11.1; `release.yml` auto-attaches the card bundle (needs `permissions: contents: write`, fixed) | | HACS | Works as custom repository (id 1290210112 on the home instance). **Inclusion PR: https://github.com/hacs/default/pull/9004** (queue ≈2 months as of 2026-07). Lesson: #8995 was auto-closed by hacs-bot — the PR body MUST be their exact template with every checkbox ticked and all 3 links (release, HACS action run, hassfest run); a custom body gets closed without discussion | @@ -58,6 +58,8 @@ - **v1.15.4** — fix: real `ha-icon` (block + big line-height) put the glyph ~1.8 px low; `.dev ha-icon` is now a zero-line-height flex box. Reverted v1.15.3 border-box (shrank the badge). Verified live. Demo stub made faithful so the smoke guards it. +- **v1.15.5** — fix: room hover was always grey; legacy overlay/yard hover rules scoped + with `:not(.styled)` so filled rooms darken their fill, unfilled ones grey. ## Where things live diff --git a/package.json b/package.json index 4542f93..16eff46 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "houseplan-card", - "version": "1.15.4", + "version": "1.15.5", "description": "Interactive house plan Lovelace card for Home Assistant", "license": "MIT", "type": "module", diff --git a/src/houseplan-card.ts b/src/houseplan-card.ts index 03f0eb6..017a8d0 100755 --- a/src/houseplan-card.ts +++ b/src/houseplan-card.ts @@ -25,7 +25,7 @@ import './editor'; import { cardStyles } from './styles'; import { langOf, t, type I18nKey } from './i18n'; -const CARD_VERSION = '1.15.4'; +const CARD_VERSION = '1.15.5'; const LS_KEY = 'houseplan_card_layout_v1'; const LS_CFG = 'houseplan_card_cfg_v1'; // cache of the server config+layout for instant rendering const LS_ZOOM = 'houseplan_card_zoom_v1'; diff --git a/src/styles.ts b/src/styles.ts index cb488e0..eaa68e8 100644 --- a/src/styles.ts +++ b/src/styles.ts @@ -191,7 +191,7 @@ export const cardStyles = css` stroke: transparent; stroke-width: 2; } - .room.overlay:hover { + .room.overlay:not(.styled):hover { fill: #9aa0a6; fill-opacity: 0.22; stroke: var(--hp-muted); @@ -201,7 +201,7 @@ export const cardStyles = css` stroke: #4b8c5a; stroke-width: 2; } - .room.yard:hover { + .room.yard:not(.styled):hover { fill: rgba(75, 140, 90, 0.24); stroke: #6fbf86; }