@@ -126,6 +126,7 @@ function Workspace({
126
126
useState < DebugSessionApiResponse | null > ( null ) ;
127
127
const [ showPowerButton , setShowPowerButton ] = useState ( true ) ;
128
128
const [ reloadKey , setReloadKey ] = useState ( 0 ) ;
129
+ const [ windowResizeTrigger , setWindowResizeTrigger ] = useState ( 0 ) ;
129
130
const [ isReloading , setIsReloading ] = useState ( false ) ;
130
131
const credentialGetter = useCredentialGetter ( ) ;
131
132
const queryClient = useQueryClient ( ) ;
@@ -263,6 +264,16 @@ function Workspace({
263
264
} ;
264
265
} ) ;
265
266
267
+ // Add window resize listener to trigger NoVNC canvas resize
268
+ useEffect ( ( ) => {
269
+ const handleResize = ( ) => {
270
+ setWindowResizeTrigger ( ( prev ) => prev + 1 ) ;
271
+ } ;
272
+
273
+ window . addEventListener ( "resize" , handleResize ) ;
274
+ return ( ) => window . removeEventListener ( "resize" , handleResize ) ;
275
+ } , [ ] ) ;
276
+
266
277
useEffect ( ( ) => {
267
278
blockScriptStore . setScripts ( blockScripts ?? { } ) ;
268
279
// eslint-disable-next-line react-hooks/exhaustive-deps
@@ -720,7 +731,7 @@ function Workspace({
720
731
< div className = "relative flex h-full w-full overflow-hidden overflow-x-hidden" >
721
732
{ /* infinite canvas */ }
722
733
< div
723
- className = { cn ( "skyvern-split-left h-full w-[33rem]" , {
734
+ className = { cn ( "skyvern-split-left h-full w-[33rem] min-w-[33rem] " , {
724
735
"w-full" : ! showBrowser ,
725
736
} ) }
726
737
>
@@ -744,11 +755,11 @@ function Workspace({
744
755
745
756
{ /* browser & timeline & sub-panels in debug mode */ }
746
757
{ showBrowser && (
747
- < div className = "skyvern-split-right relative flex h-full flex-1 items-end justify-center bg-[#020617] p-4 pl-6" >
758
+ < div className = "skyvern-split-right relative flex h-full w-[calc(100%-33rem)] items-end justify-center bg-[#020617] p-4 pl-6" >
748
759
{ /* sub panels */ }
749
760
{ workflowPanelState . active && (
750
761
< div
751
- className = { cn ( "absolute right-6 top-[8.5rem]" , {
762
+ className = { cn ( "absolute right-6 top-[8.5rem] z-20 " , {
752
763
"left-6" : workflowPanelState . content === "nodeLibrary" ,
753
764
} ) }
754
765
style = { {
@@ -803,6 +814,7 @@ function Workspace({
803
814
interactive = { interactor === "human" }
804
815
browserSessionId = { activeDebugSession . browser_session_id }
805
816
showControlButtons = { interactor === "human" }
817
+ resizeTrigger = { windowResizeTrigger }
806
818
/>
807
819
) : (
808
820
< div className = "flex aspect-video w-full flex-col items-center justify-center gap-2 rounded-md border border-slate-800 pb-2 pt-4 text-sm text-slate-400" >
@@ -831,7 +843,8 @@ function Workspace({
831
843
{ /* timeline */ }
832
844
< div
833
845
className = { cn ( "h-full w-[5rem] overflow-visible" , {
834
- "pointer-events-none w-[0px] overflow-hidden" : ! blockLabel ,
846
+ "pointer-events-none hidden w-[0px] overflow-hidden" :
847
+ ! blockLabel ,
835
848
} ) }
836
849
>
837
850
< div
@@ -899,6 +912,53 @@ function Workspace({
899
912
</ div >
900
913
</ div >
901
914
) }
915
+
916
+ { ! showBrowser && workflowPanelState . active && (
917
+ < div
918
+ className = { cn (
919
+ "pointer-events-none absolute right-6 top-[5rem] z-20" ,
920
+ ) }
921
+ style = { {
922
+ top : "8.5rem" ,
923
+ height :
924
+ workflowPanelState . content === "nodeLibrary"
925
+ ? "calc(100vh - 14rem)"
926
+ : "unset" ,
927
+ } }
928
+ >
929
+ { workflowPanelState . content === "cacheKeyValues" && (
930
+ < WorkflowCacheKeyValuesPanel
931
+ cacheKeyValues = { cacheKeyValues }
932
+ pending = { cacheKeyValuesLoading }
933
+ scriptKey = { workflow . cache_key ?? "default" }
934
+ onDelete = { ( cacheKeyValue ) => {
935
+ setToDeleteCacheKeyValue ( cacheKeyValue ) ;
936
+ setOpenConfirmCacheKeyValueDeleteDialogue ( true ) ;
937
+ } }
938
+ onPaginate = { ( page ) => {
939
+ setPage ( page ) ;
940
+ } }
941
+ onSelect = { ( cacheKeyValue ) => {
942
+ setCacheKeyValue ( cacheKeyValue ) ;
943
+ setCacheKeyValueFilter ( "" ) ;
944
+ closeWorkflowPanel ( ) ;
945
+ } }
946
+ />
947
+ ) }
948
+ { workflowPanelState . content === "parameters" && (
949
+ < WorkflowParametersPanel />
950
+ ) }
951
+ { workflowPanelState . content === "nodeLibrary" && (
952
+ < div className = "pointer-events-auto relative right-0 top-0 z-20 h-full w-[25rem]" >
953
+ < WorkflowNodeLibraryPanel
954
+ onNodeClick = { ( props ) => {
955
+ addNode ( props ) ;
956
+ } }
957
+ />
958
+ </ div >
959
+ ) }
960
+ </ div >
961
+ ) }
902
962
</ div >
903
963
</ div >
904
964
) ;
0 commit comments