Member-configurable navigation — drag options between rail & top bar, expandable rail, per-member layout

Featurekamo-internal
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).

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing