Repository: styleguidist/react-styleguidist
Pull request #1456 (2019-10-26 01:28:04)

Enhancement: Modifier to add whitespace between example components
We want users to be able to easily add padding between example components without
adding manual styling to their example code. This adds the `padded` modifier option
to the Playground, which adds additional styling to the PlaygroundRenderer when
`true` that adds padding between each example component in that block.

Issue #841


Patch:
diff --git a/.travis.yml b/.travis.yml
index f9993839..9afea120 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -68,9 +68,8 @@ jobs:
 
     - stage: release
       script:
-        - npm install --no-save semantic-release-tamia
-        - >-
-          npx semantic-release --analyze-commits semantic-release-tamia/analyzeCommits --verify-release semantic-release-tamia/verifyRelease --generate-notes semantic-release-tamia/generateNotes
+        - npm install --no-save conventional-changelog-eslint
+        - npx semantic-release
 
     - stage: documentation
       script:
diff --git a/babel.config.js b/babel.config.js
index b51cda13..0184abef 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -26,7 +26,7 @@ module.exports = {
 						useBuiltIns: 'usage',
 						corejs: 3,
 						targets: {
-							node: '8.6',
+							node: '8.9',
 						},
 					},
 				],
@@ -35,7 +35,22 @@ module.exports = {
 	],
 	env: {
 		test: {
-			presets: ['@babel/env', '@babel/react', '@babel/flow'],
+			presets: [
+				[
+					'@babel/env',
+					{
+						loose: true,
+						modules: 'commonjs',
+						useBuiltIns: 'usage',
+						corejs: 3,
+						targets: {
+							node: 'current',
+						},
+					},
+				],
+				'@babel/react',
+				'@babel/flow',
+			],
 			plugins: ['@babel/plugin-proposal-class-properties'],
 		},
 	},
diff --git a/docs/Components.md b/docs/Components.md
index ac7ded53..2e19a406 100644
--- a/docs/Components.md
+++ b/docs/Components.md
@@ -52,13 +52,13 @@ It will try to use the `displayName` of your component as the identifier. If it
 
 In each of the following cases, the global identifier will be `Component`.
 
-| Path                | Code                                                                                                                                   | Styleguidist understands   |
-| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- |
-| /whatever.js        | `export default function Component() { ... }`                                                                                          | displayName                |
-| /whatever.js        | `export default function SomeName() { ... }`<br>`SomeName.displayName = 'Component';`                                                  | displayName                |
-| /whatever.js        | `export default function Component() { ... }`<br>`Component.displayName = dynamicNamer();`                                             | displayName at declaration |
-| /component.js       | `const name = 'SomeName';`<br>`const componentMap = {`<br>`[name]: function() { ... }`<br>`};`<br>`export default componentMap[name];` | Filename                   |
-| /component/index.js | `const name = 'SomeName';`<br>`const componentMap = {`<br>`[name]: function() { ... }`<br>`};`<br>`export default componentMap[name];` | Folder name                |
+| Path | Code | Styleguidist understands |
+| --- | --- | --- |
+| /whatever.js | `export default function Component() { ... }` | displayName |
+| /whatever.js | `export default function SomeName() { ... }`<br>`SomeName.displayName = 'Component';` | displayName |
+| /whatever.js | `export default function Component() { ... }`<br>`Component.displayName = dynamicNamer();` | displayName at declaration |
+| /component.js | `const name = 'SomeName';`<br>`const componentMap = {`<br>`[name]: function() { ... }`<br>`};`<br>`export default componentMap[name];` | Filename |
+| /component/index.js | `const name = 'SomeName';`<br>`const componentMap = {`<br>`[name]: function() { ... }`<br>`};`<br>`export default componentMap[name];` | Folder name |
 
 ### Default vs named exports
 
diff --git a/docs/Configuration.md b/docs/Configuration.md
index 6fc86c1f..1625872d 100644
--- a/docs/Configuration.md
+++ b/docs/Configuration.md
@@ -412,9 +412,7 @@ Function that allows you to override the printing of build messages to console.l
 module.exports = {
   printBuildInstructions(config) {
     console.log(
-      `Style guide published to ${
-        config.styleguideDir
-      }. Something else interesting.`
+      `Style guide published to ${config.styleguideDir}. Something else interesting.`
     )
   }
 }
diff --git a/docs/Cookbook.md b/docs/Cookbook.md
index 5f647591..ed2ec013 100644
--- a/docs/Cookbook.md
+++ b/docs/Cookbook.md
@@ -595,19 +595,19 @@ And with Styleguidist you write _examples_ in Markdown files:
 
 Another important distinction is that Storybook shows only one variation of one component at a time but Styleguidist can show all variations of all components, all variations of a single component or one variation. It’s easier to create a style guide with Styleguidist but Storybook has more tools to develop components (though we’re working on that too).
 
-| Feature              | Storybook  | Styleguidist                                                                      |
-| -------------------- | ---------- | --------------------------------------------------------------------------------- |
-| Component examples   | JavaScript | Markdown                                                                          |
-| Props docs           | Yes        | Yes                                                                               |
-| Public methods docs  | No         | Yes                                                                               |
-| Style guide¹         | No         | Yes                                                                               |
-| Customizable design  | No         | Yes                                                                               |
-| Extra documentation² | No         | Yes                                                                               |
-| Plugins              | Many       | [In development](https://github.com/styleguidist/react-styleguidist/issues/354)   |
-| React                | Yes        | Yes                                                                               |
-| Preact               | Yes        | Yes                                                                               |
-| React Native         | Yes        | [react-native-web](https://github.com/styleguidist/react-styleguidist/issues/675) |
-| Vue                  | Yes        | [Fork](https://github.com/vue-styleguidist/vue-styleguidist)                      |
+| Feature | Storybook | Styleguidist |
+| --- | --- | --- |
+| Component examples | JavaScript | Markdown |
+| Props docs | Yes | Yes |
+| Public methods docs | No | Yes |
+| Style guide¹ | No | Yes |
+| Customizable design | No | Yes |
+| Extra documentation² | No | Yes |
+| Plugins | Many | [In development](https://github.com/styleguidist/react-styleguidist/issues/354) |
+| React | Yes | Yes |
+| Preact | Yes | Yes |
+| React Native | Yes | [react-native-web](https://github.com/styleguidist/react-styleguidist/issues/675) |
+| Vue | Yes | [Fork](https://github.com/vue-styleguidist/vue-styleguidist) |
 
 ¹ All components on a single page.<br> ² Include non-component documentation.
 
diff --git a/docs/Documenting.md b/docs/Documenting.md
index 1de5ddad..37220a12 100644
--- a/docs/Documenting.md
+++ b/docs/Documenting.md
@@ -70,6 +70,14 @@ Styleguidist will look for any `Readme.md` or `ComponentName.md` files in the co
     <Button>I’m transparent!</Button>
     ```
 
+    Or add padding between examples in a block by passing the `padded` modifier:
+
+    ```jsx padded
+    <Button>Push Me</Button>
+    <Button>Click Me</Button>
+    <Button>Tap Me</Button>
+    ```
+
     Or disable an editor by passing a `noeditor` modifier:
 
     ```jsx noeditor
diff --git a/docs/Maintenance.md b/docs/Maintenance.md
index 846e5383..92d8d1e7 100644
--- a/docs/Maintenance.md
+++ b/docs/Maintenance.md
@@ -9,11 +9,11 @@
 - [Pull requests](#pull-requests)
 - [Releases](#releases)
   - [Patch releases](#patch-releases)
-  - [Minor and major releases](#minor-and-major-releases)
+  - [Minor releases](#minor-releases)
+  - [Major releases](#major-releases)
 - [Changelogs](#changelogs)
   - [What is a good changelog](#what-is-a-good-changelog)
   - [What should be in a changelog](#what-should-be-in-a-changelog)
-  - [Preparing a changelog](#preparing-a-changelog)
 
 <!-- tocstop -->
 
@@ -30,34 +30,68 @@ Help us develop and maintain Styleguidist:
 
 ## Commit message conventions
 
-[Commit message conventions](https://github.com/tamiadev/semantic-release-tamia/blob/master/Convention.md) are based on Angular conventions.
+We use [ESLint commit message conventions](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-eslint).
+
+Each commit looks like this:
+
+```
+Tag: Short description (fixes #1234)
+
+Longer description here if necessary
+```
+
+The `Tag` is one of the following:
+
+- `Fix` — for a bug fix.
+- `Update` — for a backwards-compatible enhancement.
+- `New` — implemented a new feature.
+- `Breaking` — for a backwards—incompatible enhancement or feature.
+- `Docs` — changes to documentation only.
+- `Build` — changes to build process only.
+- `Upgrade` — for a dependency upgrade.
+- `Chore` — for refactoring, adding tests and so on (anything that isn’t user-facing).
+
+If the commit doesn’t completely fix the issue, then use (`refs #1234`) instead of (`fixes #1234`).
+
+Here are some good commit message summary examples:
+
+```
+Build: Update Travis to only test Node 0.10 (refs #734)
+Fix: Semi rule incorrectly flagging extra semicolon (fixes #840)
+Upgrade: Esprima to 1.2, switch to using comment attachment (fixes #730)
+```
 
 ## Pull requests
 
-Maintainers merge pull requests by squashing all commits and editing the commit message if necessary.
+Maintainers merge pull requests by squashing all commits and editing the commit message if necessary using the GitHub user interface.
 
-Use an [appropriate commit type](https://github.com/tamiadev/semantic-release-tamia/blob/master/Convention.md#types). Be especially careful with [breaking changes](https://github.com/tamiadev/semantic-release-tamia/blob/master/Convention.md#breaking-changes).
+Use an appropriate commit type. Be especially careful with breaking changes. See _Commit message conventions_ above for details.
 
 ## Releases
 
-We’re doing [semi-automated releases](http://blog.sapegin.me/all/semantic-release) with semantic-release.
+We’re doing automated releases with semantic-release. We’re using [milestones](https://github.com/styleguidist/react-styleguidist/milestones) to group approved pull requests that should be released together (most useful for major releases).
 
 ### Patch releases
 
-Patch releases are fully automated — any commit of a `Fix` type is published as a patch release as soon as CI passes.
+Any commit of a `Fix` or `Update` types merged into the master branch, is published as a _patch_ release as soon as CI passes.
 
 ![](https://d3vv6lp55qjaqc.cloudfront.net/items/1T3v1z0c3f1I1E3l0B3s/patch-commit.png)
 
-### Minor and major releases
+### Minor releases
 
-We’re using [milestones](https://github.com/styleguidist/react-styleguidist/milestones) to group approved pull requests that should be released together. Minor and major releases require a changelog (see below). Any commit of a `Feat` type will not trigger a release until you commit a changelog. Semantic-release will publish a major release if there are any commits with [breaking changes](https://github.com/tamiadev/semantic-release-tamia/blob/master/Convention.md#breaking-changes).
+Any commit of a `New` type merged into the master branch, is published as a _minor_ release as soon as CI passes.
 
-1.  Merge all pull request from a milestone
-2.  Resolve possible merge conflicts.
-3.  Manually check that Styleguidist still works.
-4.  Prepare and commit a changelog.
-5.  Wait until semantic-release publishes the release.
-6.  Tweet the release!
+### Major releases
+
+Any commit of a `Breaking` type merged into the master branch, is published as a _major_ release as soon as CI passes.
+
+1. Merge all pull requests from a milestone. If a milestone has more than one pull request, they should be merged and released together:
+   1. Create a new branch.
+   2. Merge all pull requests into this new branch (you can change the target branch on the pull request page and merge it using the GitHub user interface).
+   3. Resolve possible merge conflicts.
+2. Wait until semantic-release publishes the release.
+3. Edit the release notes on GitHub (see _Changelogs_ below).
+4. Tweet the release!
 
 ## Changelogs
 
@@ -67,7 +101,7 @@ We’re using [milestones](https://github.com/styleguidist/react-styleguidist/mi
 - Changelog should show new features with code examples or GIFs.
 - Changelog should make all breaking changes clear.
 - Changelog should explain how to migrate to a new version if there are breaking changes.
-- Commit log **is not** a changelog.
+- Commit log **is not** a changelog but can be a base for it.
 
 Here’s a [good example of a changelog](https://github.com/styleguidist/react-styleguidist/releases/tag/v7.1.0). Check out [Keep a Changelog](https://keepachangelog.com/) for more details on good changelogs.
 
@@ -75,16 +109,3 @@ Here’s a [good example of a changelog](https://github.com/styleguidist/react-s
 
 - Information about pull request authors:<br> `(#1040 by @rafaesc)`
 - Open Collective link at the very top:<br> `👋 **[Support Styleguidist](https://opencollective.com/styleguidist) on Open Collective** 👋`
-
-### Preparing a changelog
-
-1. Change to the `master` branch.
-2. Generate a changelog draft using [tamia-changelog](https://github.com/tamiadev/tamia-changelog): `npx tamia-changelog`.
-3. Edit `Changelog.md` file.
-4. Commit the changelog: `npx tamia-changelog commit`.
-
-**Note:** do not commit the `Changelog.md` file, the release tool reads the changelog from the commit message. [Read how it works](https://blog.sapegin.me/all/semantic-release/).
-
-**Note:** you may create a pull request for a changelog. Make sure the actual commit in the `master` branch has a `Changelog:` tag for the release tool to see it.
-
-![Commit message with a changelog](https://user-images.githubusercontent.com/70067/66844661-f6f1e600-ef6e-11e9-9d63-dba607d3c94b.png)
diff --git a/examples/basic/src/components/Button/Button.css b/examples/basic/src/components/Button/Button.css
index 5670b75b..e5f2d0b4 100644
--- a/examples/basic/src/components/Button/Button.css
+++ b/examples/basic/src/components/Button/Button.css
@@ -14,10 +14,6 @@
 	cursor: default;
 }
 
-.button + .button {
-	margin-left: 8px;
-}
-
 .checks {
 	background-image: linear-gradient(45deg, #f5f5f5 25%, transparent 25%),
 		linear-gradient(-45deg, #f5f5f5 25%, transparent 25%),
diff --git a/examples/basic/src/components/Button/Readme.md b/examples/basic/src/components/Button/Readme.md
index f4a092a6..a2f92116 100644
--- a/examples/basic/src/components/Button/Readme.md
+++ b/examples/basic/src/components/Button/Readme.md
@@ -20,6 +20,14 @@ Fenced code blocks with `js`, `jsx` or `javascript` languages are rendered as a
 <Button>Push Me</Button>
 ```
 
+Add padding between examples in a block by passing a `padded` modifier (` ```jsx padded `):
+
+```jsx padded
+<Button>Push Me</Button>
+<Button>Click Me</Button>
+<Button>Tap Me</Button>
+```
+
 You can add a custom props to an example wrapper (` ```js { "props": { "className": "checks" } } `):
 
 ```js { "props": { "className": "checks" } }
diff --git a/examples/sections/src/components/MyLabel/Label.js b/examples/sections/src/components/MyLabel/Label.js
new file mode 100644
index 00000000..28e99072
--- /dev/null
+++ b/examples/sections/src/components/MyLabel/Label.js
@@ -0,0 +1,8 @@
+import React from 'react';
+
+/**
+ * Simple text label.
+ */
+export default function Label() {
+	return <span>I am a duplicate Label component!</span>;
+}
diff --git a/examples/sections/src/components/MyLabel/Readme.md b/examples/sections/src/components/MyLabel/Readme.md
new file mode 100644
index 00000000..64b79cb1
--- /dev/null
+++ b/examples/sections/src/components/MyLabel/Readme.md
@@ -0,0 +1,5 @@
+Should use the `fantasy` font inherited from `body`:
+
+```jsx
+<Label />
+```
diff --git a/examples/sections/src/components/MyLabel/index.js b/examples/sections/src/components/MyLabel/index.js
new file mode 100644
index 00000000..a1e5f51f
--- /dev/null
+++ b/examples/sections/src/components/MyLabel/index.js
@@ -0,0 +1,1 @@
+export { default } from './Label';
diff --git a/examples/sections/styleguide.config.js b/examples/sections/styleguide.config.js
index 454d4067..fd0da4cb 100644
--- a/examples/sections/styleguide.config.js
+++ b/examples/sections/styleguide.config.js
@@ -52,6 +52,12 @@ module.exports = {
 					exampleMode: 'expand', // 'hide' | 'collapse' | 'expand'
 					usageMode: 'expand', // 'hide' | 'collapse' | 'expand'
 				},
+				{
+					name: 'Labels',
+					components: () => ['./src/components/MyLabel/Label.js'],
+					exampleMode: 'expand', // 'hide' | 'collapse' | 'expand'
+					usageMode: 'expand', // 'hide' | 'collapse' | 'expand'
+				},
 				{
 					name: 'Others',
 					components: () => ['./src/components/RandomButton/RandomButton.js'],
diff --git a/flow-typed/rewrite-imports.js.flow b/flow-typed/rewrite-imports.js.flow
deleted file mode 100644
index 5d04d716..00000000
--- a/flow-typed/rewrite-imports.js.flow
+++ /dev/null
@@ -1,4 +0,0 @@
-declare module 'rewrite-imports' {
-	declare function rewriteImports(code: string): string;
-	declare export default typeof rewriteImports;
-}
diff --git a/package-lock.json b/package-lock.json
index 6be0e71c..cfa12400 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1225,11 +1225,39 @@
         "glob-to-regexp": "^0.3.0"
       }
     },
+    "@nodelib/fs.scandir": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
+      "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "2.0.3",
+        "run-parallel": "^1.1.9"
+      },
+      "dependencies": {
+        "@nodelib/fs.stat": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+          "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
+          "dev": true
+        }
+      }
+    },
     "@nodelib/fs.stat": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
       "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw=="
     },
+    "@nodelib/fs.walk": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
+      "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.scandir": "2.1.3",
+        "fastq": "^1.6.0"
+      }
+    },
     "@samverschueren/stream-to-observable": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz",
@@ -1287,6 +1315,11 @@
         "@types/testing-library__react": "^9.1.0"
       }
     },
+    "@types/anymatch": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz",
+      "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA=="
+    },
     "@types/babel__core": {
       "version": "7.1.3",
       "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz",
@@ -1378,6 +1411,12 @@
       "resolved": "https://registry.npmjs.org/@types/node/-/node-12.11.7.tgz",
       "integrity": "sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA=="
     },
+    "@types/normalize-package-data": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+      "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
+      "dev": true
+    },
     "@types/prop-types": {
       "version": "15.7.3",
       "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
@@ -1403,12 +1442,22 @@
         "@types/react": "*"
       }
     },
+    "@types/source-list-map": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
+      "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA=="
+    },
     "@types/stack-utils": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
       "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
       "dev": true
     },
+    "@types/tapable": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.4.tgz",
+      "integrity": "sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ=="
+    },
     "@types/testing-library__dom": {
       "version": "6.5.3",
       "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-6.5.3.tgz",
@@ -1428,28 +1477,40 @@
         "@types/testing-library__dom": "*"
       }
     },
+    "@types/uglify-js": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.4.tgz",
+      "integrity": "sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ==",
+      "requires": {
+        "source-map": "^0.6.1"
+      }
+    },
     "@types/unist": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz",
       "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ=="
     },
-    "@types/vfile": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz",
-      "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==",
+    "@types/webpack": {
+      "version": "4.39.5",
+      "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.39.5.tgz",
+      "integrity": "sha512-9twG6D97ao13MBLvigwfBJe6rxtb04UY3TcYHBYkW5sXZjUrNhqIRxLYg74VzK/YAE8xlVhOyd+3Whr7E5RrBA==",
       "requires": {
+        "@types/anymatch": "*",
         "@types/node": "*",
-        "@types/unist": "*",
-        "@types/vfile-message": "*"
+        "@types/tapable": "*",
+        "@types/uglify-js": "*",
+        "@types/webpack-sources": "*",
+        "source-map": "^0.6.0"
       }
     },
-    "@types/vfile-message": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz",
-      "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==",
+    "@types/webpack-sources": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.5.tgz",
+      "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==",
       "requires": {
         "@types/node": "*",
-        "@types/unist": "*"
+        "@types/source-list-map": "*",
+        "source-map": "^0.6.1"
       }
     },
     "@types/yargs": {
@@ -1714,6 +1775,15 @@
       "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz",
       "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA=="
     },
+    "aggregate-error": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
+      "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
+      "requires": {
+        "clean-stack": "^2.0.0",
+        "indent-string": "^4.0.0"
+      }
+    },
     "airbnb-prop-types": {
       "version": "2.15.0",
       "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz",
@@ -2693,22 +2763,23 @@
       "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
     },
     "cacache": {
-      "version": "10.0.4",
-      "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
-      "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
-      "requires": {
-        "bluebird": "^3.5.1",
-        "chownr": "^1.0.1",
-        "glob": "^7.1.2",
-        "graceful-fs": "^4.1.11",
-        "lru-cache": "^4.1.1",
-        "mississippi": "^2.0.0",
+      "version": "11.3.3",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz",
+      "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==",
+      "requires": {
+        "bluebird": "^3.5.5",
+        "chownr": "^1.1.1",
+        "figgy-pudding": "^3.5.1",
+        "glob": "^7.1.4",
+        "graceful-fs": "^4.1.15",
+        "lru-cache": "^5.1.1",
+        "mississippi": "^3.0.0",
         "mkdirp": "^0.5.1",
         "move-concurrently": "^1.0.1",
         "promise-inflight": "^1.0.1",
-        "rimraf": "^2.6.2",
-        "ssri": "^5.2.4",
-        "unique-filename": "^1.1.0",
+        "rimraf": "^2.6.3",
+        "ssri": "^6.0.1",
+        "unique-filename": "^1.1.1",
         "y18n": "^4.0.0"
       }
     },
@@ -2771,19 +2842,20 @@
       "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
     },
     "camelcase-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
-      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+      "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
       "dev": true,
       "requires": {
-        "camelcase": "^2.0.0",
-        "map-obj": "^1.0.0"
+        "camelcase": "^4.1.0",
+        "map-obj": "^2.0.0",
+        "quick-lru": "^1.0.0"
       },
       "dependencies": {
         "camelcase": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
-          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
           "dev": true
         }
       }
@@ -2938,12 +3010,18 @@
         }
       }
     },
+    "clean-stack": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+      "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
+    },
     "clean-webpack-plugin": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-1.0.1.tgz",
-      "integrity": "sha512-gvwfMsqu3HBgTVvaBa1H3AZKO03CHpr5uP92SPIktP3827EovAitwW+1xoqXyTxCuXnLYpMHG5ytS4AoukHDWA==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz",
+      "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==",
       "requires": {
-        "rimraf": "^2.6.1"
+        "@types/webpack": "^4.4.31",
+        "del": "^4.1.1"
       }
     },
     "cli-cursor": {
@@ -3126,17 +3204,17 @@
       "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E="
     },
     "common-dir": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/common-dir/-/common-dir-2.0.2.tgz",
-      "integrity": "sha512-AiVcdIuevkFWyqrcHhpOWJbaFBLm+OLPiaRy3QikrMypalgA4ehU1SugZO2rPawgdzkTAycXGs3F65PGPA2DWg==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/common-dir/-/common-dir-3.0.0.tgz",
+      "integrity": "sha512-DxMoyyrXEEGpzpLHs5UvcuXHYyUOe+weMVXgmM0cQerf/NbLzOgZuNpBh7mKbt69pgtSNjjZnEQh3CEnIIxhKQ==",
       "requires": {
-        "common-sequence": "^1.0.2"
+        "common-sequence": "^2.0.0"
       }
     },
     "common-sequence": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-1.0.2.tgz",
-      "integrity": "sha1-MOB/P49vf5s97oVPILLTnu4Ibeg="
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-2.0.0.tgz",
+      "integrity": "sha512-f0QqPLpRTgMQn/pQIynf+SdE73Lw5Q1jn4hjirHLgH/NJ71TiHjXusV16BmOyuK5rRQ1W2f++II+TFZbQOh4hA=="
     },
     "common-tags": {
       "version": "1.8.0",
@@ -3264,24 +3342,43 @@
       "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
     },
     "copy-webpack-plugin": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz",
-      "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==",
+      "version": "5.0.4",
+      "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.0.4.tgz",
+      "integrity": "sha512-YBuYGpSzoCHSSDGyHy6VJ7SHojKp6WHT4D7ItcQFNAYx2hrwkMe56e97xfVR0/ovDuMTrMffXUiltvQljtAGeg==",
       "requires": {
-        "cacache": "^10.0.4",
-        "find-cache-dir": "^1.0.0",
+        "cacache": "^11.3.3",
+        "find-cache-dir": "^2.1.0",
+        "glob-parent": "^3.1.0",
         "globby": "^7.1.1",
-        "is-glob": "^4.0.0",
-        "loader-utils": "^1.1.0",
+        "is-glob": "^4.0.1",
+        "loader-utils": "^1.2.3",
         "minimatch": "^3.0.4",
-        "p-limit": "^1.0.0",
-        "serialize-javascript": "^1.4.0"
+        "normalize-path": "^3.0.0",
+        "p-limit": "^2.2.0",
+        "schema-utils": "^1.0.0",
+        "serialize-javascript": "^1.7.0",
+        "webpack-log": "^2.0.0"
+      },
+      "dependencies": {
+        "p-limit": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+          "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+        }
       }
     },
     "core-js": {
-      "version": "3.3.4",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.3.4.tgz",
-      "integrity": "sha512-BtibooaAmSOptGLRccsuX/dqgPtXwNgqcvYA6kOTTMzonRxZ+pJS4e+6mvVutESfXMeTnK8m3M+aBu3bkJbR+w=="
+      "version": "3.3.5",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.3.5.tgz",
+      "integrity": "sha512-0J3K+Par/ZydhKg8pEiTcK/9d65/nqJOzY62uMkjeBmt05fDOt/khUVjDdh8TpeIuGQDy1yLDDCjiWN/8pFIuw=="
     },
     "core-js-compat": {
       "version": "3.3.4",
@@ -3428,22 +3525,35 @@
       "integrity": "sha512-t80yjg0pi4VAIc5itIqLh6M+ZlA+cB+gUXEQkDR09+ExTDwLMGfJ8YviBsGW+DklIrb2k9fwB75Io8ooWXDxxw=="
     },
     "css-loader": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz",
-      "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.2.0.tgz",
+      "integrity": "sha512-QTF3Ud5H7DaZotgdcJjGMvyDj5F3Pn1j/sC6VBEOVp94cbwqyIBdcs/quzj4MC1BKQSrTpQznegH/5giYbhnCQ==",
       "dev": true,
       "requires": {
-        "camelcase": "^5.2.0",
-        "icss-utils": "^4.1.0",
+        "camelcase": "^5.3.1",
+        "cssesc": "^3.0.0",
+        "icss-utils": "^4.1.1",
         "loader-utils": "^1.2.3",
         "normalize-path": "^3.0.0",
-        "postcss": "^7.0.14",
+        "postcss": "^7.0.17",
         "postcss-modules-extract-imports": "^2.0.0",
-        "postcss-modules-local-by-default": "^2.0.6",
+        "postcss-modules-local-by-default": "^3.0.2",
         "postcss-modules-scope": "^2.1.0",
-        "postcss-modules-values": "^2.0.0",
-        "postcss-value-parser": "^3.3.0",
-        "schema-utils": "^1.0.0"
+        "postcss-modules-values": "^3.0.0",
+        "postcss-value-parser": "^4.0.0",
+        "schema-utils": "^2.0.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz",
+          "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.10.2",
+            "ajv-keywords": "^3.4.1"
+          }
+        }
       }
     },
     "css-select": {
@@ -3494,8 +3604,7 @@
     "csstype": {
       "version": "2.6.7",
       "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.7.tgz",
-      "integrity": "sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ==",
-      "dev": true
+      "integrity": "sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ=="
     },
     "currently-unhandled": {
       "version": "0.4.1",
@@ -3579,6 +3688,24 @@
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
       "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
     },
+    "decamelize-keys": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+      "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+      "dev": true,
+      "requires": {
+        "decamelize": "^1.1.0",
+        "map-obj": "^1.0.0"
+      },
+      "dependencies": {
+        "map-obj": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+          "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+          "dev": true
+        }
+      }
+    },
     "decode-uri-component": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
@@ -3848,13 +3975,13 @@
       }
     },
     "dog-names": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/dog-names/-/dog-names-1.0.2.tgz",
-      "integrity": "sha1-udoTXkxAlsxzcJ770K9V07YFv0g=",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/dog-names/-/dog-names-2.0.0.tgz",
+      "integrity": "sha512-70Z78UHuLSfzVkPjvlI7EKzdIuaQggU7R6rwX+SS4QLckAnaHDsBIZRMqiOEo8f9Hue0mGB9R7bWvMwjRcuZeA==",
       "dev": true,
       "requires": {
-        "meow": "^3.0.0",
-        "unique-random-array": "^1.0.0"
+        "meow": "^5.0.0",
+        "unique-random-array": "^2.0.0"
       }
     },
     "dom-serializer": {
@@ -4924,6 +5051,15 @@
       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
       "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
     },
+    "fastq": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz",
+      "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==",
+      "dev": true,
+      "requires": {
+        "reusify": "^1.0.0"
+      }
+    },
     "faye-websocket": {
       "version": "0.11.3",
       "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
@@ -4964,13 +5100,25 @@
       }
     },
     "file-loader": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz",
-      "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.2.0.tgz",
+      "integrity": "sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ==",
       "dev": true,
       "requires": {
-        "loader-utils": "^1.0.2",
-        "schema-utils": "^1.0.0"
+        "loader-utils": "^1.2.3",
+        "schema-utils": "^2.0.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz",
+          "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.10.2",
+            "ajv-keywords": "^3.4.1"
+          }
+        }
       }
     },
     "filesize": {
@@ -5014,13 +5162,61 @@
       }
     },
     "find-cache-dir": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
-      "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+      "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
       "requires": {
         "commondir": "^1.0.1",
-        "make-dir": "^1.0.0",
-        "pkg-dir": "^2.0.0"
+        "make-dir": "^2.0.0",
+        "pkg-dir": "^3.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+          "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+        },
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+          "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        }
       }
     },
     "find-up": {
@@ -5095,12 +5291,6 @@
         "readable-stream": "^2.3.6"
       }
     },
-    "fn-name": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz",
-      "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=",
-      "dev": true
-    },
     "follow-redirects": {
       "version": "1.9.0",
       "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz",
@@ -5195,6 +5385,14 @@
         "readable-stream": "^2.0.0"
       }
     },
+    "fs-minipass": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.0.0.tgz",
+      "integrity": "sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A==",
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
     "fs-monkey": {
       "version": "0.3.3",
       "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-0.3.3.tgz",
@@ -5240,7 +5438,8 @@
         },
         "ansi-regex": {
           "version": "2.1.1",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "aproba": {
           "version": "1.2.0",
@@ -5258,11 +5457,13 @@
         },
         "balanced-match": {
           "version": "1.0.0",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "brace-expansion": {
           "version": "1.1.11",
           "bundled": true,
+          "optional": true,
           "requires": {
             "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
@@ -5275,15 +5476,18 @@
         },
         "code-point-at": {
           "version": "1.1.0",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "concat-map": {
           "version": "0.0.1",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "console-control-strings": {
           "version": "1.1.0",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "core-util-is": {
           "version": "1.0.2",
@@ -5386,7 +5590,8 @@
         },
         "inherits": {
           "version": "2.0.3",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "ini": {
           "version": "1.3.5",
@@ -5396,6 +5601,7 @@
         "is-fullwidth-code-point": {
           "version": "1.0.0",
           "bundled": true,
+          "optional": true,
           "requires": {
             "number-is-nan": "^1.0.0"
           }
@@ -5408,17 +5614,20 @@
         "minimatch": {
           "version": "3.0.4",
           "bundled": true,
+          "optional": true,
           "requires": {
             "brace-expansion": "^1.1.7"
           }
         },
         "minimist": {
           "version": "0.0.8",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "minipass": {
           "version": "2.3.5",
           "bundled": true,
+          "optional": true,
           "requires": {
             "safe-buffer": "^5.1.2",
             "yallist": "^3.0.0"
@@ -5435,6 +5644,7 @@
         "mkdirp": {
           "version": "0.5.1",
           "bundled": true,
+          "optional": true,
           "requires": {
             "minimist": "0.0.8"
           }
@@ -5507,7 +5717,8 @@
         },
         "number-is-nan": {
           "version": "1.0.1",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "object-assign": {
           "version": "4.1.1",
@@ -5517,6 +5728,7 @@
         "once": {
           "version": "1.4.0",
           "bundled": true,
+          "optional": true,
           "requires": {
             "wrappy": "1"
           }
@@ -5592,7 +5804,8 @@
         },
         "safe-buffer": {
           "version": "5.1.2",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "safer-buffer": {
           "version": "2.1.2",
@@ -5622,6 +5835,7 @@
         "string-width": {
           "version": "1.0.2",
           "bundled": true,
+          "optional": true,
           "requires": {
             "code-point-at": "^1.0.0",
             "is-fullwidth-code-point": "^1.0.0",
@@ -5639,6 +5853,7 @@
         "strip-ansi": {
           "version": "3.0.1",
           "bundled": true,
+          "optional": true,
           "requires": {
             "ansi-regex": "^2.0.0"
           }
@@ -5677,11 +5892,13 @@
         },
         "wrappy": {
           "version": "1.0.2",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         },
         "yallist": {
           "version": "3.0.3",
-          "bundled": true
+          "bundled": true,
+          "optional": true
         }
       }
     },
@@ -5719,17 +5936,6 @@
       "integrity": "sha512-zKXyzksTeaCSw5wIX79iCA40YAa6CJMJgNg9wdkU/ERBrIdPSimPICYiLp65lRbSBqtiHql/HZfS2DyI/AH6tQ==",
       "dev": true
     },
-    "g-status": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz",
-      "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==",
-      "dev": true,
-      "requires": {
-        "arrify": "^1.0.1",
-        "matcher": "^1.0.0",
-        "simple-git": "^1.85.0"
-      }
-    },
     "get-caller-file": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
@@ -5741,9 +5947,9 @@
       "integrity": "sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA=="
     },
     "get-stdin": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
-      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz",
+      "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==",
       "dev": true
     },
     "get-stream": {
@@ -6175,46 +6381,41 @@
       "dev": true
     },
     "husky": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz",
-      "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==",
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/husky/-/husky-3.0.9.tgz",
+      "integrity": "sha512-Yolhupm7le2/MqC1VYLk/cNmYxsSsqKkTyBhzQHhPK1jFnC89mmmNVuGtLNabjDI6Aj8UNIr0KpRNuBkiC4+sg==",
       "dev": true,
       "requires": {
-        "cosmiconfig": "^5.0.7",
+        "chalk": "^2.4.2",
+        "ci-info": "^2.0.0",
+        "cosmiconfig": "^5.2.1",
         "execa": "^1.0.0",
-        "find-up": "^3.0.0",
-        "get-stdin": "^6.0.0",
-        "is-ci": "^2.0.0",
-        "pkg-dir": "^3.0.0",
-        "please-upgrade-node": "^3.1.1",
-        "read-pkg": "^4.0.1",
+        "get-stdin": "^7.0.0",
+        "opencollective-postinstall": "^2.0.2",
+        "pkg-dir": "^4.2.0",
+        "please-upgrade-node": "^3.2.0",
+        "read-pkg": "^5.2.0",
         "run-node": "^1.0.0",
-        "slash": "^2.0.0"
+        "slash": "^3.0.0"
       },
       "dependencies": {
         "find-up": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
           "dev": true,
           "requires": {
-            "locate-path": "^3.0.0"
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
           }
         },
-        "get-stdin": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
-          "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
-          "dev": true
-        },
         "locate-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
           "dev": true,
           "requires": {
-            "p-locate": "^3.0.0",
-            "path-exists": "^3.0.0"
+            "p-locate": "^4.1.0"
           }
         },
         "p-limit": {
@@ -6227,12 +6428,12 @@
           }
         },
         "p-locate": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
           "dev": true,
           "requires": {
-            "p-limit": "^2.0.0"
+            "p-limit": "^2.2.0"
           }
         },
         "p-try": {
@@ -6241,30 +6442,55 @@
           "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
           "dev": true
         },
-        "pkg-dir": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
-          "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+        "parse-json": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
+          "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
           "dev": true,
           "requires": {
-            "find-up": "^3.0.0"
+            "@babel/code-frame": "^7.0.0",
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1",
+            "lines-and-columns": "^1.1.6"
           }
         },
-        "read-pkg": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
-          "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+          "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+          "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
           "dev": true,
           "requires": {
-            "normalize-package-data": "^2.3.2",
-            "parse-json": "^4.0.0",
-            "pify": "^3.0.0"
+            "find-up": "^4.0.0"
+          }
+        },
+        "read-pkg": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+          "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+          "dev": true,
+          "requires": {
+            "@types/normalize-package-data": "^2.4.0",
+            "normalize-package-data": "^2.5.0",
+            "parse-json": "^5.0.0",
+            "type-fest": "^0.6.0"
           }
         },
         "slash": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
-          "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+          "dev": true
+        },
+        "type-fest": {
+          "version": "0.6.0",
+          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+          "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
           "dev": true
         }
       }
@@ -6282,12 +6508,6 @@
         "safer-buffer": ">= 2.1.2 < 3"
       }
     },
-    "icss-replace-symbols": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
-      "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
-      "dev": true
-    },
     "icss-utils": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
@@ -6401,8 +6621,7 @@
     "indent-string": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
-      "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
-      "dev": true
+      "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
     },
     "indexes-of": {
       "version": "1.0.1",
@@ -6645,15 +6864,6 @@
       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
       "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
     },
-    "is-finite": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
-      "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
-      "dev": true,
-      "requires": {
-        "number-is-nan": "^1.0.0"
-      }
-    },
     "is-fullwidth-code-point": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
@@ -6683,6 +6893,11 @@
       "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz",
       "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU="
     },
+    "is-interactive": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
+      "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="
+    },
     "is-number": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
@@ -6745,7 +6960,8 @@
     "is-plain-obj": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
-      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
+      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+      "dev": true
     },
     "is-plain-object": {
       "version": "2.0.4",
@@ -6810,12 +7026,6 @@
       "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
       "dev": true
     },
-    "is-utf8": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
-      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
-      "dev": true
-    },
     "is-whitespace-character": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz",
@@ -6984,9 +7194,9 @@
       }
     },
     "javascript-stringify": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz",
-      "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM="
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.0.0.tgz",
+      "integrity": "sha512-zzK8+ByrzvOL6N92hRewwUKL0wN0TOaIuUjX0Jj8lraxWvr5wHYs2YTjaj2lstF+8qMv5cmPPef47va8NT8lDw=="
     },
     "jest": {
       "version": "24.9.0",
@@ -7576,9 +7786,9 @@
       "dev": true
     },
     "jest-serializer-html": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/jest-serializer-html/-/jest-serializer-html-6.0.0.tgz",
-      "integrity": "sha512-S855oT9Yt1T07I45+uRaLsH22TR5lAvgqBxKreqDKs6QmcaxzapGgKamc4J2KxMrPc2uDdWcuOaprcjIuVUxvQ==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/jest-serializer-html/-/jest-serializer-html-7.0.0.tgz",
+      "integrity": "sha512-o3S2j/5yA9emV8+QRHqJ41SznW5cZ1PXIAk+aSToJffdhuaiSoDsa4IgqV8lNOHPp4cP0LNT7k5KjXjD+l6SGg==",
       "dev": true,
       "requires": {
         "diffable-html": "^4.0.0"
@@ -7674,7 +7884,6 @@
       "version": "24.9.0",
       "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
       "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
-      "dev": true,
       "requires": {
         "merge-stream": "^2.0.0",
         "supports-color": "^6.1.0"
@@ -7684,7 +7893,6 @@
           "version": "6.1.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
-          "dev": true,
           "requires": {
             "has-flag": "^3.0.0"
           }
@@ -7843,13 +8051,14 @@
       }
     },
     "jss": {
-      "version": "9.8.7",
-      "resolved": "https://registry.npmjs.org/jss/-/jss-9.8.7.tgz",
-      "integrity": "sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ==",
+      "version": "10.0.0",
+      "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0.tgz",
+      "integrity": "sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ==",
       "requires": {
+        "@babel/runtime": "^7.3.1",
+        "csstype": "^2.6.5",
         "is-in-browser": "^1.1.3",
-        "symbol-observable": "^1.1.0",
-        "warning": "^3.0.0"
+        "tiny-warning": "^1.0.2"
       }
     },
     "jss-camel-case": {
@@ -7940,9 +8149,9 @@
       "dev": true
     },
     "leven": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
-      "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA="
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+      "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="
     },
     "levn": {
       "version": "0.3.0",
@@ -7953,123 +8162,327 @@
         "type-check": "~0.3.2"
       }
     },
+    "lines-and-columns": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
+      "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+      "dev": true
+    },
     "lint-staged": {
-      "version": "8.2.1",
-      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz",
-      "integrity": "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==",
+      "version": "9.4.2",
+      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.4.2.tgz",
+      "integrity": "sha512-OFyGokJSWTn2M6vngnlLXjaHhi8n83VIZZ5/1Z26SULRUWgR3ITWpAEQC9Pnm3MC/EpCxlwts/mQWDHNji2+zA==",
       "dev": true,
       "requires": {
-        "chalk": "^2.3.1",
-        "commander": "^2.14.1",
-        "cosmiconfig": "^5.2.0",
-        "debug": "^3.1.0",
+        "chalk": "^2.4.2",
+        "commander": "^2.20.0",
+        "cosmiconfig": "^5.2.1",
+        "debug": "^4.1.1",
         "dedent": "^0.7.0",
-        "del": "^3.0.0",
-        "execa": "^1.0.0",
-        "g-status": "^2.0.2",
-        "is-glob": "^4.0.0",
-        "is-windows": "^1.0.2",
-        "listr": "^0.14.2",
-        "listr-update-renderer": "^0.5.0",
-        "lodash": "^4.17.11",
-        "log-symbols": "^2.2.0",
-        "micromatch": "^3.1.8",
-        "npm-which": "^3.0.1",
-        "p-map": "^1.1.1",
-        "path-is-inside": "^1.0.2",
-        "pify": "^3.0.0",
-        "please-upgrade-node": "^3.0.2",
-        "staged-git-files": "1.1.2",
-        "string-argv": "^0.0.2",
-        "stringify-object": "^3.2.2",
-        "yup": "^0.27.0"
+        "del": "^5.0.0",
+        "execa": "^2.0.3",
+        "listr": "^0.14.3",
+        "log-symbols": "^3.0.0",
+        "micromatch": "^4.0.2",
+        "normalize-path": "^3.0.0",
+        "please-upgrade-node": "^3.1.1",
+        "string-argv": "^0.3.0",
+        "stringify-object": "^3.3.0"
       },
       "dependencies": {
+        "@nodelib/fs.stat": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+          "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
+          "dev": true
+        },
+        "array-union": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+          "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+          "dev": true
+        },
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+          "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
         "commander": {
           "version": "2.20.3",
           "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
           "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
           "dev": true
         },
+        "cross-spawn": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz",
+          "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
         "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
           "dev": true,
           "requires": {
             "ms": "^2.1.1"
           }
         },
         "del": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
-          "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz",
+          "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==",
           "dev": true,
           "requires": {
-            "globby": "^6.1.0",
-            "is-path-cwd": "^1.0.0",
-            "is-path-in-cwd": "^1.0.0",
-            "p-map": "^1.1.1",
-            "pify": "^3.0.0",
-            "rimraf": "^2.2.8"
+            "globby": "^10.0.1",
+            "graceful-fs": "^4.2.2",
+            "is-glob": "^4.0.1",
+            "is-path-cwd": "^2.2.0",
+            "is-path-inside": "^3.0.1",
+            "p-map": "^3.0.0",
+            "rimraf": "^3.0.0",
+            "slash": "^3.0.0"
           }
         },
-        "globby": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
-          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+        "dir-glob": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+          "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
           "dev": true,
           "requires": {
-            "array-union": "^1.0.1",
-            "glob": "^7.0.3",
-            "object-assign": "^4.0.1",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          },
-          "dependencies": {
-            "pify": {
-              "version": "2.3.0",
-              "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-              "dev": true
-            }
+            "path-type": "^4.0.0"
           }
         },
-        "is-path-cwd": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
-          "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
-          "dev": true
+        "execa": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz",
+          "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^7.0.0",
+            "get-stream": "^5.0.0",
+            "is-stream": "^2.0.0",
+            "merge-stream": "^2.0.0",
+            "npm-run-path": "^3.0.0",
+            "onetime": "^5.1.0",
+            "p-finally": "^2.0.0",
+            "signal-exit": "^3.0.2",
+            "strip-final-newline": "^2.0.0"
+          }
         },
-        "is-path-in-cwd": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
-          "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
+        "fast-glob": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.0.tgz",
+          "integrity": "sha512-TrUz3THiq2Vy3bjfQUB2wNyPdGBeGmdjbzzBLhfHN4YFurYptCKwGq/TfiRavbGywFRzY6U2CdmQ1zmsY5yYaw==",
+          "dev": true,
+          "requires": {
+            "@nodelib/fs.stat": "^2.0.2",
+            "@nodelib/fs.walk": "^1.2.3",
+            "glob-parent": "^5.1.0",
+            "merge2": "^1.3.0",
+            "micromatch": "^4.0.2"
+          }
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+          "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
           "dev": true,
           "requires": {
-            "is-path-inside": "^1.0.0"
+            "to-regex-range": "^5.0.1"
           }
         },
+        "get-stream": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
+          "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
+          "dev": true,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "glob-parent": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
+          "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
+          "dev": true,
+          "requires": {
+            "is-glob": "^4.0.1"
+          }
+        },
+        "globby": {
+          "version": "10.0.1",
+          "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz",
+          "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==",
+          "dev": true,
+          "requires": {
+            "@types/glob": "^7.1.1",
+            "array-union": "^2.1.0",
+            "dir-glob": "^3.0.1",
+            "fast-glob": "^3.0.3",
+            "glob": "^7.1.3",
+            "ignore": "^5.1.1",
+            "merge2": "^1.2.3",
+            "slash": "^3.0.0"
+          }
+        },
+        "ignore": {
+          "version": "5.1.4",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
+          "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
+          "dev": true
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+          "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+          "dev": true
+        },
         "is-path-inside": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
-          "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
+          "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==",
+          "dev": true
+        },
+        "is-stream": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+          "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+          "dev": true
+        },
+        "micromatch": {
+          "version": "4.0.2",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+          "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
           "dev": true,
           "requires": {
-            "path-is-inside": "^1.0.1"
+            "braces": "^3.0.1",
+            "picomatch": "^2.0.5"
           }
         },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+          "dev": true
+        },
         "ms": {
           "version": "2.1.2",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
           "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
           "dev": true
         },
+        "npm-run-path": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz",
+          "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "onetime": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
+          "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        },
+        "p-finally": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
+          "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
+          "dev": true
+        },
         "p-map": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
-          "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+          "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+          "dev": true,
+          "requires": {
+            "aggregate-error": "^3.0.0"
+          }
+        },
+        "path-key": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz",
+          "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==",
+          "dev": true
+        },
+        "path-type": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+          "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
           "dev": true
+        },
+        "pump": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+          "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+          "dev": true,
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        },
+        "rimraf": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz",
+          "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^3.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+          "dev": true
+        },
+        "slash": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+          "dev": true
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+          "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        },
+        "which": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/which/-/which-2.0.1.tgz",
+          "integrity": "sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
         }
       }
     },
@@ -8269,11 +8682,12 @@
       "dev": true
     },
     "log-symbols": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
-      "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
+      "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
+      "dev": true,
       "requires": {
-        "chalk": "^2.0.1"
+        "chalk": "^2.4.2"
       }
     },
     "log-update": {
@@ -8343,17 +8757,16 @@
       }
     },
     "lowercase-keys": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
-      "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+      "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
     },
     "lru-cache": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
       "requires": {
-        "pseudomap": "^1.0.2",
-        "yallist": "^2.1.2"
+        "yallist": "^3.0.2"
       }
     },
     "magic-string": {
@@ -8365,11 +8778,24 @@
       }
     },
     "make-dir": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
-      "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+      "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
       "requires": {
-        "pify": "^3.0.0"
+        "pify": "^4.0.1",
+        "semver": "^5.6.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
       }
     },
     "makeerror": {
@@ -8401,9 +8827,9 @@
       "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
     },
     "map-obj": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
-      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+      "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
       "dev": true
     },
     "map-visit": {
@@ -8433,15 +8859,6 @@
         "unquote": "^1.1.0"
       }
     },
-    "matcher": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz",
-      "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==",
-      "dev": true,
-      "requires": {
-        "escape-string-regexp": "^1.0.4"
-      }
-    },
     "md5.js": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
@@ -8459,6 +8876,16 @@
       "integrity": "sha512-nRiU5GpNy62rZppDKbLwhhtw5DXoFMqw9UNZFmlPsNaQCZ//WLjGKUwWMdJrUH+Se7UvtO2gXtAMe0g/N+eI5w==",
       "requires": {
         "unist-util-visit": "^1.1.0"
+      },
+      "dependencies": {
+        "unist-util-visit": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
+          "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
+          "requires": {
+            "unist-util-visit-parents": "^2.0.0"
+          }
+        }
       }
     },
     "mdn-browser-compat-data": {
@@ -8512,137 +8939,67 @@
       }
     },
     "meow": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
-      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz",
+      "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==",
       "dev": true,
       "requires": {
-        "camelcase-keys": "^2.0.0",
-        "decamelize": "^1.1.2",
+        "camelcase-keys": "^4.0.0",
+        "decamelize-keys": "^1.0.0",
         "loud-rejection": "^1.0.0",
-        "map-obj": "^1.0.1",
-        "minimist": "^1.1.3",
+        "minimist-options": "^3.0.1",
         "normalize-package-data": "^2.3.4",
-        "object-assign": "^4.0.1",
-        "read-pkg-up": "^1.0.1",
-        "redent": "^1.0.0",
-        "trim-newlines": "^1.0.0"
+        "read-pkg-up": "^3.0.0",
+        "redent": "^2.0.0",
+        "trim-newlines": "^2.0.0",
+        "yargs-parser": "^10.0.0"
       },
       "dependencies": {
-        "find-up": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
-          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-          "dev": true,
-          "requires": {
-            "path-exists": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          }
+        "camelcase": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+          "dev": true
         },
         "indent-string": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
-          "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
-          "dev": true,
-          "requires": {
-            "repeating": "^2.0.0"
-          }
-        },
-        "load-json-file": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
-          "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "parse-json": "^2.2.0",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0",
-            "strip-bom": "^2.0.0"
-          }
-        },
-        "parse-json": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
-          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.2.0"
-          }
-        },
-        "path-exists": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "dev": true,
-          "requires": {
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "path-type": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
-          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+          "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
           "dev": true
         },
-        "read-pkg": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
-          "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-          "dev": true,
-          "requires": {
-            "load-json-file": "^1.0.0",
-            "normalize-package-data": "^2.3.2",
-            "path-type": "^1.0.0"
-          }
-        },
         "read-pkg-up": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
-          "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+          "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
           "dev": true,
           "requires": {
-            "find-up": "^1.0.0",
-            "read-pkg": "^1.0.0"
+            "find-up": "^2.0.0",
+            "read-pkg": "^3.0.0"
           }
         },
         "redent": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
-          "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
-          "dev": true,
-          "requires": {
-            "indent-string": "^2.1.0",
-            "strip-indent": "^1.0.1"
-          }
-        },
-        "strip-bom": {
           "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-          "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+          "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+          "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
           "dev": true,
           "requires": {
-            "is-utf8": "^0.2.0"
+            "indent-string": "^3.0.0",
+            "strip-indent": "^2.0.0"
           }
         },
         "strip-indent": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
-          "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+          "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+          "dev": true
+        },
+        "yargs-parser": {
+          "version": "10.1.0",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
+          "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
           "dev": true,
           "requires": {
-            "get-stdin": "^4.0.1"
+            "camelcase": "^4.1.0"
           }
         }
       }
@@ -8655,8 +9012,7 @@
     "merge-stream": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-      "dev": true
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
     },
     "merge2": {
       "version": "1.3.0",
@@ -8764,10 +9120,59 @@
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
       "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
     },
+    "minimist-options": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
+      "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+      "dev": true,
+      "requires": {
+        "arrify": "^1.0.1",
+        "is-plain-obj": "^1.1.0"
+      }
+    },
+    "minipass": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz",
+      "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==",
+      "requires": {
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+        }
+      }
+    },
+    "minipass-collect": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+      "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minipass-flush": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+      "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minipass-pipeline": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz",
+      "integrity": "sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA==",
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
     "mississippi": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
-      "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+      "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
       "requires": {
         "concat-stream": "^1.5.0",
         "duplexify": "^3.4.2",
@@ -8775,10 +9180,21 @@
         "flush-write-stream": "^1.0.0",
         "from2": "^2.1.0",
         "parallel-transform": "^1.1.0",
-        "pump": "^2.0.1",
+        "pump": "^3.0.0",
         "pumpify": "^1.3.3",
         "stream-each": "^1.1.0",
         "through2": "^2.0.0"
+      },
+      "dependencies": {
+        "pump": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+          "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        }
       }
     },
     "mixin-deep": {
@@ -9054,15 +9470,6 @@
       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
     },
-    "npm-path": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz",
-      "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==",
-      "dev": true,
-      "requires": {
-        "which": "^1.2.10"
-      }
-    },
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
@@ -9071,25 +9478,6 @@
         "path-key": "^2.0.0"
       }
     },
-    "npm-which": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz",
-      "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=",
-      "dev": true,
-      "requires": {
-        "commander": "^2.9.0",
-        "npm-path": "^2.0.2",
-        "which": "^1.2.10"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.20.3",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-          "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-          "dev": true
-        }
-      }
-    },
     "nth-check": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
@@ -9281,6 +9669,12 @@
         "is-wsl": "^1.1.0"
       }
     },
+    "opencollective-postinstall": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz",
+      "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==",
+      "dev": true
+    },
     "opn": {
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
@@ -9327,16 +9721,57 @@
       }
     },
     "ora": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz",
-      "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.2.tgz",
+      "integrity": "sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig==",
       "requires": {
         "chalk": "^2.4.2",
-        "cli-cursor": "^2.1.0",
-        "cli-spinners": "^2.0.0",
-        "log-symbols": "^2.2.0",
+        "cli-cursor": "^3.1.0",
+        "cli-spinners": "^2.2.0",
+        "is-interactive": "^1.0.0",
+        "log-symbols": "^3.0.0",
         "strip-ansi": "^5.2.0",
         "wcwidth": "^1.0.1"
+      },
+      "dependencies": {
+        "cli-cursor": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+          "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+          "requires": {
+            "restore-cursor": "^3.1.0"
+          }
+        },
+        "log-symbols": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
+          "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
+          "requires": {
+            "chalk": "^2.4.2"
+          }
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+        },
+        "onetime": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
+          "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        },
+        "restore-cursor": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+          "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+          "requires": {
+            "onetime": "^5.1.0",
+            "signal-exit": "^3.0.2"
+          }
+        }
       }
     },
     "original": {
@@ -9603,6 +10038,12 @@
       "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
       "dev": true
     },
+    "picomatch": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz",
+      "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==",
+      "dev": true
+    },
     "pify": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
@@ -9634,6 +10075,7 @@
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
       "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+      "dev": true,
       "requires": {
         "find-up": "^2.1.0"
       }
@@ -9723,14 +10165,15 @@
       }
     },
     "postcss-modules-local-by-default": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz",
-      "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz",
+      "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==",
       "dev": true,
       "requires": {
-        "postcss": "^7.0.6",
-        "postcss-selector-parser": "^6.0.0",
-        "postcss-value-parser": "^3.3.1"
+        "icss-utils": "^4.1.1",
+        "postcss": "^7.0.16",
+        "postcss-selector-parser": "^6.0.2",
+        "postcss-value-parser": "^4.0.0"
       }
     },
     "postcss-modules-scope": {
@@ -9744,12 +10187,12 @@
       }
     },
     "postcss-modules-values": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz",
-      "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
+      "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
       "dev": true,
       "requires": {
-        "icss-replace-symbols": "^1.1.0",
+        "icss-utils": "^4.0.0",
         "postcss": "^7.0.6"
       }
     },
@@ -9765,9 +10208,9 @@
       }
     },
     "postcss-value-parser": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
-      "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz",
+      "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==",
       "dev": true
     },
     "prelude-ls": {
@@ -9776,9 +10219,9 @@
       "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
     },
     "prettier": {
-      "version": "1.16.4",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz",
-      "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==",
+      "version": "1.18.2",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz",
+      "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==",
       "dev": true
     },
     "pretty-format": {
@@ -9859,12 +10302,6 @@
         "reflect.ownkeys": "^0.2.0"
       }
     },
-    "property-expr": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz",
-      "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==",
-      "dev": true
-    },
     "proxy-addr": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
@@ -9879,11 +10316,6 @@
       "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
       "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
     },
-    "pseudomap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
-    },
     "psl": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz",
@@ -9964,6 +10396,12 @@
       "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
       "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
     },
+    "quick-lru": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+      "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+      "dev": true
+    },
     "raf": {
       "version": "3.4.1",
       "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
@@ -10231,9 +10669,9 @@
       "integrity": "sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw=="
     },
     "react-simple-code-editor": {
-      "version": "0.9.15",
-      "resolved": "https://registry.npmjs.org/react-simple-code-editor/-/react-simple-code-editor-0.9.15.tgz",
-      "integrity": "sha512-M8iKgjBTBZK92tZYgOEfMuR7c3zZ0q0v3QYllSxIPx3SU+w003VofH50txXQSBTu92pSOm2tidON1HbQ1l8BDA=="
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/react-simple-code-editor/-/react-simple-code-editor-0.10.0.tgz",
+      "integrity": "sha512-bL5W5mAxSW6+cLwqqVWY47Silqgy2DKDTR4hDBrLrUqC5BXc29YVx17l2IZk5v36VcDEq1Bszu2oHm1qBwKqBA=="
     },
     "react-test-renderer": {
       "version": "16.11.0",
@@ -10465,19 +10903,19 @@
       }
     },
     "remark": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz",
-      "integrity": "sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==",
+      "version": "11.0.1",
+      "resolved": "https://registry.npmjs.org/remark/-/remark-11.0.1.tgz",
+      "integrity": "sha512-Fl2AvN+yU6sOBAjUz3xNC5iEvLkXV8PZicLOOLifjU8uKGusNvhHfGRCfETsqyvRHZ24JXqEyDY4hRLhoUd30A==",
       "requires": {
-        "remark-parse": "^6.0.0",
-        "remark-stringify": "^6.0.0",
-        "unified": "^7.0.0"
+        "remark-parse": "^7.0.0",
+        "remark-stringify": "^7.0.0",
+        "unified": "^8.2.0"
       }
     },
     "remark-parse": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz",
-      "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==",
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.1.tgz",
+      "integrity": "sha512-WOZLa545jYXtSy+txza6ACudKWByQac4S2DmGk+tAGO/3XnVTOxwyCIxB7nTcLlk8Aayhcuf3cV1WV6U6L7/DQ==",
       "requires": {
         "collapse-white-space": "^1.0.2",
         "is-alphabetical": "^1.0.0",
@@ -10497,9 +10935,9 @@
       }
     },
     "remark-stringify": {
-      "version": "6.0.4",
-      "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz",
-      "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==",
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-7.0.3.tgz",
+      "integrity": "sha512-+jgmjNjm2kR7y2Ns1BATXRlFr+iQ7sDcpSgytfU77nkw7UCd5yJNArSxB3MU3Uul7HuyYNTCjetoGfy8xLia1A==",
       "requires": {
         "ccount": "^1.0.0",
         "is-alphanumeric": "^1.0.0",
@@ -10512,7 +10950,7 @@
         "parse-entities": "^1.0.2",
         "repeat-string": "^1.5.4",
         "state-toggle": "^1.0.0",
-        "stringify-entities": "^1.0.1",
+        "stringify-entities": "^2.0.0",
         "unherit": "^1.0.4",
         "xtend": "^4.0.1"
       }
@@ -10532,15 +10970,6 @@
       "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
       "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
     },
-    "repeating": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
-      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
-      "dev": true,
-      "requires": {
-        "is-finite": "^1.0.0"
-      }
-    },
     "replace-ext": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
@@ -10714,10 +11143,11 @@
       "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
       "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs="
     },
-    "rewrite-imports": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/rewrite-imports/-/rewrite-imports-1.2.0.tgz",
-      "integrity": "sha512-oVoZ3QImciK+S7I89vPyxDgohkwhJyWLP5EKcMvF2NOhaFkmdKFiJMJzTM35VeNV1gQfGvv9Cve6sMq5E7unHg=="
+    "reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true
     },
     "rimraf": {
       "version": "2.7.1",
@@ -10767,6 +11197,12 @@
       "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==",
       "dev": true
     },
+    "run-parallel": {
+      "version": "1.1.9",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
+      "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
+      "dev": true
+    },
     "run-queue": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
@@ -11030,32 +11466,6 @@
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
       "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
     },
-    "simple-git": {
-      "version": "1.126.0",
-      "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.126.0.tgz",
-      "integrity": "sha512-47mqHxgZnN8XRa9HbpWprzUv3Ooqz9RY/LSZgvA7jCkW8jcwLahMz7LKugY91KZehfG0sCVPtgXiU72hd6b1Bw==",
-      "dev": true,
-      "requires": {
-        "debug": "^4.0.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
-        }
-      }
-    },
     "sisteransi": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz",
@@ -11402,11 +11812,11 @@
       }
     },
     "ssri": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
-      "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+      "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
       "requires": {
-        "safe-buffer": "^5.1.1"
+        "figgy-pudding": "^3.5.1"
       }
     },
     "stack-utils": {
@@ -11415,12 +11825,6 @@
       "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
       "dev": true
     },
-    "staged-git-files": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz",
-      "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==",
-      "dev": true
-    },
     "state-toggle": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz",
@@ -11494,9 +11898,9 @@
       "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
     },
     "string-argv": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz",
-      "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=",
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
+      "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
       "dev": true
     },
     "string-length": {
@@ -11590,13 +11994,14 @@
       }
     },
     "stringify-entities": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz",
-      "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-2.0.0.tgz",
+      "integrity": "sha512-fqqhZzXyAM6pGD9lky/GOPq6V4X0SeTAFBl0iXb/BzOegl40gpf/bV3QQP7zULNYvjr6+Dx8SCaDULjVoOru0A==",
       "requires": {
         "character-entities-html4": "^1.0.0",
         "character-entities-legacy": "^1.0.0",
         "is-alphanumerical": "^1.0.0",
+        "is-decimal": "^1.0.2",
         "is-hexadecimal": "^1.0.0"
       }
     },
@@ -11629,6 +12034,12 @@
       "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
       "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
     },
+    "strip-final-newline": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+      "dev": true
+    },
     "strip-html-comments": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/strip-html-comments/-/strip-html-comments-1.0.0.tgz",
@@ -11667,13 +12078,25 @@
       }
     },
     "style-loader": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
-      "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.0.0.tgz",
+      "integrity": "sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw==",
       "dev": true,
       "requires": {
-        "loader-utils": "^1.1.0",
-        "schema-utils": "^1.0.0"
+        "loader-utils": "^1.2.3",
+        "schema-utils": "^2.0.1"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz",
+          "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.10.2",
+            "ajv-keywords": "^3.4.1"
+          }
+        }
       }
     },
     "supports-color": {
@@ -11687,7 +12110,8 @@
     "symbol-observable": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
-      "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
+      "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
+      "dev": true
     },
     "symbol-tree": {
       "version": "3.2.4",
@@ -11695,12 +12119,6 @@
       "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
       "dev": true
     },
-    "synchronous-promise": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.10.tgz",
-      "integrity": "sha512-6PC+JRGmNjiG3kJ56ZMNWDPL8hjyghF5cMXIFOKg+NiwwEZZIvxTWd0pinWKyD227odg9ygF8xVhhz7gb8Uq7A==",
-      "dev": true
-    },
     "table": {
       "version": "5.4.6",
       "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
@@ -11755,102 +12173,78 @@
       }
     },
     "terser-webpack-plugin": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz",
-      "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.2.1.tgz",
+      "integrity": "sha512-jwdauV5Al7zopR6OAYvIIRcxXCSvLjZjr7uZE8l2tIWb/ryrGN48sJftqGf5k9z09tWhajx53ldp0XPI080YnA==",
       "requires": {
-        "cacache": "^12.0.2",
-        "find-cache-dir": "^2.1.0",
-        "is-wsl": "^1.1.0",
-        "schema-utils": "^1.0.0",
-        "serialize-javascript": "^1.7.0",
+        "cacache": "^13.0.1",
+        "find-cache-dir": "^3.0.0",
+        "jest-worker": "^24.9.0",
+        "schema-utils": "^2.5.0",
+        "serialize-javascript": "^2.1.0",
         "source-map": "^0.6.1",
-        "terser": "^4.1.2",
-        "webpack-sources": "^1.4.0",
-        "worker-farm": "^1.7.0"
+        "terser": "^4.3.9",
+        "webpack-sources": "^1.4.3"
       },
       "dependencies": {
         "cacache": {
-          "version": "12.0.3",
-          "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
-          "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
+          "version": "13.0.1",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz",
+          "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==",
           "requires": {
-            "bluebird": "^3.5.5",
-            "chownr": "^1.1.1",
+            "chownr": "^1.1.2",
             "figgy-pudding": "^3.5.1",
+            "fs-minipass": "^2.0.0",
             "glob": "^7.1.4",
-            "graceful-fs": "^4.1.15",
-            "infer-owner": "^1.0.3",
+            "graceful-fs": "^4.2.2",
+            "infer-owner": "^1.0.4",
             "lru-cache": "^5.1.1",
-            "mississippi": "^3.0.0",
+            "minipass": "^3.0.0",
+            "minipass-collect": "^1.0.2",
+            "minipass-flush": "^1.0.5",
+            "minipass-pipeline": "^1.2.2",
             "mkdirp": "^0.5.1",
             "move-concurrently": "^1.0.1",
+            "p-map": "^3.0.0",
             "promise-inflight": "^1.0.1",
-            "rimraf": "^2.6.3",
-            "ssri": "^6.0.1",
-            "unique-filename": "^1.1.1",
-            "y18n": "^4.0.0"
+            "rimraf": "^2.7.1",
+            "ssri": "^7.0.0",
+            "unique-filename": "^1.1.1"
           }
         },
         "find-cache-dir": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
-          "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.0.0.tgz",
+          "integrity": "sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw==",
           "requires": {
             "commondir": "^1.0.1",
-            "make-dir": "^2.0.0",
-            "pkg-dir": "^3.0.0"
+            "make-dir": "^3.0.0",
+            "pkg-dir": "^4.1.0"
           }
         },
         "find-up": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
           "requires": {
-            "locate-path": "^3.0.0"
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
           }
         },
         "locate-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
-          "requires": {
-            "p-locate": "^3.0.0",
-            "path-exists": "^3.0.0"
-          }
-        },
-        "lru-cache": {
-          "version": "5.1.1",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
-          "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
           "requires": {
-            "yallist": "^3.0.2"
+            "p-locate": "^4.1.0"
           }
         },
         "make-dir": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
-          "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
-          "requires": {
-            "pify": "^4.0.1",
-            "semver": "^5.6.0"
-          }
-        },
-        "mississippi": {
           "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
-          "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz",
+          "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==",
           "requires": {
-            "concat-stream": "^1.5.0",
-            "duplexify": "^3.4.2",
-            "end-of-stream": "^1.1.0",
-            "flush-write-stream": "^1.0.0",
-            "from2": "^2.1.0",
-            "parallel-transform": "^1.1.0",
-            "pump": "^3.0.0",
-            "pumpify": "^1.3.3",
-            "stream-each": "^1.1.0",
-            "through2": "^2.0.0"
+            "semver": "^6.0.0"
           }
         },
         "p-limit": {
@@ -11862,11 +12256,19 @@
           }
         },
         "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "p-map": {
           "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-          "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+          "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+          "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
           "requires": {
-            "p-limit": "^2.0.0"
+            "aggregate-error": "^3.0.0"
           }
         },
         "p-try": {
@@ -11874,45 +12276,41 @@
           "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
           "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
         },
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+        "path-exists": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+          "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
         },
         "pkg-dir": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
-          "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+          "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
           "requires": {
-            "find-up": "^3.0.0"
+            "find-up": "^4.0.0"
           }
         },
-        "pump": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-          "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+        "schema-utils": {
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz",
+          "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==",
           "requires": {
-            "end-of-stream": "^1.1.0",
-            "once": "^1.3.1"
+            "ajv": "^6.10.2",
+            "ajv-keywords": "^3.4.1"
           }
         },
-        "semver": {
-          "version": "5.7.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        "serialize-javascript": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.0.tgz",
+          "integrity": "sha512-a/mxFfU00QT88umAJQsNWOnUKckhNCqOl028N48e7wFmo2/EHpTo9Wso+iJJCMrQnmFvcjto5RJdAHEvVhcyUQ=="
         },
         "ssri": {
-          "version": "6.0.1",
-          "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
-          "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+          "version": "7.1.0",
+          "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz",
+          "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==",
           "requires": {
-            "figgy-pudding": "^3.5.1"
+            "figgy-pudding": "^3.5.1",
+            "minipass": "^3.1.1"
           }
-        },
-        "yallist": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-          "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
         }
       }
     },
@@ -11981,6 +12379,11 @@
       "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
       "optional": true
     },
+    "tiny-warning": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+      "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+    },
     "tmp": {
       "version": "0.0.33",
       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -12070,12 +12473,6 @@
       "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
       "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
     },
-    "toposort": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
-      "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=",
-      "dev": true
-    },
     "tough-cookie": {
       "version": "2.5.0",
       "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
@@ -12101,9 +12498,9 @@
       "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0="
     },
     "trim-newlines": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
-      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+      "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
       "dev": true
     },
     "trim-trailing-lines": {
@@ -12229,18 +12626,22 @@
       "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw=="
     },
     "unified": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz",
-      "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==",
+      "version": "8.4.1",
+      "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.1.tgz",
+      "integrity": "sha512-YPj/uIIZSO7mMIZQj/5Z3hDl4lshWYRQGs5TgUCjHTVdklUWH+O94mK5Cy77SEcmEUwGhnUcudMuH/zIwporqw==",
       "requires": {
-        "@types/unist": "^2.0.0",
-        "@types/vfile": "^3.0.0",
         "bail": "^1.0.0",
         "extend": "^3.0.0",
-        "is-plain-obj": "^1.1.0",
+        "is-plain-obj": "^2.0.0",
         "trough": "^1.0.0",
-        "vfile": "^3.0.0",
-        "x-is-string": "^0.1.0"
+        "vfile": "^4.0.0"
+      },
+      "dependencies": {
+        "is-plain-obj": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.0.0.tgz",
+          "integrity": "sha512-EYisGhpgSCwspmIuRHGjROWTon2Xp8Z7U03Wubk/bTL5TTRC5R1rGVgyjzBrk9+ULdH6cRD06KRcw/xfqhVYKQ=="
+        }
       }
     },
     "union-value": {
@@ -12269,18 +12670,18 @@
       }
     },
     "unique-random": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unique-random/-/unique-random-1.0.0.tgz",
-      "integrity": "sha1-zj4iTIJCzTOg53sNcYDXfmti0MQ=",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/unique-random/-/unique-random-2.1.0.tgz",
+      "integrity": "sha512-iQ1ZgWac3b8YxGThecQFRQiqgk6xFERRwHZIWeVVsqlbmgCRl0PY13R4mUkodNgctmg5b5odG1nyW/IbOxQTqg==",
       "dev": true
     },
     "unique-random-array": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/unique-random-array/-/unique-random-array-1.0.1.tgz",
-      "integrity": "sha512-z9J/SV8CUIhIRROcHe9YUoAT6XthUJt0oUyLGgobiXJprDP9O9dsErNevvSaAv5BkhwFEVPn6nIEOKeNE6Ck1Q==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/unique-random-array/-/unique-random-array-2.0.0.tgz",
+      "integrity": "sha512-xR87O95fZ7hljw84J8r1YDXrvffPLWN513BNOP4Bv0KcgG5dyEUrHwsvP7mVAOKg4Y80uqRbpUk0GKr8il70qg==",
       "dev": true,
       "requires": {
-        "unique-random": "^1.0.0"
+        "unique-random": "^2.1.0"
       }
     },
     "unique-slug": {
@@ -12302,19 +12703,50 @@
       "integrity": "sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA==",
       "requires": {
         "unist-util-visit": "^1.1.0"
+      },
+      "dependencies": {
+        "unist-util-visit": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
+          "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
+          "requires": {
+            "unist-util-visit-parents": "^2.0.0"
+          }
+        }
       }
     },
     "unist-util-stringify-position": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
-      "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ=="
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.1.tgz",
+      "integrity": "sha512-Zqlf6+FRI39Bah8Q6ZnNGrEHUhwJOkHde2MHVk96lLyftfJJckaPslKgzhVcviXj8KcE9UJM9F+a4JEiBUTYgA==",
+      "requires": {
+        "@types/unist": "^2.0.2"
+      }
     },
     "unist-util-visit": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
-      "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.0.tgz",
+      "integrity": "sha512-kiTpWKsF54u/78L/UU/i7lxrnqGiEWBgqCpaIZBYP0gwUC+Akq0Ajm4U8JiNIoQNfAioBdsyarnOcTEAb9mLeQ==",
       "requires": {
-        "unist-util-visit-parents": "^2.0.0"
+        "@types/unist": "^2.0.0",
+        "unist-util-is": "^4.0.0",
+        "unist-util-visit-parents": "^3.0.0"
+      },
+      "dependencies": {
+        "unist-util-is": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.0.tgz",
+          "integrity": "sha512-E5JLUKRQlAYiJmN2PVBdSz01R3rUKRSM00X+0DB/yLqxdLu6wZZkRdTIsxDp9X+bkxh8Eq+O2YYRbZvLZtQT1A=="
+        },
+        "unist-util-visit-parents": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.0.tgz",
+          "integrity": "sha512-H3K8d81S4V3XVXVwLvrLGk+R5VILryfUotD06/R/rLsTsPLGjkn6gIP8qEEVITcuIySNYj0ocJLsePjm9F/Vcg==",
+          "requires": {
+            "@types/unist": "^2.0.3",
+            "unist-util-is": "^4.0.0"
+          }
+        }
       }
     },
     "unist-util-visit-parents": {
@@ -12406,14 +12838,14 @@
       }
     },
     "url-loader": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz",
-      "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.2.0.tgz",
+      "integrity": "sha512-G8nk3np8ZAnwhHXas1JxJEwJyQdqFXAKJehfgZ/XrC48volFBRtO+FIKtF2u0Ma3bw+4vnDVjHPAQYlF9p2vsw==",
       "dev": true,
       "requires": {
-        "loader-utils": "^1.1.0",
-        "mime": "^2.0.3",
-        "schema-utils": "^1.0.0"
+        "loader-utils": "^1.2.3",
+        "mime": "^2.4.4",
+        "schema-utils": "^2.4.1"
       },
       "dependencies": {
         "mime": {
@@ -12421,6 +12853,16 @@
           "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
           "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
           "dev": true
+        },
+        "schema-utils": {
+          "version": "2.5.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz",
+          "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.10.2",
+            "ajv-keywords": "^3.4.1"
+          }
         }
       }
     },
@@ -12513,14 +12955,15 @@
       }
     },
     "vfile": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz",
-      "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.1.tgz",
+      "integrity": "sha512-lRHFCuC4SQBFr7Uq91oJDJxlnftoTLQ7eKIpMdubhYcVMho4781a8MWXLy3qZrZ0/STD1kRiKc0cQOHm4OkPeA==",
       "requires": {
+        "@types/unist": "^2.0.0",
         "is-buffer": "^2.0.0",
         "replace-ext": "1.0.0",
-        "unist-util-stringify-position": "^1.0.0",
-        "vfile-message": "^1.0.0"
+        "unist-util-stringify-position": "^2.0.0",
+        "vfile-message": "^2.0.0"
       },
       "dependencies": {
         "is-buffer": {
@@ -12536,11 +12979,12 @@
       "integrity": "sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ=="
     },
     "vfile-message": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz",
-      "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.1.tgz",
+      "integrity": "sha512-KtasSV+uVU7RWhUn4Lw+wW1Zl/nW8JWx7JCPps10Y9JRRIDeDXf8wfBLoOSsJLyo27DqMyAi54C6Jf/d6Kr2Bw==",
       "requires": {
-        "unist-util-stringify-position": "^1.1.1"
+        "@types/unist": "^2.0.2",
+        "unist-util-stringify-position": "^2.0.0"
       }
     },
     "vm-browserify": {
@@ -12645,6 +13089,29 @@
         "webpack-sources": "^1.4.1"
       },
       "dependencies": {
+        "cacache": {
+          "version": "12.0.3",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
+          "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
+          "dev": true,
+          "requires": {
+            "bluebird": "^3.5.5",
+            "chownr": "^1.1.1",
+            "figgy-pudding": "^3.5.1",
+            "glob": "^7.1.4",
+            "graceful-fs": "^4.1.15",
+            "infer-owner": "^1.0.3",
+            "lru-cache": "^5.1.1",
+            "mississippi": "^3.0.0",
+            "mkdirp": "^0.5.1",
+            "move-concurrently": "^1.0.1",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^2.6.3",
+            "ssri": "^6.0.1",
+            "unique-filename": "^1.1.1",
+            "y18n": "^4.0.0"
+          }
+        },
         "eslint-scope": {
           "version": "4.0.3",
           "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
@@ -12654,6 +13121,23 @@
             "esrecurse": "^4.1.0",
             "estraverse": "^4.1.1"
           }
+        },
+        "terser-webpack-plugin": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz",
+          "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==",
+          "dev": true,
+          "requires": {
+            "cacache": "^12.0.2",
+            "find-cache-dir": "^2.1.0",
+            "is-wsl": "^1.1.0",
+            "schema-utils": "^1.0.0",
+            "serialize-javascript": "^1.7.0",
+            "source-map": "^0.6.1",
+            "terser": "^4.1.2",
+            "webpack-sources": "^1.4.0",
+            "worker-farm": "^1.7.0"
+          }
         }
       }
     },
@@ -13011,6 +13495,7 @@
       "version": "1.7.0",
       "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
       "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+      "dev": true,
       "requires": {
         "errno": "~0.1.7"
       }
@@ -13104,11 +13589,6 @@
       "integrity": "sha1-j5SW0Wht9IcVYJbnbKmUTvwVv+w=",
       "dev": true
     },
-    "x-is-string": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
-      "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI="
-    },
     "xml-name-validator": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
@@ -13126,9 +13606,9 @@
       "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
     },
     "yallist": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
     },
     "yargs": {
       "version": "12.0.5",
@@ -13197,20 +13677,6 @@
         "camelcase": "^5.0.0",
         "decamelize": "^1.2.0"
       }
-    },
-    "yup": {
-      "version": "0.27.0",
-      "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz",
-      "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==",
-      "dev": true,
-      "requires": {
-        "@babel/runtime": "^7.0.0",
-        "fn-name": "~2.0.1",
-        "lodash": "^4.17.11",
-        "property-expr": "^1.5.0",
-        "synchronous-promise": "^2.0.6",
-        "toposort": "^2.0.2"
-      }
     }
   }
 }
diff --git a/package.json b/package.json
index 8071c827..fbfab43b 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,7 @@
     "templates"
   ],
   "engines": {
-    "node": ">=8.6"
+    "node": ">=8.9"
   },
   "dependencies": {
     "@vxna/mini-html-webpack-template": "^1.0.0",
@@ -32,12 +32,12 @@
     "acorn-jsx": "^5.1.0",
     "ast-types": "~0.13.2",
     "buble": "0.19.8",
-    "clean-webpack-plugin": "^1.0.1",
+    "clean-webpack-plugin": "^3.0.0",
     "clipboard-copy": "^3.1.0",
     "clsx": "^1.0.4",
-    "common-dir": "^2.0.2",
-    "copy-webpack-plugin": "^4.6.0",
-    "core-js": "^3.3.3",
+    "common-dir": "^3.0.0",
+    "copy-webpack-plugin": "^5.0.4",
+    "core-js": "^3.3.5",
     "doctrine": "^3.0.0",
     "es6-object-assign": "~1.1.0",
     "es6-promise": "^4.2.8",
@@ -49,8 +49,8 @@
     "glob": "^7.1.5",
     "glogg": "^1.0.2",
     "is-directory": "^0.3.1",
-    "javascript-stringify": "^1.6.0",
-    "jss": "^9.8.7",
+    "javascript-stringify": "^2.0.0",
+    "jss": "^10.0.0",
     "jss-camel-case": "^6.1.0",
     "jss-compose": "^5.0.0",
     "jss-default-unit": "^8.0.2",
@@ -58,35 +58,34 @@
     "jss-isolate": "^5.1.0",
     "jss-nested": "^6.0.1",
     "kleur": "^3.0.3",
-    "leven": "^2.1.0",
+    "leven": "^3.1.0",
     "listify": "^1.0.0",
     "loader-utils": "^1.2.3",
     "lodash": "^4.17.15",
-    "lowercase-keys": "^1.0.1",
+    "lowercase-keys": "^2.0.0",
     "markdown-to-jsx": "^6.10.3",
     "mini-html-webpack-plugin": "^2.0.0",
     "mri": "^1.1.4",
-    "ora": "^3.4.0",
+    "ora": "^4.0.2",
     "prismjs": "^1.17.1",
     "prop-types": "^15.7.2",
     "q-i": "^2.0.1",
     "qss": "^2.0.3",
     "react-dev-utils": "^9.1.0",
-    "react-docgen": "^4.1.0",
+    "react-docgen": "^4.1.1",
     "react-docgen-annotation-resolver": "^1.0.0",
     "react-docgen-displayname-handler": "^2.1.3",
     "react-group": "^3.0.2",
-    "react-icons": "^3.7.0",
-    "react-simple-code-editor": "^0.9.15",
+    "react-icons": "^3.8.0",
+    "react-simple-code-editor": "^0.10.0",
     "recast": "~0.18.5",
-    "remark": "^10.0.1",
-    "rewrite-imports": "1.2.0",
+    "remark": "^11.0.1",
     "strip-html-comments": "^1.0.0",
-    "terser-webpack-plugin": "^1.4.1",
+    "terser-webpack-plugin": "^2.2.1",
     "to-ast": "^1.0.0",
     "type-detect": "^4.0.8",
-    "unist-util-visit": "^1.4.1",
-    "webpack-dev-server": "^3.8.2",
+    "unist-util-visit": "^2.0.0",
+    "webpack-dev-server": "^3.9.0",
     "webpack-merge": "^4.2.2"
   },
   "peerDependencies": {
@@ -100,42 +99,42 @@
     "@babel/preset-env": "^7.6.3",
     "@babel/preset-flow": "^7.0.0",
     "@babel/preset-react": "^7.6.3",
-    "@testing-library/jest-dom": "^4.1.2",
+    "@testing-library/jest-dom": "^4.2.0",
     "@testing-library/react": "^9.3.0",
     "babel-core": "^7.0.0-bridge.0",
     "babel-eslint": "^10.0.3",
     "babel-jest": "^24.9.0",
     "babel-loader": "^8.0.6",
     "cheerio": "^1.0.0-rc.3",
-    "css-loader": "^2.1.1",
+    "css-loader": "^3.2.0",
     "deabsdeep": "^1.0.6",
     "deepfreeze": "^2.0.0",
-    "dog-names": "^1.0.2",
+    "dog-names": "^2.0.0",
     "enzyme": "^3.10.0",
     "enzyme-adapter-react-16": "^1.15.1",
     "enzyme-to-json": "^3.4.3",
-    "eslint": "^6.5.1",
+    "eslint": "^6.6.0",
     "eslint-config-tamia": "^7.1.1",
     "eslint-plugin-compat": "^3.3.0",
     "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.16.0",
-    "file-loader": "^3.0.1",
+    "file-loader": "^4.2.0",
     "flow-bin": "^0.95.1",
-    "husky": "^1.3.1",
+    "husky": "^3.0.9",
     "jest": "^24.9.0",
-    "jest-serializer-html": "^6.0.0",
+    "jest-serializer-html": "^7.0.0",
     "keymirror": "^0.1.1",
-    "lint-staged": "^8.2.1",
+    "lint-staged": "^9.4.2",
     "memfs": "~2.15.5",
-    "prettier": "1.16.4",
+    "prettier": "1.18.2",
     "raf": "^3.4.1",
-    "react": "^16.10.2",
-    "react-dom": "^16.10.2",
-    "react-test-renderer": "^16.10.2",
+    "react": "^16.11.0",
+    "react-dom": "^16.11.0",
+    "react-test-renderer": "^16.11.0",
     "strip-shebang": "^1.0.2",
-    "style-loader": "^0.23.1",
-    "url-loader": "^1.1.2",
+    "style-loader": "^1.0.0",
+    "url-loader": "^2.2.0",
     "webpack": "^4.41.2",
     "webpack-cli": "^3.3.9"
   },
@@ -162,7 +161,6 @@
     "test:browser:basic": "node test/browser.js examples/basic/styleguide/index.html",
     "test:browser:customised": "node test/browser.js examples/customised/styleguide/index.html",
     "test:browser:sections": "node test/browser.js examples/sections/styleguide/index.html",
-    "precommit": "lint-staged",
     "format": "prettier --write '**/*.{js,md,css}'",
     "test:cypress:pre": "npm i --no-save cypress@3.0.2 wait-on",
     "test:cypress:open": "cypress open",
@@ -216,6 +214,11 @@
     "last 1 Safari version",
     "IE >= 11"
   ],
+  "husky": {
+    "hooks": {
+      "pre-commit": "lint-staged"
+    }
+  },
   "lint-staged": {
     "*.js": [
       "eslint --fix",
@@ -229,6 +232,10 @@
     "*.md": [
       "prettier --write",
       "git add"
+    ],
+    "*.{js,md,css}": [
+      "prettier --write",
+      "git add"
     ]
   }
 }
diff --git a/release.config.js b/release.config.js
new file mode 100644
index 00000000..d50c48c3
--- /dev/null
+++ b/release.config.js
@@ -0,0 +1,18 @@
+module.exports = {
+	plugins: [
+		[
+			'@semantic-release/commit-analyzer',
+			{
+				preset: 'eslint',
+			},
+		],
+		[
+			'@semantic-release/release-notes-generator',
+			{
+				preset: 'eslint',
+			},
+		],
+		'@semantic-release/npm',
+		'@semantic-release/github',
+	],
+};
diff --git a/src/bin/styleguidist.js b/src/bin/styleguidist.js
index c3558dfc..b9eba2ee 100755
--- a/src/bin/styleguidist.js
+++ b/src/bin/styleguidist.js
@@ -20,9 +20,7 @@ const command = argv._[0];
 process.on('uncaughtException', err => {
 	if (err.code === 'EADDRINUSE') {
 		printErrorWithLink(
-			`Another server is running at port ${
-				config.serverPort
-			} already. Please stop it or change the default port to continue.`,
+			`Another server is running at port ${config.serverPort} already. Please stop it or change the default port to continue.`,
 			'You can change the port using the `serverPort` option in your style guide config:',
 			consts.DOCS_CONFIG
 		);
diff --git a/src/client/rsg-components/Editor/__snapshots__/Editor.spec.js.snap b/src/client/rsg-components/Editor/__snapshots__/Editor.spec.js.snap
index f6de7024..15da31be 100644
--- a/src/client/rsg-components/Editor/__snapshots__/Editor.spec.js.snap
+++ b/src/client/rsg-components/Editor/__snapshots__/Editor.spec.js.snap
@@ -8,10 +8,8 @@ exports[`Editor should renderer and editor 1`] = `
   onValueChange={[Function]}
   padding={16}
   tabSize={2}
-  value=
-<button>
+  value=<button>
   MyAwesomeCode
 </button>
-
 />
 `;
diff --git a/src/client/rsg-components/Heading/__snapshots__/Heading.spec.js.snap b/src/client/rsg-components/Heading/__snapshots__/Heading.spec.js.snap
index 9b0131e4..a680244d 100644
--- a/src/client/rsg-components/Heading/__snapshots__/Heading.spec.js.snap
+++ b/src/client/rsg-components/Heading/__snapshots__/Heading.spec.js.snap
@@ -1,9 +1,7 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`Heading should render a heading 1`] = `
-
 <h2 class="rsg--heading-0 rsg--heading2-2">
   The heading
 </h2>
-
 `;
diff --git a/src/client/rsg-components/Markdown/MarkdownHeading/__snapshots__/MarkdownHeading.spec.js.snap b/src/client/rsg-components/Markdown/MarkdownHeading/__snapshots__/MarkdownHeading.spec.js.snap
index f554bb5c..2ff8c068 100644
--- a/src/client/rsg-components/Markdown/MarkdownHeading/__snapshots__/MarkdownHeading.spec.js.snap
+++ b/src/client/rsg-components/Markdown/MarkdownHeading/__snapshots__/MarkdownHeading.spec.js.snap
@@ -1,7 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`Markdown Heading should render a heading with a wrapper that provides margin and an id 1`] = `
-
 <div class="rsg--spacing-0">
   <h2 id="the-markdown-heading"
       class="rsg--heading-2 rsg--heading2-4"
@@ -9,5 +8,4 @@ exports[`Markdown Heading should render a heading with a wrapper that provides m
     The markdown heading
   </h2>
 </div>
-
 `;
diff --git a/src/client/rsg-components/Markdown/__snapshots__/Markdown.spec.js.snap b/src/client/rsg-components/Markdown/__snapshots__/Markdown.spec.js.snap
index 5c9fa04e..427bbf0b 100644
--- a/src/client/rsg-components/Markdown/__snapshots__/Markdown.spec.js.snap
+++ b/src/client/rsg-components/Markdown/__snapshots__/Markdown.spec.js.snap
@@ -1,32 +1,23 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`Markdown inline should render text in a span 1`] = `
-
 <span class="rsg--text-11 rsg--inheritSize-12 rsg--baseColor-16">
   Hello world!
 </span>
-
 `;
 
 exports[`Markdown should render a blockquote 1`] = `
-
 <blockquote class="rsg--blockquote-25">
   <p class="rsg--para-2">
     This is a blockquote.
 And this is a second line.
   </p>
 </blockquote>
-
 `;
 
-exports[`Markdown should render a horizontal rule 1`] = `
-
-<hr class="rsg--hr-28">
-
-`;
+exports[`Markdown should render a horizontal rule 1`] = `<hr class="rsg--hr-28">`;
 
 exports[`Markdown should render a table 1`] = `
-
 <table class="rsg--table-29">
   <thead class="rsg--thead-30">
     <tr>
@@ -57,11 +48,9 @@ exports[`Markdown should render a table 1`] = `
     </tr>
   </tbody>
 </table>
-
 `;
 
 exports[`Markdown should render check-lists 1`] = `
-
 <ul class="rsg--list-21">
   <li class="rsg--li-23">
     <input type="checkbox"
@@ -86,20 +75,16 @@ exports[`Markdown should render check-lists 1`] = `
     to do 3
   </li>
 </ul>
-
 `;
 
 exports[`Markdown should render code blocks without escaping 1`] = `
-
 <pre class="lang-html rsg--pre-26">
   <foo>
   </foo>
 </pre>
-
 `;
 
 exports[`Markdown should render emphasis and strong text 1`] = `
-
 <div>
   <p class="rsg--para-2">
     this text is
@@ -114,11 +99,9 @@ exports[`Markdown should render emphasis and strong text 1`] = `
     </em>
   </p>
 </div>
-
 `;
 
 exports[`Markdown should render headings with generated ids 1`] = `
-
 <div>
   <div class="rsg--spacing-3">
     <h1 id="one"
@@ -163,11 +146,9 @@ exports[`Markdown should render headings with generated ids 1`] = `
     </h6>
   </div>
 </div>
-
 `;
 
 exports[`Markdown should render inline code with escaping 1`] = `
-
 <p class="rsg--para-2">
   Foo
   <code class="rsg--code-27">
@@ -175,11 +156,9 @@ exports[`Markdown should render inline code with escaping 1`] = `
   </code>
   baz
 </p>
-
 `;
 
 exports[`Markdown should render links 1`] = `
-
 <p class="rsg--para-2">
   a
   <a href="http://test.com"
@@ -188,11 +167,9 @@ exports[`Markdown should render links 1`] = `
     link
   </a>
 </p>
-
 `;
 
 exports[`Markdown should render mixed nested lists 1`] = `
-
 <ul class="rsg--list-21">
   <li class="rsg--li-23">
     list 1
@@ -215,11 +192,9 @@ exports[`Markdown should render mixed nested lists 1`] = `
     list 3
   </li>
 </ul>
-
 `;
 
 exports[`Markdown should render ordered lists 1`] = `
-
 <ol class="rsg--list-21 rsg--ordered-22">
   <li class="rsg--li-23">
     list
@@ -231,11 +206,9 @@ exports[`Markdown should render ordered lists 1`] = `
     three
   </li>
 </ol>
-
 `;
 
 exports[`Markdown should render paragraphs 1`] = `
-
 <div>
   <p class="rsg--para-2">
     a paragraph
@@ -244,20 +217,16 @@ exports[`Markdown should render paragraphs 1`] = `
     another paragraph
   </p>
 </div>
-
 `;
 
 exports[`Markdown should render pre-formatted text 1`] = `
-
 <pre class="rsg--pre-26">
   this is preformatted
 so is this
 </pre>
-
 `;
 
 exports[`Markdown should render unordered lists 1`] = `
-
 <ul class="rsg--list-21">
   <li class="rsg--li-23">
     list
@@ -269,5 +238,4 @@ exports[`Markdown should render unordered lists 1`] = `
     three
   </li>
 </ul>
-
 `;
diff --git a/src/client/rsg-components/Playground/Playground.js b/src/client/rsg-components/Playground/Playground.js
index e3e0ed24..71a04472 100644
--- a/src/client/rsg-components/Playground/Playground.js
+++ b/src/client/rsg-components/Playground/Playground.js
@@ -76,6 +76,7 @@ class Playground extends Component {
 			<PlaygroundRenderer
 				name={name}
 				exampleIndex={index}
+				padded={!!settings.padded}
 				preview={preview}
 				previewProps={settings.props || {}}
 				tabButtons={
diff --git a/src/client/rsg-components/Playground/Playground.spec.js b/src/client/rsg-components/Playground/Playground.spec.js
index 540f3af5..a5636916 100644
--- a/src/client/rsg-components/Playground/Playground.spec.js
+++ b/src/client/rsg-components/Playground/Playground.spec.js
@@ -112,3 +112,29 @@ it('showcode option in example settings should overwrite style guide config opti
 
 	expect(queryByRole('textbox')).not.toBeInTheDocument();
 });
+
+it('should not include padded class if padded option is not passed in example settings', () => {
+	const { getByTestId } = render(
+		<Provider>
+			<Playground {...defaultProps} settings={{ padded: false }} />
+		</Provider>
+	);
+
+	expect(getByTestId('preview-wrapper')).not.toHaveAttribute(
+		'class',
+		expect.stringContaining('rsg--padded-')
+	);
+});
+
+it('should include padded class if padded option is passed in example settings', () => {
+	const { getByTestId } = render(
+		<Provider>
+			<Playground {...defaultProps} settings={{ padded: true }} />
+		</Provider>
+	);
+
+	expect(getByTestId('preview-wrapper')).toHaveAttribute(
+		'class',
+		expect.stringContaining('rsg--padded-')
+	);
+});
diff --git a/src/client/rsg-components/Playground/PlaygroundRenderer.js b/src/client/rsg-components/Playground/PlaygroundRenderer.js
index 401e8463..f5404cf2 100644
--- a/src/client/rsg-components/Playground/PlaygroundRenderer.js
+++ b/src/client/rsg-components/Playground/PlaygroundRenderer.js
@@ -24,12 +24,26 @@ export const styles = ({ space, color, borderRadius }) => ({
 		marginLeft: 'auto',
 	},
 	tab: {}, // expose className to allow using it in 'styles' settings
+	padded: {
+		// add padding between each example element rendered
+		'& > *': {
+			isolate: false,
+			marginLeft: -space[1],
+			marginRight: -space[1],
+			'& > *': {
+				isolate: false,
+				marginRight: space[1],
+				marginLeft: space[1],
+			},
+		},
+	},
 });
 
 export function PlaygroundRenderer({
 	classes,
 	exampleIndex,
 	name,
+	padded,
 	preview,
 	previewProps,
 	tabButtons,
@@ -37,9 +51,10 @@ export function PlaygroundRenderer({
 	toolbar,
 }) {
 	const { className, ...props } = previewProps;
+	const previewClasses = cx(classes.preview, className, { [classes.padded]: padded });
 	return (
 		<div className={classes.root} data-testid={`${name}-example-${exampleIndex}`}>
-			<div className={cx(classes.preview, className)} {...props} data-preview={name}>
+			<div className={previewClasses} {...props} data-preview={name} data-testid="preview-wrapper">
 				{preview}
 			</div>
 			<div className={classes.controls}>
@@ -55,6 +70,7 @@ PlaygroundRenderer.propTypes = {
 	classes: PropTypes.object.isRequired,
 	exampleIndex: PropTypes.number.isRequired,
 	name: PropTypes.string.isRequired,
+	padded: PropTypes.bool.isRequired,
 	preview: PropTypes.node.isRequired,
 	previewProps: PropTypes.object.isRequired,
 	tabButtons: PropTypes.node.isRequired,
diff --git a/src/client/rsg-components/Props/Props.spec.js b/src/client/rsg-components/Props/Props.spec.js
index d63eacdf..14261e80 100644
--- a/src/client/rsg-components/Props/Props.spec.js
+++ b/src/client/rsg-components/Props/Props.spec.js
@@ -1,27 +1,38 @@
 /* eslint-disable react/prop-types */
 import React from 'react';
+import { render } from '@testing-library/react';
 import { parse } from 'react-docgen';
 import PropsRenderer, { columns, getRowKey } from './PropsRenderer';
 import { unquote, getType, showSpaces } from './util';
 
 const propsToArray = props => Object.keys(props).map(name => ({ ...props[name], name }));
 
+const getText = node =>
+	node.innerHTML
+		.replace(/<\/?(div|li|p).*?>/g, '\n')
+		.replace(/<.*?>/g, ' ')
+		.replace(/[\r\n]+/g, '\n')
+		.replace(/ +/g, ' ')
+		.trim();
+
 // Test renderers with clean readable snapshot diffs
 export default function ColumnsRenderer({ props }) {
 	return (
-		<ul>
+		<>
 			{props.map((row, rowIdx) => (
-				<li key={rowIdx}>
+				<React.Fragment key={rowIdx}>
 					{columns.map((col, colIdx) => (
-						<div key={colIdx}>{col.render(row)}</div>
+						<div key={colIdx}>
+							{col.caption}: {col.render(row)}
+						</div>
 					))}
-				</li>
+				</React.Fragment>
 			))}
-		</ul>
+		</>
 	);
 }
 
-function render(propTypes, defaultProps = []) {
+function renderJs(propTypes, defaultProps = []) {
 	const props = parse(
 		`
 		import { Component } from 'react';
@@ -41,13 +52,13 @@ function render(propTypes, defaultProps = []) {
 		undefined,
 		{ filename: '' }
 	);
-	return shallow(<ColumnsRenderer props={propsToArray(props.props)} />);
+	return render(<ColumnsRenderer props={propsToArray(props.props)} />);
 }
 
 function renderFlow(propsType, defaultProps = []) {
 	const props = parse(
 		`
-	  // @flow
+		// @flow
 		import * as React from 'react';
 		type Props = {
 			${propsType.join(',')}
@@ -64,70 +75,127 @@ function renderFlow(propsType, defaultProps = []) {
 		undefined,
 		{ filename: '' }
 	);
-	return shallow(<ColumnsRenderer props={propsToArray(props.props)} />);
+	return render(<ColumnsRenderer props={propsToArray(props.props)} />);
 }
 
 describe('PropsRenderer', () => {
-	it('should render a table', () => {
-		const actual = shallow(
+	test('should render a table', async () => {
+		const { findAllByRole } = render(
 			<PropsRenderer
-				props={[{ type: { name: 'string' }, required: false, description: '', name: 'color' }]}
+				props={[
+					{
+						name: 'color',
+						type: { name: 'string' },
+						required: false,
+						defaultValue: { value: 'tomato' },
+						description: 'Butiful',
+					},
+				]}
 			/>
 		);
-
-		expect(actual).toMatchSnapshot();
+		expect((await findAllByRole('columnheader')).map(node => node.textContent)).toEqual([
+			'Prop name',
+			'Type',
+			'Default',
+			'Description',
+		]);
+		expect((await findAllByRole('cell')).map(node => node.textContent)).toEqual([
+			'color',
+			'string',
+			'tomato',
+			'Butiful',
+		]);
 	});
 });
 
 describe('props columns', () => {
-	it('should render PropTypes.string', () => {
-		const actual = render(['color: PropTypes.string']);
+	test('should render PropTypes.string', () => {
+		const { container } = renderJs(['color: PropTypes.string']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: color 
+		Type: string 
+		Default: 
+		Description:"
+	`);
 	});
 
-	it('should render PropTypes.string with a default value', () => {
-		const actual = render(['color: PropTypes.string'], ['color: "pink"']);
+	test('should render PropTypes.string with a default value', () => {
+		const { container } = renderJs(['color: PropTypes.string'], ['color: "pink"']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: color 
+		Type: string 
+		Default: pink 
+		Description:"
+	`);
 	});
 
-	it('should render PropTypes.string.isRequired', () => {
-		const actual = render(['color: PropTypes.string.isRequired']);
+	test('should render PropTypes.string.isRequired', () => {
+		const { container } = renderJs(['color: PropTypes.string.isRequired']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: color 
+		Type: string 
+		Default: Required 
+		Description:"
+	`);
 	});
 
-	it('should render PropTypes.arrayOf', () => {
-		const actual = render(['colors: PropTypes.arrayOf(PropTypes.string)']);
+	test('should render PropTypes.arrayOf', () => {
+		const { container } = renderJs(['colors: PropTypes.arrayOf(PropTypes.string)']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: colors 
+		Type: string[] 
+		Default: 
+		Description:"
+	`);
 	});
 
-	it('should render PropTypes.arrayOf(PropTypes.shape)', () => {
-		const actual = render([
+	test('should render PropTypes.arrayOf(PropTypes.shape)', () => {
+		const { container } = renderJs([
 			'foos: PropTypes.arrayOf(PropTypes.shape({bar: PropTypes.number, baz: PropTypes.any}))',
 		]);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: foos 
+		Type: shape[] 
+		Default: 
+		Description: 
+		 bar : number 
+		 baz : any"
+	`);
 	});
 
-	it('should render PropTypes.instanceOf', () => {
-		const actual = render(['num: PropTypes.instanceOf(Number)']);
+	test('should render PropTypes.instanceOf', () => {
+		const { container } = renderJs(['num: PropTypes.instanceOf(Number)']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: num 
+		Type: Number 
+		Default: 
+		Description:"
+	`);
 	});
 
-	it('should render PropTypes.shape', () => {
-		const actual = render([
+	test('should render PropTypes.shape', () => {
+		const { container } = renderJs([
 			'foo: PropTypes.shape({bar: PropTypes.number.isRequired, baz: PropTypes.any})',
 		]);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: foo 
+		Type: shape 
+		Default: 
+		Description: 
+		 bar : number — Required 
+		 baz : any"
+	`);
 	});
 
-	it('should render PropTypes.shape with formatted defaultProps', () => {
-		const actual = render(
+	test('should render PropTypes.shape with formatted defaultProps', () => {
+		const { getByText } = renderJs(
 			[
 				`
 				foo: PropTypes.shape({
@@ -152,11 +220,22 @@ describe('props columns', () => {
 			]
 		);
 
-		expect(actual).toMatchSnapshot();
-	});
-
-	it('should render PropTypes.shape defaultProps, falling back to Object', () => {
-		const actual = render(
+		expect(getByText('Shape').title).toMatchInlineSnapshot(`
+		"{
+		    bar: 123, baz() {
+		        return 'foo';
+		    },
+		    bing() {
+		        return 'badaboom';
+		    },
+		    trotskij: () => 1935,
+		    qwarc: { si: 'señor', },
+		}"
+	`);
+	});
+
+	test('should render PropTypes.shape defaultProps, falling back to Object', () => {
+		const { container, getByText } = renderJs(
 			[
 				`
 				foo: PropTypes.shape({
@@ -172,11 +251,21 @@ describe('props columns', () => {
 			]
 		);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: foo 
+		Type: shape 
+		Default: Shape 
+		Description: 
+		 bar : number — Required 
+		 baz : any"
+	`);
+
+		// FIXME: This doesn't look correct, where's foo?
+		expect(getByText('Shape').title).toMatchInlineSnapshot(`"somethingThatDoesntExist"`);
 	});
 
-	it('should render PropTypes.shape with description', () => {
-		const actual = render([
+	test('should render PropTypes.shape with description', () => {
+		const { container } = renderJs([
 			`foo: PropTypes.shape({
 			/**
 			 * Number
@@ -187,17 +276,29 @@ describe('props columns', () => {
 		})`,
 		]);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: foo 
+		Type: shape 
+		Default: 
+		Description: 
+		 bar : number — Required — Number 
+		 baz : any — Any"
+	`);
 	});
 
-	it('should render PropTypes.objectOf', () => {
-		const actual = render(['colors: PropTypes.objectOf(PropTypes.string)']);
+	test('should render PropTypes.objectOf', () => {
+		const { container } = renderJs(['colors: PropTypes.objectOf(PropTypes.string)']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: colors 
+		Type: {string} 
+		Default: 
+		Description:"
+	`);
 	});
 
-	it('should render PropTypes.objectOf(PropTypes.shape)', () => {
-		const actual = render([
+	test('should render PropTypes.objectOf(PropTypes.shape)', () => {
+		const { container } = renderJs([
 			`colors: PropTypes.objectOf(
 			PropTypes.shape({
 				bar: PropTypes.number.isRequired,
@@ -206,52 +307,94 @@ describe('props columns', () => {
 		)`,
 		]);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: colors 
+		Type: {shape} 
+		Default: 
+		Description: 
+		 bar : number — Required 
+		 baz : any"
+	`);
 	});
 
-	it('should render PropTypes.oneOf', () => {
-		const actual = render(['size: PropTypes.oneOf(["small", "normal", "large"])']);
+	test('should render PropTypes.oneOf', () => {
+		const { container } = renderJs(['size: PropTypes.oneOf(["small", "normal", "large"])']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: size 
+		Type: enum 
+		Default: 
+		Description: 
+		 One of: small , normal , large"
+	`);
 	});
 
-	it('should render PropTypes.oneOfType', () => {
-		const actual = render(['union: PropTypes.oneOfType([PropTypes.string, PropTypes.number])']);
+	test('should render PropTypes.oneOfType', () => {
+		const { container } = renderJs([
+			'union: PropTypes.oneOfType([PropTypes.string, PropTypes.number])',
+		]);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: union 
+		Type: union 
+		Default: 
+		Description: 
+		 One of type: string , number"
+	`);
 	});
 
-	it('should render description in Markdown', () => {
-		const actual = render(['/**\n * Label\n */\ncolor: PropTypes.string']);
+	test('should render description in Markdown', () => {
+		const { container } = renderJs(['/**\n * Label\n */\ncolor: PropTypes.string']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: color 
+		Type: string 
+		Default: 
+		Description: 
+		Label"
+	`);
 	});
 
-	it('should render unknown proptype for a prop when a relevant proptype is not assigned', () => {
-		const actual = render([], ['color: "pink"']);
+	test('should render unknown proptype for a prop when a relevant proptype is not assigned', () => {
+		const { container } = renderJs([], ['color: "pink"']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: color 
+		Type: unknown 
+		Default: pink 
+		Description:"
+	`);
 	});
 
-	it('should render function body in tooltip', () => {
-		const actual = render(['fn: PropTypes.func'], ['fn: (e) => console.log(e)']);
+	test('should render function body in tooltip', () => {
+		const { getByText } = renderJs(['fn: PropTypes.func'], ['fn: (e) => console.log(e)']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getByText('Function').title).toMatchInlineSnapshot(`"(e) => console.log(e)"`);
 	});
 
-	it('should render function defaultValue as code when undefined', () => {
-		const actual = render(['fn: PropTypes.func'], ['fn: undefined']);
+	test('should render function defaultValue as code when undefined', () => {
+		const { container } = renderJs(['fn: PropTypes.func'], ['fn: undefined']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: fn 
+		Type: func 
+		Default: undefined 
+		Description:"
+	`);
 	});
 
-	it('should render function defaultValue as code when null', () => {
-		const actual = render(['fn: PropTypes.func'], ['fn: null']);
+	test('should render function defaultValue as code when null', () => {
+		const { container } = renderJs(['fn: PropTypes.func'], ['fn: null']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: fn 
+		Type: func 
+		Default: null 
+		Description:"
+	`);
 	});
 
-	it('should render arguments from JsDoc tags', () => {
+	test('should render arguments from JsDoc tags', () => {
 		const props = [
 			{
 				name: 'size',
@@ -276,12 +419,20 @@ describe('props columns', () => {
 				},
 			},
 		];
-		const actual = shallow(<ColumnsRenderer props={props} />);
+		const { container } = render(<ColumnsRenderer props={props} />);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: size 
+		Type: number 
+		Default: 
+		Description: 
+		Test description
+		 Arguments 
+		 Foo : Array — Converts foo to bar Bar"
+	`);
 	});
 
-	it('should render return from JsDoc tags', () => {
+	test('should render return from JsDoc tags', () => {
 		const getProps = tag => [
 			{
 				name: 'size',
@@ -302,16 +453,30 @@ describe('props columns', () => {
 			},
 		];
 
-		const actualForReturn = shallow(<ColumnsRenderer props={getProps('return')} />);
+		const { container: returnContainer } = render(<ColumnsRenderer props={getProps('return')} />);
 
-		expect(actualForReturn).toMatchSnapshot();
+		expect(getText(returnContainer)).toMatchInlineSnapshot(`
+		"Prop name: size 
+		Type: number 
+		Default: 
+		Description: 
+		Test description
+		Returns Array — Returns foo from bar"
+	`);
 
-		const actualForReturns = shallow(<ColumnsRenderer props={getProps('returns')} />);
+		const { container: returnsContainer } = render(<ColumnsRenderer props={getProps('returns')} />);
 
-		expect(actualForReturns).toMatchSnapshot();
+		expect(getText(returnsContainer)).toMatchInlineSnapshot(`
+		"Prop name: size 
+		Type: number 
+		Default: 
+		Description: 
+		Test description
+		Returns Array — Returns foo from bar"
+	`);
 	});
 
-	it('should render name as deprecated when tag deprecated is present', () => {
+	test('should render name as deprecated when tag deprecated is present', () => {
 		const props = [
 			{
 				name: 'size',
@@ -330,91 +495,129 @@ describe('props columns', () => {
 				},
 			},
 		];
-		const actual = shallow(<ColumnsRenderer props={props} />);
+		const { container } = render(<ColumnsRenderer props={props} />);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: size 
+		Type: number 
+		Default: 
+		Description: 
+		Test description
+		 Deprecated: Do not use."
+	`);
 	});
 
-	it('should render type string', () => {
-		const actual = renderFlow(['foo: string']);
+	test('should render type string', () => {
+		const { container } = renderFlow(['foo: string']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: foo 
+		Type: string 
+		Default: Required 
+		Description:"
+	`);
 	});
 
-	it('should render optional type string', () => {
-		const actual = renderFlow(['foo?: string']);
+	test('should render optional type string', () => {
+		const { container } = renderFlow(['foo?: string']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: foo 
+		Type: string 
+		Default: 
+		Description:"
+	`);
 	});
 
-	it('should render type string with a default value', () => {
-		const actual = renderFlow(['foo?: string'], ['foo: "bar"']);
+	test('should render type string with a default value', () => {
+		const { container } = renderFlow(['foo?: string'], ['foo: "bar"']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: foo 
+		Type: string 
+		Default: bar 
+		Description:"
+	`);
 	});
 
-	it('should render literal type', () => {
-		const actual = renderFlow(['foo?: "bar"']);
+	test('should render literal type', () => {
+		const { container } = renderFlow(['foo?: "bar"']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: foo 
+		Type: \\"bar\\" 
+		Default: 
+		Description:"
+	`);
 	});
 
-	it('should render object type with body in tooltip', () => {
-		const actual = renderFlow(['foo: { bar: string }']);
+	test('should render object type with body in tooltip', () => {
+		const { getByText } = renderFlow(['foo: { bar: string }']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getByText('object').title).toMatchInlineSnapshot(`"{ bar: string }"`);
 	});
 
-	it('should render function type with body in tooltip', () => {
-		const actual = renderFlow(['foo: () => void']);
+	test('should render function type with body in tooltip', () => {
+		const { getByText } = renderFlow(['foo: () => void']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getByText('function').title).toMatchInlineSnapshot(`"() => void"`);
 	});
 
-	it('should render union type with body in tooltip', () => {
-		const actual = renderFlow(['foo: "bar" | number']);
+	test('should render union type with body in tooltip', () => {
+		const { getByText } = renderFlow(['foo: "bar" | number']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getByText('union').title).toMatchInlineSnapshot(`"\\"bar\\" | number"`);
 	});
 
-	it('should render enum type when union of literals', () => {
-		const actual = renderFlow(['foo: "bar" | "baz"']);
+	test('should render enum type when union of literals', () => {
+		const { container } = renderFlow(['foo: "bar" | "baz"']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: foo 
+		Type: enum 
+		Default: Required 
+		Description: 
+		 One of: bar , baz"
+	`);
 	});
 
-	it('should render tuple type with body in tooltip', () => {
-		const actual = renderFlow(['foo: ["bar", number]']);
+	test('should render tuple type with body in tooltip', () => {
+		const { getByText } = renderFlow(['foo: ["bar", number]']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getByText('tuple').title).toMatchInlineSnapshot(`"[\\"bar\\", number]"`);
 	});
 
-	it('should render custom class type', () => {
-		const actual = renderFlow(['foo: React.ReactNode']);
+	test('should render custom class type', () => {
+		const { container } = renderFlow(['foo: React.ReactNode']);
 
-		expect(actual).toMatchSnapshot();
+		expect(getText(container)).toMatchInlineSnapshot(`
+		"Prop name: foo 
+		Type: React.ReactNode 
+		Default: Required 
+		Description:"
+	`);
 	});
 });
 
 describe('unquote', () => {
-	it('should remove double quotes around the string', () => {
+	test('should remove double quotes around the string', () => {
 		const result = unquote('"foo"');
 		expect(result).toBe('foo');
 	});
 
-	it('should remove single quotes around the string', () => {
+	test('should remove single quotes around the string', () => {
 		const result = unquote("'foo'");
 		expect(result).toBe('foo');
 	});
 
-	it('should not remove quotes in the middle of the string', () => {
+	test('should not remove quotes in the middle of the string', () => {
 		const result = unquote('foo"bar');
 		expect(result).toBe('foo"bar');
 	});
 });
 
 describe('getType', () => {
-	it('should return .type or .flowType property', () => {
+	test('should return .type or .flowType property', () => {
 		const result = getType({
 			type: 'foo',
 			flowType: 'bar',
@@ -424,14 +627,14 @@ describe('getType', () => {
 });
 
 describe('showSpaces', () => {
-	it('should replace leading and trailing spaces with a visible character', () => {
+	test('should replace leading and trailing spaces with a visible character', () => {
 		const result = showSpaces(' pizza ');
 		expect(result).toBe('␣pizza␣');
 	});
 });
 
 describe('getRowKey', () => {
-	it('should return type name', () => {
+	test('should return type name', () => {
 		const result = getRowKey({ name: 'number' });
 		expect(result).toBe('number');
 	});
diff --git a/src/client/rsg-components/Props/PropsRenderer.js b/src/client/rsg-components/Props/PropsRenderer.js
index e64ffb79..b880819d 100644
--- a/src/client/rsg-components/Props/PropsRenderer.js
+++ b/src/client/rsg-components/Props/PropsRenderer.js
@@ -58,7 +58,7 @@ function renderFlowType(type) {
 function renderComplexType(name, title) {
 	return (
 		<Text size="small" underlined title={title}>
-			<Type>{name}</Type>
+			{name}
 		</Text>
 	);
 }
diff --git a/src/client/rsg-components/Props/__snapshots__/Props.spec.js.snap b/src/client/rsg-components/Props/__snapshots__/Props.spec.js.snap
deleted file mode 100644
index 3543b541..00000000
--- a/src/client/rsg-components/Props/__snapshots__/Props.spec.js.snap
+++ /dev/null
@@ -1,1699 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`PropsRenderer should render a table 1`] = `
-<Styled(Table)
-  columns={
-    Array [
-      Object {
-        "caption": "Prop name",
-        "render": [Function],
-      },
-      Object {
-        "caption": "Type",
-        "render": [Function],
-      },
-      Object {
-        "caption": "Default",
-        "render": [Function],
-      },
-      Object {
-        "caption": "Description",
-        "render": [Function],
-      },
-    ]
-  }
-  getRowKey={[Function]}
-  rows={
-    Array [
-      Object {
-        "description": "",
-        "name": "color",
-        "required": false,
-        "type": Object {
-          "name": "string",
-        },
-      },
-    ]
-  }
-/>
-`;
-
-exports[`props columns should render PropTypes.arrayOf 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        colors
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        string[]
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render PropTypes.arrayOf(PropTypes.shape) 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foos
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        shape[]
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <Styled(Para)>
-          <div
-            key="bar"
-          >
-            <Styled(Name)>
-              bar
-            </Styled(Name)>
-            : 
-            <Styled(Type)>
-              number
-            </Styled(Type)>
-          </div>
-          <div
-            key="baz"
-          >
-            <Styled(Name)>
-              baz
-            </Styled(Name)>
-            : 
-            <Styled(Type)>
-              any
-            </Styled(Type)>
-          </div>
-        </Styled(Para)>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render PropTypes.instanceOf 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        num
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        Number
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render PropTypes.objectOf 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        colors
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        {string}
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render PropTypes.objectOf(PropTypes.shape) 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        colors
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        {shape}
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <Styled(Para)>
-          <div
-            key="bar"
-          >
-            <Styled(Name)>
-              bar
-            </Styled(Name)>
-            : 
-            <Styled(Type)>
-              number
-            </Styled(Type)>
-             — 
-            <Styled(Text)
-              color="light"
-              size="small"
-            >
-              Required
-            </Styled(Text)>
-          </div>
-          <div
-            key="baz"
-          >
-            <Styled(Name)>
-              baz
-            </Styled(Name)>
-            : 
-            <Styled(Type)>
-              any
-            </Styled(Type)>
-          </div>
-        </Styled(Para)>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render PropTypes.oneOf 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        size
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        enum
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <Styled(Para)>
-          <span>
-            One of: 
-            <Group
-              separator=", "
-            >
-              <Styled(Code)
-                key="\\"small\\""
-              >
-                small
-              </Styled(Code)>
-              <Styled(Code)
-                key="\\"normal\\""
-              >
-                normal
-              </Styled(Code)>
-              <Styled(Code)
-                key="\\"large\\""
-              >
-                large
-              </Styled(Code)>
-            </Group>
-          </span>
-        </Styled(Para)>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render PropTypes.oneOfType 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        union
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        union
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <Styled(Para)>
-          <span>
-            One of type: 
-            <Group
-              separator=", "
-            >
-              <Styled(Type)
-                key="string-0"
-              >
-                string
-              </Styled(Type)>
-              <Styled(Type)
-                key="number-1"
-              >
-                number
-              </Styled(Type)>
-            </Group>
-          </span>
-        </Styled(Para)>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render PropTypes.shape 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        shape
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <Styled(Para)>
-          <div
-            key="bar"
-          >
-            <Styled(Name)>
-              bar
-            </Styled(Name)>
-            : 
-            <Styled(Type)>
-              number
-            </Styled(Type)>
-             — 
-            <Styled(Text)
-              color="light"
-              size="small"
-            >
-              Required
-            </Styled(Text)>
-          </div>
-          <div
-            key="baz"
-          >
-            <Styled(Name)>
-              baz
-            </Styled(Name)>
-            : 
-            <Styled(Type)>
-              any
-            </Styled(Type)>
-          </div>
-        </Styled(Para)>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render PropTypes.shape defaultProps, falling back to Object 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        shape
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Text)
-        color="light"
-        size="small"
-        title="somethingThatDoesntExist"
-        underlined={true}
-      >
-        Shape
-      </Styled(Text)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <Styled(Para)>
-          <div
-            key="bar"
-          >
-            <Styled(Name)>
-              bar
-            </Styled(Name)>
-            : 
-            <Styled(Type)>
-              number
-            </Styled(Type)>
-             — 
-            <Styled(Text)
-              color="light"
-              size="small"
-            >
-              Required
-            </Styled(Text)>
-          </div>
-          <div
-            key="baz"
-          >
-            <Styled(Name)>
-              baz
-            </Styled(Name)>
-            : 
-            <Styled(Type)>
-              any
-            </Styled(Type)>
-          </div>
-        </Styled(Para)>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render PropTypes.shape with description 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        shape
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <Styled(Para)>
-          <div
-            key="bar"
-          >
-            <Styled(Name)>
-              bar
-            </Styled(Name)>
-            : 
-            <Styled(Type)>
-              number
-            </Styled(Type)>
-             — 
-            <Styled(Text)
-              color="light"
-              size="small"
-            >
-              Required
-            </Styled(Text)>
-             — 
-            <Markdown
-              inline={true}
-              text="Number"
-            />
-          </div>
-          <div
-            key="baz"
-          >
-            <Styled(Name)>
-              baz
-            </Styled(Name)>
-            : 
-            <Styled(Type)>
-              any
-            </Styled(Type)>
-             — 
-            <Markdown
-              inline={true}
-              text="Any"
-            />
-          </div>
-        </Styled(Para)>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render PropTypes.shape with formatted defaultProps 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        shape
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Text)
-        color="light"
-        size="small"
-        title="{
-  bar: 123,
-  baz: baz() {
-          return 'foo';
-      },
-  bing: bing() {
-          return 'badaboom';
-      },
-  trotskij: () => 1935,
-  qwarc: {
-    si: 'señor'
-  }
-}"
-        underlined={true}
-      >
-        Shape
-      </Styled(Text)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <Styled(Para)>
-          <div
-            key="bar"
-          >
-            <Styled(Name)>
-              bar
-            </Styled(Name)>
-            : 
-            <Styled(Type)>
-              number
-            </Styled(Type)>
-             — 
-            <Styled(Text)
-              color="light"
-              size="small"
-            >
-              Required
-            </Styled(Text)>
-          </div>
-          <div
-            key="baz"
-          >
-            <Styled(Name)>
-              baz
-            </Styled(Name)>
-            : 
-            <Styled(Type)>
-              any
-            </Styled(Type)>
-          </div>
-        </Styled(Para)>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render PropTypes.string 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        color
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        string
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render PropTypes.string with a default value 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        color
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        string
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Code)>
-        pink
-      </Styled(Code)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render PropTypes.string.isRequired 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        color
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        string
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Text)
-        color="light"
-        size="small"
-      >
-        Required
-      </Styled(Text)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render arguments from JsDoc tags 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        size
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        number
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <Markdown
-          text="Test description"
-        />
-        <JsDoc
-          arg={
-            Array [
-              Object {
-                "description": "Converts foo to bar",
-                "name": "Foo",
-                "type": Object {
-                  "name": "Array",
-                },
-              },
-            ]
-          }
-          param={
-            Array [
-              Object {
-                "name": "Bar",
-              },
-            ]
-          }
-        />
-        <Styled(Arguments)
-          args={
-            Array [
-              Object {
-                "description": "Converts foo to bar",
-                "name": "Foo",
-                "type": Object {
-                  "name": "Array",
-                },
-              },
-              Object {
-                "name": "Bar",
-              },
-            ]
-          }
-          heading={true}
-        />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render custom class type 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        React.ReactNode
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Text)
-        color="light"
-        size="small"
-      >
-        Required
-      </Styled(Text)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render description in Markdown 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        color
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        string
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <Markdown
-          text="Label"
-        />
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render enum type when union of literals 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        enum
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Text)
-        color="light"
-        size="small"
-      >
-        Required
-      </Styled(Text)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <Styled(Para)>
-          <span>
-            One of: 
-            <Group
-              separator=", "
-            >
-              <Styled(Code)
-                key="\\"bar\\""
-              >
-                bar
-              </Styled(Code)>
-              <Styled(Code)
-                key="\\"baz\\""
-              >
-                baz
-              </Styled(Code)>
-            </Group>
-          </span>
-        </Styled(Para)>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render function body in tooltip 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        fn
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        func
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Text)
-        color="light"
-        size="small"
-        title="(e) => console.log(e)"
-        underlined={true}
-      >
-        Function
-      </Styled(Text)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render function defaultValue as code when null 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        fn
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        func
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Code)>
-        null
-      </Styled(Code)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render function defaultValue as code when undefined 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        fn
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        func
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Code)>
-        undefined
-      </Styled(Code)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render function type with body in tooltip 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        <Styled(Text)
-          size="small"
-          title="() => void"
-          underlined={true}
-        >
-          <Styled(Type)>
-            function
-          </Styled(Type)>
-        </Styled(Text)>
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Text)
-        color="light"
-        size="small"
-      >
-        Required
-      </Styled(Text)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render literal type 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        "bar"
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render name as deprecated when tag deprecated is present 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={true}
-      >
-        size
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        number
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <Markdown
-          text="Test description"
-        />
-        <JsDoc
-          deprecated={
-            Array [
-              Object {
-                "description": "Do not use.",
-                "title": "deprecated",
-              },
-            ]
-          }
-        />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render object type with body in tooltip 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        <Styled(Text)
-          size="small"
-          title="{ bar: string }"
-          underlined={true}
-        >
-          <Styled(Type)>
-            object
-          </Styled(Type)>
-        </Styled(Text)>
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Text)
-        color="light"
-        size="small"
-      >
-        Required
-      </Styled(Text)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render optional type string 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        string
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render return from JsDoc tags 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        size
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        number
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <Markdown
-          text="Test description"
-        />
-        <JsDoc
-          return={
-            Array [
-              Object {
-                "description": "Returns foo from bar",
-                "title": "Foo",
-                "type": Object {
-                  "name": "Array",
-                },
-              },
-            ]
-          }
-        />
-        <Styled(Argument)
-          description="Returns foo from bar"
-          returns={true}
-          title="Foo"
-          type={
-            Object {
-              "name": "Array",
-            }
-          }
-        />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render return from JsDoc tags 2`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        size
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        number
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    />
-    <div
-      key="3"
-    >
-      <div>
-        <Markdown
-          text="Test description"
-        />
-        <JsDoc
-          returns={
-            Array [
-              Object {
-                "description": "Returns foo from bar",
-                "title": "Foo",
-                "type": Object {
-                  "name": "Array",
-                },
-              },
-            ]
-          }
-        />
-        <Styled(Argument)
-          description="Returns foo from bar"
-          returns={true}
-          title="Foo"
-          type={
-            Object {
-              "name": "Array",
-            }
-          }
-        />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render tuple type with body in tooltip 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        <Styled(Text)
-          size="small"
-          title="[\\"bar\\", number]"
-          underlined={true}
-        >
-          <Styled(Type)>
-            tuple
-          </Styled(Type)>
-        </Styled(Text)>
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Text)
-        color="light"
-        size="small"
-      >
-        Required
-      </Styled(Text)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render type string 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        string
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Text)
-        color="light"
-        size="small"
-      >
-        Required
-      </Styled(Text)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render type string with a default value 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        string
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Code)>
-        bar
-      </Styled(Code)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render union type with body in tooltip 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        foo
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        <Styled(Text)
-          size="small"
-          title="\\"bar\\" | number"
-          underlined={true}
-        >
-          <Styled(Type)>
-            union
-          </Styled(Type)>
-        </Styled(Text)>
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Text)
-        color="light"
-        size="small"
-      >
-        Required
-      </Styled(Text)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <Styled(Para)>
-          <span />
-        </Styled(Para)>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
-
-exports[`props columns should render unknown proptype for a prop when a relevant proptype is not assigned 1`] = `
-<ul>
-  <li
-    key="0"
-  >
-    <div
-      key="0"
-    >
-      <Styled(Name)
-        deprecated={false}
-      >
-        color
-      </Styled(Name)>
-    </div>
-    <div
-      key="1"
-    >
-      <Styled(Type)>
-        unknown
-      </Styled(Type)>
-    </div>
-    <div
-      key="2"
-    >
-      <Styled(Code)>
-        pink
-      </Styled(Code)>
-    </div>
-    <div
-      key="3"
-    >
-      <div>
-        <JsDoc />
-      </div>
-    </div>
-  </li>
-</ul>
-`;
diff --git a/src/client/rsg-components/ReactExample/__snapshots__/ReactExample.spec.js.snap b/src/client/rsg-components/ReactExample/__snapshots__/ReactExample.spec.js.snap
index 2b8b201c..da43806e 100644
--- a/src/client/rsg-components/ReactExample/__snapshots__/ReactExample.spec.js.snap
+++ b/src/client/rsg-components/ReactExample/__snapshots__/ReactExample.spec.js.snap
@@ -12,28 +12,22 @@ exports[`should render code 1`] = `
 `;
 
 exports[`should set initialState before the first render 1`] = `
-
 <span>
   1
 </span>
-
 `;
 
 exports[`should update state on setState 1`] = `
-
 <button>
   2
 </button>
-
 `;
 
 exports[`should wrap code in Fragment when it starts with < 1`] = `
-
 <div>
   <span>
   </span>
   <span>
   </span>
 </div>
-
 `;
diff --git a/src/client/rsg-components/Sections/__snapshots__/Sections.spec.js.snap b/src/client/rsg-components/Sections/__snapshots__/Sections.spec.js.snap
index 18ee86d6..64e700fe 100644
--- a/src/client/rsg-components/Sections/__snapshots__/Sections.spec.js.snap
+++ b/src/client/rsg-components/Sections/__snapshots__/Sections.spec.js.snap
@@ -10,11 +10,9 @@ exports[`render should render component 1`] = `
         "components": Array [],
         "content": Array [
           Object {
-            "content": 
-<button>
+            "content": <button>
   OK
-</button>
-,
+</button>,
             "evalInContext": [Function],
             "type": "code",
           },
@@ -76,11 +74,9 @@ exports[`render should render styled component 1`] = `
         "components": Array [],
         "content": Array [
           Object {
-            "content": 
-<button>
+            "content": <button>
   OK
-</button>
-,
+</button>,
             "evalInContext": [Function],
             "type": "code",
           },
@@ -136,11 +132,9 @@ exports[`should render component renderer 1`] = `
         "components": Array [],
         "content": Array [
           Object {
-            "content": 
-<button>
+            "content": <button>
   OK
-</button>
-,
+</button>,
             "evalInContext": [Function],
             "type": "code",
           },
diff --git a/src/client/styles/setupjss.js b/src/client/styles/setupjss.js
index 439f4761..75120b1a 100644
--- a/src/client/styles/setupjss.js
+++ b/src/client/styles/setupjss.js
@@ -7,13 +7,13 @@ import defaultUnit from 'jss-default-unit';
 import compose from 'jss-compose';
 import nonInheritedProps from './nonInheritedProps';
 
-const createGenerateClassName = () => {
+const createGenerateId = () => {
 	let counter = 0;
 	return rule => `rsg--${rule.key}-${counter++}`;
 };
 
 const jss = create({
-	createGenerateClassName,
+	createGenerateId,
 	plugins: [
 		global(),
 		isolate({
diff --git a/src/client/utils/filterComponentsInSectionsByExactName.js b/src/client/utils/filterComponentsInSectionsByExactName.js
index e9378b5c..d4def511 100644
--- a/src/client/utils/filterComponentsInSectionsByExactName.js
+++ b/src/client/utils/filterComponentsInSectionsByExactName.js
@@ -15,6 +15,7 @@ export default function filterComponentsInSectionsByExactName(sections, name, re
 			const filteredComponents = filterComponentsByExactName(section.components, name);
 			if (filteredComponents.length) {
 				filteredSections.push({
+					slug: section.slug,
 					exampleMode: section.exampleMode,
 					usageMode: section.usageMode,
 					components: filteredComponents,
diff --git a/src/client/utils/getUrl.js b/src/client/utils/getUrl.js
index 06df8da2..63b27389 100644
--- a/src/client/utils/getUrl.js
+++ b/src/client/utils/getUrl.js
@@ -13,16 +13,14 @@
  */
 export default function getUrl(
 	{ name, slug, example, anchor, isolated, nochrome, absolute, hashPath, id, takeHash } = {},
-	{ origin, pathname, hash } = window.location
+	{ origin, pathname, hash = '' } = window.location
 ) {
 	let url = pathname;
 
+	const currentHash = hash.indexOf('?') > -1 ? hash.substring(0, hash.indexOf('?')) : hash;
+
 	if (takeHash) {
-		if (hash.indexOf('?') > -1) {
-			url += hash.substring(0, hash.indexOf('?'));
-		} else {
-			url += hash;
-		}
+		url += currentHash;
 	}
 
 	if (nochrome) {
@@ -34,7 +32,7 @@ export default function getUrl(
 	if (anchor) {
 		url += `#${slug}`;
 	} else if (isolated || nochrome) {
-		url += `#!/${encodedName}`;
+		url += buildIsolatedOrNoChromeFragment({ currentHash, encodedName });
 	}
 
 	if (hashPath) {
@@ -59,3 +57,21 @@ export default function getUrl(
 
 	return url;
 }
+
+/**
+ * Gets the URL fragment for an isolated or nochrome link.
+ *
+ * @param {string} $.currentHash The current hash fragment of the page
+ * @param {string} $.encodedName The URL encoded name of the component
+ * @return {string}
+ */
+function buildIsolatedOrNoChromeFragment({ currentHash, encodedName }) {
+	const stripFragment = /^#\/?/;
+	const stripTrailingSlash = /\/$/;
+	const currentHashPath =
+		// skip if we are already using `#!/`
+		currentHash && !currentHash.includes('#!/')
+			? currentHash.replace(stripFragment, '').replace(stripTrailingSlash, '') + '/'
+			: '';
+	return `#!/${currentHashPath}${encodedName}`;
+}
diff --git a/src/loaders/utils/getSections.js b/src/loaders/utils/getSections.js
index 2f233ba5..1c35c881 100644
--- a/src/loaders/utils/getSections.js
+++ b/src/loaders/utils/getSections.js
@@ -77,7 +77,7 @@ function processSection(section, config, parentDepth) {
 		usageMode: section.usageMode || config.usageMode,
 		sectionDepth,
 		description: section.description,
-		slug: `section-${slugger.slug(section.name)}`,
+		slug: `section-${slugger.slug(section.name || 'untitled')}`,
 		sections: getSections(section.sections || [], config, sectionDepth),
 		href: section.href,
 		components: getSectionComponents(section, config),
diff --git a/src/scripts/make-webpack-config.js b/src/scripts/make-webpack-config.js
index 5a885a63..066b5eb5 100644
--- a/src/scripts/make-webpack-config.js
+++ b/src/scripts/make-webpack-config.js
@@ -4,7 +4,7 @@ const webpack = require('webpack');
 const TerserPlugin = require('terser-webpack-plugin');
 const MiniHtmlWebpackPlugin = require('mini-html-webpack-plugin');
 const MiniHtmlWebpackTemplate = require('@vxna/mini-html-webpack-template');
-const CleanWebpackPlugin = require('clean-webpack-plugin');
+const { CleanWebpackPlugin } = require('clean-webpack-plugin');
 const CopyWebpackPlugin = require('copy-webpack-plugin');
 const merge = require('webpack-merge');
 const forEach = require('lodash/forEach');
@@ -60,8 +60,6 @@ module.exports = function(config, env) {
 
 	if (isProd) {
 		const minimizer = new TerserPlugin({
-			parallel: true,
-			cache: true,
 			terserOptions: {
 				ie8: false,
 				ecma: 5,
@@ -88,7 +86,7 @@ module.exports = function(config, env) {
 				chunkFilename: 'build/[name].[chunkhash:8].js',
 			},
 			plugins: [
-				new CleanWebpackPlugin(['build'], {
+				new CleanWebpackPlugin({
 					root: config.styleguideDir,
 					verbose: config.verbose === true,
 				}),


Test patch:
diff --git a/src/client/utils/__tests__/__snapshots__/getRouteData.spec.js.snap b/src/client/utils/__tests__/__snapshots__/getRouteData.spec.js.snap
index 390afc09..5bf3c08a 100644
--- a/src/client/utils/__tests__/__snapshots__/getRouteData.spec.js.snap
+++ b/src/client/utils/__tests__/__snapshots__/getRouteData.spec.js.snap
@@ -29,6 +29,7 @@ Object {
       "name": "Components",
       "sectionDepth": 0,
       "sections": Array [],
+      "slug": "components",
       "usageMode": "collapse",
     },
   ],
@@ -61,6 +62,7 @@ Object {
         },
       ],
       "exampleMode": "collapse",
+      "slug": "components",
       "usageMode": "collapse",
     },
   ],
@@ -79,6 +81,7 @@ Object {
         },
       ],
       "exampleMode": "collapse",
+      "slug": "buttons",
       "usageMode": "collapse",
     },
   ],
@@ -103,6 +106,7 @@ Object {
         },
       ],
       "exampleMode": "collapse",
+      "slug": "components",
       "usageMode": "collapse",
     },
   ],
@@ -122,6 +126,7 @@ Object {
       "name": "Section",
       "sectionDepth": 0,
       "sections": Array [],
+      "slug": "section",
       "usageMode": "collapse",
     },
   ],
@@ -142,6 +147,7 @@ Object {
       "name": "Section",
       "sectionDepth": 0,
       "sections": Array [],
+      "slug": "section",
       "usageMode": "collapse",
     },
   ],
@@ -162,6 +168,7 @@ Object {
       "name": "Section",
       "sectionDepth": 0,
       "sections": Array [],
+      "slug": "section",
       "usageMode": "collapse",
     },
   ],
@@ -178,6 +185,7 @@ Object {
       "name": "Buttons",
       "sectionDepth": 2,
       "sections": Array [],
+      "slug": "buttons",
       "usageMode": "collapse",
     },
   ],
diff --git a/src/client/utils/__tests__/getRouteData.spec.js b/src/client/utils/__tests__/getRouteData.spec.js
index 39d50223..3e5dd6dd 100644
--- a/src/client/utils/__tests__/getRouteData.spec.js
+++ b/src/client/utils/__tests__/getRouteData.spec.js
@@ -7,6 +7,7 @@ const sections = deepfreeze([
 		sections: [
 			{
 				name: 'Components',
+				slug: 'components',
 				components: [
 					{
 						name: 'Button',
@@ -31,6 +32,7 @@ const sections = deepfreeze([
 			},
 			{
 				name: 'Section',
+				slug: 'section',
 				content: ['example 0', 'example 1'],
 				components: [],
 				sections: [],
@@ -40,6 +42,7 @@ const sections = deepfreeze([
 			},
 			{
 				name: 'Buttons',
+				slug: 'buttons',
 				components: [
 					{
 						name: 'Label',
diff --git a/src/client/utils/__tests__/getUrl.spec.js b/src/client/utils/__tests__/getUrl.spec.js
index 6ae72866..327bb352 100644
--- a/src/client/utils/__tests__/getUrl.spec.js
+++ b/src/client/utils/__tests__/getUrl.spec.js
@@ -31,37 +31,37 @@ describe('getUrl', () => {
 
 	it('should return an isolated URL', () => {
 		const result = getUrl({ name, slug, isolated: true }, loc);
-		expect(result).toBe('/styleguide/#!/FooBar');
+		expect(result).toBe('/styleguide/#!/Components/FooBar');
 	});
 
 	it('should return an absolute isolated URL', () => {
 		const result = getUrl({ name, slug, isolated: true, absolute: true }, loc);
-		expect(result).toBe('http://example.com/styleguide/#!/FooBar');
+		expect(result).toBe('http://example.com/styleguide/#!/Components/FooBar');
 	});
 
 	it('should return an isolated example URL', () => {
 		const result = getUrl({ name, slug, example: 3, isolated: true }, loc);
-		expect(result).toBe('/styleguide/#!/FooBar/3');
+		expect(result).toBe('/styleguide/#!/Components/FooBar/3');
 	});
 
 	it('should return an isolated example=0 URL', () => {
 		const result = getUrl({ name, slug, example: 0, isolated: true }, loc);
-		expect(result).toBe('/styleguide/#!/FooBar/0');
+		expect(result).toBe('/styleguide/#!/Components/FooBar/0');
 	});
 
 	it('should return an absolute isolated example URL', () => {
 		const result = getUrl({ name, slug, example: 3, isolated: true, absolute: true }, loc);
-		expect(result).toBe('http://example.com/styleguide/#!/FooBar/3');
+		expect(result).toBe('http://example.com/styleguide/#!/Components/FooBar/3');
 	});
 
 	it('should return a nochrome URL', () => {
 		const result = getUrl({ name, slug, nochrome: true }, loc);
-		expect(result).toBe('/styleguide/?nochrome#!/FooBar');
+		expect(result).toBe('/styleguide/?nochrome#!/Components/FooBar');
 	});
 
 	it('should return an absolute nochrome URL', () => {
 		const result = getUrl({ name, slug, nochrome: true, absolute: true }, loc);
-		expect(result).toBe('http://example.com/styleguide/?nochrome#!/FooBar');
+		expect(result).toBe('http://example.com/styleguide/?nochrome#!/Components/FooBar');
 	});
 
 	it('should return a route path', () => {
diff --git a/src/loaders/__tests__/examples-loader.spec.js b/src/loaders/__tests__/examples-loader.spec.js
index 98c750fe..08d6a899 100644
--- a/src/loaders/__tests__/examples-loader.spec.js
+++ b/src/loaders/__tests__/examples-loader.spec.js
@@ -55,27 +55,25 @@ it('should replace all occurrences of __COMPONENT__ with provided query.displayN
 	);
 	expect(result).not.toMatch(/__COMPONENT__/);
 	expect(result.match(/<div>(.*?)<\/div>/)[0]).toMatchInlineSnapshot(`
-
-<div>
-  \\n\\t
-  <FooComponent>
-    \\n\\t\\t
-    <span>
-      text
-    </span>
-    \\n\\t\\t
-    <span>
-      Name of component: FooComponent
-    </span>
-    \\n\\t
-  </FooComponent>
-  \\n\\t
-  <FooComponent>
-  </FooComponent>
-  \\n
-</div>
-
-`);
+		<div>
+		  \\n\\t
+		  <FooComponent>
+		    \\n\\t\\t
+		    <span>
+		      text
+		    </span>
+		    \\n\\t\\t
+		    <span>
+		      Name of component: FooComponent
+		    </span>
+		    \\n\\t
+		  </FooComponent>
+		  \\n\\t
+		  <FooComponent>
+		  </FooComponent>
+		  \\n
+		</div>
+	`);
 });
 
 it('should pass updateExample function from config to chunkify', () => {
diff --git a/src/loaders/utils/__tests__/__snapshots__/chunkify.spec.js.snap b/src/loaders/utils/__tests__/__snapshots__/chunkify.spec.js.snap
index dd8eb45c..6ff09160 100644
--- a/src/loaders/utils/__tests__/__snapshots__/chunkify.spec.js.snap
+++ b/src/loaders/utils/__tests__/__snapshots__/chunkify.spec.js.snap
@@ -7,11 +7,9 @@ Array [
     "type": "markdown",
   },
   Object {
-    "content": 
-<AppButton>
+    "content": <AppButton>
   Example in vue
-</AppButton>
-,
+</AppButton>,
     "settings": Object {},
     "type": "code",
   },
@@ -25,22 +23,18 @@ Array [
     "type": "markdown",
   },
   Object {
-    "content": 
-<h1>
+    "content": <h1>
   Hello Markdown!
-</h1>
-,
+</h1>,
     "settings": Object {
       "showcode": true,
     },
     "type": "code",
   },
   Object {
-    "content": 
-<h1>
+    "content": <h1>
   Example in frame and Without editor
-</h1>
-,
+</h1>,
     "settings": Object {
       "frame": Object {
         "width": "400px",
@@ -53,11 +47,9 @@ Array [
     "type": "markdown",
   },
   Object {
-    "content": 
-<h2>
+    "content": <h2>
   Hello Markdown!
-</h2>
-,
+</h2>,
     "settings": Object {
       "noeditor": true,
     },
@@ -79,11 +71,9 @@ Array [
     "type": "markdown",
   },
   Object {
-    "content": 
-<AppButton>
+    "content": <AppButton>
   Example in jsx with undefined extensions
-</AppButton>
-,
+</AppButton>,
     "settings": Object {},
     "type": "code",
   },
@@ -111,11 +101,9 @@ This code example should be rendered as a playground:",
     "type": "markdown",
   },
   Object {
-    "content": 
-<h1>
+    "content": <h1>
   Hello Markdown!
-</h1>
-,
+</h1>,
     "settings": Object {},
     "type": "code",
   },
@@ -124,11 +112,9 @@ This code example should be rendered as a playground:",
     "type": "markdown",
   },
   Object {
-    "content": 
-<h2>
+    "content": <h2>
   Hello Markdown!
-</h2>
-,
+</h2>,
     "settings": Object {},
     "type": "code",
   },
@@ -137,11 +123,9 @@ This code example should be rendered as a playground:",
     "type": "markdown",
   },
   Object {
-    "content": 
-<h3>
+    "content": <h3>
   Hello Markdown!
-</h3>
-,
+</h3>,
     "settings": Object {
       "noeditor": true,
     },
diff --git a/src/loaders/utils/__tests__/__snapshots__/highlightCode.spec.js.snap b/src/loaders/utils/__tests__/__snapshots__/highlightCode.spec.js.snap
index aa58785b..00a6fd6a 100644
--- a/src/loaders/utils/__tests__/__snapshots__/highlightCode.spec.js.snap
+++ b/src/loaders/utils/__tests__/__snapshots__/highlightCode.spec.js.snap
@@ -1,7 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`should highlight code with specified language 1`] = `
-
 <span class="token tag">
   <span class="token tag">
     <span class="token punctuation">
@@ -25,5 +24,4 @@ Hello React
     >
   </span>
 </span>
-
 `;
diff --git a/src/scripts/__tests__/__snapshots__/make-webpack-config.spec.js.snap b/src/scripts/__tests__/__snapshots__/make-webpack-config.spec.js.snap
index c66e19e8..ea750bfa 100644
--- a/src/scripts/__tests__/__snapshots__/make-webpack-config.spec.js.snap
+++ b/src/scripts/__tests__/__snapshots__/make-webpack-config.spec.js.snap
@@ -1,21 +1,5 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`should enable verbose mode in CleanWebpackPlugin 1`] = `
-Array [
-  CleanWebpackPlugin {
-    "options": Object {
-      "allowExternal": false,
-      "dry": false,
-      "root": "~/src/scripts/__tests__",
-      "verbose": true,
-    },
-    "paths": Array [
-      "build",
-    ],
-  },
-]
-`;
-
 exports[`should merge user webpack config 1`] = `
 Object {
   "foo": "bar",
diff --git a/src/scripts/__tests__/make-webpack-config.spec.js b/src/scripts/__tests__/make-webpack-config.spec.js
index 0ecc341a..61151b26 100644
--- a/src/scripts/__tests__/make-webpack-config.spec.js
+++ b/src/scripts/__tests__/make-webpack-config.spec.js
@@ -2,10 +2,7 @@ import webpack, { validate } from 'webpack';
 import CopyWebpackPlugin from 'copy-webpack-plugin';
 import makeWebpackConfig from '../make-webpack-config';
 
-jest.mock('copy-webpack-plugin', () => {
-	const RealCopyWebpackPluginModule = require.requireActual('copy-webpack-plugin');
-	return jest.fn(RealCopyWebpackPluginModule);
-});
+jest.mock('copy-webpack-plugin');
 
 const styleguideConfig = {
 	styleguideDir: __dirname,
@@ -106,7 +103,7 @@ it('should prepend requires as webpack entries', () => {
 
 it('should enable verbose mode in CleanWebpackPlugin', () => {
 	const result = makeWebpackConfig({ ...styleguideConfig, verbose: true }, 'production');
-	expect(getClasses(result.plugins, 'CleanWebpackPlugin')).toMatchSnapshot();
+	expect(getClasses(result.plugins, 'CleanWebpackPlugin')[0].verbose).toBe(true);
 });
 
 it('should set from with assetsDir in CopyWebpackPlugin', () => {