feat(ui): render the CCTV frame preview, source badge and summary from the store

The frame lifecycle keeps its request state in an object instead of the
image's dataset and publishes it; the panel binds the image's src, class
and data attributes and the wrapper's loading and has-frame classes from
it, so preload tokens, kept pixels on a failed refresh and clearing on a
camera change are unchanged. The source badge is the pure
presentCctvSourceBadge(), the live switch and the typed summary are
published too. The video surface still draws into the panel's canvas.
This commit is contained in:
Sameh Khamis committed 2026-10-30 21:54:42 -07:00
1 parent 6c7035f617
commit eef3dec759
10 files changed
+306 -177

No files matched your search

+3 -3
View File
@@ -87,9 +87,9 @@ They contain no application state.
Street level (done: `StreetLevelPanel` renders the `gev-street-level`
store that `StreetLevelControls` publishes to; the controls keep their
listeners, EXPAND, focus and resizing), CCTV (in progress: `CctvPanel`
renders the buttons, CAL chip, meta line and calibration readout, with
its inline pose editor, from the `gev-cctv` store; the picker, frame,
source badge and summary are still written by `CctvControls`), Layers, Display, Context and Radio, the command dock,
renders the whole panel from the `gev-cctv` store, including the inline
pose editor, the frame preview, source badge and typed summary;
`CctvControls` still fills the picker's options), Layers, Display, Context and Radio, the command dock,
the phone shell, then Cockpit. Layers that write into the right rail
directly gain a slot instead.