From 185ff70d863312c934279650af58259ae3f4ad20 Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Sat, 20 Jun 2026 21:23:17 -0700 Subject: [PATCH] FN-6819: keep sidebar settings above footer Keep the experimental left sidebar Settings control clear of the fixed executor footer while preserving readable project selector fallbacks. - Share the executor footer visibility state with the left sidebar and project content. - Reserve executor-footer height on the sidebar when the status footer is visible so Settings stays clickable in expanded and collapsed modes. - Add project-selector translation fallbacks for incomplete locale fixtures. - Cover footer-clearance behavior in left sidebar tests and add a patch changeset. Files changed: .changeset/fn-6819-sidebar-footer-clearance.md | 5 +++ packages/dashboard/app/App.tsx | 8 +++-- .../dashboard/app/components/LeftSidebarNav.css | 9 ++++++ .../dashboard/app/components/LeftSidebarNav.tsx | 4 ++- .../dashboard/app/components/ProjectSelector.css | 2 +- .../dashboard/app/components/ProjectSelector.tsx | 11 +++++-- .../components/__tests__/LeftSidebarNav.test.tsx | 36 ++++++++++++++++++++++ 7 files changed, 67 insertions(+), 8 deletions(-) Fusion-Task-Id: FN-6819 Fusion-Task-Lineage: 950da852-8dcf-4379-a91b-0188b12d1a6c --- .../fn-6819-sidebar-footer-clearance.md | 5 +++ packages/dashboard/app/App.tsx | 8 +++-- .../app/components/LeftSidebarNav.css | 9 +++++ .../app/components/LeftSidebarNav.tsx | 4 ++- .../app/components/ProjectSelector.css | 2 +- .../app/components/ProjectSelector.tsx | 11 ++++-- .../__tests__/LeftSidebarNav.test.tsx | 36 +++++++++++++++++++ 7 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 .changeset/fn-6819-sidebar-footer-clearance.md diff --git a/.changeset/fn-6819-sidebar-footer-clearance.md b/.changeset/fn-6819-sidebar-footer-clearance.md new file mode 100644 index 0000000000..5758d00f30 --- /dev/null +++ b/.changeset/fn-6819-sidebar-footer-clearance.md @@ -0,0 +1,5 @@ +--- +"@runfusion/fusion": patch +--- + +Fix the experimental left sidebar Settings button so it remains clear of the fixed executor status footer, and keep project-selector fallback labels readable when translations are incomplete. diff --git a/packages/dashboard/app/App.tsx b/packages/dashboard/app/App.tsx index fed57307fd..b6c4f87b6d 100644 --- a/packages/dashboard/app/App.tsx +++ b/packages/dashboard/app/App.tsx @@ -1036,7 +1036,8 @@ function AppInner() { Experimental left sidebar navigation replaces the Header view shortcuts with a persistent sidebar on non-mobile project screens, while mobile continues to use the bottom navigation bar as the only primary navigation surface. */ const leftSidebarNavEnabled = experimentalFeatures.leftSidebarNav === true; - const sidebarActive = leftSidebarNavEnabled && !isMobile && viewMode === "project" && !!currentProject; + const executorFooterVisible = viewMode === "project" && !!currentProject; + const sidebarActive = leftSidebarNavEnabled && !isMobile && executorFooterVisible; const agentOnboardingEnabled = experimentalFeatures.agentOnboarding === true; const agentsEnabled = true; @@ -2136,15 +2137,16 @@ function AppInner() { currentProject={currentProject} onSelectProject={handleSelectProject} onViewAllProjects={handleViewAllProjects} + footerVisible={executorFooterVisible} /> )}
{renderMainContent()}
- {viewMode === "project" && currentProject && ( + {executorFooterVisible && currentProject && ( 0 ? remoteData.tasks : tasks} projectId={currentProject.id} diff --git a/packages/dashboard/app/components/LeftSidebarNav.css b/packages/dashboard/app/components/LeftSidebarNav.css index 04edbcc453..064dd9f7d8 100644 --- a/packages/dashboard/app/components/LeftSidebarNav.css +++ b/packages/dashboard/app/components/LeftSidebarNav.css @@ -8,6 +8,7 @@ The experimental sidebar is a persistent desktop/tablet navigation replacement f position: relative; display: flex; flex-direction: column; + box-sizing: border-box; width: var(--left-sidebar-nav-width); min-width: var(--left-sidebar-nav-width); min-height: 0; @@ -16,6 +17,14 @@ The experimental sidebar is a persistent desktop/tablet navigation replacement f color: var(--text); } +/* +FNXC:Navigation 2026-06-20-00:00: +The left sidebar is a sibling of project-content, so it does not inherit project-content footer padding. When the fixed executor status bar is rendered, reserve the shared --executor-footer-height on the aside so the bottom Settings button remains visible and clickable above the footer. +*/ +.left-sidebar-nav--with-footer { + padding-bottom: var(--executor-footer-height); +} + .left-sidebar-nav__collapse-toggle { flex-shrink: 0; } diff --git a/packages/dashboard/app/components/LeftSidebarNav.tsx b/packages/dashboard/app/components/LeftSidebarNav.tsx index b2272e60d3..4f4daf30da 100644 --- a/packages/dashboard/app/components/LeftSidebarNav.tsx +++ b/packages/dashboard/app/components/LeftSidebarNav.tsx @@ -115,6 +115,7 @@ export interface LeftSidebarNavProps { currentProject?: ProjectInfo | null; onSelectProject?: (project: ProjectInfo) => void; onViewAllProjects?: () => void; + footerVisible?: boolean; } function formatCount(count: number): string { @@ -160,6 +161,7 @@ export function LeftSidebarNav({ pluginDashboardViews = [], showAgentsTab = false, showSkillsTab = false, + footerVisible = false, }: LeftSidebarNavProps) { const { t } = useTranslation("app"); const [sidebarWidth, setSidebarWidth] = useState(readStoredSidebarWidth); @@ -390,7 +392,7 @@ export function LeftSidebarNav({ return (