feat(ui): render the Cockpit Contact card from a store

The Cockpit controller no longer writes the Contact card's scope,
navigation state, cohort counts, nearest contact, bearing, uncertainty,
update time or weather toggle: it keeps them as plain state, starting
from cockpitContextState.js, and publishes a copy to the gev-cockpit
store, and a new CockpitContext component renders it. A lost contact
still holds its last readout. The weather toggle flips from that state,
not the button's attribute. The card's visibility, collapse and layout
stay with the controller. The controller's publishBrief option becomes
a publish object, one entry per Cockpit view.
This commit is contained in:
Sameh Khamis committed 2026-10-31 14:08:19 -07:00
1 parent 82bbf16a8f
commit ffe14e50f5
14 files changed
+518 -183

No files matched your search

+11 -6
View File
@@ -128,12 +128,17 @@ They contain no application state.
backdrop to the end of the page from the first publish until the shell
is destroyed; the shell takes their clicks from the document), then
Cockpit (in progress: `CockpitBriefing` renders the briefing card's
pages, cycle toggle, regional news and local conditions from the
`gev-cockpit` store that the Cockpit controller publishes to, starting
from `cockpitBriefPages.js`, which both read; the controls keep the
controller's listeners, and the route card and signal list keep their
owners' bindings for now). Layers that write into the right rail
directly gain a slot instead.
pages, cycle toggle, regional news and local conditions, and
`CockpitContext` the Contact card's scope, navigation, counts, nearest
contact and weather toggle, from the `gev-cockpit` store that the Cockpit
controller publishes to, starting from `cockpitBriefPages.js` and
`cockpitContextState.js`, which both read; the controls keep the
controller's listeners, and the cards' visibility, collapse and layout
stay with the controller. The signal rows, the route card, the
instruments and the radio controls follow; the signal rows become a
component that keeps their focus-safe reorder, since a keyed Vue list
would move the focused row and drop focus several times a second).
Layers that write into the right rail directly gain a slot instead.
4. **Cleanup.** The build-time template expansion and the attribute
translation pass are retired once nothing uses them. Hosts register panels