mirror of
https://github.com/home-assistant/frontend.git
synced 2026-09-30 16:59:17 +01:00
* Add people, devices, and zones overview to the map card in panel view When the map card is the single card of a panel view it shows a floating overview with People, Devices, and Zones tabs styled as an animated segmented control; on mobile it becomes a bottom sheet drawer that can be collapsed by tap or swipe. People list their zone or Away state with the last update time, devices only appear when they have a location, and zones show their occupant count while passive zones are hidden in this view. Selecting a row or map marker opens a detail view with a back button, a name that opens the more info dialog, and a 24h activity timeline: zone changes for a person or device, arrivals and departures per person for a zone. Selecting focuses the map (street level for people, the radius for zones, shown only while selected), marks the selected marker with a thicker border, shows the accuracy circle when the position is imprecise, and clicking the map deselects. In panel layout the overview sits at the start side, so the zoom control and map buttons move to the other side: ha-map gains a zoom-position property for that, and honours --ha-map-bottom-inset so the attribution and scale stay clear of the bottom sheet. * Resubscribe the map card's colors when the connection changes The card kept its entity color subscription on whichever connection it first saw. It now remembers that connection and subscribes anew when hass brings a different one, as ha-map already does. * Pause auto-fit before a deferred fit, and never select an empty tab An explicit fit that had to wait for the engine or for a size did not pause auto-fit until it ran, so an auto-fit queued in between could take its place. The pause comes first now. The overview's selected tab could be an empty, disabled one, showing an empty list while another tab had content and leaving aria-selected on a disabled button; the selection falls back to the first tab with items, which the tab stop already did. * Reuse the cards' show-more-info label in the map overview The overview added its own copy of a label the other cards already have translated; it uses the shared key and the duplicate is gone. * Keep a focused marker clear of the overview Focusing a person or zone fitted the full viewport, so the marker could land under the overview: the start side on desktop, the bottom sheet on phones. Fits now take viewport padding, both engines apply it per fit, and the card passes the overview's size as padding on the side it covers, honoring right-to-left layouts. * Report activity that could not load, and list only events inside the window A failed history request, or an instance without the history integration, read as no recent activity; the panel now says the activity could not be loaded. The first history sample is the state at the window's start, not a change inside it, so a person who has not moved for days no longer shows that old state as recent activity: samples before the window only seed the previous state, for zones and people alike. * Take the map card and overview colors from the registry context The card no longer runs its own color subscription, and the overview reads the registry entries for its zone list. * Keep automatic fits clear of the overview Only a selection fit knew about the drawer; the first fit and every auto-fit used the whole viewport, so markers could land under the drawer. ha-map takes a fit padding that automatic fits apply, and refits when it changes, so the map settles once the drawer reports its size. * Let the activity timeline scroll inside the drawer On phones the drawer body is capped at 60vh and clips its overflow for the collapse animation, so activity entries beyond that were unreachable. The activity box now scrolls within the drawer. * Keep the scale ruler and attribution beside the drawer on wide layouts The bottom inset that lifts the map controls above the drawer only applied on phones, so on desktop a tall drawer covered the scale ruler. ha-map gains left and right insets for its bottom controls, and the card reserves the drawer's width on the side it occupies. * Extract the activity timeline parsing and test it The window seeding, unavailable skipping and zone transition rules moved into pure functions with tests, so a regression in the People or Zones timeline no longer needs manual checking. * Show the activity timeline as logbook rows The overview rendered its own timeline items. It now uses ha-logbook-entry in its narrow layout, so activity reads like the logbook everywhere: the person, the zone they are in, and when. Arrivals and departures on the zone tab are the same rows for the person who moved. The card hands hass to the overview only for these rows. * Let the resizable bottom sheet stay open at a minimum height A persistent sheet stops at a pixel minimum instead of closing when dragged down, can open at its content height within a configurable share of the viewport rather than at least 55%, reports its height after opening and resizing, and lets a host shrink the grab area below the handle for content that sits right under it. The map overview uses all of this on phones; the automation editor keeps the previous behavior. * Show the overview as a bottom sheet on phones The overview had its own collapsible panel with a handle button and swipe handling. On phones it now renders inside ha-resizable-bottom-sheet in its persistent mode, so it resizes like the automation editor's sheet and stops at a strip with the tabs instead of closing. The sheet reports its height for the map's insets and fit padding; wide layouts keep the floating panel. * Let only the newest activity load show its result Comparing the selected entity after the fetch let an older load for the same entity pass when the user selected it, moved away, and came back, so a stale result or failure flag could overwrite the newer one. Number the loads and let only the most recent one commit its result. * Include people without a location in the map overview show_all builds the map entity list from located entities only, so people whose location is currently unknown never reached the overview's people list (with its no-location rows) or its zone activity history. Build a separate overview list that adds those people back, while the map markers keep the location filter. * Move focus with the map overview detail view Selecting an item swapped the list for the detail view (and back) without moving focus, so keyboard and screen-reader users lost their place on the removed element. Focus the detail heading when it opens, and restore focus to the originating item when returning to the list. * Keep the bottom sheet's minimum height correct after opening minHeight is a pixel value converted to a viewport percentage and cached once the sheet opens. Recompute it when the viewport changes (e.g. rotation) so the cached percentage can no longer clip the persistent peek content, and emit bottom-sheet-resized once a raised minimum has grown the sheet, so the host updates its overlay padding instead of holding a stale value until the next drag. * Address Copilot review on the map overview - Keep locationless people in the map entities so a marker appears once they are located, not only after a rebuild - Restore focus to the active tab when a back navigation's row is on another tab - Only reserve overview padding in panel layout * Draw the cluster bubble and its tail with one shadow The bubble carried its own box-shadow while the tail sat behind it, so the bubble's shadow fell across the tail and showed a seam. The bubble and tail now share one drop-shadow on the wrapper, so the tail reads as part of the bubble. * Bubble a lone person or device in a zone A zone group only bubbled with more than one member, so a single person or device in a zone showed as a plain marker instead of a bubble at the zone. Keyed (zone) groups now bubble even with one member, pinned to the zone; a marker that is not in a zone still shows plainly. * Recover located-later device trackers in the show_all overview show_all freezes the located entities at generation, so a standalone device tracker that gains a location afterwards stayed out of the Devices tab until reload. Recover eligible standalone trackers alongside people, skipping those that belong to a person.