Files
gods-eye-view/docs/UI-OWNERSHIP.md
T
Sameh Khamis 19ca67a6e5 docs: require Vue views, Pinia stores and the kit for new UI
CONTRIBUTING gains a Building UI section: new UX elements are Vue
components rendering a Pinia store their owner publishes to, portable
owners stay framework-free behind a publish option, controls come from
src/ui/kit first, controllers don't bind the DOM by hand (Teleport where a
view renders elsewhere; body classes, focus, same-task measured positions
and painted surfaces stay imperative), text goes through t()/tn() with
msg() for stored English, and tests mount components. The README and the
architecture summary drop the stale vanilla-JS claim, the UI ownership doc
points to the guide, and the migration doc's UiPanel note names
v-panel-state as what draws a panel's collapse.
2026-11-01 15:06:05 -08:00

2.6 KiB

Application UI ownership

src/ui/applicationShell.js constructs controls, connects their explicit inputs and coordinates shutdown. shellFacade.js preserves the methods used by layers, scene playback and voice. It delegates; new behavior belongs with its owner.

Owner Responsibility
navigationController.js Navigation generation, tracking release and camera authority
locationNavigation.js Destination lookup/selection, orbit, world jumps and globe-reset completion
cockpitCoordinator.js Cockpit entry/rollback, readouts and the single Display portal
visualSettings.js Effects, detection overrides, visual restoration and render-loop lifetime
panelChrome.js Disclosure, docking, layout and Cockpit panel restoration
panelNavigation.js Desktop panel rails: each side's offered panels and the open one
aircraftDisplay.js Shared commercial/military 3D display preferences and controls
layerBindings.js Data-manager attachment, selected-tracker adoption and camera-entry listeners
displayBindings.js Keyboard/display subscriptions and frame-rate monitor lifetime
shareRestoration.js Initial share/layer restoration and cancellation
shellFeedback.js Loading feedback, notices and toast lifetime

Owners that present UI do so through Vue: they publish plain view objects to a Pinia store in src/ui/stores/, views in src/ui/views/ render them, and user actions return through the handlers the owner connects to that store. See Building UI.

Owners receive named services, elements, operations and readers. They do not receive the application shell itself. Readers resolve a replaceable collaborator at use time; operations cross an ownership boundary without copying its state. The facade exposes existing properties as delegates rather than duplicate state.

Shutdown has two phases. First revoke input, deferred navigation, camera-entry listeners, lookups, timers and rendering work. Then await Context restoration, release sensor overrides while the manager is still attached, detach layer services and destroy scene resources. Late callbacks cannot acquire the camera. Manager replacement also releases subscriptions and the previous Directions module even if the replacement does not provide a Directions layer.

Source-contract tests follow both sides of delegated wiring. Lifecycle tests exercise pending reset cancellation, stale camera callbacks, replacement and idempotent teardown. Browser acceptance covers the composed application, including share restoration, scene commands, navigation, Cockpit, display and voice.