@@ -30,7 +30,10 @@ import React, {
30
30
useState ,
31
31
} from "react" ;
32
32
import { useConnection } from "./lib/hooks/useConnection" ;
33
- import { useDraggablePane } from "./lib/hooks/useDraggablePane" ;
33
+ import {
34
+ useDraggablePane ,
35
+ useDraggableSidebar ,
36
+ } from "./lib/hooks/useDraggablePane" ;
34
37
import { StdErrNotification } from "./lib/notificationTypes" ;
35
38
36
39
import { Tabs , TabsContent , TabsList , TabsTrigger } from "@/components/ui/tabs" ;
@@ -154,6 +157,11 @@ const App = () => {
154
157
const progressTokenRef = useRef ( 0 ) ;
155
158
156
159
const { height : historyPaneHeight , handleDragStart } = useDraggablePane ( 300 ) ;
160
+ const {
161
+ width : sidebarWidth ,
162
+ isDragging : isSidebarDragging ,
163
+ handleDragStart : handleSidebarDragStart ,
164
+ } = useDraggableSidebar ( 320 ) ;
157
165
158
166
const {
159
167
connectionStatus,
@@ -607,32 +615,58 @@ const App = () => {
607
615
608
616
return (
609
617
< 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 >
636
670
< div className = "flex-1 flex flex-col overflow-hidden" >
637
671
< div className = "flex-1 overflow-auto" >
638
672
{ mcpClient ? (
0 commit comments