History

Add resizable chat sidebar (#1347)

shivam committed 7 months ago

Commit 2b08d861 parent e11fb6e1 file · +11 −1Browse files

Unified · Split

apps/web/src/routes/_chat.tsx+11−1
@@ -10,11 +10,14 @@ import { serverConfigQueryOptions } from "../lib/serverReactQuery"; · 9 unmodified lines
10import { resolveShortcutCommand } from "../keybindings";10import { resolveShortcutCommand } from "../keybindings";
11import { selectThreadTerminalState, useTerminalStateStore } from "../terminalStateStore";11import { selectThreadTerminalState, useTerminalStateStore } from "../terminalStateStore";
12import { useThreadSelectionStore } from "../threadSelectionStore";12import { useThreadSelectionStore } from "../threadSelectionStore";
13import { Sidebar, SidebarProvider } from "~/components/ui/sidebar";
14import { resolveSidebarNewThreadEnvMode } from "~/components/Sidebar.logic";13import { resolveSidebarNewThreadEnvMode } from "~/components/Sidebar.logic";
15import { useAppSettings } from "~/appSettings";14import { useAppSettings } from "~/appSettings";
15import { Sidebar, SidebarProvider, SidebarRail } from "~/components/ui/sidebar";
16 16
17const EMPTY_KEYBINDINGS: ResolvedKeybindingsConfig = [];17const EMPTY_KEYBINDINGS: ResolvedKeybindingsConfig = [];
18const THREAD_SIDEBAR_WIDTH_STORAGE_KEY = "chat_thread_sidebar_width";
19const THREAD_SIDEBAR_MIN_WIDTH = 13 * 16;
20const THREAD_MAIN_CONTENT_MIN_WIDTH = 40 * 16;
18 21
19function ChatRouteGlobalShortcuts() {22function ChatRouteGlobalShortcuts() {
20 const clearSelection = useThreadSelectionStore((state) => state.clearSelection);23 const clearSelection = useThreadSelectionStore((state) => state.clearSelection);
@@ -116,8 +119,15 @@ function ChatRouteLayout() { · 95 unmodified lines
116 side="left"119 side="left"
117 collapsible="offcanvas"120 collapsible="offcanvas"
118 className="border-r border-border bg-card text-foreground"121 className="border-r border-border bg-card text-foreground"
122 resizable={{
123 minWidth: THREAD_SIDEBAR_MIN_WIDTH,
124 shouldAcceptWidth: ({ nextWidth, wrapper }) =>
125 wrapper.clientWidth - nextWidth >= THREAD_MAIN_CONTENT_MIN_WIDTH,
126 storageKey: THREAD_SIDEBAR_WIDTH_STORAGE_KEY,
127 }}
119 >128 >
120 <ThreadSidebar />129 <ThreadSidebar />
130 <SidebarRail />
121 </Sidebar>131 </Sidebar>
122 <Outlet />132 <Outlet />
123 </SidebarProvider>133 </SidebarProvider>