@@ -4,6 +4,7 @@ import {useCallback, useEffect, useState} from "react";
44import { QueryResults } from "@/components/query-results" ;
55import { toast } from "sonner" ;
66import { Docs } from "@/components/docs" ;
7+ import { ResizableHandle , ResizablePanel , ResizablePanelGroup } from "@/components/ui/resizable" ;
78
89const formatExecutionTime = ( ms : number ) : string => {
910 if ( ! Number . isFinite ( ms ) || ms < 0 ) {
@@ -87,30 +88,52 @@ export function Main() {
8788 } , [ bearerToken , endpointUrl , endpointReadOnly , endpointEnabled ] ) ;
8889
8990 return (
90- < main className = { "p-4 w-full flex flex-col gap-4" } >
91- < div className = { "w-full flex gap-4" } >
92- < div className = { "w-full flex flex-col gap-4 min-w-[20rem] max-w-[64rem]" } >
93- < LogsEndpoint
94- endpointUrl = { endpointUrl }
95- onUrlChange = { setEndpointUrl }
96- bearerToken = { bearerToken }
97- onTokenChange = { setBearerToken }
98- isLoading = { loading }
99- endpointReadOnly = { endpointReadOnly }
100- endpointEnabled = { endpointEnabled }
101- onEndpointEnabledChange = { setEndpointEnabled }
102- />
103- < SQLEditor
104- onRun = { handleExecute }
105- isLoading = { loading }
106- error = { error }
107- success = { success }
108- limit = { limit }
109- />
110- </ div >
111- < Docs />
112- </ div >
113- < QueryResults query = { query } data = { results } isLoading = { loading } endpointEnabled = { endpointEnabled } />
91+ < main className = { "p-4 w-full min-h-screen flex flex-col gap-4" } >
92+ < ResizablePanelGroup direction = "vertical" className = "flex-1 min-h-0" >
93+ < ResizablePanel defaultSize = { 60 } minSize = { 40 } >
94+ < ResizablePanelGroup direction = "horizontal" className = "h-full min-h-0" >
95+ < ResizablePanel defaultSize = { 60 } minSize = { 45 } className = "flex flex-col min-h-0" >
96+ < div className = "flex h-full w-full flex-col gap-4 min-h-0 min-w-[20rem]" >
97+ < div className = "shrink-0" >
98+ < LogsEndpoint
99+ endpointUrl = { endpointUrl }
100+ onUrlChange = { setEndpointUrl }
101+ bearerToken = { bearerToken }
102+ onTokenChange = { setBearerToken }
103+ isLoading = { loading }
104+ endpointReadOnly = { endpointReadOnly }
105+ endpointEnabled = { endpointEnabled }
106+ onEndpointEnabledChange = { setEndpointEnabled }
107+ />
108+ </ div >
109+ < SQLEditor
110+ onRun = { handleExecute }
111+ isLoading = { loading }
112+ error = { error }
113+ success = { success }
114+ limit = { limit }
115+ className = "flex-1 min-h-0"
116+ />
117+ </ div >
118+ </ ResizablePanel >
119+ < ResizableHandle withHandle className = { "m-2" } />
120+ < ResizablePanel defaultSize = { 30 } minSize = { 20 } className = "flex" >
121+ < Docs />
122+ </ ResizablePanel >
123+ </ ResizablePanelGroup >
124+ </ ResizablePanel >
125+ < ResizableHandle withHandle className = { "m-2" } />
126+ < ResizablePanel defaultSize = { 40 } minSize = { 10 } className = "min-h-0" >
127+ < div className = "h-full overflow-auto" >
128+ < QueryResults
129+ query = { query }
130+ data = { results }
131+ isLoading = { loading }
132+ endpointEnabled = { endpointEnabled }
133+ />
134+ </ div >
135+ </ ResizablePanel >
136+ </ ResizablePanelGroup >
114137 </ main >
115138 ) ;
116139}
0 commit comments