From 6ab363f8dfca3903470d331778334986c7171d5a Mon Sep 17 00:00:00 2001 From: Shyamalan Kannan <78594762+Yabuku-xD@users.noreply.github.com> Date: Tue, 28 Apr 2026 04:52:57 -0700 Subject: [PATCH] fix(ui): keep settings sidebar open, center content, and fix worktree refresh (#1058) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(ui): keep settings sidebar open, center content, and fix worktree refresh - Prevent settings nav from collapsing on split pages (Magic Prompts, Agents, etc.) - Center settings content with max-w-3xl for better layout on wide screens - Widen settings window from 960px to 1200px max-width - Fix source branch dropdown overflow with max-height and scrolling - Add worktreeRefreshNonce to trigger immediate sidebar refresh after worktree creation * ref(ui): address Greptile review — remove dead isNavCollapsed code and split worktree effect - Remove isNavCollapsed variable and all dead branches (resize handle, renderSettingsNav param, SETTINGS_NAV_RAIL_WIDTH) - Split SessionSidebar effect so worktreeRefreshNonce only triggers discoverWorktrees, not refreshGlobalSessions - Both type-check and lint pass * fix(ui): refine settings and worktree dropdown behavior --------- Co-authored-by: Bohdan Triapitsyn --- .../components/session/NewWorktreeDialog.tsx | 4 +- .../ui/src/components/ui/dropdown-menu.tsx | 4 +- .../ui/src/components/views/SettingsView.tsx | 73 ++++++++----------- .../src/components/views/SettingsWindow.tsx | 2 +- 4 files changed, 35 insertions(+), 48 deletions(-) diff --git a/packages/ui/src/components/session/NewWorktreeDialog.tsx b/packages/ui/src/components/session/NewWorktreeDialog.tsx index f8926629..509e8eb0 100644 --- a/packages/ui/src/components/session/NewWorktreeDialog.tsx +++ b/packages/ui/src/components/session/NewWorktreeDialog.tsx @@ -1593,7 +1593,7 @@ export function NewWorktreeDialog({ - + - + + = ({ onClose, forceMobile return getSettingsPageMeta(settingsSlug); }, [settingsSlug]); - // Collapse main nav to icon rail when active page has its own sidebar - const isNavCollapsed = !isMobile && activePageMeta?.kind === 'split'; + // Nav is always open (collapsed state removed) const openChamberSectionBySlug: Partial> = React.useMemo(() => ({ appearance: 'visual', @@ -544,7 +542,7 @@ export const SettingsView: React.FC = ({ onClose, forceMobile setMobileStage('page-sidebar'); }, []); - const renderSettingsNav = (collapsed: boolean) => { + const renderSettingsNav = () => { return (
{/* Scrollable nav items */} @@ -556,7 +554,7 @@ export const SettingsView: React.FC = ({ onClose, forceMobile if (!Icon) return null; return ( - + - {collapsed && ( - - {getPageTitle(page.slug)} - - )} ); })}
- {/* Footer — hidden when collapsed via overflow on parent */} -
+ {/* Footer */} +
{!runtimeCtx.isVSCode && ( @@ -636,7 +619,7 @@ export const SettingsView: React.FC = ({ onClose, forceMobile return (
- {renderSettingsNav(false)} + {renderSettingsNav()}
); @@ -686,16 +669,20 @@ export const SettingsView: React.FC = ({ onClose, forceMobile
{renderPageSidebar(settingsSlug, {})}
-
- {renderPageContent(settingsSlug)} +
+
+ {renderPageContent(settingsSlug)} +
); } return ( -
- {renderPageContent(settingsSlug)} +
+
+ {renderPageContent(settingsSlug)} +
); }; @@ -792,28 +779,26 @@ export const SettingsView: React.FC = ({ onClose, forceMobile : runtimeCtx.isVSCode ? 'bg-background' : 'bg-sidebar', - isResizing && !isNavCollapsed ? '' : 'transition-[width,min-width] duration-200 ease-[cubic-bezier(0.25,0.1,0.25,1)]' + isResizing ? '' : 'transition-[width,min-width] duration-200 ease-[cubic-bezier(0.25,0.1,0.25,1)]' )} style={{ - width: isNavCollapsed ? `${SETTINGS_NAV_RAIL_WIDTH}px` : `${navWidth}px`, - minWidth: isNavCollapsed ? `${SETTINGS_NAV_RAIL_WIDTH}px` : `${navWidth}px`, + width: `${navWidth}px`, + minWidth: `${navWidth}px`, borderColor: 'var(--interactive-border)', }} > - {!isNavCollapsed && ( -
- )} +
- {renderSettingsNav(isNavCollapsed)} + {renderSettingsNav()}
diff --git a/packages/ui/src/components/views/SettingsWindow.tsx b/packages/ui/src/components/views/SettingsWindow.tsx index c4923797..00e961f2 100644 --- a/packages/ui/src/components/views/SettingsWindow.tsx +++ b/packages/ui/src/components/views/SettingsWindow.tsx @@ -41,7 +41,7 @@ export const SettingsWindow: React.FC = ({ open, onOpenChan aria-describedby={descriptionId} className={cn( 'fixed z-50 top-[50%] left-[50%] translate-x-[-50%] translate-y-[-50%]', - 'w-[90vw] max-w-[960px] h-[85vh] max-h-[900px]', + 'w-[90vw] max-w-[1200px] h-[85vh] max-h-[900px]', 'rounded-xl border shadow-none overflow-hidden', 'bg-background' )}