* 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>
* Add context to statistics panel
* Lazy context
* Cleanup
* Types
* Use api context, use registries, update helpers to only need api
* Infer type
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Remove —
* Format
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Generate third party license file during production build
* Add license check CI step
* Address review comments: use license-checker-rseidelsohn, add version validation for LICENSE_OVERRIDES
* Fix license-checker-rseidelsohn import (CJS module, use require)
* Add link to single integration entry warning
* Refactor single config entry warning: move function to dedicated file and update imports
* Implement single config entry warning dialog and update related functions
* Apply suggestions from code review
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Position statistics chart bars at centre of time range
When displaying 5minute or hourly data periods, position each bar at the midpoint of its start/end time. This mimics the behaviour in the various energy cards for consistency.
* Move limit comparison into pushData
Results in clearer function argument usage.
* Add time range for statistics-chart bar tooltip
When using hour/5minute periods the bars are recentred. Update the tooltips to show time range they cover.
* Omit time from tooltip for bars with periods of day or longer
Don't clutter the tooltip with unnecessary times of 0:00 when using day/month/year timescales on bar charts, just show the date range.
For week/month/year, we now also include the range of dates of the bar rather than just the start date.
* Migrate dialog-expose-entity to new dialog and migrate everything thats needed for this.
* Load virtualizer after dialog show is ready
* Use entities context instead of registries in ha-state-icon
* fix types
* Update src/panels/config/voice-assistants/dialog-expose-entity.ts
---------
Co-authored-by: Simon Lamon <32477463+silamon@users.noreply.github.com>