@@ -21,6 +21,7 @@ import { Draggable } from '../errors/dev-tools-indicator/draggable'
21
21
import { INDICATOR_PADDING } from '../devtools-indicator/devtools-indicator'
22
22
import { FullScreenIcon } from '../../icons/fullscreen'
23
23
import { Cross } from '../../icons/cross'
24
+ import { MinimizeIcon } from '../../icons/minimize'
24
25
25
26
export type DevToolsPanelTabType = 'issues' | 'route' | 'settings'
26
27
@@ -38,6 +39,7 @@ export function DevToolsPanel({
38
39
getSquashedHydrationErrorDetails : ( error : Error ) => HydrationErrorState | null
39
40
} ) {
40
41
const [ activeTab , setActiveTab ] = useState < DevToolsPanelTabType > ( 'issues' )
42
+ const [ isFullscreen , setIsFullscreen ] = useState ( false )
41
43
const [ vertical , horizontal ] = state . devToolsPosition . split ( '-' , 2 )
42
44
43
45
const onCloseDevToolsPanel = ( ) => {
@@ -60,19 +62,27 @@ export function DevToolsPanel({
60
62
localStorage . setItem ( STORAGE_KEY_SCALE , e . target . value )
61
63
}
62
64
65
+ const handleFullscreenToggle = ( ) => {
66
+ setIsFullscreen ( ( prev ) => ! prev )
67
+ }
68
+
63
69
return (
64
70
< Overlay
65
71
data-nextjs-devtools-panel-overlay
66
- style = { {
67
- [ vertical ] : `${ INDICATOR_PADDING } px` ,
68
- [ horizontal ] : `${ INDICATOR_PADDING } px` ,
69
- [ vertical === 'top' ? 'bottom' : 'top' ] : 'auto' ,
70
- [ horizontal === 'left' ? 'right' : 'left' ] : 'auto' ,
71
- } }
72
+ style = {
73
+ ! isFullscreen
74
+ ? {
75
+ [ vertical ] : `${ INDICATOR_PADDING } px` ,
76
+ [ horizontal ] : `${ INDICATOR_PADDING } px` ,
77
+ [ vertical === 'top' ? 'bottom' : 'top' ] : 'auto' ,
78
+ [ horizontal === 'left' ? 'right' : 'left' ] : 'auto' ,
79
+ }
80
+ : { }
81
+ }
72
82
>
73
83
{ /* TODO: Investigate why onCloseDevToolsPanel on Dialog doesn't close when clicked outside. */ }
74
84
< OverlayBackdrop
75
- data-nextjs-devtools-panel-overlay-backdrop
85
+ data-nextjs-devtools-panel-overlay-backdrop = { isFullscreen }
76
86
onClick = { onCloseDevToolsPanel }
77
87
/>
78
88
< Draggable
@@ -128,9 +138,15 @@ export function DevToolsPanel({
128
138
</ button >
129
139
</ div >
130
140
< div data-nextjs-devtools-panel-header-action-button-group >
131
- { /* TODO: Currently no-op, will add fullscreen toggle. */ }
132
- < button data-nextjs-devtools-panel-header-action-button >
133
- < FullScreenIcon width = { 16 } height = { 16 } />
141
+ < button
142
+ data-nextjs-devtools-panel-header-action-button
143
+ onClick = { handleFullscreenToggle }
144
+ >
145
+ { isFullscreen ? (
146
+ < MinimizeIcon width = { 16 } height = { 16 } />
147
+ ) : (
148
+ < FullScreenIcon width = { 16 } height = { 16 } />
149
+ ) }
134
150
</ button >
135
151
< button
136
152
data-nextjs-devtools-panel-header-action-button
@@ -212,11 +228,8 @@ export const DEVTOOLS_PANEL_STYLES = css`
212
228
}
213
229
214
230
[data-nextjs-devtools-panel-overlay ] {
215
- padding : initial;
216
231
margin : auto;
217
232
width : 100% ;
218
- /* TODO: This is for fullscreen mode. */
219
- /* top: 10vh; */
220
233
221
234
@media (max-width : 575px ) {
222
235
left : 20px !important ;
@@ -238,10 +251,13 @@ export const DEVTOOLS_PANEL_STYLES = css`
238
251
}
239
252
240
253
[data-nextjs-devtools-panel-overlay-backdrop ] {
241
- /* TODO: Blur on fullscreen mode. */
242
254
opacity : 0 ;
243
255
}
244
256
257
+ [data-nextjs-devtools-panel-overlay-backdrop = 'true' ] {
258
+ opacity : 1 ;
259
+ }
260
+
245
261
[data-nextjs-devtools-panel-draggable ] {
246
262
/* For responsiveness */
247
263
width : 100% ;
0 commit comments