diff --git a/apps/web/src/components/Sidebar.tsx b/apps/web/src/components/Sidebar.tsx
index 100d0e3f47..ffea5ee127 100644
--- a/apps/web/src/components/Sidebar.tsx
+++ b/apps/web/src/components/Sidebar.tsx
@@ -101,6 +101,7 @@ import {
SidebarMenuSubItem,
SidebarSeparator,
SidebarTrigger,
+ useSidebar,
} from "./ui/sidebar";
import { useThreadSelectionStore } from "../threadSelectionStore";
import { isNonEmpty as isNonEmptyString } from "effect/String";
@@ -334,6 +335,11 @@ export default function Sidebar() {
(store) => store.clearProjectDraftThreadId,
);
const navigate = useNavigate();
+ const { isMobile, setOpenMobile } = useSidebar();
+ /** Close the mobile sidebar sheet after any user-initiated navigation. */
+ const closeMobileSidebar = useCallback(() => {
+ if (isMobile) setOpenMobile(false);
+ }, [isMobile, setOpenMobile]);
const pathname = useLocation({ select: (loc) => loc.pathname });
const isOnSettings = pathname.startsWith("/settings");
const appSettings = useSettings();
@@ -835,9 +841,11 @@ export default function Sidebar() {
to: "/$threadId",
params: { threadId },
});
+ closeMobileSidebar();
},
[
clearSelection,
+ closeMobileSidebar,
navigate,
rangeSelectTo,
selectedThreadIds.size,
@@ -856,8 +864,9 @@ export default function Sidebar() {
to: "/$threadId",
params: { threadId },
});
+ closeMobileSidebar();
},
- [clearSelection, navigate, selectedThreadIds.size, setSelectionAnchor],
+ [clearSelection, closeMobileSidebar, navigate, selectedThreadIds.size, setSelectionAnchor],
);
const handleProjectContextMenu = useCallback(
@@ -1519,6 +1528,7 @@ export default function Sidebar() {
defaultEnvMode: appSettings.defaultThreadEnvMode,
}),
});
+ closeMobileSidebar();
}}
>
@@ -1976,7 +1986,10 @@ export default function Sidebar() {
void navigate({ to: "/settings" })}
+ onClick={() => {
+ void navigate({ to: "/settings" });
+ closeMobileSidebar();
+ }}
>
Settings