@@ -205,6 +205,7 @@ function createBridgeAndStore() {
205205 bridge,
206206 browserTheme : getBrowserTheme ( ) ,
207207 componentsPortalContainer,
208+ inspectedElementPortalContainer,
208209 profilerPortalContainer,
209210 editorPortalContainer,
210211 currentSelectedSource,
@@ -277,6 +278,46 @@ function createComponentsPanel() {
277278 ) ;
278279}
279280
281+ function createElementsInspectPanel ( ) {
282+ if ( inspectedElementPortalContainer ) {
283+ // Panel is created and user opened it at least once
284+ ensureInitialHTMLIsCleared ( inspectedElementPortalContainer ) ;
285+ render ( ) ;
286+
287+ return ;
288+ }
289+
290+ if ( inspectedElementPane ) {
291+ // Panel is created, but wasn't opened yet, so no document is present for it
292+ return ;
293+ }
294+
295+ const elementsPanel = chrome . devtools . panels . elements ;
296+ if ( ! elementsPanel || ! elementsPanel . createSidebarPane ) {
297+ // TODO: Does Firefox support elements panel extensions?
298+ return ;
299+ }
300+
301+ elementsPanel . createSidebarPane ( 'React Element ⚛' , createdPane => {
302+ inspectedElementPane = createdPane ;
303+
304+ createdPane . setPage ( 'panel.html' ) ;
305+ createdPane . setHeight ( '75px' ) ;
306+
307+ createdPane . onShown . addListener ( portal => {
308+ inspectedElementPortalContainer = portal . container ;
309+ if ( inspectedElementPortalContainer != null && render ) {
310+ ensureInitialHTMLIsCleared ( inspectedElementPortalContainer ) ;
311+
312+ render ( ) ;
313+ portal . injectStyles ( cloneStyleTags ) ;
314+
315+ logEvent ( { event_name : 'selected-inspected-element-pane' } ) ;
316+ }
317+ } ) ;
318+ } ) ;
319+ }
320+
280321function createProfilerPanel ( ) {
281322 if ( profilerPortalContainer ) {
282323 // Panel is created and user opened it at least once
@@ -507,6 +548,7 @@ function mountReactDevTools() {
507548 createComponentsPanel ( ) ;
508549 createProfilerPanel ( ) ;
509550 createSourcesEditorPanel ( ) ;
551+ createElementsInspectPanel ( ) ;
510552 // Suspense Tab is created via the hook
511553 // TODO(enableSuspenseTab): Create eagerly once Suspense tab is stable
512554}
@@ -555,10 +597,12 @@ let componentsPanel = null;
555597let profilerPanel = null ;
556598let suspensePanel = null ;
557599let editorPane = null ;
600+ let inspectedElementPane = null ;
558601let componentsPortalContainer = null ;
559602let profilerPortalContainer = null ;
560603let suspensePortalContainer = null ;
561604let editorPortalContainer = null ;
605+ let inspectedElementPortalContainer = null ;
562606
563607let mostRecentOverrideTab = null ;
564608let render = null ;
0 commit comments