* Render echarts tooltips with Lit templates
Replace raw HTML string interpolation in echarts tooltip formatters with Lit templates so user-controlled fields (entity friendly_name, device names, node labels) are auto-escaped instead of relying on per-string filterXSS. ha-chart-base now wraps any function tooltip.formatter into a stable per-formatter container and handles Lit TemplateResult / nothing / null returns; the public HaECOption type lets charts express Lit-returning formatters without per-callsite casts.
* Simplify
* Refactor _getSeries
* Small fix
* Fix merge mistake
* Marker component and wrapper test
* Update dependency echarts to v6.1.0
* Fix axis-proxy patch for echarts 6.1.0 AxisProxy internals
ECharts 6.1.0 uses hostedBy() and _window.value instead of direct model
comparison and _valueWindow. Update the boundaryFilter patch and contract
tests so CI passes with the dependency bump.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
* first rough draft of Z-Wave credential mangement
* separate user and credentials, error handling, dialog tweaks
* align with upstream API changes, improve error handling
* align more with Matter, use lock entity for services
* remove get_credential_status service
* address review feedback, clarify user types
* user_index -> user_id, fix some pending states
* address review feedback
* clean up unused code, strongly type credential types
* Clear -> Delete, drop icons
* Simplify flow to 1 PIN/Password credential per user
* cleanup, comments, etc.
* address review feedback
* do not show existing credential data
* fix lint errors after branch update
* ignore non-enterable credential types when editing user
* Don't round bar chart end time for hourly periods
If we do this, it causes the last hour of the energy dashboard bar charts to be cut off. This went unnoticed previously because they were placed at times of xx:00, while now they are times of xx:30.
* Round to 30minute for hourly bars rather than leaving unrounded
This better matches the axes with line charts by cutting off padding into the next day, whilst leaving mid-point bars visible.
* Update tests to account for new behaviour
* Add apps navigation group with ingress add-on panels
Add an "Apps" section to the navigation picker that shows all add-ons
with ingress support. Uses the /ingress/panels supervisor endpoint via
a cached collection to fetch add-on titles and icons in a single call.
https://claude.ai/code/session_01F8dUzfSWj8ZwDByVZ45BNj
* Fix no-shadow lint error for panels variable
Rename subscribe callback parameter from `panels` to `data` to avoid
shadowing the outer `panels` variable in _loadNavigationItems.
https://claude.ai/code/session_01F8dUzfSWj8ZwDByVZ45BNj
* Use subscribeOne helper for ingress panels collection
Replace hand-rolled Promise/subscribe/unsub pattern with the existing
subscribeOne utility for cleaner one-shot collection consumption.
https://claude.ai/code/session_01F8dUzfSWj8ZwDByVZ45BNj
* Add explicit type parameter to subscribeOne call
TypeScript cannot infer the generic type through the collection
subscribe chain, resulting in unknown type for panel entries.
https://claude.ai/code/session_01F8dUzfSWj8ZwDByVZ45BNj
* Add subscribeOneCollection helper for collection one-shot reads
Add a new subscribeOneCollection utility that takes a collection
directly instead of requiring the (conn, onChange) function pattern.
Use it in the navigation picker for cleaner ingress panel fetching.
https://claude.ai/code/session_01F8dUzfSWj8ZwDByVZ45BNj
* Use Collection type instead of custom Subscribable interface
https://claude.ai/code/session_01F8dUzfSWj8ZwDByVZ45BNj
* Add ingress panel support to subscribeNavigationPathInfo
* Use app panel variable
* Add tests
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Paul Bottein <paul.bottein@gmail.com>
* Cleaned up experience when no pin support is possible to provide better messaging.
* Improvements to messaging depending on lock features
* Added documentation links
* Added prettier format
* Add ability to duplicate a section
* Move section edit mode buttons to overflow menu
* Fix typing for concat and push parameters
* Fix incorrect clipboard typing for badges
* Rescale Y-axis on chart zoom via custom AxisProxy filterMode
Patch ECharts' AxisProxy.filterData to support a "boundaryFilter" mode
that keeps the nearest data point outside each zoom boundary while
filtering distant points. This lets ECharts natively rescale the Y-axis
to the visible data range without causing line gaps at the zoom edges.
* Add tests for ECharts AxisProxy patch internals
Verify that the ECharts internals our boundaryFilter patch relies on
still exist (filterData, getTargetSeriesModels on AxisProxy prototype),
and test the patch behavior: delegation for other filterModes, early
return for non-matching models, and correct boundary-preserving filtering.
* Update comment
* Initial implementation of Matter lock pin management and events.
- Implement lock codes
- Implement lock events
- Implement lock schedules and guest codes
* Initial implementation of Matter lock pin management and events.
- Implement lock codes
- Implement lock events
- Implement lock schedules and guest codes
* Initial implementation of Matter lock pin management and events.
- Implement lock codes
- Implement lock events
- Implement lock schedules and guest codes
* - Copilot fixes
* - Requested improvements on how the UI screens render including:
- Cancel button location
- Alignment of delete icons and buttons
* Updates to support new PR for backend
* Update as per PR comments
* Fixes to align to new backend design.
* Fixes for user deletion
* Fixes for PR comments
* Delete test/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json
* Remove unused code
* Updates with review feedback
* PR Comments
* Fixed linting error
* Fixes for new dialog changes
* Added debugging for errors, aligning to other areas where this is used.
---------
Co-authored-by: Wendelin <12148533+wendevlin@users.noreply.github.com>
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
Fix media-player mock state attributes for gallery seek UI
Expose media-player capability and state attributes via entity hooks so gallery music mocks render position bars. Keep the domain-hook model and null state attrs when off to match other mocks.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Normalize SI unit prefixes in distribution card proportions
* Extract SI prefix normalization to shared utility with tests
Moves normalizeValueBySIPrefix to src/common/number/ so it can be
reused. Replaces the inline method in the distribution card and the
switch statement in getPowerFromState (energy.ts).
* add formatEntityStateToParts
* add formatEntityStateToParts
* use formatEntityStateToParts
* add formatEntityStateToParts
* use formatEntityStateToParts
* add formatEntityStateToParts
* add formatEntityStateToParts
* add computeStateDisplayToParts
* update for monetary
* fix a test for monetary
* fixed test for monetary
* do not include "order" into result
* do not include "order" into result
* do not include "order" into result
* do not include "order" into result
* do not include "order" into result
* do not include "order" into result
* do not include "order" into result
* simplify
* ensure less conflicts in future merges
* Refactor monetary computing
---------
Co-authored-by: Paul Bottein <paul.bottein@gmail.com>
When HistoryStream.processMessage() prunes expired history and preserves
the last expired state as a boundary marker, it updates lu (last_updated)
but not lc (last_changed). Chart components use lc preferentially, so
when lc is present the boundary point gets plotted at the original stale
timestamp far to the left of the visible window. Delete lc from the
boundary state so the chart uses the corrected lu timestamp.