* Allow customizing home page summaries and adding quick links
Add ability to hide built-in summaries (light, climate, security,
media players, weather, energy) and add custom quick links to
dashboards, sidebar items, or other pages from the edit overview dialog.
https://claude.ai/code/session_01AqgbQULH5vfETibiba5RXH
* Remove quick links, focus on summary enable/disable only
https://claude.ai/code/session_01AqgbQULH5vfETibiba5RXH
* Match summary editor rows to dashboard order with icon, color, and toggle on right
Each summary row now shows its colored icon and title matching the
dashboard appearance, with the toggle switch moved to the right side.
Order matches the dashboard: light, climate, security, media players,
weather, energy, persons.
https://claude.ai/code/session_01AqgbQULH5vfETibiba5RXH
* Lint
* Apply suggestion from @balloob
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Create shared select card feature base class
* Add sound mode and source features
* Remove serviceValueKey as its the same as attribute
* Migrate more
* Migrate select options
* Add fan direction
* Remove default usages
* Add support for skeleton on tile info secondary text
* Show loading state for users of tile info
* Update src/components/tile/ha-tile-info.ts
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Add persons summary tile to home overview dashboard
Show how many people are currently home in the Summary section
of the default home dashboard. Only persons with at least one
tracking device are included. The tile only appears when the map
panel is loaded and at least one tracked person entity exists.
Tapping navigates to the map panel. Displays a count of persons
home or "Nobody" when all are away.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Remove persons tile from home overview strategy
* Translation tweak
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Add solo-select gesture to chart legend
Ctrl+click (Cmd+click on Mac) or long-press (touch, 500ms) a legend
item to solo-select it:
- Solo-click any item → hide everything else, show only that item
- Solo-click the only visible item → restore all
There is no special "solo mode" — the gesture simply sets which items
are hidden. Normal click/tap continues to toggle individual series,
including after a solo action (e.g. solo a, then click b to add it).
Closes https://github.com/orgs/home-assistant/discussions/1492
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Deduplicate legend parsing in _renderLegend and _getAllLegendIds
Both methods parsed options.legend and filtered datasets identically.
Extract the shared logic into a new _getLegendItems method.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Update src/components/chart/ha-chart-base.ts
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* 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
* Fix base time inputs reportValidity() function
The queryAll selector returns a NodeList not not an array. Need to spread it to an array before we can use every().
* Validate the date range picker time inputs
Enable auto validation to get the nice red underline on invalid values, and then check validity before accepting the input.
* Fix automatic 24hr value conversion in AM/PM format
When using AM/PM, entering a 24 hour value will automatically convert the first time. For example 15 will become 3. However if you then enter 15 again it will stay as 15 and not update.
To fix this, make sure we trigger an update of the input field once the current update cycle is complete.
* Validate time inputs on save not value update
In the value changed callback, the update 24->12hr input correction will not have been updated and therefore they will report invalid.
Refactor climate HVAC mode handling in state-history-chart-line to be data-driven
Replace repetitive per-mode detection, dataset creation, and series population
blocks with a single CLIMATE_MODE_CONFIGS array and loops over active modes.
* Support additional climate hvac_mode in state-history-chart-line
* Reverted changes to the chart legend to keep change focussed on the additonal hvac_mode support
* Remove the tests since they don't add value.
Add `white-space: pre-line` to the event description style so that
newlines in the calendar event description are rendered correctly
instead of being collapsed into a single line.
* Add search highlight to ZHA graph
* Move logic upstream and extend search to zwave and bluetooth
* Move search down to avoid collisions with graph legend
* Fix mobile; simplify code
* Apply highlights directly on search callback
* Revert "Move search down to avoid collisions with graph legend"
This reverts commit 4578aec9c3.
* Move legend down
* Make search bar shrink to avoid overlapping buttons
* Move search bar to topbar on mobile
* Fix inset
* Fix small controlls position
* Apply suggestion from @MindFreeze
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Add device area column to ZHA data table
Add a device area column to the ZHA data table, which most notably adds
the column to the "create [ZigBee] group" view".
The column is only show on wider screens to allow for ordering, whilst
narrower screens will show the area as a subtitle to the device's name.
* Localize the ZHA group data table
* fixup! Add device area column to ZHA data table
* fixup! Localize the ZHA group data table
* Added a todo-list card option "days_to_show" to filter tasks far in the future (#24020)
* Adjusted min and 0 values as suggested in PR
* Adjusted as suggested in review
* Switched from days_to_show to period (calendar only for now) as suggested
* removed days_to_show from editor UI
* fixed lint error
* Fixed code style with prettier
* fix filtering
* Update filtering period options
* Update src/panels/lovelace/editor/config-elements/hui-todo-list-editor.ts
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Apply suggestion from @MindFreeze
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* prettier/lint
* fix memoization, items without status
* no rolling window
* refresh on date change
* Show dialog on create when using due_date filter
---------
Co-authored-by: cpetry <petry2christian@gmail.com>
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Refactor lovelace view lifecycle to avoid unnecessary DOM rebuilds
- Remove `force` flag from `hui-root` that was clearing the entire view
cache and destroying all cached view DOM on any config change. Views
now receive updated lovelace in place and handle config changes
internally.
- Add `_cleanupViewCache` to remove stale cache entries when views are
added, removed, or reordered.
- Remove `@ll-rebuild` handler from `hui-root`. Cards and badges already
handle `ll-rebuild` via their `hui-card`/`hui-badge` wrappers. Sections
now always stop propagation and rebuild locally.
- Add `deepEqual` guard in `hui-view._setConfig` and
`hui-section._initializeConfig` to skip re-rendering when strategy
regeneration produces an identical config.
- Simplify `hui-view` refresh flow: remove `_refreshConfig`,
`_rendered` flag, `strategy-config-changed` event, and
connected/disconnected callbacks. Registry changes now debounce
directly into `_initializeConfig`.
- Fix `isStrategy` check in `hui-view._initializeConfig` to use the raw
config (before strategy expansion) rather than the generated config.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Remove unused type
* Improve viewCache cleanup
* clean up
* Handle custom view re-creation
* Fix custom view loading
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* Migrate ha-multi-textfield to ha-input-multi and update ha-selector-text to use new input components
* Review
* Update src/components/input/ha-input-multi.ts
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
Fix water/gas badge when rate is 0
If there is only one flow rate sensor, and it has a value <=0, the badge would be displayed without a unit because the sensor gets skipped.
Instead of skipping <=0 values, continue to process sensor, but clamp the value to a minimum of 0. This ensures for single sensors we have a unit, and for multiple sensors the chosen unit is consistent even if the first sensor value drops to zero.
* Use isExternalStatistic helper for consistency
* Remove redundant if condition
We have `band = drawBands && ...`, so there is no point checking if `drawBands` is true inside `if (band && ...)`.
* Skip plotting state value on statistic graph if units mismatch
For example plotting a *F sensor on a *C chart - statistic data will be converted to *C, but the state value will still be in *F so the displayed point is wrong. Similarly if plotting a kW sensor on a W chart, the same is true - statistics get converted to W by recorder, but the state value would still be in kW. In other words the plotted state point is complete nonsense.
If the units of the statistic state don't match the units of the graph, we should not be displaying the value on the graph.
* Remove redundant this.unit check
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Preserve entity unit_of_measurement in gas and water flow rate badges
The gas and water total badges on the energy dashboard Now tab previously
converted all flow rate values to L/min and then formatted them as either
L/min or gal/min based on the unit system. This meant entities reporting
in m³/h or other units always displayed incorrectly.
Now the badges preserve the unit_of_measurement from the entities. If all
entities share the same unit, the raw values are summed directly. If they
differ, values are converted through L/min as an intermediate and displayed
in the first entity's unit.
* Extract shared computeTotalFlowRate to energy.ts
* Use same now() time for all entity state values
Otherwise if there is a slight time lag while each statistic is processed, some of the points go missing from the tooltip. There end up being to very closely spaced time points for each different entity.
* Fix initial statistics graph card metadata loading
When using energy collection mode, the metadata for statistic entities was not always being loaded when the charts were first created. This could be seen in the graph units when they had differing unit (e.g. kW and W mixed).
* Re-create form editor when schema changes in hui-form-element-editor
When a parent component passes a new schema to hui-form-element-editor
(e.g. with updated disabled flags after an entity change), the internal
hui-form-editor was not rebuilt because loadConfigElement() short-circuits
once the config element exists. This meant dynamic schema changes were
silently ignored.
Override updated() to detect schema changes after initial load, tear down
the stale config element via unloadConfigElement(), and re-set the value
so the normal load path recreates the form with the current schema.
Fixes#29776
* Fix prettier formatting in hui-map-card.ts
Pre-existing formatting issue on dev branch.
* Propagate schema changes to existing form editor element
When the schema property on hui-form-element-editor changes (e.g. because
the selected entity changed and disabled flags need updating), directly
update the schema on the already-created hui-form-editor config element.
Previously, unloadConfigElement() was tried but caused a visible flash
(editor going blank then reappearing), and re-setting value with a spread
object was tried but deepEqual considers it unchanged, short-circuiting
the reload.
The fix is minimal: make _configElement protected in HuiElementEditor so
the subclass can reach it, then in the updated() hook push the new schema
directly onto the existing element — no teardown, no re-creation.
* Convert energy panel to use a dashboard strategy
Move the view-selection logic from ha-panel-energy into a dedicated
energy dashboard strategy, consistent with how home/areas/map dashboards
work. The strategy decides which view strategies (electricity, gas,
water, power, overview) to show based on energy preferences.
Extract shared constants into a separate module to avoid circular
dependencies between the panel and view strategies.
* Remove unused energy collection constants from ha-panel-energy
* date-range-picker with cally
* fix timePicker
* Review: backdrop transition
* fix comments
* Add formatCallyDateRange
* Refactor date formatting in date range picker and remove unused styles
* time-input without label
* review
* Use isExternalStatistic helper for consistency
* Remove redundant if condition
We have `band = drawBands && ...`, so there is no point checking if `drawBands` is true inside `if (band && ...)`.
* Skip plotting state value on statistic graph if units mismatch
For example plotting a *F sensor on a *C chart - statistic data will be converted to *C, but the state value will still be in *F so the displayed point is wrong. Similarly if plotting a kW sensor on a W chart, the same is true - statistics get converted to W by recorder, but the state value would still be in kW. In other words the plotted state point is complete nonsense.
If the units of the statistic state don't match the units of the graph, we should not be displaying the value on the graph.
* Remove redundant this.unit check
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Refactor device entities card to use Lit directive for entity rows
Replace the imperative pattern (shouldUpdate hack, _entityRows array,
_renderEntity pushing elements) with a declarative approach using a
reusable Lit directive and repeat for stable keying.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix function name and padding issue
* Recreate on domain change, otherwise update
* Prettier
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Add entity name alias toggle and drag-to-reorder aliases in voice settings
* Fix reorder
* Update src/panels/config/voice-assistants/entity-voice-settings.ts
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Use map instead of repeat
* Improve key
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Add scrollbar support for cards with fixed grid row height
* Fix default sizing
* Add warning for card that doesn't support resizing well
* Remove not used explanation
* Preserve entity unit_of_measurement in gas and water flow rate badges
The gas and water total badges on the energy dashboard Now tab previously
converted all flow rate values to L/min and then formatted them as either
L/min or gal/min based on the unit system. This meant entities reporting
in m³/h or other units always displayed incorrectly.
Now the badges preserve the unit_of_measurement from the entities. If all
entities share the same unit, the raw values are summed directly. If they
differ, values are converted through L/min as an intermediate and displayed
in the first entity's unit.
* Extract shared computeTotalFlowRate to energy.ts
* 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
* Make favorites UI reusable
* Setup cover favorites
* Fix
* Make generic
* Remove
* Move
* Add type for keys
* Remove
* Move
* Types
* Types
* Changes for tilt position
* Cleanup
* Add missing options
* Replace cover preset features with favorites features
Editor points to more info instead of allowing cusomisation of feature
* Fix drag
* Remove learn more
* Add domains with favorites shared data
* Support recent additions: reset and copy favorites
* Move favorites logic into new file, futureproof for new domains
* Await all
* Refactor
* Use copy for primary action
* Allow empty lists
* Rename
* Use better ally labels
* Move favorites options above and use divider
* Move
* Use proper DOM types
* Use proper type
* Use proper types
* Cleanup
* Type from param
* Center align label
* Only show labels if both show
* Switch date picker to cally calendar-date
* Remove app-datepicker styles from date picker dialog
Clean up unused CSS overrides in ha-dialog-date-picker.
Remove custom properties, focus/body rules, and responsive media
queries for app-datepicker and calendar-date so the component uses
upstream defaults and avoids duplicate styling
* Review
* Apply suggestion from @MindFreeze
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Fix date parsing in HaDialogDatePicker to handle ISO string format
* Update src/components/ha-dialog-date-picker.ts
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Remove filter for unstable app stages
* Show stage in app store repository view
* Increase size of cards to accomadate badges
* Add stage to installed apps, update style
* Make "Search" consistent, "Search apps" not needed in this context
* Remove show advanced mode logic for app visibility
* Add margin to .addition
* Remove [deprecated] from app page title also
* Use common helper
Correct Statistic Picker _getAdditionalItems
This should be a lambda function saved to a property, not a method. Otherwise when called the "this" is the caller not the statistic picker. This was causing the Statistic Card entity picker to load blank.
* 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>
* Add date selection keys to statistics-graph editor
Add support for the `energy_date_selection` and `collection_key` entires in the visual statistics-graph card editor, along with validation of the collection key in the statistics-graph's setConfig.
* Add missing option to stats card editor
Was missing the expand_legend config option in the visual editor.
* Tidy statistics graph editor arrangement
1. Group the various settings cleanly.
2. Auto-hide the collections key if energy date picker selection is disabled
3. Auto-hide days to show if a collection is linked
* Add "auto" option for statistics-chart period
When using the energy date picker option, enable the ability to select a period of "auto" which will enable use of the energy systems automatic period selection function.
* Correct hiding days to show
Should be hidden whenever energy_date_selection is true, regardless of collection key to cope with upgrading existing cards for which no key has been set.
* Hide "auto" period on statistics graph card editor
When not using energy, hide the auto option to avoid confusion.
* Swap date selection and collection key order
This keeps the toggle in a consistent location.
* Remove duplicate config key
There is a title? key now in EnergyCardBaseConfig.
* Correct energy_date_selection translation
* Improve collection key description
* Improve terminology for energy card collection
* Improve energy support for statistics card
Rather than setting the period to "energy_date_selection", add an energy_date_selection key to the config to be more consistent. The original configuration option is still supported for backwards compatibility
Update the statistic card visual editor to support energy collection key selection.
* Add statistics card collection key validation
* Apply suggestions from code review
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Remove title from EnergyCardBaseConfig
This was added when the energy card visual editors were created, but not all cards using a collection key need a title. Using Omit to remove it seems to lose the extend of LovelaceCardConfig.
Instead add EnergyCardConfig which is EnergyCardBaseConfig with the title field. This is used for a number of cards to allow them to share the same visual editor without having to list out every one.
* Mark Statistic Period calendar.offset as optional
It is already handled in core as an optional key (defaults to 0), and the statistic card/editor was explicitly omiting the key even though it was declaring it as required.
This removes the need for an error masking cast when converting the deprecated PERIOD_ENERGY to STATISTIC_CARD_DEFAULT_PERIOD.
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
The @rspack/dev-server overlay catches ResizeObserver loop errors as
runtime crashes, showing a full-screen error overlay that blocks
development. These errors are benign — they originate from
lit-virtualizer (used by ha-data-table) and simply mean not all
resize observations could be delivered in a single animation frame.
Add a client.overlay.runtimeErrors filter to the dev server config
that suppresses ResizeObserver loop messages while still surfacing
all real runtime errors.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The gallery mock set hass.auth.data.hassUrl to an empty string, which
caused brandsUrl() to throw when constructing a URL via new URL(base, '').
In production hassUrl is always a valid URL, so the mock now uses
location.origin to match real behavior.
Co-authored-by: Copilot <223556219+Copilot@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>
When displaying the "now" value on statistics graphs, don't include a "null" data point for sum/change type graphs, just skip entirely.
Otherwise for you get a messy null data point in the tooltip.
* Correct missing ha-tooltip CSS variable
We were missing a default for the `--wa-tooltip-border-width` variable which meant the arrow from the tooltip disappeared in WA 3.3.1.
* Fix tooltip in ha-slider
Skip fetching hourly statistics when hours_to_show < 1 since hourly
aggregates produce stale outlier points in sub-hour chart windows
(e.g. hours_to_show: 0.1 or 0.05).
Also fix Date object handling in ha-chart-base downsampling bounds
extraction.
* Add common API for energy collection keys
These allow so far for:
1. Creating a valid collection key
2. Validating that a collection key is useable
3. Getting a list of all currently active collection keys
Currently the validation/creation is simply checking the prefix. In time this could be extended to add more validation - e.g. sanitising punctuation/spaces/etc.
Cards configured using a visual editor will in the future ican use these APIs to distinguish between collection keys created manually in YAML/internally by HA from those created by the visual editor.
* Create visual editor for energy date selector
Allow creating date selection cards directly from the lovelace card dialog rather than requiring manual creation.
To aid in this, a date selection editor card has been created to allow using the visual editor. This includes options for setting the vertical opening direction, whether comparison is enabled/disabled, and creating a collection key.
To keep things hopefully more accessible to users, the `energy_` prefix for the collection key can be omitted from the text field. It will be added automatically if necessary. The prefix must be added if editing in the YAML editor.
Validation of the collection key is also performed, providing an error message if the key is invalid.
* Allow visual editors only for UI collection keys
Prevent the visual editors from being used if the collection key doesn't have the correct prefix. This is to avoid breaking existing user dashboards that predate the visual editor.
Additionally use the helper in energy dashboard for stripping the UI prefix.
* Create visual editor for sankey cards
Allow creating energy/water/power sankey cards directly from the lovelace card dialog rather than requiring manual creation.
A sankey chart editor card has been created to allow using the visual editor. This includes setting of all common options for sankey cards including layout, groups, and selection of a collection key.
To keep things simple for users, the visual editor displays the collection_key field as a drop-down menu from which all active collection keys may be selected.
* Create visual editor for energy graph cards
Allow creating energy/solar/gas/water usage graph cards directly from the lovelace card dialog rather than requiring manual creation.
A common graph editor card has been created to allow using the visual editor. This provides a basic set of common properties - currently just title and collection key.
To keep things simple for users, the visual editor displays the collection_key field as a drop-down menu from which all active collection keys may be selected.
* Assign visual editor to compare card
This is not assigned to the lovelace card selector as its not strictly a card, but rather an alert. However it might as well be assigned to the visual editor for consistency.
* Add Power Sources Graph
This was missed when adding other graphs. Currently it shares the same editor which means the optional show_legend key cannot yet be set visually. In time this could be updated.
* Update energy card descriptions
Update descriptions and names of cards in the lovelace card selector to be consistent with the energy card documentation.
* Create visual editor for energy device graph cards
Allow creating device and detailed device graph cards directly from the lovelace card dialog rather than requiring manual creation.
* Pass config type to devices schema
Rather than converting to a boolean, pass in the type. This will make expanding easier if future devices cards are added.
* Add missing fields to Energy Graph Card Editor
Add options to set `show_legend` and `link_dashboard` config fields.
* Add energy gauge visual editing
These need no special configuration, so might as well reuse the generic energy graph card editor.
* Add option to ignore onInput for ha-form-string
For the ha-form-string element on e.g. the card editor dialog, it would be useful for some types of input to not send value changed events for incomplete changes.
Currently the form triggers the event whenever a character is typed/deleted by forwarding onInput event. To avoid this where undesireable, add a new optional schema entry to ignore these events, which if defined and true sees updating only in response to the onChange callback.
For the energy date picker, this will avoid unnecessary creation of collection keys and by extension energy API connections when using the visual editor improving efficiency.
* Disable preview of energy cards in card picker
To avoid excess querying of the backend for energy data when loading the card picker dialog.
* Set default energy collection key to dashboard name
This changes the behaviour so that by default any component without a collection key will be grouped with other elements on their dashboard, but not with elements on other dashboards.
* Add stub config for date picker
To auto-populate a default picker configuration, including current dashboard name as the collection key.
* Add Stub Configs for other Energy Cards
Auto-populate the default parameters and the current dashboards default collection key.
* Add isActive Getter to Energy Collection
* Add findEnergyDataCollection
This will look for an existing data collection but will not create a new one if it doesn't exist.
To help with this, move the logic for creating the connection key name into a function shared between the new findEnergyDataCollection and the existing getEnergyDataCollection.
* Convert energyCollectionKeys to a Set
All entries should be unique, so use set behaviour.
* Fix capitalisation in translations
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Revert unintentionally committed change
* Revert "Add option to ignore onInput for ha-form-string"
This reverts commit 1cae35db25.
* Remove hiding of collection key prefix
For now keep things simple and show the whole prefix as creation will probably be overhauled in the future.
To assist the user, in the date picker, automatically add the required prefix when the user types into the collection key box.
* Use panelUrl directly for default collection keys
* Update src/translations/en.json
Fix typo
Co-authored-by: Norbert Rittel <norbert@rittel.de>
* Ensure energy cards appear at end of card picker
Add a new `sortAtEnd` option which will cause cards with this sort parameter to sink to the bottom of the card picker.
* Remove collection key from stubConfig
Empty is fine, will convert to same default key anyway.
* Make all collection keys text fields
Remove the active energy collection dropdown.
* Revert "Ensure energy cards appear at end of card picker"
This reverts commit 28834aaa55.
* Add (hidden) energy cards to card picker
Merge in changes originally proposed in #23499.
* Resolve Merge Conflicts
* Fix Lint Error
* Update energy card descriptions
Make them consistent with other card descriptions which start with "The <name of card> card shows ...".
* Change Energy Card Descriptions
Fix the descriptions to use `This card` not `The ... card`.
* Change hide_compound_stats Description
Change to 'upstream devices' to match energy config page descriptions.
* Remove superfluous translation
The type field was not intended to be added to the label callback.
* Remove unused collection key exports
* Remove createEnergyCollectionKey
Was helpful when tying into the collection_key field to auto-add the prefix, but so be it.
* Add visual editor to water flow sankey
Can use the same sankey editor as the others. Update the description of energy sankey to better describe what is being displayed and to match the description of water vs water flow sankey.
* Add getStubConfig to water flow sankey
* Add missing water-flow-sankey to validation
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Fix Date Picker Collection Key Localise
* Move Collection Key to end of Visual Editor
Downplay its significance - move it to the end of the list of options.
* Fix default collection key check
Intended behaviour was to check that the panel URL was not empty - defaultKey will always be truthy!
* Add Opening Direction to Date Picker Config
* Omit "inline" opening direction
This breaks the visual editor as the date selection window suddenly popus up in the preview and is uncloseable.
* Update src/panels/lovelace/editor/lovelace-cards.ts
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Add visual editor for energy-sources-table
The only energy card now missing a visual editor, create the editor for completeness.
* Add name/description for Energy Compare card
* Add preview mode to energy-compare-card
Otherwise it just appears blank in the card and dashboard editors. In preview it will just use the current date for start/end and not provide the dismiss option just to give an impression of how it will look.
* Add type check in energy-graph-card-editor
* Add documentation link for energy-compare-card
* Add documentation links for energy badges
* Fix value lost in dev merge
* Remove dismiss from compare card preview
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
Co-authored-by: Norbert Rittel <norbert@rittel.de>
Co-authored-by: karwosts <karwosts@gmail.com>
Co-authored-by: Simon Lamon <32477463+silamon@users.noreply.github.com>
* Initial plan
* Extract shared automation rows logic into AutomationRowsMixin
Create ha-automation-rows-mixin.ts with common list manipulation methods
(moveUp, moveDown, move, itemMoved, itemAdded, itemRemoved, itemChanged,
duplicateItem, insertAfter, handleDragKeydown, stopSortSelection, getKey)
and shared properties (hass, disabled, narrow, optionsInSidebar,
_rowSortSelected, _clipboard).
Refactor ha-automation-trigger, ha-automation-condition,
ha-automation-action, and ha-automation-option to use the mixin,
eliminating significant code duplication.
Co-authored-by: wendevlin <12148533+wendevlin@users.noreply.github.com>
* Address review feedback: rename to AutomationSortableListMixin, remove _ prefix from protected members, throw in setHighlightedItems
- Rename AutomationRowsMixin to AutomationSortableListMixin
- Rename file to ha-automation-sortable-list-mixin.ts
- Remove _ prefix from all protected methods/properties
- Make setHighlightedItems throw Not implemented error
- Update all 4 component files with new references
Co-authored-by: wendevlin <12148533+wendevlin@users.noreply.github.com>
* Add missing this.items = items in itemChanged to avoid UI jump
The original _conditionChanged had this.conditions = conditions before
fireEvent to update local state and avoid UI jumps. This was lost during
the mixin extraction.
Co-authored-by: MindFreeze <5219205+MindFreeze@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: wendevlin <12148533+wendevlin@users.noreply.github.com>
Co-authored-by: MindFreeze <5219205+MindFreeze@users.noreply.github.com>
* Make "now-12m" use month boundaries
Currently the "Last 12 Months" date function calculates precisely 12 months from the current day. So today is March 10, then it would retrieve April 11 to March 10.
However logically the name implies whole months - i.e. "now" would be "March", so the last 12 months ought to be Apr 1 to March 31.
* Let energy date picker detect 12 Month range
With now-12m changed to mean whole months rather than partial months, we can make the energy date picker nicely detect and render any month range, and also fix the now button so that it can pick a "now-12m" range.
* Use Short Month for Displayed Range
To avoid making the displayed range too large to fit on small screens.
* Move subMonths into calcDate fn not input
Perform both startOfMonth and subMonths as a custom function in calcDate rather than performing subMonths on the input to avoid any wierd timezone issues.
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
Add padding to the #slider element in ha-slider to expand its touch
target to 32px, making sliders easier to interact with on touch devices.
Remove the pointer-events: none workaround on the volume slider in the
media player more-info dialog. This workaround disabled touch interaction
entirely on coarse pointer devices, which is no longer needed now that
the slider has an adequately sized touch target.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Allow trace graph to scroll independently
* Apply independent trace graph scrolling to script trace
Port the independent column scrolling and sticky nav overlay from
ha-automation-trace to ha-script-trace, and add scroll-to-active-node
behavior to hat-script-graph.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Re-encapsulate nav buttons inside hat-script-graph
Move the up/down navigation buttons back into hat-script-graph where they
belong, restoring _previousTrackedNode/_nextTrackedNode as private. Wrap
the graph content in a div.graph-scroll so it scrolls independently while
the button column stays fixed — the same flex-row layout the parent was
using, now self-contained inside the shadow DOM.
This removes the duplicated nav overlay markup and disabled-state logic
from ha-automation-trace and ha-script-trace, and removes the unnecessary
public surface on HatScriptGraph.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Make not-scrollable more specific.
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>
Filter hidden entities in common controls section strategy
Match filtering behavior of area/room view strategies by excluding entities
marked as hidden (via hidden_by: user/integration/device) from the common
controls section. This ensures consistency across all auto-generated
dashboard strategies and respects user preferences for entity visibility.
* Fix missed spacing token usage
* Reduce Date Picker Collapse Button Width
Remove unnecessary padding between date icon button and date text and allow next/prev to be shown for 20px narrower screens.
* Reduce calendar icon size for narrow screens
Allows use of screens down to 325px wide before the next/prev buttons are lost.
Given most android screens are >=360px this is a big improvement as before this change the hide limit was 370px.
* Correct missing ha-tooltip CSS variable
We were missing a default for the `--wa-tooltip-border-width` variable which meant the arrow from the tooltip disappeared in WA 3.3.1.
* Fix tooltip in ha-slider
When displaying the "now" value on statistics graphs, don't include a "null" data point for sum/change type graphs, just skip entirely.
Otherwise for you get a messy null data point in the tooltip.
Skip fetching hourly statistics when hours_to_show < 1 since hourly
aggregates produce stale outlier points in sub-hour chart windows
(e.g. hours_to_show: 0.1 or 0.05).
Also fix Date object handling in ha-chart-base downsampling bounds
extraction.
* Update design of app store repositories dialog
* Cleanup
* Move to new page
* Move to new page
* Update label
* Migrate translations
* Add loading state to dialog box
* Create dedicated app store registries page
* Add validation for required fields in ha-auth-flow before submission
* Add reportValidity methods to form components for improved validation handling
* Remove async reportValidity funcs
* Review
* Add audits and yaml mode to more info details
* Reset yaml mode on back
* Use mapped array for state entries
* Typo
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
* Memoize
* Rename
* Fix
* Format audits in normal mode
* Refactor, dont pass hass
---------
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
* Add audits and yaml mode to more info details
* Reset yaml mode on back
* Use mapped array for state entries
* Typo
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
* Memoize
* Rename
* Fix
* Format audits in normal mode
* Refactor, dont pass hass
---------
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
* Enhance narrow property to reflect changes and adjust header padding for safe area
* Remove safe-area-inset-top for narrow iframe
* handle kiosk mode
* Add flow rate picker to gas, water, and water device energy dialogs
Add optional flow rate (stat_rate) picker to gas source, water source,
and water device configuration dialogs, matching the pattern used for
power tracking in grid/solar/battery sources and energy devices.
- Add stat_rate to GasSourceTypeEnergyPreference and WaterSourceTypeEnergyPreference
- Collect gas/water stat_rate in getReferencedStatisticIdsPower()
- Add flow rate ha-statistic-picker filtered to volume_flow_rate device class
- Move entity help text to picker helper props for cleaner layout
* Apply suggestions from code review
Co-authored-by: Norbert Rittel <norbert@rittel.de>
---------
Co-authored-by: Norbert Rittel <norbert@rittel.de>
* Reorganize ZWave settings
* Next iteration
* Made more consistent with Zigbee settings page
* Update text
* Updates on the provisioned devices page
* Add identifier when you have multiple networks
* Update to force remove button
* Update button text
* Update rebuild text
* Update remove foreign device button text
* Fix scrim closure
* Trigger add todo item dialog via add_item=true search param
* Check supports before opening prompt
* Use in willUpdate
* Add subtitle as context using name of list
* fix styles to prevent oveflow
* use a new variable to define min-width
* pass a "minWidth" property into ha-language-picker
* use a "minWidth" property for ha-generic-picker
* Update ha-language-picker.ts
* pass empty minWidth
* do not set min-width if empty
* add a style for ha-language-picker
* remove a style for ha-language-picker
* add a style for ha-language-picker
* remove min-width
* add a style for ha-language-picker
* Update src/panels/profile/ha-pick-language-row.ts
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* add a gap
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Add support for vacuum segment mapping to areas
* simplify, use list item
* Update ha-more-info-view-vacuum-segment-mapping.ts
* review
* review
* Update dialog-vacuum-segment-mapping.ts
* Add option to split antimeridian-crossing path to ha-map
and map card with related editor options
* Remove split antimeridian-crossing option in ha-map
making it the default behavior, as suggested by @karwosts. And remove the option from the map card
* Fix longitudeDifference is zero edge case
* Fix history timeline showing same color for all zones
For person and device_tracker entities, zone states (e.g. "Kitchen",
"Office") all resolved to --state-person-active-color because their
zone-specific CSS variables don't exist and the fallback chain always
landed on the generic active color.
Now zone states only check for an explicitly defined CSS variable
(e.g. --state-person-kitchen-color) and otherwise fall through to the
generic color handler which assigns a unique palette color per zone.
Fixes#14705
* Update src/components/chart/timeline-color.ts
Co-authored-by: Wendelin <12148533+wendevlin@users.noreply.github.com>
---------
Co-authored-by: Wendelin <12148533+wendevlin@users.noreply.github.com>
The old `--ha-animation-base-duration` variable was split into three
separate variables: `--ha-animation-duration-fast` (150ms),
`--ha-animation-duration-normal` (250ms), and
`--ha-animation-duration-slow` (350ms).
Extract CSV dump logic from ha-panel-energy into a reusable
downloadEnergyData() utility in data/energy.ts, and add a
"Download data" button to the period selector's overflow menu.
This makes the download accessible from both the energy panel
and energy cards on regular dashboards.
* Replace filled help icon with outlined version across frontend
Updated help icon from mdiHelpCircle to mdiHelpCircleOutline for
visual consistency across the application. This change affects help
tooltips and icon buttons in configuration panels, dialogs, and
Lovelace editor components.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* Update src/panels/config/ha-panel-config.ts
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
* Smarter floor/area grouping for energy sankey cards
Instead of hiding floors and areas whenever any device has an upstream
parent (included_in_stat), check whether each parent shares the same
area as its children. Only disable grouping when a mismatch is found.
* Allow missing area for parent or child
---------
Co-authored-by: Simon Lamon <32477463+silamon@users.noreply.github.com>
Add panel.developer_tools as an additional translation key for the developer tools in `configSections`. Otherwise the title of the page is simply Settings.
* Correct options reset in ha-selector-select
Separate out the handling of resetting for select elements in `ha-selector-select` from the main value changed callback.
This fixes a bug that prevented `ha-selector-select` elements operating in `list` mode from updating their value due to recent changes in the reset logc.
* Split radio changed callback for consistency
Correct hardcoded collection keys
Some elements in the energy overview strategy, and all in the energy view strategy were using hardcoded literals rather than the assigned collection key.
Fix bug in energy-period-selector
When the dropdown item for compare is disabled, the click callback still fires, allowing compare to be selected. So remove the callback for disabled buttons.
Also fix a slight visual bug in the ha-ripple border radius.
* Replace ha-divider with wa-divider in onboarding and dashboard components
* Refactor styles in onboarding-welcome component for consistency and responsiveness
* Improve PR template and add AI agent instructions
Move screenshots section closer to proposed change for better flow, and add instructions in copilot-instructions.md to ensure AI agents use the PR template when creating pull requests.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Instruct AI agents to not check checklist items on behalf of the user
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Remind user to add screenshots for UI changes after creating PR
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Hide actions in attributes view
Simplify the isDefaultView condition to hide actions when child views are shown in the more-info dialog.
Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
* Remove keepHeader option from ChildView interface
Completely removes the keepHeader property which was used to keep the header visible in child views. This simplifies the logic and ensures actions are consistently hidden across all child views, including the attributes view.
Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
* Migrate config-apps dialog(s) to wa
* Apply suggestions from code review
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Use standard buttons
* Use back action
* Remove extra close action
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Add repairs and updates cards to home dashboard overview
Add two new cards to the "For You" section of the home dashboard that display
links to repairs and updates when there are active issues or available updates.
Both cards are only visible to admin users and hide when empty.
https://claude.ai/code/session_013NTgs1U9x59uaEJs1smy8i
* Fix navigation and visibility
* Reorder
---------
Co-authored-by: Claude <noreply@anthropic.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).
* fix margin-top for ha-entity-picker
* Apply suggestion from @MindFreeze
* use ha-space var
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* fix unit for monetary
* fix for span
* formatEntityStateToParts() does not return "order"
* get unit from formatEntityStateToParts()
* resolving conflicts
* resolving conflicts
* some styling
* Move AI task to its own page and change General into Home information
* Fixed unused state properties for form submission states, removed unused imports and obsolete CSS, replaced hardcoded pixel values with spacing tokens, and added error handling for the map component.
* Update src/panels/config/core/ha-config-section-general.ts
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* 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>
* Migrate profile dialog(s) to wa
* Make sure code is entered before submit is allowed
* Refactor dialog
* Remove unused params
* Pass existing names and validate name is not already used
* Reduce cleanup on show
* Make QR image larger
* max width
* Fix
* Remove extra event fire
* Make params required
* cleanup
* Cleanup
* Fix
* Fix
* Update @home-assistant/webawesome to version 3.2.1 and refactor ha-dropdown integration in automation picker
* review
* revert wa update
* Update @home-assistant/webawesome to version 3.0.0-ha.2 in yarn.lock
* Add splitNumber option to monthly ECharts
When there are a small number of bars (<=3) for monthly data, set the splitNumber parameter to force the date x-axis to show whole months.
* Add axis tick fomratting for short months
This ensures that the month format is consistent between 2/3 month and longer ranges.
* Avoid calling getSuggestedMax twice
* Fix another case of power chart cutting off last hour of data
The previous fix only solved the problem for 5-minute data, not hourly or daily. This should solve the issue regardless, and allows the energy chart to have other line-based plots in the future.
* Update other uses of getSuggestedMax()
* Fix statistics-chart Last Period Rendering
1. When appending the "current state" value, if the current time intersects with the final period, we can end up with the chart folding back on itself. This is fixed by ensuring for the final period we push the earlier of the statistic end time and the display end time (which is in turn limited to now).
2. Always close off the last data point at the chart end time. Otherwise for line charts, the final period doesn't get rendered.
* Remove unused monthStyle formatter.
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Rename getSuggestedMax function parameter in energy chart
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
* Document magic numbers in montly energy chart
* Make padding a constant for clarity.
* Explain the purpose of splitNumber.
---------
Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.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.
* fix padding & margin
* fix margin for icon
* fix margin for icon
* fix margin for image
* use ha-space-4
* use --ha-space-4
* use ha-space-1
* use ha-space-4
* fix styles
* fix a gap between logos
* fix a gap between logos
* fix right margin for logo
* fix right margin for logo
* show icons in flex
* remove unneeded style
* add right margin for logo
YAML dashboards are defined in configuration files and cannot be
modified or deleted through the UI. This change ensures the edit
and delete actions are only shown for storage-mode dashboards.
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
1. Always use `withViewTransition()` wrapper for automatic fallback
2. Keep transitions simple (subtle crossfades and fades work best)
3. Use `--ha-animation-base-duration` CSS variable for consistent timing
3. Use `--ha-animation-duration-*` CSS variables for consistent timing (`fast`, `normal`, `slow`)
4. Assign unique `view-transition-name` to elements (must be unique at any given time)
5. For Lit components: Override `performUpdate()` or use `::part()` for internal elements
@@ -214,13 +214,6 @@ By default, `:root` receives `view-transition-name: root`, creating a full-page
- Only one view transition can run at a time
- **Shadow DOM incompatibility**: View transitions operate at document level and do not work within Shadow DOM due to style isolation ([spec discussion](https://github.com/w3c/csswg-drafts/issues/10303)). For web components, set `view-transition-name` on the `:host` element or use document-level transitions
- Use HTTPS - All external resources must use HTTPS
- CSP compliance - Ensure code works with Content Security Policy
### Pull Requests
When creating a pull request, you **must** use the PR template located at `.github/PULL_REQUEST_TEMPLATE.md`. Read the template file and use its full content as the PR body, filling in each section appropriately.
- Do not omit, reorder, or rewrite the template sections
- Check the appropriate "Type of change" box based on the changes
- Do not check the checklist items on behalf of the user — those are the user's responsibility to review and check
- If the PR includes UI changes, remind the user to add screenshots or a short video to the PR after creating it
- Be simple and user friendly — explain what the change does, not implementation details
@@ -19,7 +19,7 @@ The Home Assistant interface is based on Material Design. It's a design system c
We want to make it as easy for designers to contribute as it is for developers. There’s a lot a designer can contribute to:
- Meet us at <a href="https://www.home-assistant.io/join-chat-design" rel="noopener noreferrer" target="_blank">Discord #designers channel</a>. If you can't see the channel, make sure you set the correct role in Channels & Roles.
- Find the latest UX <a href="https://github.com/home-assistant/frontend/discussions?discussions_q=label%3Aux" rel="noopener noreferrer" target="_blank">discussions</a> and <a href="https://github.com/home-assistant/frontend/labels/ux" rel="noopener noreferrer" target="_blank">issues</a> on GitHub. Everyone can start a new issue or discussion!
@@ -158,5 +176,5 @@ export function theme2hex(themeColor: string): string {
// We have a named color, and there's nothing in the table,
// so nothing further we can do with it.
// Compare/border/background color will all be the same.
returnthemeColor;
returncolor;
}
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.