From 540ec293d8abe814f7693093815e20fef08cc9db Mon Sep 17 00:00:00 2001 From: Exotic <118054752+extoci@users.noreply.github.com> Date: Sat, 5 Sep 2026 20:22:42 +0300 Subject: [PATCH 1/3] fix(web): make settings rows consistent Fix the extra project-row indent and rounded internal separators in grouped settings sections. Let the parent sections own row geometry across source control and connections. Codex, GPT-5.6-luna via T3 Code. --- apps/web/src/components/settings/ConnectionsSettings.tsx | 4 ++-- apps/web/src/components/settings/SettingsPanels.tsx | 2 +- .../src/components/settings/SourceControlSettings.tsx | 9 ++------- apps/web/src/components/settings/itemRows.ts | 4 ++-- 4 files changed, 7 insertions(+), 12 deletions(-) diff --git a/apps/web/src/components/settings/ConnectionsSettings.tsx b/apps/web/src/components/settings/ConnectionsSettings.tsx index 5a6f3ebd70b0..fd3a82429adc 100644 --- a/apps/web/src/components/settings/ConnectionsSettings.tsx +++ b/apps/web/src/components/settings/ConnectionsSettings.tsx @@ -394,7 +394,7 @@ function formatDesktopSshConnectionError(error: unknown): string { return withoutTaggedErrorPrefix.trim() || fallback; } -const ENDPOINT_ROW_CLASSNAME = "rounded-xl px-3 py-2.5 sm:px-4"; +const ENDPOINT_ROW_CLASSNAME = "px-3 py-2.5 sm:px-4"; type AccessSectionPresentation = "current" | "endpoint-rail"; @@ -404,7 +404,7 @@ function accessRowClassName(_presentation: AccessSectionPresentation) { function endpointRowClassName(presentation: AccessSectionPresentation, isAvailable: boolean) { if (presentation === "endpoint-rail") { - return cn("relative rounded-xl px-3 py-3 sm:px-4", !isAvailable && "bg-muted/15"); + return cn("relative px-3 py-3 sm:px-4", !isAvailable && "bg-muted/15"); } return cn(ENDPOINT_ROW_CLASSNAME, !isAvailable && "bg-muted/24"); diff --git a/apps/web/src/components/settings/SettingsPanels.tsx b/apps/web/src/components/settings/SettingsPanels.tsx index e79464d1757c..90bdf36b3ea0 100644 --- a/apps/web/src/components/settings/SettingsPanels.tsx +++ b/apps/web/src/components/settings/SettingsPanels.tsx @@ -2603,7 +2603,7 @@ export function GeneralSettingsPanel() { +
@@ -431,7 +426,7 @@ function SourceControlSectionSkeleton({ return ( {SOURCE_CONTROL_SKELETON_ROWS.map((row) => ( -
+
diff --git a/apps/web/src/components/settings/itemRows.ts b/apps/web/src/components/settings/itemRows.ts index e207c9ff7a78..0ae49e056aee 100644 --- a/apps/web/src/components/settings/itemRows.ts +++ b/apps/web/src/components/settings/itemRows.ts @@ -1,5 +1,5 @@ -/** Direct row in a settings section. Whitespace, rather than rules, separates peers. */ -export const ITEM_ROW_CLASSNAME = "rounded-xl px-3 py-3 sm:px-4"; +/** Direct row in a grouped settings section. The parent owns borders and separators. */ +export const ITEM_ROW_CLASSNAME = "px-3 py-3 sm:px-4"; export const ITEM_ROW_INNER_CLASSNAME = "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"; From 2e683d817b7cd820f45e12e36d0ce2609c1807e2 Mon Sep 17 00:00:00 2001 From: extoci Date: Sat, 5 Sep 2026 19:38:07 +0000 Subject: [PATCH 2/3] fix(web): avoid settings animation on entry --- apps/web/src/components/AppSidebarLayout.tsx | 6 ++++-- apps/web/src/components/settings/SettingsSidebarNav.tsx | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/web/src/components/AppSidebarLayout.tsx b/apps/web/src/components/AppSidebarLayout.tsx index 6769586f7fa8..030ea6d23d92 100644 --- a/apps/web/src/components/AppSidebarLayout.tsx +++ b/apps/web/src/components/AppSidebarLayout.tsx @@ -149,9 +149,11 @@ export function AppSidebarLayout({ children }: { children: ReactNode }) { // Settings routes show the settings nav in place of whichever thread // sidebar is active. const pathname = useLocation({ select: (location) => location.pathname }); - const panelAnimationsSuppressed = usePanelNavigationSuppression(pathname); - const routePanelAnimationsActive = panelAnimationsActive && !panelAnimationsSuppressed; const isOnSettings = pathname === "/settings" || pathname.startsWith("/settings/"); + const panelAnimationsSuppressed = usePanelNavigationSuppression( + isOnSettings ? "settings" : pathname, + ); + const routePanelAnimationsActive = panelAnimationsActive && !panelAnimationsSuppressed; const isMacosDesktop = isElectron && isMacPlatform(navigator.platform); const [sidebarWidth, setSidebarWidth] = useState(readInitialThreadSidebarWidth); // Subscribed rather than read once: the clamp must track live window size, diff --git a/apps/web/src/components/settings/SettingsSidebarNav.tsx b/apps/web/src/components/settings/SettingsSidebarNav.tsx index f8f0254cda61..e2830b73133e 100644 --- a/apps/web/src/components/settings/SettingsSidebarNav.tsx +++ b/apps/web/src/components/settings/SettingsSidebarNav.tsx @@ -132,7 +132,7 @@ function SettingsSubmenuCollapse({ }) { return ( - + {children} From 8d93ec02f20cbb6f1faad070ae590fc8f05d53f7 Mon Sep 17 00:00:00 2001 From: extoci Date: Sat, 5 Sep 2026 19:48:40 +0000 Subject: [PATCH 3/3] Revert "fix(web): avoid settings animation on entry" This reverts commit 2e683d817b7cd820f45e12e36d0ce2609c1807e2. --- apps/web/src/components/AppSidebarLayout.tsx | 6 ++---- apps/web/src/components/settings/SettingsSidebarNav.tsx | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/apps/web/src/components/AppSidebarLayout.tsx b/apps/web/src/components/AppSidebarLayout.tsx index 030ea6d23d92..6769586f7fa8 100644 --- a/apps/web/src/components/AppSidebarLayout.tsx +++ b/apps/web/src/components/AppSidebarLayout.tsx @@ -149,11 +149,9 @@ export function AppSidebarLayout({ children }: { children: ReactNode }) { // Settings routes show the settings nav in place of whichever thread // sidebar is active. const pathname = useLocation({ select: (location) => location.pathname }); - const isOnSettings = pathname === "/settings" || pathname.startsWith("/settings/"); - const panelAnimationsSuppressed = usePanelNavigationSuppression( - isOnSettings ? "settings" : pathname, - ); + const panelAnimationsSuppressed = usePanelNavigationSuppression(pathname); const routePanelAnimationsActive = panelAnimationsActive && !panelAnimationsSuppressed; + const isOnSettings = pathname === "/settings" || pathname.startsWith("/settings/"); const isMacosDesktop = isElectron && isMacPlatform(navigator.platform); const [sidebarWidth, setSidebarWidth] = useState(readInitialThreadSidebarWidth); // Subscribed rather than read once: the clamp must track live window size, diff --git a/apps/web/src/components/settings/SettingsSidebarNav.tsx b/apps/web/src/components/settings/SettingsSidebarNav.tsx index e2830b73133e..f8f0254cda61 100644 --- a/apps/web/src/components/settings/SettingsSidebarNav.tsx +++ b/apps/web/src/components/settings/SettingsSidebarNav.tsx @@ -132,7 +132,7 @@ function SettingsSubmenuCollapse({ }) { return ( - + {children}