- Shipped
- July 6, 2026 at 1:29 AM UTC
- Author
- kamo
- Commit
- 67fb265
Turn the two hardcoded navs (NavPri/NavTop) into a data-driven, per-member system. - Single nav registry (navRegistry) + pure resolver (resolveNavLayout) enforcing the invariants: every gated option lives in exactly one nav, gate-hidden options drop, newly-eligible options land at their default, nothing is ever lost/duplicated. - NavLayoutContext persists the layout per member via the existing ui-preferences store (cross-device, no backend change) and drives --nav-pri-width so an expanded rail reflows the shell with no magic numbers. - Always-on drag between NavPri and NavTop plus reorder within each nav screen-reader announcements. - NavPri gains expanded (icon + label + inline sub-lists) and collapsed (icons-only, fly-out sub-options) modes with hover-to-peek and a collapse toggle; adds active-route highlighting + aria-current; triggers are real <button>s. - The five tool buttons **************** become portable via one NavToolButton primitive — downward popover in the bar, right fly-out in the collapsed rail, inline list in the expanded rail — preserving their exact handlers. - Dedicated /settings/navigation page: move/reorder options, choose rail behavior, Reset to Standard with undo; linked from the Settings slide-out (top) and /settings. - ⌘K / Ctrl-K command palette to jump to any option. - Desktop/tablet only (gated on the md breakpoint); mobile keeps the static nav. - Deletes the superseded nav plumbing (NavPriItemWithPanel, NavPriLayout, NavPriPanel, NavInfo, NavPanelLink, NewDocumentButton).