Calendar Card Pro v3.4.0
Weather across the full day range, correct all-day countdowns, and a card that no longer empties itself when a number field is cleared. This release closes a set of gaps where the card silently rendered less than it should, and adds editor guidance so the configurations that quietly do nothing become visible while you are creating them.
🎉 New Features
⏳ Countdown Control
show_countdown_alldayOption - Hide the countdown on all-day events while keeping it on timed ones. Defaults totrue, so existing cards are unchanged (#323)
🧭 Compact Mode Guidance
Two configurations look perfectly reasonable but produce a card that is identical before and after an expand action. Both now surface a warning in the visual editor:
- Missing Compact Limits - Shown when an
expandaction is configured but no compact limit is set anywhere, including per-entitycompact_events_to_showoverrides - Inert
compact_days_to_show- Shown whencompact_days_to_showis not lower thandays_to_show, in which case it is silently clamped and has no effect - Helper Text for
compact_events_to_show- A note explaining that the limit only takes effect once the selected day range actually contains more events than the limit
The warnings are advisory only — nothing is blocked and no runtime behavior changes.
🐛 Bug Fixes
Countdown
- All-Day Countdowns Off By One - All-day countdowns were measured from the current instant rather than the calendar day, so they showed the wrong number for roughly half of every day, flipping at midday. An all-day event on the following day also counted down in hours, which is meaningless for an event with no time of day. All-day countdowns now measure whole calendar days from the start of today; timed events are unchanged (#344)
Weather
- Missing Weather on Timed Events - Home Assistant's hourly forecast only spans about two days, and with
weather.position: eventany timed event beyond that horizon silently showed nothing, even though the daily forecast for that same date was already loaded. Timed events now fall back to their day's forecast, so weather appears across the full range instead of only the first day or two. The newweather.event.daily_forecast_fallbackoption (defaulttrue) turns the fallback off for anyone who would rather see nothing than a daily high next to a 09:00 event (#336)
Configuration
- Cleared Number Fields Could Blank the Card - Clearing a numeric field in the visual editor saved an empty string instead of removing the option. Empty strings slipped past the card's existing guards and then coerced to zero, which dropped every event from a single calendar or, in the case of
days_to_showand the globalcompact_events_to_show, rendered the entire card empty. Empty and invalid numbers are now ignored throughout, and configurations already saved in this state repair themselves on load (#327)
Compact Mode
- Expand Blocked by Valid Limits -
tap_action: expanddid nothing when the only compact limit in play wascompact_events_to_show: 0or a per-entity override. The first case left a card that rendered empty with no way to get back, because zero was treated as "no limit set". Both configurations now expand and collapse correctly (#335)
Translations
- Raw Key Names in the Visual Editor - The description toggle and its helper text rendered as the literal strings
show_descriptionandentity_show_description_notein Estonian, Lithuanian, Norwegian Bokmål, Polish, Slovak and Swedish. All eleven editor languages are now complete against the English reference
Console
- Source Map 404 on Every Page Load - Every build appended a
sourceMappingURLcomment referencing a.mapfile that is never published through HACS, so anyone with browser devtools open saw a 404 on each load. Sourcemaps are no longer emitted, and CI now fails if the reference ever returns (#358)
⚡ Performance
- Memoized Color Conversion - Resolving a color to RGBA created a temporary element, appended it to the document and read back its computed style — a forced synchronous layout that ran once per rendered event, on every render. Results are now cached, removing hundreds of forced layouts per refresh on large calendars. Theme-dependent
var(...)colors are unaffected and still repaint correctly on a theme change
🔧 Technical Changes
- Documented two previously unstated aspects of
filter_duplicatesin the README: the first-listed calendar wins a duplicate and takes its styling with it, and matching ignores the source calendar entirely, so identically named concurrent events merge even within a single calendar - Added a CI guard that fails the build if a
sourceMappingURLcomment or adist/*.mapfile ever reappears
Related Issues
- #304 - 2 different calendars have an event at the same time and only 1 event shows in the calendar by @nytram-md
- #323 - Add option to disable countdown to all-day events by @doctorkb
- #327 - Standard view doesn't show all day events in initial view by @FS1961
- #335 - 'action: expand' does not work by @fredokl
- #336 - Weather icons missing on days containing timed events by @harryvandervossen
- #344 - Countdown display appears one day short for all-day calendar events by @Scooshie
- #358 - Source map error by @tomlut
Full Changelog: v3.3.0...v3.4.0