The arrow-right icon next to the alert icon was decorative noise.
With automation comments (#52090) adding yet another icon, simplify
to a single mdiAlertCircleCheck indicator.
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* Update dependency @tsparticles/engine to v4
* Bump @tsparticles/preset-links to v4 to match engine
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Show both power buttons for assumed-state media players when unknown
Media players with assumed state report an unknown state when their
actual power state can't be determined. In that case the entity row and
more info should still expose both turn on and turn off controls so the
user can operate the device.
https://claude.ai/code/session_01JyZojNPCCY65HmRVQaASkG
* Treat media player unknown state like off instead of unavailable
The media player controls lumped the "unknown" state in with
"unavailable" and hid all controls. An unknown state is closer to "off":
the device exists but its power state isn't reported, which is common
for assumed-state players. Only "unavailable" should hide the controls,
so an unknown-state player now shows the turn on button (and both power
buttons when it has an assumed state) in the entity row and more info.
https://claude.ai/code/session_01JyZojNPCCY65HmRVQaASkG
* Adjust comments and variable placement for media player state check
https://claude.ai/code/session_01JyZojNPCCY65HmRVQaASkG
---------
Co-authored-by: Claude <noreply@anthropic.com>
* fix(entities): clear URL-injected filters on leaving entities dashboard
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(entities): restore previous filters after URL-injected navigation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* refactor: use separate storage and display filters
Apply the same pattern as devices page: split _filters into a display-only
@state and a _storageFilters persisted to sessionStorage. _storageFilters
is only updated when not in URL mode (_fromUrl flag), so URL-injected
filters never persist to storage.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(devices): clear URL-injected filters on leaving devices dashboard
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(devices): restore previous filters after URL-injected navigation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* refactor(devices): use separate storage and display filters
Replace the disconnect-callback approach with two distinct filter states:
- _storageFilters: persisted to sessionStorage, updated only when not in
URL mode (manual filter changes and clear)
- _filters: display-only state, initialized from _storageFilters on first
render, overwritten by URL params without touching storage
_storageFilters is frozen while _fromUrl is true, preserving the user's
previous manual filters for the next normal visit.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* Update dependency eslint-plugin-lit to v2.3.1
* Fix lit/prefer-query-decorators violations
eslint-plugin-lit 2.3.0 introduced this rule. Replace querySelector
calls with @query/@queryAll decorators where the selector is static.
Use per-line disables for dynamic selectors that can't use decorators.
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
Replaces the per-render scrollHeight read from #52012 with a
ResizeObserver started in firstUpdated, writing --tip-height directly to
the host style. Removes the need for a manual refresh when the viewport
crosses a wrap threshold, drops the unreachable isNaN check, and lets
the @query decorator stand in for the editor-tip id.
fix(filter): prevent badge count from incrementing on panel re-open
Integrations and domains filter panels use lazy rendering: the list is
destroyed on close and recreated on open. On recreation, MWC fires a
`selected` event with a diff for each pre-selected item, which the
diff-based handler interpreted as a new user selection, appending
duplicates to `this.value` on every expansion.
Switch both handlers to the full-set approach (`SelectedDetail<Set<number>>`)
already used by labels, states, and voice-assistants, rebuilding the value
from the complete index set. Add the `preserved` pattern to retain
selections hidden by the search filter. Also add `_value` to the `_domains`
memoize signature to ensure cache invalidation when the selection changes.
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(lovelace): add mute button to media player volume buttons card feature
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: add show_mute_button config option to volume buttons feature
* feat: disable show_mute_button option when entity does not support mute
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Apply suggestions from code review
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Migrate ha-drawer to Web Awesome drawer
* Make CI happy
* Implement swipe gesture support for ha-drawer and fix RTL support
* Fix CI
* Fix CI
* Readd border
* Fix sidebar
* Layout fix
* Fix sluggish scroll on mobile
* Fix CI
* Add transition
* add more options for history-graph-card
* add more options for history-graph-card
* Apply suggestion from @MindFreeze
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>