@@ -28,7 +28,7 @@ import React, {
28
28
useState ,
29
29
} from "react" ;
30
30
import { useConnection } from "./lib/hooks/useConnection" ;
31
- import { useDraggablePane } from "./lib/hooks/useDraggablePane" ;
31
+ import { useDraggablePane , useDraggableSidebar } from "./lib/hooks/useDraggablePane" ;
32
32
import { StdErrNotification } from "./lib/notificationTypes" ;
33
33
34
34
import { Tabs , TabsContent , TabsList , TabsTrigger } from "@/components/ui/tabs" ;
@@ -163,6 +163,7 @@ const App = () => {
163
163
const progressTokenRef = useRef ( 0 ) ;
164
164
165
165
const { height : historyPaneHeight , handleDragStart } = useDraggablePane ( 300 ) ;
166
+ const { width : sidebarWidth , isDragging : isSidebarDragging , handleDragStart : handleSidebarDragStart } = useDraggableSidebar ( 320 ) ;
166
167
167
168
const {
168
169
connectionStatus,
@@ -562,32 +563,44 @@ const App = () => {
562
563
563
564
return (
564
565
< div className = "flex h-screen bg-background" >
565
- < Sidebar
566
- connectionStatus = { connectionStatus }
567
- transportType = { transportType }
568
- setTransportType = { setTransportType }
569
- command = { command }
570
- setCommand = { setCommand }
571
- args = { args }
572
- setArgs = { setArgs }
573
- sseUrl = { sseUrl }
574
- setSseUrl = { setSseUrl }
575
- env = { env }
576
- setEnv = { setEnv }
577
- config = { config }
578
- setConfig = { setConfig }
579
- bearerToken = { bearerToken }
580
- setBearerToken = { setBearerToken }
581
- headerName = { headerName }
582
- setHeaderName = { setHeaderName }
583
- onConnect = { connectMcpServer }
584
- onDisconnect = { disconnectMcpServer }
585
- stdErrNotifications = { stdErrNotifications }
586
- logLevel = { logLevel }
587
- sendLogLevelRequest = { sendLogLevelRequest }
588
- loggingSupported = { ! ! serverCapabilities ?. logging || false }
589
- clearStdErrNotifications = { clearStdErrNotifications }
590
- />
566
+ < div
567
+ style = { { width : sidebarWidth , minWidth : 200 , maxWidth : 600 , transition : isSidebarDragging ? 'none' : 'width 0.15s' } }
568
+ className = "bg-card border-r border-border flex flex-col h-full relative"
569
+ >
570
+ < Sidebar
571
+ connectionStatus = { connectionStatus }
572
+ transportType = { transportType }
573
+ setTransportType = { setTransportType }
574
+ command = { command }
575
+ setCommand = { setCommand }
576
+ args = { args }
577
+ setArgs = { setArgs }
578
+ sseUrl = { sseUrl }
579
+ setSseUrl = { setSseUrl }
580
+ env = { env }
581
+ setEnv = { setEnv }
582
+ config = { config }
583
+ setConfig = { setConfig }
584
+ bearerToken = { bearerToken }
585
+ setBearerToken = { setBearerToken }
586
+ headerName = { headerName }
587
+ setHeaderName = { setHeaderName }
588
+ onConnect = { connectMcpServer }
589
+ onDisconnect = { disconnectMcpServer }
590
+ stdErrNotifications = { stdErrNotifications }
591
+ logLevel = { logLevel }
592
+ sendLogLevelRequest = { sendLogLevelRequest }
593
+ loggingSupported = { ! ! serverCapabilities ?. logging || false }
594
+ clearStdErrNotifications = { clearStdErrNotifications }
595
+ />
596
+ { /* Drag handle for resizing sidebar */ }
597
+ < div
598
+ onMouseDown = { handleSidebarDragStart }
599
+ style = { { cursor : 'col-resize' , position : 'absolute' , top : 0 , right : 0 , width : 6 , height : '100%' , zIndex : 10 , background : isSidebarDragging ? 'rgba(0,0,0,0.08)' : 'transparent' } }
600
+ aria-label = "Resize sidebar"
601
+ data-testid = "sidebar-drag-handle"
602
+ />
603
+ </ div >
591
604
< div className = "flex-1 flex flex-col overflow-hidden" >
592
605
< div className = "flex-1 overflow-auto" >
593
606
{ mcpClient ? (
0 commit comments