From f531618d0f594e6a963e7a51366b86d2fe59f5c4 Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Mon, 22 Jun 2026 02:28:57 -0700 Subject: [PATCH] feat(dashboard): mobile nav - Dashboard first tab; Skills overflow-only - Dashboard (Command Center) is the first mobile bottom-nav tab (before Tasks), matching the desktop sidebar. - Skills is never a top-level mobile tab; when enabled it lives only in the three-dot More sheet. - Tests updated to the new order/More-sheet behavior (74 pass). Co-Authored-By: Claude Opus 4.8 (1M context) --- .../dashboard/app/components/MobileNavBar.tsx | 38 ++++++---- .../__tests__/MobileNavBar.test.tsx | 69 ++++++++++++------- 2 files changed, 66 insertions(+), 41 deletions(-) diff --git a/packages/dashboard/app/components/MobileNavBar.tsx b/packages/dashboard/app/components/MobileNavBar.tsx index 7a6ae75c95..8959a4f412 100644 --- a/packages/dashboard/app/components/MobileNavBar.tsx +++ b/packages/dashboard/app/components/MobileNavBar.tsx @@ -262,7 +262,11 @@ export function MobileNavBar({ // Keep optional primary tabs limited to preserve touch-target width. // Overflowed destinations remain available in the More sheet. - const showSkillsTopLevel = skillsEnabled; + /* + FNXC:Navigation 2026-06-22-01:40: + Skills is never a top-level mobile tab; when enabled it lives only in the three-dot More overflow sheet. + */ + const showSkillsTopLevel = false; const showSkillsInMore = skillsEnabled && !showSkillsTopLevel; const sortedPrimaryPluginViews = pluginDashboardViews .filter((entry) => entry.view.placement === "primary") @@ -307,6 +311,24 @@ export function MobileNavBar({ role="tablist" aria-label={t("nav.primaryNavAriaLabel", "Primary navigation")} > + {/* + FNXC:Navigation 2026-06-22-01:40: + Dashboard (Command Center) is the first mobile tab, before Tasks, matching the desktop sidebar order. + */} + + - {showSkillsTopLevel && (