Unify graph docking, fix device hot-switch, and compact UI cards

- Unify minimap/toolbar/legend drag+dock into shared _makeDraggable() helper
- Persist legend visibility and position, add active state to toggle buttons
- Show custom colors only on graph cards (entity defaults remain in legend)
- Replace emoji overlay buttons with SVG path icons
- Fix stale is_running blocking target start (auto-clear if task is done)
- Resolve device/target IDs to names in conflict error messages
- Hot-switch LED device on running target via async stop-swap-start cycle
- Compact automation dashboard cards and fix time_of_day localization
- Inline CSS source pill on target cards to save vertical space

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-14 21:12:12 +03:00
parent 272cb69247
commit 6395709bb8
8 changed files with 224 additions and 139 deletions

View File

@@ -42,9 +42,12 @@ class WledOutputTarget(OutputTarget):
def sync_with_manager(self, manager, *, settings_changed: bool,
css_changed: bool = False,
device_changed: bool = False,
brightness_vs_changed: bool = False) -> None:
"""Push changed fields to the processor manager."""
"""Push changed fields to the processor manager.
NOTE: device_changed is handled separately in the route because
update_target_device is async (stop → swap → start cycle).
"""
if settings_changed:
manager.update_target_settings(self.id, {
"fps": self.fps,
@@ -55,8 +58,6 @@ class WledOutputTarget(OutputTarget):
})
if css_changed:
manager.update_target_css(self.id, self.color_strip_source_id)
if device_changed:
manager.update_target_device(self.id, self.device_id)
if brightness_vs_changed:
manager.update_target_brightness_vs(self.id, self.brightness_value_source_id)