Skip to content

Commit 060ae18

Browse files
committed
[devtools] add panel ui placeholder under feature flag
1 parent b9a6cee commit 060ae18

File tree

5 files changed

+151
-117
lines changed

5 files changed

+151
-117
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export function DevToolsPanel() {
2+
// TODO: Remove style; It is to indicate faster in the browser.
3+
return <div style={{ color: 'black' }}>DevToolsPanel</div>
4+
}
5+
6+
export const DEV_TOOLS_PANEL_STYLES = ``

packages/next/src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-indicator.tsx

Lines changed: 129 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { CSSProperties, Dispatch, SetStateAction } from 'react'
22
import {
33
ACTION_ERROR_OVERLAY_OPEN,
44
ACTION_ERROR_OVERLAY_TOGGLE,
5+
ACTION_DEV_TOOLS_PANEL_TOGGLE,
56
STORAGE_KEY_POSITION,
67
type OverlayDispatch,
78
type OverlayState,
@@ -234,6 +235,11 @@ function DevToolsPopover({
234235
}
235236

236237
function onTriggerClick() {
238+
if (process.env.__NEXT_DEVTOOL_NEW_PANEL_UI) {
239+
dispatch({ type: ACTION_DEV_TOOLS_PANEL_TOGGLE })
240+
return
241+
}
242+
237243
if (open === OVERLAYS.Root) {
238244
setOpen(null)
239245
} else {
@@ -305,124 +311,130 @@ function DevToolsPopover({
305311
/>
306312
</Draggable>
307313

308-
{/* Route Info */}
309-
<RouteInfo
310-
isOpen={isRouteInfoOpen}
311-
close={closeToRootMenu}
312-
triggerRef={triggerRef}
313-
style={popover}
314-
routerType={routerType}
315-
routeType={isStaticRoute ? 'Static' : 'Dynamic'}
316-
/>
317-
318-
{/* Turbopack Info */}
319-
<TurbopackInfo
320-
isOpen={isTurbopackInfoOpen}
321-
close={closeToRootMenu}
322-
triggerRef={triggerRef}
323-
style={popover}
324-
/>
325-
326-
{/* Preferences */}
327-
<UserPreferences
328-
isOpen={isPreferencesOpen}
329-
close={closeToRootMenu}
330-
triggerRef={triggerRef}
331-
style={popover}
332-
hide={handleHideDevtools}
333-
setPosition={setPosition}
334-
position={position}
335-
scale={scale}
336-
setScale={setScale}
337-
/>
338-
339-
{/* Page Segment Explorer */}
340-
{process.env.__NEXT_DEVTOOL_SEGMENT_EXPLORER ? (
341-
<SegmentsExplorer
342-
isOpen={isSegmentExplorerOpen}
343-
close={closeToRootMenu}
344-
triggerRef={triggerRef}
345-
style={popover}
346-
/>
347-
) : null}
348-
349-
{/* Dropdown Menu */}
350-
{menuMounted && (
351-
<div
352-
ref={menuRef}
353-
id="nextjs-dev-tools-menu"
354-
role="menu"
355-
dir="ltr"
356-
aria-orientation="vertical"
357-
aria-label="Next.js Dev Tools Items"
358-
tabIndex={-1}
359-
className="dev-tools-indicator-menu"
360-
onKeyDown={onMenuKeydown}
361-
data-rendered={menuRendered}
362-
style={popover}
363-
>
364-
<Context.Provider
365-
value={{
366-
closeMenu,
367-
selectedIndex,
368-
setSelectedIndex,
369-
}}
370-
>
371-
<div className="dev-tools-indicator-inner">
372-
{issueCount > 0 && (
373-
<MenuItem
374-
title={`${issueCount} ${issueCount === 1 ? 'issue' : 'issues'} found. Click to view details in the dev overlay.`}
375-
index={0}
376-
label="Issues"
377-
value={<IssueCount>{issueCount}</IssueCount>}
378-
onClick={openErrorOverlay}
379-
/>
380-
)}
381-
<MenuItem
382-
title={`Current route is ${isStaticRoute ? 'static' : 'dynamic'}.`}
383-
label="Route"
384-
index={1}
385-
value={isStaticRoute ? 'Static' : 'Dynamic'}
386-
onClick={() => setOpen(OVERLAYS.Route)}
387-
data-nextjs-route-type={isStaticRoute ? 'static' : 'dynamic'}
388-
/>
389-
{isTurbopack ? (
390-
<MenuItem
391-
title="Turbopack is enabled."
392-
label="Turbopack"
393-
value="Enabled"
394-
/>
395-
) : (
396-
<MenuItem
397-
index={2}
398-
title="Learn about Turbopack and how to enable it in your application."
399-
label="Try Turbopack"
400-
value={<ChevronRight />}
401-
onClick={() => setOpen(OVERLAYS.Turbo)}
402-
/>
403-
)}
404-
</div>
405-
406-
<div className="dev-tools-indicator-footer">
407-
<MenuItem
408-
data-preferences
409-
label="Preferences"
410-
value={<GearIcon />}
411-
onClick={() => setOpen(OVERLAYS.Preferences)}
412-
index={isTurbopack ? 2 : 3}
413-
/>
414-
{process.env.__NEXT_DEVTOOL_SEGMENT_EXPLORER ? (
415-
<MenuItem
416-
data-segment-explorer
417-
label="Segment Explorer"
418-
value={<ChevronRight />}
419-
onClick={() => setOpen(OVERLAYS.SegmentExplorer)}
420-
index={isTurbopack ? 3 : 4}
421-
/>
422-
) : null}
314+
{process.env.__NEXT_DEVTOOL_NEW_PANEL_UI ? null : (
315+
<>
316+
{/* Route Info */}
317+
<RouteInfo
318+
isOpen={isRouteInfoOpen}
319+
close={closeToRootMenu}
320+
triggerRef={triggerRef}
321+
style={popover}
322+
routerType={routerType}
323+
routeType={isStaticRoute ? 'Static' : 'Dynamic'}
324+
/>
325+
326+
{/* Turbopack Info */}
327+
<TurbopackInfo
328+
isOpen={isTurbopackInfoOpen}
329+
close={closeToRootMenu}
330+
triggerRef={triggerRef}
331+
style={popover}
332+
/>
333+
334+
{/* Preferences */}
335+
<UserPreferences
336+
isOpen={isPreferencesOpen}
337+
close={closeToRootMenu}
338+
triggerRef={triggerRef}
339+
style={popover}
340+
hide={handleHideDevtools}
341+
setPosition={setPosition}
342+
position={position}
343+
scale={scale}
344+
setScale={setScale}
345+
/>
346+
347+
{/* Page Segment Explorer */}
348+
{process.env.__NEXT_DEVTOOL_SEGMENT_EXPLORER ? (
349+
<SegmentsExplorer
350+
isOpen={isSegmentExplorerOpen}
351+
close={closeToRootMenu}
352+
triggerRef={triggerRef}
353+
style={popover}
354+
/>
355+
) : null}
356+
357+
{/* Dropdown Menu */}
358+
{menuMounted && (
359+
<div
360+
ref={menuRef}
361+
id="nextjs-dev-tools-menu"
362+
role="menu"
363+
dir="ltr"
364+
aria-orientation="vertical"
365+
aria-label="Next.js Dev Tools Items"
366+
tabIndex={-1}
367+
className="dev-tools-indicator-menu"
368+
onKeyDown={onMenuKeydown}
369+
data-rendered={menuRendered}
370+
style={popover}
371+
>
372+
<Context.Provider
373+
value={{
374+
closeMenu,
375+
selectedIndex,
376+
setSelectedIndex,
377+
}}
378+
>
379+
<div className="dev-tools-indicator-inner">
380+
{issueCount > 0 && (
381+
<MenuItem
382+
title={`${issueCount} ${issueCount === 1 ? 'issue' : 'issues'} found. Click to view details in the dev overlay.`}
383+
index={0}
384+
label="Issues"
385+
value={<IssueCount>{issueCount}</IssueCount>}
386+
onClick={openErrorOverlay}
387+
/>
388+
)}
389+
<MenuItem
390+
title={`Current route is ${isStaticRoute ? 'static' : 'dynamic'}.`}
391+
label="Route"
392+
index={1}
393+
value={isStaticRoute ? 'Static' : 'Dynamic'}
394+
onClick={() => setOpen(OVERLAYS.Route)}
395+
data-nextjs-route-type={
396+
isStaticRoute ? 'static' : 'dynamic'
397+
}
398+
/>
399+
{isTurbopack ? (
400+
<MenuItem
401+
title="Turbopack is enabled."
402+
label="Turbopack"
403+
value="Enabled"
404+
/>
405+
) : (
406+
<MenuItem
407+
index={2}
408+
title="Learn about Turbopack and how to enable it in your application."
409+
label="Try Turbopack"
410+
value={<ChevronRight />}
411+
onClick={() => setOpen(OVERLAYS.Turbo)}
412+
/>
413+
)}
414+
</div>
415+
416+
<div className="dev-tools-indicator-footer">
417+
<MenuItem
418+
data-preferences
419+
label="Preferences"
420+
value={<GearIcon />}
421+
onClick={() => setOpen(OVERLAYS.Preferences)}
422+
index={isTurbopack ? 2 : 3}
423+
/>
424+
{process.env.__NEXT_DEVTOOL_SEGMENT_EXPLORER ? (
425+
<MenuItem
426+
data-segment-explorer
427+
label="Segment Explorer"
428+
value={<ChevronRight />}
429+
onClick={() => setOpen(OVERLAYS.SegmentExplorer)}
430+
index={isTurbopack ? 3 : 4}
431+
/>
432+
) : null}
433+
</div>
434+
</Context.Provider>
423435
</div>
424-
</Context.Provider>
425-
</div>
436+
)}
437+
</>
426438
)}
427439
</Toast>
428440
)

packages/next/src/next-devtools/dev-overlay/dev-overlay.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { RenderError } from './container/runtime-error/render-error'
1111
import { DarkTheme } from './styles/dark-theme'
1212
import { useDevToolsScale } from './components/errors/dev-tools-indicator/dev-tools-info/preferences'
1313
import type { HydrationErrorState } from '../shared/hydration-error'
14+
import { DevToolsPanel } from './components/dev-tools-panel/dev-tools-panel'
1415

1516
export function DevOverlay({
1617
state,
@@ -46,6 +47,8 @@ export function DevOverlay({
4647
/>
4748
)}
4849

50+
{state.isDevToolsPanelOpen && <DevToolsPanel />}
51+
4952
<ErrorOverlay
5053
state={state}
5154
dispatch={dispatch}

packages/next/src/next-devtools/dev-overlay/shared.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export interface OverlayState {
2929
debugInfo: DebugInfo
3030
routerType: 'pages' | 'app'
3131
isErrorOverlayOpen: boolean
32+
isDevToolsPanelOpen: boolean
3233
}
3334
export type OverlayDispatch = React.Dispatch<DispatcherEvent>
3435

@@ -49,6 +50,7 @@ export const ACTION_BUILDING_INDICATOR_SHOW = 'building-indicator-show'
4950
export const ACTION_BUILDING_INDICATOR_HIDE = 'building-indicator-hide'
5051
export const ACTION_RENDERING_INDICATOR_SHOW = 'rendering-indicator-show'
5152
export const ACTION_RENDERING_INDICATOR_HIDE = 'rendering-indicator-hide'
53+
export const ACTION_DEV_TOOLS_PANEL_TOGGLE = 'dev-tools-panel-toggle'
5254

5355
export const STORAGE_KEY_THEME = '__nextjs-dev-tools-theme'
5456
export const STORAGE_KEY_POSITION = '__nextjs-dev-tools-position'
@@ -121,6 +123,10 @@ export interface RenderingIndicatorHideAction {
121123
type: typeof ACTION_RENDERING_INDICATOR_HIDE
122124
}
123125

126+
export interface DevToolsPanelToggleAction {
127+
type: typeof ACTION_DEV_TOOLS_PANEL_TOGGLE
128+
}
129+
124130
export type DispatcherEvent =
125131
| BuildOkAction
126132
| BuildErrorAction
@@ -139,6 +145,7 @@ export type DispatcherEvent =
139145
| BuildingIndicatorHideAction
140146
| RenderingIndicatorShowAction
141147
| RenderingIndicatorHideAction
148+
| DevToolsPanelToggleAction
142149

143150
const REACT_ERROR_STACK_BOTTOM_FRAME_REGEX =
144151
// 1st group: v8
@@ -177,6 +184,7 @@ export const INITIAL_OVERLAY_STATE: Omit<
177184
refreshState: { type: 'idle' },
178185
versionInfo: { installed: '0.0.0', staleness: 'unknown' },
179186
debugInfo: { devtoolsFrontendUrl: undefined },
187+
isDevToolsPanelOpen: false,
180188
}
181189

182190
function getInitialState(
@@ -339,6 +347,9 @@ export function useErrorOverlayReducer(
339347
case ACTION_RENDERING_INDICATOR_HIDE: {
340348
return { ...state, renderingIndicator: false }
341349
}
350+
case ACTION_DEV_TOOLS_PANEL_TOGGLE: {
351+
return { ...state, isDevToolsPanelOpen: !state.isDevToolsPanelOpen }
352+
}
342353
default: {
343354
return state
344355
}

packages/next/src/next-devtools/dev-overlay/styles/component-styles.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { DEV_TOOLS_INFO_USER_PREFERENCES_STYLES } from '../components/errors/dev
2424
import { DEV_TOOLS_INFO_RENDER_FILES_STYLES } from '../components/overview/segment-explorer'
2525
import { FADER_STYLES } from '../components/fader'
2626
import { RESTART_SERVER_BUTTON_STYLES } from '../components/errors/error-overlay-toolbar/restart-server-button'
27+
import { DEV_TOOLS_PANEL_STYLES } from '../components/dev-tools-panel/dev-tools-panel'
2728

2829
export function ComponentStyles() {
2930
return (
@@ -53,6 +54,7 @@ export function ComponentStyles() {
5354
${DEV_TOOLS_INFO_ROUTE_INFO_STYLES}
5455
${DEV_TOOLS_INFO_USER_PREFERENCES_STYLES}
5556
${DEV_TOOLS_INFO_RENDER_FILES_STYLES}
57+
${DEV_TOOLS_PANEL_STYLES}
5658
${FADER_STYLES}
5759
`}
5860
</style>

0 commit comments

Comments
 (0)