@@ -19,7 +19,7 @@ function register(api) { KONSOLES.push(api) }
1919const profile = {
2020 displayName : 'Terminal' ,
2121 name : 'terminal' ,
22- methods : [ 'log' , 'logHtml' , 'togglePanel' , 'isPanelHidden' ] ,
22+ methods : [ 'log' , 'logHtml' , 'togglePanel' , 'isPanelHidden' , 'maximizePanel' ] ,
2323 events : [ ] ,
2424 description : 'Remix IDE terminal' ,
2525 version : packageJson . version
@@ -55,8 +55,10 @@ export default class Terminal extends Plugin {
5555 dispatch : any
5656 terminalApi : any
5757 isHidden : boolean
58+ isMaximized : boolean
5859 constructor ( opts , api ) {
5960 super ( profile )
61+ this . isMaximized = false
6062 this . fileImport = new CompilerImports ( )
6163 this . event = new EventManager ( )
6264 this . globalRegistry = Registry . getInstance ( )
@@ -116,6 +118,21 @@ export default class Terminal extends Plugin {
116118
117119 onActivation ( ) {
118120 this . renderComponent ( )
121+
122+ // Listen for file changes - auto-restore terminal panel if maximized when main panel is used
123+ this . on ( 'fileManager' , 'currentFileChanged' , ( ) => {
124+ if ( this . isMaximized ) {
125+ this . maximizePanel ( ) // This will toggle and restore the panel
126+ }
127+ } )
128+
129+ // Listen for tab/app switches - auto-restore terminal panel if maximized
130+ this . on ( 'tabs' , 'switchApp' , ( ) => {
131+ if ( this . isMaximized ) {
132+ this . maximizePanel ( ) // This will toggle and restore the panel
133+ }
134+ } )
135+
119136 // Initialize isHidden state from panelStates in localStorage
120137 const panelStatesStr = window . localStorage . getItem ( 'panelStates' )
121138 const panelStates = panelStatesStr ? JSON . parse ( panelStatesStr ) : { }
@@ -204,6 +221,41 @@ export default class Terminal extends Plugin {
204221 return this . isHidden
205222 }
206223
224+ async maximizePanel ( ) {
225+ if ( ! this . isMaximized ) {
226+ // Hide all main panel content except terminal
227+ const mainView = document . querySelector ( '.mainview' )
228+ if ( mainView ) {
229+ // Find all child elements with -wrap class except terminal-wrap
230+ const wraps = mainView . querySelectorAll ( '[class*="-wrap"]' )
231+ wraps . forEach ( ( wrap : HTMLElement ) => {
232+ if ( ! wrap . classList . contains ( 'terminal-wrap' ) ) {
233+ wrap . classList . add ( 'd-none' )
234+ }
235+ } )
236+ }
237+
238+ this . isMaximized = true
239+ trackMatomoEvent ( this , { category : 'topbar' , action : 'terminalPanel' , name : 'maximized' , isClick : false } )
240+ this . emit ( 'terminalPanelMaximized' )
241+ } else {
242+ // Show all main panel content
243+ const mainView = document . querySelector ( '.mainview' )
244+ if ( mainView ) {
245+ // Find all child elements with -wrap class and show them
246+ const wraps = mainView . querySelectorAll ( '[class*="-wrap"]' )
247+ wraps . forEach ( ( wrap : HTMLElement ) => {
248+ wrap . classList . remove ( 'd-none' )
249+ } )
250+ }
251+
252+ this . isMaximized = false
253+ trackMatomoEvent ( this , { category : 'topbar' , action : 'terminalPanel' , name : 'restored' , isClick : false } )
254+ this . emit ( 'terminalPanelRestored' )
255+ }
256+ this . renderComponent ( )
257+ }
258+
207259 setDispatch ( dispatch ) {
208260 this . dispatch = dispatch
209261 }
@@ -219,6 +271,8 @@ export default class Terminal extends Plugin {
219271 plugin = { state . plugin }
220272 onReady = { state . onReady }
221273 visible = { true }
274+ isMaximized = { this . isMaximized }
275+ maximizePanel = { this . maximizePanel . bind ( this ) }
222276 />
223277 </ > )
224278 }
0 commit comments