v3.9.5
Stable v3.9.5. Consolidates the two betas (Activity card redesign + per-card editor switches) plus two admin-panel fixes landed after beta.2.
Added
Activity card redesign (#373, #375)
The Activity card body was redesigned to make events easier to scan, filter, and triage:
- Event-type filter chips — All / Chores / Rewards / Adjustments, in-card state, no config needed.
- Sticky date dividers with full date (
Today · Mon 13 May) pinned while scrolling. - Left accent stripes per event type — 🟢 approved · 🟠 pending · 🔴 penalty/rejected · 🟣 reward redemption.
- Right-aligned signed points pill — bold
+5/−25as the second thing you read after the name. - No redundant "approved" pill on the default chore row (stripe + icon + points already say it); pending/rejected still badge because they need attention.
- Relative-time labels (
just now/5m ago/2h ago/3d ago) alongside the absolute time.
The full-colour header banner driven by header_color is preserved — only the card body changed.
Activity card — per-card editor switches (#376)
Three boolean toggles in the Activity card GUI editor, each defaulting to on, so existing cards are unchanged:
- Show filter chips
- Coloured event stripes
- Relative time labels
Booleans equal to their default are stripped from the saved YAML, so configs stay minimal.
Fixed
Admin panel blank after a long-backgrounded tab (#379, #380)
Returning to a /taskmate-admin tab that had been backgrounded for a long time showed a blank panel content area (HA chrome intact, no console error, only F5 recovered).
HA's partial-panel-resolver strips the custom panel from the DOM while the websocket is down and re-attaches the cached element on reconnect. Because the panel is a plain HTMLElement (not LitElement), nothing then called _render() again — every trigger was guarded out (_rendered/_shellReady sticky, _state stale-but-truthy, no disconnected→connected transition recorded across a tab freeze), so its existing shell-rebuild self-heal was never reached. Now connectedCallback, _onVisibilityChange, set hass and a central check in _render() rebuild the shell when it has been stripped, and returning to the tab always refetches (parity with how Lovelace repaints on reconnect — this also clears staleness from changes made on another device while the tab was idle).
Raised-button text unreadable on hover (#378)
Hovering a raised button (+ Add child, Approve, the notification "on" toggle, etc.) used filter: brightness(1.1), which lightened the accent background toward white while the white label was already maxed out — collapsing contrast in every theme. Hover now darkens the background via a repurposed --tm-accent-hover token (color-mix with 14% black) and leaves the label untouched, improving white-on-accent WCAG contrast across all themes.
Compatibility
- No breaking config changes. All existing card keys preserved (
entity,title,child_id,max_items,header_color). - 18 new translation keys added across all 8 locale files (English placeholders for non-EN locales — localisable later).
- No backend/service or storage-schema changes.
How to update
HACS → TaskMate → ⋮ → Redownload → pick v3.9.5 → restart Home Assistant, then hard-refresh the browser (Ctrl/Cmd+Shift+R) so the new panel/card JS loads.
After updating, verify:
- Activity card keeps its full-colour header; filter chips, sticky date dividers, left stripes, signed points pill and relative-time labels render; the GUI editor shows the three toggles.
- Raised buttons stay readable on hover.
- Leave
/taskmate-adminopen, switch away for a long while, come back — the panel repopulates instead of going blank.
Full changelog: v3.9.4...v3.9.5