diff --git a/src/devtools/views/Components/Element.css b/src/devtools/views/Components/Element.css
index 72f6d68a2f..081a54d6ce 100644
--- a/src/devtools/views/Components/Element.css
+++ b/src/devtools/views/Components/Element.css
@@ -1,5 +1,6 @@
.Element,
-.SelectedElement {
+.SelectedElement,
+.InactiveElement {
border-radius: 0.25em;
white-space: nowrap;
line-height: var(--line-height-data);
@@ -13,6 +14,9 @@
.Element:hover {
background-color: var(--color-hover-background);
}
+.InactiveElement {
+ background-color: var(--color-inactive-background);
+}
.SelectedElement {
background-color: var(--color-selected-background);
diff --git a/src/devtools/views/Components/Element.js b/src/devtools/views/Components/Element.js
index f696a1e3cd..a38fc842bd 100644
--- a/src/devtools/views/Components/Element.js
+++ b/src/devtools/views/Components/Element.js
@@ -43,6 +43,7 @@ export default function ElementView({ data, index, style }: Props) {
const id = element === null ? null : element.id;
const isSelected = selectedElementID === id;
const lastScrolledIDRef = data.lastScrolledIDRef;
+ const treeFocused = data.treeFocused;
const handleDoubleClick = useCallback(() => {
if (id !== null) {
@@ -117,7 +118,13 @@ export default function ElementView({ data, index, style }: Props) {
return (
Element | null,
lastScrolledIDRef: { current: number | null },
+ treeFocused: boolean,
|};
type Props = {||};
@@ -48,6 +50,9 @@ export default function Tree(props: Props) {
// $FlowFixMe https://github.com/facebook/flow/issues/7341
const listRef = useRef | null>(null);
const treeRef = useRef(null);
+ const elementsRef = useRef(null);
+
+ const [treeFocused, setTreeFocused] = useState(false);
const { lineHeight } = useContext(SettingsContext);
@@ -142,6 +147,30 @@ export default function Tree(props: Props) {
store,
]);
+ useEffect(() => {
+ if (elementsRef.current === null) {
+ return () => {};
+ }
+
+ const handleFocusIn = () => {
+ setTreeFocused(true);
+ };
+
+ const handleFocusOut = () => {
+ setTreeFocused(false);
+ };
+
+ const elementsElement = elementsRef.current;
+
+ elementsElement.addEventListener('focusin', handleFocusIn);
+ elementsElement.addEventListener('focusout', handleFocusOut);
+
+ return () => {
+ elementsElement.removeEventListener('focusin', handleFocusIn);
+ elementsElement.removeEventListener('focusout', handleFocusOut);
+ };
+ }, []);
+
// Let react-window know to re-render any time the underlying tree data changes.
// This includes the owner context, since it controls a filtered view of the tree.
const itemData = useMemo(
@@ -150,8 +179,9 @@ export default function Tree(props: Props) {
numElements,
getElementAtIndex,
lastScrolledIDRef,
+ treeFocused,
}),
- [baseDepth, numElements, getElementAtIndex, lastScrolledIDRef]
+ [baseDepth, numElements, getElementAtIndex, lastScrolledIDRef, treeFocused]
);
const handleMouseLeave = useCallback(() => {
@@ -164,7 +194,11 @@ export default function Tree(props: Props) {
{ownerStack.length > 0 ? : }
-
+
{({ height, width }) => (
// $FlowFixMe https://github.com/facebook/flow/issues/7341
diff --git a/src/devtools/views/Settings/SettingsContext.js b/src/devtools/views/Settings/SettingsContext.js
index d6f3ba4a9a..44244f38df 100644
--- a/src/devtools/views/Settings/SettingsContext.js
+++ b/src/devtools/views/Settings/SettingsContext.js
@@ -223,6 +223,7 @@ function updateThemeVariables(
updateStyleHelper(theme, 'color-dimmer', documentElements);
updateStyleHelper(theme, 'color-dimmest', documentElements);
updateStyleHelper(theme, 'color-hover-background', documentElements);
+ updateStyleHelper(theme, 'color-inactive-background', documentElements);
updateStyleHelper(theme, 'color-jsx-arrow-brackets', documentElements);
updateStyleHelper(
theme,
diff --git a/src/devtools/views/root.css b/src/devtools/views/root.css
index c2b2432145..884ff3e0d4 100644
--- a/src/devtools/views/root.css
+++ b/src/devtools/views/root.css
@@ -34,6 +34,7 @@
--light-color-dimmer: #cfd1d5;
--light-color-dimmest: #eff0f1;
--light-color-hover-background: #ebf1fb;
+ --light-color-inactive-background: #ccc;
--light-color-jsx-arrow-brackets: #333333;
--light-color-jsx-arrow-brackets-inverted: rgba(255, 255, 255, 0.7);
--light-color-modal-background: rgba(255, 255, 255, 0.75);
@@ -78,6 +79,7 @@
--dark-color-dimmer: #777d88;
--dark-color-dimmest: #4f5766;
--dark-color-hover-background: #3d424a;
+ --dark-color-inactive-background: #44474c;
--dark-color-jsx-arrow-brackets: #777d88;
--dark-color-jsx-arrow-brackets-inverted: rgba(255, 255, 255, 0.7);
--dark-color-modal-background: rgba(0, 0, 0, 0.75);