β¨ New Features & π Bug fixes
enabled: false β switch an entity off as if it was never configured
For shared card templates (Streamline and friends) where some instances lack a sensor, each entity now takes a plain boolean enabled (default true). When false, the card behaves as if the row didn't exist at all: nothing is fetched or drawn, comparison ghosts aren't created, no card-wide logic (auto-scale guards, Y-bounds, automatic palette colors) considers it β and the entity id isn't even validated, so an unsubstituted template placeholder is harmless:
entities:
- entity: '[[current_entity]]'
name: Current
- entity: '[[target_entity]]'
name: Target
enabled: '[[has_target]]' # per-room template variableOne template, every room β the sensor-less room just passes has_target: false and can omit target_entity entirely. Deliberately not Jinja-templatable (it affects data fetching); static template engines substitute it before the card ever sees it. The visual editor shows disabled rows dimmed with an Enabled toggle, so they can be brought back anytime.
hide_name β a proper toggle to hide a state-row name (empty name now means "show Friendly Name")
The state row (the live value row above the graph) only ever showed a name when you set a custom name; leaving it empty showed nothing, and the only way to deliberately hide a name was the same empty name: "". Those two intents were tangled together. They're now separated:
- Leave the name empty β the entity's
friendly_nameis shown in the state row (it used to be blank). This matches what the compact legend already did. - A new per-entity
hide_nametoggle (defaultfalse) hides the name in the state row, leaving just the value β the explicit way to get a name-less value row.
entities:
- entity: sensor.kids_room # no name β state row shows "KIDS ROOM" (its friendly_name)
- entity: sensor.humidity
hide_name: true # state row shows just the valuehide_name affects the state row only β the compact legend and tooltip keep showing the name. Fully backward compatible: the legacy name: "" (empty custom name) still hides the name everywhere β state row, legend, and tooltip β and is left completely untouched, so no existing config changes. In the editor, an empty Custom Name field means "show Friendly Name"; clearing the field opts into that, while an untouched name: "" keeps hiding. Editor: the toggle lives on the entity's State Row tab.
include_area_on_duplicate_names β tell apart entities that share a friendly name
Integrations like Advanced History can hand several entities the same friendly name (e.g. three sensors all called Heating Temperature). On the legend, tooltip and stats they were indistinguishable. Turn on include_area_on_duplicate_names and the card appends each entity's area β but only where it actually helps:
include_area_on_duplicate_names: true # default false
entities:
- entity: sensor.lounge_heating # friendly_name: "Heating Temperature"
- entity: sensor.office_heating # friendly_name: "Heating Temperature"
- entity: sensor.kitchen_temp # friendly_name: "Kitchen Temp" (unique)
# Legend shows:
# Heating Temperature Β· Lounge
# Heating Temperature Β· Office
# Kitchen Temp β unique name, left untouchedThe suffix is added only to names that collide with another entity's, so unique names never change. The area comes from the entity's own area, or its device's area if the entity has none; if neither resolves, the name is left as-is. A name that already contains its area (e.g. Lounge Heating Temperature in the Lounge) isn't doubled up. An explicit name: you set always wins and is never touched. Comparison ghosts inherit their parent's suffix (Heating Temperature Β· Lounge (previous period)). Off by default; resolution is a couple of registry key-lookups per entity, so the cost is negligible.
Date picker: calendar and rolling modes are visually separated
The picker's mode buttons mixed two families in one row β calendar periods (D / W / M / Y, which snap to day/week/month/year boundaries) and rolling windows (24H / 3D / 7D β¦, which always run back from now). Side by side, 3D was easy to read as a calendar shortcut like D. They're now grouped: the editor lists them under separate Calendar periods and Rolling windows (ending now) headings, and the picker bar draws a thin divider between the two families. No behavior change β purely a clarity fix.
π Fixes & reliability
Energy date sync: previous_period comparison uses the calendar period, not the raw window length
With energy_date_sync: true and a previous_period comparison, the comparison series was shifted back by the window's duration instead of one calendar period β so a 31-day July compared against 31 days back (ending 30 June) rather than the previous calendar month, landing every June point one day early. The built-in date picker was already correct because it knows the selected mode; the energy path had no mode to consult. The card now infers the calendar period (day / week / month / year) from the synced range's boundaries and shifts by whole calendar units, wall-clock anchored in your timezone (so it's also correct across DST) β matching the built-in date picker for those selections.
Energy date sync: completed historical periods no longer show today's live value
With energy_date_sync: true, selecting a completed period on the Energy dashboard (e.g. last month) plotted the entity's current state at the end of that historical range β the chart ended at today's reading instead of the period's final value. The built-in date picker already handled this correctly; the energy-sync path just never told the live-tracking logic that a past period isn't live. Now live tracking (and the current-state injection) is off whenever the synced range has already ended, so a historical period ends exactly on its last recorded value. The current in-progress period still updates live as before. As a safety net, a live sample an hour or more past the window end is never folded back onto the trailing edge.
Editor: hover highlights follow the rounded corners (#313)
Hovering a section header or an entity card painted a square highlight whose top corners poked over the container's rounded border. The hover fills now carry their own radius (outer radius minus the border width), so they stay neatly inside the border in every state β open, closed, sections and entity rows alike.
Editor: focus no longer jumps to the first entity panel (#312)
With two entity panels open, editing a field in the second panel snapped the cursor back to the same field of the first panel after each keystroke's save. The editor restores focus across its re-renders by an element path built from CSS classes β and two open panels produce identical paths, so the restore always hit the first match. Paths now include each panel's (and each list row's) index, so focus stays exactly where you're typing.
graph_start + Extended Window: the view aligns to the period's boundaries
With graph_start: day and the extended-window multiplier, the chart opened as a rolling 24h ending at "now" β so the left edge sat at whatever time it happened to be (noon, tea timeβ¦). The viewport now aligns to the selected calendar period: a Day view opens midnight-to-midnight (a Week view Monday-to-Monday), the not-yet-elapsed remainder renders as empty space with the now-line marking the current moment, and scrolling still reaches the history behind it and any forecast ahead of it. Relative windows (hours_to_show) keep their rolling behavior, and graph_start without the multiplier is unchanged.
Translucent card backgrounds: the chart no longer shows through the sticky Y-axis
With a scrolling chart (extended_window_multiplier / max_visible_interval) the Y-axis stays pinned while the plot scrolls beneath it β masked by a strip painted in the card's background color. A semi-transparent card_background_color (e.g. rgba(255,255,255,0.30)) made that strip translucent too, so the chart showed straight through the axis. The scrolling content is now clipped to the viewport's plot area (the clip moves with the scroll), so nothing renders under the axis regardless of background opacity β the series, overlays (annotations, average/MA lines, the now-line, data labels), and the X-axis time labels and grid lines, which sit below the plot band and needed their own full-height clip. PNG exports still capture the whole chart β the export restores the full geometry.