Commit Graph
2613 Commits
Author SHA1 Message Date
Dermot Duffy a736f3dfaf fix: Ensure a bare ptz_digital action resets the zoom (#2635)
- Closes: #2632
2026-07-29 23:18:06 -07:00
Dermot Duffy e9e6d9f833 feat: Use the card's own pan & zoom with the webrtc-card live provider (#2630)
- Closes: #2628
2026-07-29 15:46:03 -07:00
Dermot Duffy 70abb39762 fix: Stop the webrtc-card provider recreating its player on every render (#2629)
- Closes: #2625
2026-07-29 13:11:12 -07:00
Dermot Duffy 15b08db3e8 fix: Clear stale media unavailable errors when a camera recovers (#2627)
- Closes: #2576
2026-07-28 21:21:50 -07:00
Dermot Duffy 231e3087b7 fix: Error when a zoomable element is removed during zoom initialization (#2624)
- Closes: #2410
2026-07-26 20:54:07 -07:00
Dermot Duffy ad89aa9538 test: Split test utilities to improve test times (#2622) 2026-07-26 16:29:53 -07:00
Dermot Duffy 8d44fcecf1 fix: Ignore startup triggers from cameras without the trigger capability (#2621)
- Closes: #2103
2026-07-26 15:37:59 -07:00
Dermot Duffy 0f8593f9fa feat: Answer or reject inbound calls from menu (#2620)
- For: #2587
2026-07-26 14:24:14 -07:00
Dermot Duffy ababe133a8 chore: Switch coverage from istanbul to the v8 provider for speed (#2619) 2026-07-26 14:21:27 -07:00
Dermot Duffy 3b8835ee7c feat: Allow disabling the call controls (#2615)
- For: #2587
2026-07-26 11:35:18 -07:00
Dermot Duffy 0c3d46ad3d chore: Upgrade to Vitest 4 and regroup tests for performance (#2618) 2026-07-26 11:28:58 -07:00
Dermot Duffy a0fd464d23 test: Remove unnecessary jsdom environment declarations (#2616) 2026-07-25 22:47:59 -07:00
Dermot Duffy eccf7f3b97 ci: Upload the bundle treemap visualization browser-viewable (#2617) 2026-07-25 22:47:06 -07:00
Dermot Duffy 37b07f079d chore: Run checks, tests and build as parallel jobs (#2614) 2026-07-25 22:01:53 -07:00
Dermot Duffy c4c6058a70 test: Split the test suite into isolation groups for faster runs (#2613) 2026-07-25 21:47:13 -07:00
Dermot Duffy 8f953547b1 fix: Connect the microphone when an inbound call is *answered* (#2609) (#2612)
- Closes: #2609
2026-07-25 20:56:07 -07:00
Dermot Duffy 2a84f199de fix: Size the expanded dialog and grid columns to their content (#2611)
- Closes #2607
2026-07-25 13:46:31 -07:00
Dermot Duffy 5f2c7f5e4e fix: Prevent the media grid from collapsing when its cells are unchanged (#2608)
- For: #2306
2026-07-24 18:06:35 -07:00
Dermot Duffy 0a763b73a6 docs: Add config example for problematic doorbells (#2604) 2026-07-24 10:55:45 -07:00
Dermot Duffy f419798e8e fix: Exponentially back off initialization-error retries (#2579) (#2605)
- Closes #2579
2026-07-24 10:54:31 -07:00
Dermot Duffy 54f75beb9d fix: Improve media_query retry behavior (#2603) 2026-07-23 22:19:17 -07:00
Dermot Duffy 6817d27c91 fix: Guard the ha provider MJPEG stream URL against a missing access_token (#2602)
- Closes: #2601
2026-07-23 09:42:05 -07:00
Dermot Duffy cd53ebd3c8 fix: Correctly bind MJPEG stream URL in the ha live provider (#2305) (#2600)
- Closes: #2305
2026-07-22 22:00:47 -07:00
Dermot Duffy 448fa2d9f1 feat: Surface the provider's error cause in the media_unavailable notification (#2599)
- Closes: #2592
2026-07-22 20:45:49 -07:00
Dermot Duffy 5a549c0326 fix: Prevent microphone auto-disconnect during calls and restore the removed microphone connected condition (#2597)
- Closes: #2590
2026-07-22 16:12:31 -07:00
Dermot Duffy 8c36637092 fix: Only report a live error from the visible ha-camera-stream player (#2596)
- Closes: #2583
2026-07-22 13:45:46 -07:00
Dermot Duffy 7d66c5f005 chore: Replace ts-prune with knip (#2595)
- Closes: #2593
2026-07-22 13:26:34 -07:00
Dermot Duffy 2ca4aa95e5 chore: Replace deprecated 'node' module resolution with 'bundler' and tighten compiler options (#2594) 2026-07-22 12:12:00 -07:00
Dermot Duffy 87ecbc7e45 feat: Trigger automations on call answered, rejected and hung up (#2591) 2026-07-22 11:11:57 -07:00
dependabot[bot] 2400e20134 chore(deps): bump release-drafter/release-drafter from 7.5.1 to 7.6.0 (#2585)
Bumps
[release-drafter/release-drafter](https://github.com/release-drafter/release-drafter)
from 7.5.1 to 7.6.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/release-drafter/release-drafter/releases">release-drafter/release-drafter's
releases</a>.</em></p>
<blockquote>
<h2>v7.6.0</h2>
<h1>What's Changed</h1>
<h2>New</h2>
<ul>
<li>feat: resolve release commitish refs to commit SHAs (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1649">#1649</a>)
<a href="https://github.com/jetersen"><code>@​jetersen</code></a></li>
<li>feat: add new contributors list (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1645">#1645</a>)
<a href="https://github.com/jetersen"><code>@​jetersen</code></a></li>
<li>feat: support pull request co-authors (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1646">#1646</a>)
<a href="https://github.com/jetersen"><code>@​jetersen</code></a></li>
<li>feat: support per-key merge strategies in <code>_extends</code> (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1642">#1642</a>)
<a
href="https://github.com/ReneWerner87"><code>@​ReneWerner87</code></a>,
<a href="https://github.com/cchanche"><code>@​cchanche</code></a>, <a
href="https://github.com/jetersen"><code>@​jetersen</code></a></li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>fix: .github in legacy <code>_extends</code> refs (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1650">#1650</a>)
<a href="https://github.com/jetersen"><code>@​jetersen</code></a></li>
<li>fix: normalize release target branch refs (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1648">#1648</a>)
<a href="https://github.com/jetersen"><code>@​jetersen</code></a></li>
<li>fix: duplicate and skipped release contributors (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1644">#1644</a>)
<a href="https://github.com/jetersen"><code>@​jetersen</code></a></li>
</ul>
<h2>Maintenance</h2>
<ul>
<li>chore(deps): update dependency typescript to 7.0.2 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1667">#1667</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a></li>
<li>ci(deps): update github/codeql-action digest to 7188fc3 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1654">#1654</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a></li>
<li>ci(deps): update actions/stale digest to 1e223db (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1653">#1653</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a></li>
<li>chore(deps): update dependency <code>@​types/node</code> to 24.13.3
(<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1661">#1661</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a></li>
<li>chore(deps): update vitest to 4.1.10 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1656">#1656</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a></li>
<li>chore(deps): update graphql-codegen (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1663">#1663</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a></li>
<li>chore(deps): update dependency vite to 8.1.4 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1662">#1662</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a>,
<a
href="https://github.com/apps/github-actions"><code>@​github-actions[bot]</code></a></li>
<li>chore(deps): update dependency nock to 14.0.16 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1655">#1655</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a></li>
<li>chore(deps): update dependency <code>@​biomejs/biome</code> to 2.5.3
(<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1660">#1660</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a></li>
<li>ci(deps): update actions/checkout action to v7.0.0 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1669">#1669</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a></li>
<li>ci(deps): update actions/setup-node action to v7.0.0 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1670">#1670</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a></li>
<li>chore: update generated GraphQL types (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1641">#1641</a>)
<a
href="https://github.com/apps/github-actions"><code>@​github-actions[bot]</code></a>,
<a href="https://github.com/jetersen"><code>@​jetersen</code></a></li>
</ul>
<h2>Dependency Updates</h2>
<ul>
<li>fix(deps): update dependency graphql to 16.14.2 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1657">#1657</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a>,
<a
href="https://github.com/apps/github-actions"><code>@​github-actions[bot]</code></a></li>
<li>fix(deps): update dependency yaml to 2.9.0 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1666">#1666</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a>,
<a
href="https://github.com/apps/github-actions"><code>@​github-actions[bot]</code></a></li>
<li>fix(deps): update dependency semver to 7.8.5 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1659">#1659</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a>,
<a
href="https://github.com/apps/github-actions"><code>@​github-actions[bot]</code></a></li>
<li>fix(deps): update dependency ignore to 7.0.6 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1658">#1658</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a>,
<a
href="https://github.com/apps/github-actions"><code>@​github-actions[bot]</code></a></li>
<li>chore(deps): update dependency <code>@​biomejs/biome</code> to 2.5.3
(<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1660">#1660</a>)
<a
href="https://github.com/apps/renovate"><code>@​renovate[bot]</code></a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/ReneWerner87"><code>@​ReneWerner87</code></a>
made their first contribution in <a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1642">#1642</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/release-drafter/release-drafter/compare/v7.5.1...v7.6.0">https://github.com/release-drafter/release-drafter/compare/v7.5.1...v7.6.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/eada3c96a64734dd381cfbda23511034e328ddb0"><code>eada3c9</code></a>
chore: release v7.6.0</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/4621843980a0844866eefbe4d5f92e680fce5d81"><code>4621843</code></a>
migrate biome config</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/e9aeda788e59684f9fe90b4ca1a32f60f0b3bf29"><code>e9aeda7</code></a>
chore(deps): update dependency typescript to 7.0.2 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1667">#1667</a>)</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/c943e7c8b72b3d6c5fab33cfd024317893d5c320"><code>c943e7c</code></a>
fix(deps): update dependency graphql to 16.14.2 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1657">#1657</a>)</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/b9af92564053e016d0bf080da7c24704c159ee4e"><code>b9af925</code></a>
fix(deps): update dependency yaml to 2.9.0 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1666">#1666</a>)</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/f4aa1589c4bd889abd152b42a03071c0695716b8"><code>f4aa158</code></a>
ci(deps): update github/codeql-action digest to 7188fc3 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1654">#1654</a>)</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/93973850c385e1ad1901d254003cf654b2fb7f4a"><code>9397385</code></a>
ci(deps): update actions/stale digest to 1e223db (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1653">#1653</a>)</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/5dd9f212bc0430df55c6f9b360720a2d08ddc157"><code>5dd9f21</code></a>
chore(deps): update dependency <code>@​types/node</code> to 24.13.3 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1661">#1661</a>)</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/903a9a10909a48b47c20e26c545bac26676d69cd"><code>903a9a1</code></a>
chore(deps): update vitest to 4.1.10 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1656">#1656</a>)</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/2796d1b6a0ad34872845939207b3af9aac1b346f"><code>2796d1b</code></a>
fix(deps): update dependency semver to 7.8.5 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1659">#1659</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/release-drafter/release-drafter/compare/v7.5.1...v7.6.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=release-drafter/release-drafter&package-manager=github_actions&previous-version=7.5.1&new-version=7.6.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-21 22:31:53 -07:00
Dermot Duffy f28b16a4b5 feat: Compress related editor fields into grid rows (#2589) 2026-07-21 22:31:13 -07:00
Dermot Duffy e29c0826cf feat: Add a simple mode to the visual card editor (#2588) 2026-07-21 19:13:29 -07:00
Dermot Duffy b6e1de5999 feat: Modernize the visual card editor. (#2586) 2026-07-20 20:44:16 -07:00
Dermot Duffy e204ec183f fix: Correct status bar alignment in Safari (#2581)
- Closes  #2578
2026-07-15 14:28:47 -07:00
Dermot Duffy c02c692f68 feat: Add experimental rewrite of go2rtc live provider (MSE/WebRTC/MP4/MJPEG) (#2580)
- Closes #2556
- Closes #2450

**Key intended features:**
 - go2rtc compatible
- 100% test coverage to significantly improve ability to test, maintain
and work around browser weirdnesses (e.g. Safari).
 - Written from the ground up in the style of the rest of the project.

**To use:**
 - Change `live_provider` from `go2rtc` to `go2rtc-experimental`.
2026-07-14 14:22:41 -07:00
Dermot Duffy 5662e48c22 test: Add regression test for media info stability (#2571)
- Relates to: #2563
2026-07-08 11:24:18 -07:00
Dermot Duffy fb1bbc739e feat: Automatically recover from frozen live streams (#2569)
- Closes: #2099
2026-07-07 21:37:24 -07:00
Dermot Duffy 9f956fe89f fix: Match state trigger/condition semantics to HA (#2565)
* Closes #2530
2026-07-04 10:23:51 -07:00
Dermot Duffy 3494706225 fix: Use auto_unmute as input to stream selection for HA (#2562)
- Closes #2479
2026-07-03 08:19:11 -07:00
Dermot Duffy 6a6d65d5c5 fix: Highlight folder icon for correct folder / media (#2560)
- Closes: #2128 
 - Closes: #2129
2026-07-02 10:26:30 -07:00
dermotduffy 3bb5ccd14f chore: Add missing close keyword: close #2529 (#2427) 2026-06-30 21:40:44 -07:00
dermotduffy 8ebb88cde9 chore: Add missing close keyword: close #2438 (#2468) 2026-06-30 21:40:44 -07:00
dermotduffy 3a78a8d3e9 chore: Add missing close keyword: close #2525 (#2553) 2026-06-30 21:40:43 -07:00
Dermot Duffy 937ba647a7 fix: Fix audio for cameras with mixed WebRTC/HLS capabilities (#2557)
- Closes #2479
2026-06-30 17:45:13 -07:00
Dermot Duffy 5c97e55a56 fix: Honor configured home preset / merge presets. (#2553)
- Closes:
https://github.com/dermotduffy/advanced-camera-card/issues/2525
2026-06-30 17:45:13 -07:00
Dermot Duffy d833edb65b perf: lazy-load js-yaml (~107KB) as needed (#2551)
- Closes: #2532
2026-06-30 17:45:13 -07:00
Dermot Duffy 3fe5e4004a fix: prevent infinite re-render loop from issue retry callbacks (#2550) 2026-06-30 17:45:13 -07:00
Dermot Duffy c3d3dd3934 chore: Update ha-nunjucks to 1.6.2 (#2549)
- Replaces:
https://github.com/dermotduffy/advanced-camera-card/pull/2515
2026-06-30 17:45:13 -07:00
dependabot[bot] 015fb1876d chore(deps): bump release-drafter/release-drafter from 7.4.0 to 7.5.1 (#2547)
Bumps
[release-drafter/release-drafter](https://github.com/release-drafter/release-drafter)
from 7.4.0 to 7.5.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/release-drafter/release-drafter/releases">release-drafter/release-drafter's
releases</a>.</em></p>
<blockquote>
<h2>v7.5.1</h2>
<h1>What's Changed</h1>
<h2>Bug Fixes</h2>
<ul>
<li>fix: use PR changed files as the source of truth for path filtering
(<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1640">#1640</a>)
<a href="https://github.com/cchanche"><code>@​cchanche</code></a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/release-drafter/release-drafter/compare/v7.5.0...v7.5.1">https://github.com/release-drafter/release-drafter/compare/v7.5.0...v7.5.1</a></p>
<h2>v7.5.0</h2>
<h1>What's Changed</h1>
<h2>New</h2>
<ul>
<li>feat: align increments to semver lib from 0.0.0 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1636">#1636</a>)
<a href="https://github.com/cchanche"><code>@​cchanche</code></a></li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>fix: require actual matches for category mode <code>only</code> (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1639">#1639</a>)
<a href="https://github.com/cchanche"><code>@​cchanche</code></a></li>
</ul>
<h2>Dependency Updates</h2>
<ul>
<li>build(deps): bump undici from 6.24.1 to 6.27.0 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1637">#1637</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/release-drafter/release-drafter/compare/v7.4.0...v7.5.0">https://github.com/release-drafter/release-drafter/compare/v7.4.0...v7.5.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/4d75298e00d9e34c483e5ff8c68d0ea1c1940c1e"><code>4d75298</code></a>
chore: release v7.5.1</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/87be2bf2a7828522f897c087bb709b00e6669aa1"><code>87be2bf</code></a>
fix: use PR changed files as the source of truth for path filtering (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1640">#1640</a>)</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/73b95fa1c286dfd6802a4f949b07dad6149f2b0f"><code>73b95fa</code></a>
chore: release v7.5.0</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/46fd41568419e5085b7f73f064d37982152c91dd"><code>46fd415</code></a>
Fix/align increments to semver lib from 0.0.0 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1636">#1636</a>)</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/ee0257248ae4c676c2ee86fecb6066e21168acb8"><code>ee02572</code></a>
chore: upgrade various deps</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/cd9144557b96e626dd10682b6f9167d89cf51e84"><code>cd91445</code></a>
build(deps): bump undici from 6.24.1 to 6.27.0 (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1637">#1637</a>)</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/33c969bc903b50ba04f9dd14d0074d2a6b4dfee6"><code>33c969b</code></a>
fix: require actual matches for category mode <code>only</code> (<a
href="https://redirect.github.com/release-drafter/release-drafter/issues/1639">#1639</a>)</li>
<li><a
href="https://github.com/release-drafter/release-drafter/commit/5d6d314b663c77dcb159adaeba42fa0170ab0ddb"><code>5d6d314</code></a>
ci: support label 'dependencies' for dependabot</li>
<li>See full diff in <a
href="https://github.com/release-drafter/release-drafter/compare/v7.4.0...v7.5.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=release-drafter/release-drafter&package-manager=github_actions&previous-version=7.4.0&new-version=7.5.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-30 17:45:13 -07:00
Dermot Duffy ea251ca988 perf(bundle): lazy-load the nunjucks template engine (#2535)
Closes #2531.

## Summary

The full `nunjucks` templating engine (~226KB) plus `ha-nunjucks`
(~46KB) — roughly **272KB, ~13% of the eager entry chunk** — was
statically imported and downloaded by every card on initial load, even
though templates only apply when a config value contains a `{{ … }}` /
`{% … %}` delimiter. Most cards use no templates and never need the
engine.

This defers the engine behind a dynamic `import('ha-nunjucks/dist')` so
it ships in a separate, on-demand chunk instead of the eager
`card-*.js`.

## Approach

The render path (`TemplateRenderer.renderRecursively`) is **kept
synchronous** — it is called from many synchronous hot paths
(condition/trigger evaluators, picture-elements rendering, actions,
folder matchers), and making it async would be a large, high-risk
refactor of the evaluation core.

Instead:

- **New `src/card-controller/templates/engine.ts`** — a module-level
singleton lazy loader (`loadTemplateEngine()` / `getTemplateEngine()`)
shared across all `TemplateRenderer` instances, plus a
`containsTemplate()` delimiter helper.
- **Delimiter gating** — strings without a delimiter never touch the
engine (the overwhelming majority of renders).
- **Pre-warm at config time** — because every template string originates
in the config, a new mandatory `TEMPLATE_ENGINE` initialization aspect
loads the engine before first render whenever the config contains a
delimiter. This **guarantees no raw `{{ … }}` flash**: content/condition
rendering is blocked until the engine is present for template-using
cards. Cards without templates never load it.

## Result

- nunjucks + ha-nunjucks move out of the eager chunk into a separate
chunk fetched only when a card actually uses templates.
- No change to the synchronous public render API; condition/trigger
evaluation core untouched.

## Tests

- New `engine.ts` loader coverage (concurrent load, cached reuse,
not-loaded fallback).
- The 11 existing test files that render real (delimiter-bearing)
templates declare their dependency explicitly via
`beforeAll(loadTemplateEngine)` — no global/implicit setup hook.
- Full suite green (4764 tests), lint and ts-prune clean, per-file 100%
coverage maintained for the affected directories.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_016ykWemdkZrgywvC71pHc6c

---
_Generated by [Claude
Code](https://claude.ai/code/session_016ykWemdkZrgywvC71pHc6c)_
2026-06-30 17:45:13 -07:00