Replace reactive / usage in the navigation
store with imperative functions so behavior is identical under both the
client JSX runtime and the server build used by unit tests (where
/ are no-ops).
- Centralize tab-switch side effects (root-frame seed, pane/mode/
command/visual reset) in , invoked by a single
helper used by gotoTab/nextTab/prevTab.
- Convert depthStack/currentDepth/topFrame/selectedIds from
to plain functions that recompute on every read while still tracking
underlying signals in reactive contexts.
- Extract navigation state and logic into navigation-store.ts for
testability and separation of concerns
- NavigationContext now only wraps the store as a Solid provider
- Remove SIDEBAR_PANE from the model; depth-tabs have a single
focusable content pane (center/current column)
- Split LayerGraph and page imports into layer-graph.ts so the
navigation utils stay free of JSX (unit-testable)
- Update Shell keybind dispatch: remove sidebar pane handling,
simplify swipe to fixed-pane tabs only, clarify depth-tab h/l
- Add nav-model.test.ts covering depth stack, tab/pane focus, and
selection semantics