diff --git a/src/devtools/views/Element.css b/src/devtools/views/Element.css index 9306a2750f..8ffaae28fe 100644 --- a/src/devtools/views/Element.css +++ b/src/devtools/views/Element.css @@ -10,18 +10,20 @@ align-items: center; } .Element:hover { - background-color: var(--color-state03); + background-color: var(--color-tree-node-hover); } .SelectedElement { - background-color: var(--color-state00); + background-color: var(--color-tree-node-selected); /* Invert colors */ - --color-component: var(--color-base00); - --color-arrow: var(--color-base00); - --color-tree-tag: rgba(255, 255, 255, 0.8); - --color-tree-attr-name: #b3e5fc; - --color-tree-attr-value: #fff; + --color-component-name: var(--color-component-name-inverted); + --color-arrow: var(--color-arrow-inverted); + --color-tree-jsx-arrow-brackets: var( + --color-tree-jsx-arrow-brackets-inverted + ); + --color-attribute-name: #b3e5fc; + --color-attribute-value: #fff; } .ArrowClosed, @@ -37,23 +39,23 @@ } .Component { - color: var(--color-component); + color: var(--color-component-name); } .Component:before { white-space: nowrap; content: '<'; - color: var(--color-tree-tag); + color: var(--color-tree-jsx-arrow-brackets); } .Component:after { white-space: nowrap; content: '>'; - color: var(--color-tree-tag); + color: var(--color-tree-jsx-arrow-brackets); } .AttributeName { - color: var(--color-tree-attr-name); + color: var(--color-attribute-name); } .AttributeValue { - color: var(--color-tree-attr-value); + color: var(--color-attribute-value); } diff --git a/src/devtools/views/Elements.css b/src/devtools/views/Elements.css index dea13215c2..2fe8bb63c6 100644 --- a/src/devtools/views/Elements.css +++ b/src/devtools/views/Elements.css @@ -3,7 +3,7 @@ height: 100%; display: flex; flex-direction: row; - + background-color: var(--color-background); font-family: var(--font-family-sans); } diff --git a/src/devtools/views/HooksTree.css b/src/devtools/views/HooksTree.css index 950ca8eb97..e531ba9f5a 100644 --- a/src/devtools/views/HooksTree.css +++ b/src/devtools/views/HooksTree.css @@ -1,6 +1,6 @@ .HooksTreeView { padding: 0.25rem; - border-bottom: 1px solid var(--color-base02); + border-bottom: 1px solid var(--color-border); } .HooksNode { @@ -11,14 +11,14 @@ } .Name { - color: var(--color-tree-attr-name); + color: var(--color-attribute-name); } .Value { - color: var(--color-tree-attr-value); + color: var(--color-attribute-value); } .None { - color: var(--color-base03); + color: var(--color-deemphasized); font-style: italic; } diff --git a/src/devtools/views/InspectedElementTree.css b/src/devtools/views/InspectedElementTree.css index b2ecc50e59..f56b57fa33 100644 --- a/src/devtools/views/InspectedElementTree.css +++ b/src/devtools/views/InspectedElementTree.css @@ -1,20 +1,26 @@ .InspectedElementTree { padding: 0.25rem; - border-bottom: 1px solid var(--color-base02); + border-bottom: 1px solid var(--color-border); } .Item { } .Name { - color: var(--color-tree-attr-name); + color: var(--color-attribute-name); } .Value { - color: var(--color-tree-attr-value); + color: var(--color-attribute-value); } .None { - color: var(--color-base03); + color: var(--color-deemphasized); font-style: italic; } + +.Empty { + color: var(--color-deemphasized); + font-style: italic; + padding-left: 1rem; +} diff --git a/src/devtools/views/InspectedElementTree.js b/src/devtools/views/InspectedElementTree.js index 4f37bf0bea..e24accf89e 100644 --- a/src/devtools/views/InspectedElementTree.js +++ b/src/devtools/views/InspectedElementTree.js @@ -6,12 +6,19 @@ import { meta } from '../../hydration'; import styles from './InspectedElementTree.css'; type Props = {| - label: string, data: Object | null, + label: string, + showWhenEmpty?: boolean, |}; -export default function InspectedElementTree({ data, label }: Props) { - if (data === null || Object.keys(data).length === 0) { +export default function InspectedElementTree({ + data, + label, + showWhenEmpty = false, +}: Props) { + const isEmpty = data === null || Object.keys(data).length === 0; + + if (isEmpty && !showWhenEmpty) { return null; } else { // TODO Add click and key handlers for toggling element open/close state. @@ -19,9 +26,11 @@ export default function InspectedElementTree({ data, label }: Props) { return (
{label}
- {Object.keys(data).map(name => ( - - ))} + {isEmpty &&
None
} + {!isEmpty && + Object.keys((data: any)).map(name => ( + + ))}
); } diff --git a/src/devtools/views/SelectedElement.css b/src/devtools/views/SelectedElement.css index 40d6bb6a22..c0fd0a1ba9 100644 --- a/src/devtools/views/SelectedElement.css +++ b/src/devtools/views/SelectedElement.css @@ -3,8 +3,8 @@ flex-direction: column; height: 100%; width: 100%; - border-left: 1px solid var(--color-base02); - border-top: 1px solid var(--color-base02); + border-left: 1px solid var(--color-border); + border-top: 1px solid var(--color-border); } .TitleRow { @@ -12,7 +12,7 @@ display: flex; align-items: center; font-size: 16px; - border-bottom: 1px solid var(--color-base02); + border-bottom: 1px solid var(--color-border); padding: 0.5rem; } @@ -24,10 +24,10 @@ align-items: center; padding: 0.25rem; cursor: pointer; - color: var(--color-state00); + color: var(--color-button); } .IconButton:hover { - color: var(--color-special02); + color: var(--color-button-hover); } .SelectedComponentName { @@ -44,19 +44,19 @@ .Owner { overflow: hidden; text-overflow: ellipsis; - color: var(--color-component); + color: var(--color-component-name); } .Component:before, .Owner:before { white-space: nowrap; content: '<'; - color: var(--color-tree-tag); + color: var(--color-tree-jsx-arrow-brackets); } .Component:after, .Owner:after { white-space: nowrap; content: '>'; - color: var(--color-tree-tag); + color: var(--color-tree-jsx-arrow-brackets); } .Component { @@ -66,8 +66,8 @@ .InspectedElement { overflow: auto; font-family: var(--font-family-monospace); - font-size: var(--font-size-tree-compact); - line-height: var(--line-height-compact); + font-size: var(--font-size-normal); + line-height: var(--line-height-data); } .Owner { @@ -77,6 +77,6 @@ .Loading { padding: 0.25rem; - color: var(--color-base03); + color: var(--color-deemphasized); font-style: italic; } diff --git a/src/devtools/views/SelectedElement.js b/src/devtools/views/SelectedElement.js index 0264a9107c..8e3386a60b 100644 --- a/src/devtools/views/SelectedElement.js +++ b/src/devtools/views/SelectedElement.js @@ -87,7 +87,7 @@ function InspectedElementView({ return (
- + diff --git a/src/devtools/views/Tree.css b/src/devtools/views/Tree.css index a168eab550..855f5331af 100644 --- a/src/devtools/views/Tree.css +++ b/src/devtools/views/Tree.css @@ -3,7 +3,7 @@ width: 100%; display: flex; flex-direction: column; - border-top: 1px solid var(--color-base02); + border-top: 1px solid var(--color-border); } .SearchRow { @@ -11,7 +11,7 @@ display: flex; align-items: center; font-size: 16px; - border-bottom: 1px solid var(--color-base02); + border-bottom: 1px solid var(--color-border); padding: 0.5rem; } @@ -34,11 +34,11 @@ align-items: center; padding: 0.25rem; cursor: pointer; - color: var(--color-state00); + color: var(--color-button); flex: 0 0 auto; } .IconButton:hover { - color: var(--color-special02); + color: var(--color-button-hover); } .AutoSizerWrapper { @@ -50,6 +50,6 @@ .List { font-family: var(--font-family-monospace); - font-size: var(--font-size-tree-compact); - line-height: var(--line-height-tree-compact); + font-size: var(--font-size-normal); + line-height: var(--line-height-data); } diff --git a/src/devtools/views/root.css b/src/devtools/views/root.css index e39331633f..7c62c37480 100644 --- a/src/devtools/views/root.css +++ b/src/devtools/views/root.css @@ -1,45 +1,50 @@ :root { - /* TODO */ - --color-base00: #ffffff; - --color-base01: #f3f3f3; - --color-base02: #eeeeee; - --color-base03: #cfd1d5; - --color-base04: #333333; - --color-base05: #5a5a5a; - --color-special00: #8155cb; - --color-special01: #222222; - --color-special02: #1a1aa6; - --color-special03: #c80000; - --color-special04: #236e25; - --color-special05: #aa0d91; - --color-special06: #ef6632; - --color-special07: #777d88; - --color-state00: #0088fa; - --color-state01: #dadada; - --color-state02: #ffffff; - --color-state03: #ebf1fb; - --color-state04: #ffff00; - --color-state05: #222222; - --color-state06: #222222; + /* Light theme */ + --theme-light-arrow: #777d88; + --theme-light-arrow-inverted: #ffffff; + --theme-light-attribute-name: #ef6632; + --theme-light-attribute-value: #1a1aa6; + --theme-light-background: #ffffff; + --theme-light-button: #0088fa; + --theme-light-button-hover: #1a1aa6; + --theme-light-color-border: #eeeeee; + --theme-light-component-name: #8155cb; + --theme-light-component-name-inverted: #ffffff; + --theme-light-deemphasized: #cfd1d5; + --theme-light-jsx-arrow-brackets: #333333; + --theme-light-jsx-arrow-brackets-inverted: rgba(255, 255, 255, 0.8); + --theme-light-tree-node-selected: #0088fa; + --theme-light-tree-node-hover: #ebf1fb; - --color-arrow: var(--color-special07); - --color-component: var(--color-special00); - --color-tree-tag: var(--color-base04); - --color-tree-attr-name: var(--color-special06); - --color-tree-attr-value: var(--color-special02); + /* TODO Dark theme */ - --line-height-tree-compact: 1.5; - --line-height-tree-normal: 1.5; + /* "theme" values referenced by other stylesheets */ + --color-arrow: var(--theme-light-arrow); + --color-arrow-inverted: var(--theme-light-arrow-inverted); + --color-attribute-name: var(--theme-light-attribute-name); + --color-attribute-value: var(--theme-light-attribute-value); + --color-background: var(--theme-light-background); + --color-border: var(--theme-light-color-border); + --color-button: var(--theme-light-button); + --color-button-hover: var(--theme-light-button-hover); + --color-component-name: var(--theme-light-component-name); + --color-component-name-inverted: var(--theme-light-component-name-inverted); + --color-deemphasized: var(--theme-light-deemphasized); + --color-tree-jsx-arrow-brackets: var(--theme-light-jsx-arrow-brackets); + --color-tree-jsx-arrow-brackets-inverted: var( + --theme-light-jsx-arrow-brackets-inverted + ); + --color-tree-node-selected: var(--theme-light-tree-node-selected); + --color-tree-node-hover: var(--theme-light-tree-node-hover); + + --font-size-normal: 12px; + --line-height-data: 1.5rem; /* GitHub.com system fonts */ --font-family-monospace: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; --font-family-sans: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; - --font-size-tree-compact: 12px; - --font-size-tree-normal: 14px; - --line-height-compact: 20px; - --line-height-normal: 24px; } * { diff --git a/src/devtools/views/utils.js b/src/devtools/views/utils.js index 8d77d8a7c2..3726edd83a 100644 --- a/src/devtools/views/utils.js +++ b/src/devtools/views/utils.js @@ -5,7 +5,7 @@ import { meta } from '../../hydration'; export function getMetaValueLabel(data: Object): string | null { switch (data[meta.type]) { case 'react_element': - return `<${data[meta.name]} />`; + return `<${data[meta.name]}/>`; case 'function': return `${data[meta.name] || 'fn'}()`; case 'object':