@@ -30,7 +30,10 @@ import React, {
3030 useState ,
3131} from "react" ;
3232import { useConnection } from "./lib/hooks/useConnection" ;
33- import { useDraggablePane } from "./lib/hooks/useDraggablePane" ;
33+ import {
34+ useDraggablePane ,
35+ useDraggableSidebar ,
36+ } from "./lib/hooks/useDraggablePane" ;
3437import { StdErrNotification } from "./lib/notificationTypes" ;
3538
3639import { Tabs , TabsContent , TabsList , TabsTrigger } from "@/components/ui/tabs" ;
@@ -154,6 +157,11 @@ const App = () => {
154157 const progressTokenRef = useRef ( 0 ) ;
155158
156159 const { height : historyPaneHeight , handleDragStart } = useDraggablePane ( 300 ) ;
160+ const {
161+ width : sidebarWidth ,
162+ isDragging : isSidebarDragging ,
163+ handleDragStart : handleSidebarDragStart ,
164+ } = useDraggableSidebar ( 320 ) ;
157165
158166 const {
159167 connectionStatus,
@@ -607,32 +615,58 @@ const App = () => {
607615
608616 return (
609617 < div className = "flex h-screen bg-background" >
610- < Sidebar
611- connectionStatus = { connectionStatus }
612- transportType = { transportType }
613- setTransportType = { setTransportType }
614- command = { command }
615- setCommand = { setCommand }
616- args = { args }
617- setArgs = { setArgs }
618- sseUrl = { sseUrl }
619- setSseUrl = { setSseUrl }
620- env = { env }
621- setEnv = { setEnv }
622- config = { config }
623- setConfig = { setConfig }
624- bearerToken = { bearerToken }
625- setBearerToken = { setBearerToken }
626- headerName = { headerName }
627- setHeaderName = { setHeaderName }
628- onConnect = { connectMcpServer }
629- onDisconnect = { disconnectMcpServer }
630- stdErrNotifications = { stdErrNotifications }
631- logLevel = { logLevel }
632- sendLogLevelRequest = { sendLogLevelRequest }
633- loggingSupported = { ! ! serverCapabilities ?. logging || false }
634- clearStdErrNotifications = { clearStdErrNotifications }
635- />
618+ < div
619+ style = { {
620+ width : sidebarWidth ,
621+ minWidth : 200 ,
622+ maxWidth : 600 ,
623+ transition : isSidebarDragging ? "none" : "width 0.15s" ,
624+ } }
625+ className = "bg-card border-r border-border flex flex-col h-full relative"
626+ >
627+ < Sidebar
628+ connectionStatus = { connectionStatus }
629+ transportType = { transportType }
630+ setTransportType = { setTransportType }
631+ command = { command }
632+ setCommand = { setCommand }
633+ args = { args }
634+ setArgs = { setArgs }
635+ sseUrl = { sseUrl }
636+ setSseUrl = { setSseUrl }
637+ env = { env }
638+ setEnv = { setEnv }
639+ config = { config }
640+ setConfig = { setConfig }
641+ bearerToken = { bearerToken }
642+ setBearerToken = { setBearerToken }
643+ headerName = { headerName }
644+ setHeaderName = { setHeaderName }
645+ onConnect = { connectMcpServer }
646+ onDisconnect = { disconnectMcpServer }
647+ stdErrNotifications = { stdErrNotifications }
648+ logLevel = { logLevel }
649+ sendLogLevelRequest = { sendLogLevelRequest }
650+ loggingSupported = { ! ! serverCapabilities ?. logging || false }
651+ clearStdErrNotifications = { clearStdErrNotifications }
652+ />
653+ { /* Drag handle for resizing sidebar */ }
654+ < div
655+ onMouseDown = { handleSidebarDragStart }
656+ style = { {
657+ cursor : "col-resize" ,
658+ position : "absolute" ,
659+ top : 0 ,
660+ right : 0 ,
661+ width : 6 ,
662+ height : "100%" ,
663+ zIndex : 10 ,
664+ background : isSidebarDragging ? "rgba(0,0,0,0.08)" : "transparent" ,
665+ } }
666+ aria-label = "Resize sidebar"
667+ data-testid = "sidebar-drag-handle"
668+ />
669+ </ div >
636670 < div className = "flex-1 flex flex-col overflow-hidden" >
637671 < div className = "flex-1 overflow-auto" >
638672 { mcpClient ? (
0 commit comments