@@ -55,6 +55,11 @@ export const DebugLayout = ({
5555 const [ expandedScopes , setExpandedScopes ] = useState < Set < string > > ( new Set ( ) )
5656 const [ selectedScope , setSelectedScope ] = useState < any > ( null )
5757 const [ expandedObjectPaths , setExpandedObjectPaths ] = useState < Set < string > > ( new Set ( ) )
58+ const [ expandedSections , setExpandedSections ] = useState ( {
59+ transactionDetails : true ,
60+ callTrace : true ,
61+ parametersReturnValues : true
62+ } )
5863
5964 // Auto-expand sender node when nestedScopes are loaded
6065 React . useEffect ( ( ) => {
@@ -63,6 +68,13 @@ export const DebugLayout = ({
6368 }
6469 } , [ nestedScopes ] )
6570
71+ const toggleSection = ( section : 'transactionDetails' | 'callTrace' | 'parametersReturnValues' ) => {
72+ setExpandedSections ( prev => ( {
73+ ...prev ,
74+ [ section ] : ! prev [ section ]
75+ } ) )
76+ }
77+
6678 const formatAddress = ( address : string | undefined ) => {
6779 if ( ! address ) return ''
6880 return `${ address . substring ( 0 , 6 ) } ...${ address . substring ( address . length - 4 ) } `
@@ -737,7 +749,6 @@ export const DebugLayout = ({
737749
738750 const renderObjectContent = ( ) => {
739751 const tx = currentTransaction
740- const receipt = currentReceipt
741752
742753 // Get input data (can be either 'data' or 'input' property)
743754 const inputData = tx ?. data || tx ?. input
@@ -827,7 +838,7 @@ export const DebugLayout = ({
827838 return (
828839 < div className = "debug-layout" >
829840 { /* Section 1: Search Bar + Transaction Global Values */ }
830- < div className = "debug-section debug-section-search" >
841+ < div className = "debug-section debug-section-search ms-1 me-1 " >
831842 < SearchBar
832843 onSearch = { onSearch }
833844 debugging = { debugging }
@@ -857,48 +868,79 @@ export const DebugLayout = ({
857868 </ span >
858869 </ CustomTooltip >
859870 </ div >
871+ </ div >
860872
861- < div className = "mt-1 ms-3" >
862- { renderGlobalVariables ( ) }
873+ { /* Section 2: Transaction Details */ }
874+ < div className = "debug-section debug-section-transaction" style = { ! expandedSections . transactionDetails ? { minHeight : 'auto' } : { } } >
875+ < div
876+ className = "debug-section-header"
877+ onClick = { ( ) => toggleSection ( 'transactionDetails' ) }
878+ style = { { cursor : 'pointer' } }
879+ >
880+ < h6 className = "debug-section-title" >
881+ < FormattedMessage id = "debugger.transactionDetails" defaultMessage = "Transaction Details" />
882+ </ h6 >
883+ < i className = { `fas ${ expandedSections . transactionDetails ? 'fa-chevron-down' : 'fa-chevron-right' } ` } style = { { fontSize : '0.75rem' , marginRight : '1rem' , color : 'var(--bs-body-color)' } } > </ i >
863884 </ div >
885+ { expandedSections . transactionDetails && (
886+ < div className = "debug-section-content ms-3" >
887+ { renderGlobalVariables ( ) }
888+ </ div >
889+ ) }
864890 </ div >
865891
866- { /* Section 2: Call Trace */ }
867- < div className = "debug-section debug-section-trace" >
868- < div className = "debug-section-header" >
892+ { /* Section 3: Call Trace */ }
893+ < div className = "debug-section debug-section-trace" style = { ! expandedSections . callTrace ? { minHeight : 'auto' } : { } } >
894+ < div
895+ className = "debug-section-header"
896+ onClick = { ( ) => toggleSection ( 'callTrace' ) }
897+ style = { { cursor : 'pointer' } }
898+ >
869899 < h6 className = "debug-section-title" >
870900 Call Trace (Trace Length: { ( traceData && traceData . traceLength ) || 0 } )
871901 </ h6 >
902+ < i className = { `fas ${ expandedSections . callTrace ? 'fa-chevron-down' : 'fa-chevron-right' } ` } style = { { fontSize : '0.75rem' , marginRight : '1rem' , color : 'var(--bs-body-color)' } } > </ i >
872903 </ div >
873- < div className = "debug-section-content debug-section-scrollable" >
874- { renderCallTrace ( ) }
875- </ div >
904+ { expandedSections . callTrace && (
905+ < div className = "debug-section-content debug-section-scrollable" >
906+ { renderCallTrace ( ) }
907+ </ div >
908+ ) }
876909 </ div >
877910
878- { /* Section 3: Parameters & Return Values */ }
879- < div className = "debug-section debug-section-object" >
880- < div className = "debug-section-header" >
911+ { /* Section 4: Parameters & Return Values */ }
912+ < div className = "debug-section debug-section-object" style = { ! expandedSections . parametersReturnValues ? { minHeight : 'auto' } : { } } >
913+ < div
914+ className = "debug-section-header"
915+ onClick = { ( ) => toggleSection ( 'parametersReturnValues' ) }
916+ style = { { cursor : 'pointer' } }
917+ >
881918 < h6 className = "debug-section-title" >
882919 < FormattedMessage id = "debugger.parametersAndReturnValues" defaultMessage = "Parameters & Return Values" />
883920 </ h6 >
884- < div className = "debug-tabs" >
885- < button
886- className = { `debug-tab ${ activeObjectTab === 'json' ? 'active' : '' } ` }
887- onClick = { ( ) => setActiveObjectTab ( 'json' ) }
888- >
889- < FormattedMessage id = "debugger.json" defaultMessage = "JSON" />
890- </ button >
891- < button
892- className = { `debug-tab ${ activeObjectTab === 'raw' ? 'active' : '' } ` }
893- onClick = { ( ) => setActiveObjectTab ( 'raw' ) }
894- >
895- < FormattedMessage id = "debugger.raw" defaultMessage = "Raw" />
896- </ button >
921+ < div style = { { display : 'flex' , alignItems : 'center' , gap : '0.5rem' } } >
922+ < i className = { `fas ${ expandedSections . parametersReturnValues ? 'fa-chevron-down' : 'fa-chevron-right' } ` } style = { { fontSize : '0.75rem' , color : 'var(--bs-body-color)' } } > </ i >
923+ < div className = "debug-tabs" onClick = { ( e ) => e . stopPropagation ( ) } >
924+ < button
925+ className = { `debug-tab ${ activeObjectTab === 'json' ? 'active' : '' } ` }
926+ onClick = { ( ) => setActiveObjectTab ( 'json' ) }
927+ >
928+ < FormattedMessage id = "debugger.json" defaultMessage = "JSON" />
929+ </ button >
930+ < button
931+ className = { `debug-tab ${ activeObjectTab === 'raw' ? 'active' : '' } ` }
932+ onClick = { ( ) => setActiveObjectTab ( 'raw' ) }
933+ >
934+ < FormattedMessage id = "debugger.raw" defaultMessage = "Raw" />
935+ </ button >
936+ </ div >
897937 </ div >
898938 </ div >
899- < div className = "debug-section-content debug-section-scrollable" >
900- { renderObjectContent ( ) }
901- </ div >
939+ { expandedSections . parametersReturnValues && (
940+ < div className = "debug-section-content debug-section-scrollable" >
941+ { renderObjectContent ( ) }
942+ </ div >
943+ ) }
902944 </ div >
903945 </ div >
904946 )
0 commit comments