Dermot Duffy
5e199b5612
fix: Report media failures once per failure ( #2666 )
2026-08-09 10:48:17 -07:00
Dermot Duffy
8d8d486afa
test: Split browser test-utils ( #2662 )
...
- Closes : #2660
2026-08-07 16:27:28 -07:00
Dermot Duffy
673d8fe133
test: Add browser tests for the media viewing gallery and viewer ( #2661 )
2026-08-07 16:08:56 -07:00
Dermot Duffy
567690831c
feat: Show the build date on the loading banner of unreleased builds ( #2659 )
2026-08-05 22:15:00 -07:00
Dermot Duffy
c137f4c00c
fix: Report and retry media failures for every camera in a grid ( #2658 )
...
- Closes : #2637
- Related: #2099
2026-08-05 21:35:47 -07:00
Dermot Duffy
9f88aacefe
fix: Ensure no camera outlives a failed initialization ( #2657 )
2026-08-04 21:33:46 -07:00
Dermot Duffy
80ec92e3b2
refactor: Replace Rollup with Vite ( #2656 )
...
This is a high risk change: every byte the card ships is emitted by a
different bundler, minified by a different minifier, and every
stylesheet is compiled by a different sass. The intent is that the
card's behaviour is unchanged.
**Significant development win**: Build time drops from 24s to 1.1s 🎉
Also adds a test suite ('dist') that runs against the built bundle.
2026-08-04 15:00:13 -07:00
Dermot Duffy
06bcfd58ba
refactor: Stamp build information in as "defines" ( #2654 )
2026-08-03 22:36:32 -07:00
Dermot Duffy
2d124fe3cd
test: Add a test harness for the built card ( #2653 )
...
Mounts the card from `dist/` the way Home Assistant does, by URL with a
HACS tag, and asserts the entry stays a facade, that no chunk imports
it, that the browser is served the file unmodified, and that the card
starts up and fetches a language chunk lazily.
Runs in Chromium, Firefox and WebKit, so a change of bundler or minifier
is checked against every engine.
2026-08-03 21:50:21 -07:00
Dermot Duffy
18ea725564
test: Also run firefox & webkit automated tests ( #2651 )
2026-08-03 16:48:30 -07:00
Dermot Duffy
4a7c1b62b0
perf: Deduplicate concurrent Home Assistant registry list fetches ( #2650 )
2026-08-02 21:35:48 -07:00
Dermot Duffy
5d247d4074
test: Add browser based tests for keyboard focus handling ( #2647 )
2026-08-02 16:38:17 -07:00
Dermot Duffy
17146c8ca6
fix: Clear the initialized condition state when the card is not usable ( #2646 )
...
The `initialized` state (used in conditions/triggers) was written once
and never cleared, so it meant "has this card ever been initialized"
while everything reading it took it as "is this card usable now". Home
Assistant takes a card off the page and puts it back whenever its
dashboard tab is left and returned to, so the card initialized again
while the state claimed it was initialized throughout: `trigger:
initialized` fired once per card rather than once per startup, and
automations were dropped in between.
The card lifecycle is now an explicit state machine (`SessionManager`),
the only writer of `initialized`, which separates a card that is
starting up from one initializing part of itself again while it runs. A
new `ever` parameter (conditions/triggers) selects the old latched
behaviour.
`remote_control` uses that parameter to keep its two camera priorities
correct under repeated starts. With `camera_priority: entity` the card
now re-reads the entity every time it starts, so a camera selected while
the card was away is picked up on return. With `camera_priority: card`
the card writes the entity on its first start only, unchanged, since
repeating that write would overwrite a camera the user had selected.
Closes : #2642
BREAKING CHANGE: `condition: initialized` is now `false` whenever the
card is not usable, and `trigger: initialized` fires each time the card
starts up rather than only the first time. Set `ever: true` on either to
keep the previous behaviour.
2026-08-02 12:52:58 -07:00
Dermot Duffy
e590f72783
test: Add a browser based test harness ( #2641 )
2026-07-31 10:16:58 -07:00
Dermot Duffy
51c0fab1ce
fix: Do not activate pan & zoom on a detached element ( #2640 )
...
- Closes : #2633
2026-07-30 21:33:37 -07:00
Dermot Duffy
f24064689a
fix: Restore keyboard focus for key triggers ( #2634 ) ( #2639 )
...
- Closes #2634
2026-07-30 20:52:54 -07:00
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 />
[](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