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 (