From 0681e2453124ac5fe1ba116fe600cb4a3d10ea5e Mon Sep 17 00:00:00 2001
From: Brian Vaughn <brian.david.vaughn@gmail.com>
Date: Thu, 18 May 2017 13:25:43 +0200
Subject: [PATCH] Tweaked error overlay styles (pt2) (#2208)

* Fixed several of the issues and nits from PR:

* Moved margin between header and file name to header, so when content was scrolled, the header would remain more separate
* Made build-time and runtime overlays better match
* Secondary error <pre> style now uses yellow bg instead of red
* 'Scrollable Header' (see above comment to why this is necessary) but I did increase the max-height from 35% to 50%.
* Fixed header and 'X' button vertical alignment

* Temporary stack margin fix

* Move "N errors" to the top
---
 .../react-dev-utils/webpackHotDevClient.js    |  6 +--
 .../src/components/code.js                    |  5 ++-
 .../src/components/frame.js                   |  9 ++--
 .../src/components/overlay.js                 | 24 +++++------
 packages/react-error-overlay/src/styles.js    | 41 ++++++++++++++-----
 5 files changed, 55 insertions(+), 30 deletions(-)

diff --git a/packages/react-dev-utils/webpackHotDevClient.js b/packages/react-dev-utils/webpackHotDevClient.js
index dd280dab5..645073f24 100644
--- a/packages/react-dev-utils/webpackHotDevClient.js
+++ b/packages/react-dev-utils/webpackHotDevClient.js
@@ -85,7 +85,7 @@ function overlayHeaderStyle() {
     'font-family: sans-serif;' +
     'color: rgb(206, 17, 38);' +
     'white-space: pre-wrap;' +
-    'margin: 0.75rem 2rem 0px 0px;' +
+    'margin: 0 2rem 0.75rem 0px;' +
     'flex: 0 0 auto;' +
     'max-height: 35%;' +
     'overflow: auto;';
@@ -129,9 +129,9 @@ function showErrorOverlay(message) {
     // TODO: unify this with our runtime overlay
     overlayDiv.innerHTML = '<div style="' +
       overlayHeaderStyle() +
-      '">Failed to compile</div><br><br>' +
+      '">Failed to compile</div>' +
       '<pre style="' +
-      'display: block; padding: 0.5em; margin-top: 0.5em; ' +
+      'display: block; padding: 0.5em; margin-top: 0; ' +
       'margin-bottom: 0.5em; overflow-x: auto; white-space: pre-wrap; ' +
       'border-radius: 0.25rem; background-color: rgba(206, 17, 38, 0.05)">' +
       '<code style="font-family: Consolas, Menlo, monospace;">' +
diff --git a/packages/react-error-overlay/src/components/code.js b/packages/react-error-overlay/src/components/code.js
index e7e86c8f3..91dd377f0 100644
--- a/packages/react-error-overlay/src/components/code.js
+++ b/packages/react-error-overlay/src/components/code.js
@@ -3,10 +3,11 @@ import type { ScriptLine } from '../utils/stack-frame';
 import { applyStyles } from '../utils/dom/css';
 import { absolutifyCaret } from '../utils/dom/absolutifyCaret';
 import {
-  preStyle,
   codeStyle,
   primaryErrorStyle,
+  primaryPreStyle,
   secondaryErrorStyle,
+  secondaryPreStyle,
 } from '../styles';
 
 import generateAnsiHtml from 'react-dev-utils/ansiHTML';
@@ -82,7 +83,7 @@ function createCode(
     }
   }
   const pre = document.createElement('pre');
-  applyStyles(pre, preStyle);
+  applyStyles(pre, main ? primaryPreStyle : secondaryPreStyle);
   pre.appendChild(code);
 
   if (typeof onSourceClick === 'function') {
diff --git a/packages/react-error-overlay/src/components/frame.js b/packages/react-error-overlay/src/components/frame.js
index a9ea0ea37..d9475c7a5 100644
--- a/packages/react-error-overlay/src/components/frame.js
+++ b/packages/react-error-overlay/src/components/frame.js
@@ -6,7 +6,8 @@ import type { StackFrame } from '../utils/stack-frame';
 import type { FrameSetting, OmitsObject } from './frames';
 import { applyStyles } from '../utils/dom/css';
 import {
-  omittedFramesStyle,
+  omittedFramesExpandedStyle,
+  omittedFramesCollapsedStyle,
   functionNameStyle,
   depStyle,
   linkStyle,
@@ -39,12 +40,14 @@ function getGroupToggle(
     if (hide) {
       text1.textContent = text1.textContent.replace(/â–²/, 'â–¶');
       text1.textContent = text1.textContent.replace(/expanded/, 'collapsed');
+      applyStyles(omittedFrames, omittedFramesCollapsedStyle);
     } else {
       text1.textContent = text1.textContent.replace(/â–¶/, 'â–²');
       text1.textContent = text1.textContent.replace(/collapsed/, 'expanded');
+      applyStyles(omittedFrames, omittedFramesExpandedStyle);
     }
   });
-  applyStyles(omittedFrames, omittedFramesStyle);
+  applyStyles(omittedFrames, omittedFramesCollapsedStyle);
   return omittedFrames;
 }
 
@@ -73,7 +76,7 @@ function insertBeforeBundle(
   div.addEventListener('click', function() {
     return actionElement.click();
   });
-  applyStyles(div, omittedFramesStyle);
+  applyStyles(div, omittedFramesExpandedStyle);
   div.style.display = 'none';
 
   parent.insertBefore(div, first);
diff --git a/packages/react-error-overlay/src/components/overlay.js b/packages/react-error-overlay/src/components/overlay.js
index 1626fcdee..50766f011 100644
--- a/packages/react-error-overlay/src/components/overlay.js
+++ b/packages/react-error-overlay/src/components/overlay.js
@@ -40,6 +40,18 @@ function createOverlay(
   overlay.appendChild(container);
   container.appendChild(createClose(document, closeCallback));
 
+  // Create "Errors X of Y" in case of multiple errors
+  const additional = document.createElement('div');
+  applyStyles(additional, additionalStyle);
+  updateAdditional(
+    document,
+    additional,
+    currentError,
+    totalErrors,
+    switchCallback
+  );
+  container.appendChild(additional);
+
   // Create header
   const header = document.createElement('div');
   applyStyles(header, headerStyle);
@@ -64,18 +76,6 @@ function createOverlay(
   header.appendChild(document.createTextNode(finalMessage));
   container.appendChild(header);
 
-  // Create "Errors X of Y" in case of multiple errors
-  const additional = document.createElement('div');
-  applyStyles(additional, additionalStyle);
-  updateAdditional(
-    document,
-    additional,
-    currentError,
-    totalErrors,
-    switchCallback
-  );
-  container.appendChild(additional);
-
   // Create trace
   container.appendChild(
     createFrames(document, frames, frameSettings, contextSize, name)
diff --git a/packages/react-error-overlay/src/styles.js b/packages/react-error-overlay/src/styles.js
index 8e6f0d07b..0a2ed7cee 100644
--- a/packages/react-error-overlay/src/styles.js
+++ b/packages/react-error-overlay/src/styles.js
@@ -64,22 +64,24 @@ const closeButtonStyle = {
   top: 0,
 };
 
-const additionalStyle = {};
+const additionalStyle = {
+  'margin-bottom': '0.5rem',
+};
 
 const headerStyle = {
   'font-size': '2em',
   'font-family': 'sans-serif',
   color: red,
   'white-space': 'pre-wrap',
-  margin: '0.75rem 2rem 0 0', // Prevent overlap with close button
+  // Top bottom margin spaces header
+  // Right margin revents overlap with close button
+  margin: '0 2rem 0.75rem 0',
   flex: '0 0 auto',
-  'max-height': '35%',
+  'max-height': '50%',
   overflow: 'auto',
 };
 
-const functionNameStyle = {
-  'margin-top': '1em',
-};
+const functionNameStyle = {};
 
 const linkStyle = {
   'font-size': '0.9em',
@@ -108,12 +110,19 @@ const secondaryErrorStyle = {
   'background-color': yellow,
 };
 
-const omittedFramesStyle = {
+const omittedFramesCollapsedStyle = {
+  color: black,
+  cursor: 'pointer',
+  'margin-bottom': '1.5em',
+};
+
+const omittedFramesExpandedStyle = {
   color: black,
   cursor: 'pointer',
+  'margin-bottom': '0.6em',
 };
 
-const preStyle = {
+const primaryPreStyle = {
   display: 'block',
   padding: '0.5em',
   'margin-top': '0.5em',
@@ -123,6 +132,16 @@ const preStyle = {
   'border-radius': '0.25rem',
   'background-color': 'rgba(206, 17, 38, .05)',
 };
+const secondaryPreStyle = {
+  display: 'block',
+  padding: '0.5em',
+  'margin-top': '0.5em',
+  'margin-bottom': '0.5em',
+  'overflow-x': 'auto',
+  'white-space': 'pre-wrap',
+  'border-radius': '0.25rem',
+  'background-color': 'rgba(251, 245, 180,.3)',
+};
 
 const toggleStyle = {
   'margin-bottom': '1.5em',
@@ -186,9 +205,11 @@ export {
   traceStyle,
   depStyle,
   primaryErrorStyle,
+  primaryPreStyle,
   secondaryErrorStyle,
-  omittedFramesStyle,
-  preStyle,
+  secondaryPreStyle,
+  omittedFramesCollapsedStyle,
+  omittedFramesExpandedStyle,
   toggleStyle,
   codeStyle,
   hiddenStyle,
-- 
GitLab