From ab4bfc3cce6a6364d94cdc7172556ab4f4ee699b Mon Sep 17 00:00:00 2001
From: shmck <shawn.j.mckay@gmail.com>
Date: Sat, 26 Oct 2019 11:38:45 -0700
Subject: [PATCH 1/8] update web deps

---
 web-app/package-lock.json | 666 ++++++++++++++++++++------------------
 web-app/package.json      |  30 +-
 2 files changed, 363 insertions(+), 333 deletions(-)

diff --git a/web-app/package-lock.json b/web-app/package-lock.json
index 198e070f..00ce0652 100644
--- a/web-app/package-lock.json
+++ b/web-app/package-lock.json
@@ -4,11 +4,22 @@
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
+    "@alifd/field": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/@alifd/field/-/field-1.3.2.tgz",
+      "integrity": "sha512-2ygsZMXZKwhyBdpKGkOO2Pay1TBHovaHF77QFHlARpqJs2HNzv1wYVmYuIawAIiOIFaZwGuiGhwVyOwAcC1Hyw==",
+      "requires": {
+        "@alifd/validate": "^1.1.3",
+        "prop-types": "^15.5.8"
+      }
+    },
     "@alifd/next": {
-      "version": "1.17.12",
-      "resolved": "https://registry.npmjs.org/@alifd/next/-/next-1.17.12.tgz",
-      "integrity": "sha512-fDyj0OS6bpXhDnVkZbEI9jyokPybPnxhGXl+9+djriLcfkFPpKIBv8GWWXo0AAYpiY0+1b603ZyBzdDWjMC+cg==",
+      "version": "1.18.8",
+      "resolved": "https://registry.npmjs.org/@alifd/next/-/next-1.18.8.tgz",
+      "integrity": "sha512-HgQbo/OGYLF8yDKj3gAscfxWghnWxWedWEq5FyQVBQKY3OIkrwMmwyzQ+/h3ocQ41TREC2v3r2wyLwNP5bIqfw==",
       "requires": {
+        "@alifd/field": "^1.3.0",
+        "@alifd/validate": "^1.1.3",
         "babel-runtime": "^6.26.0",
         "classnames": "^2.2.3",
         "hoist-non-react-statics": "^2.1.0",
@@ -18,21 +29,26 @@
         "shallow-element-equals": "^1.0.1"
       }
     },
+    "@alifd/validate": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/@alifd/validate/-/validate-1.1.4.tgz",
+      "integrity": "sha512-LR7SFgPCf1ZE2U+3LGLVoIGwDiwM6sJp7mgFG82G7YysvlSeBHkoMFHdx3hKjN3PzKPy4vcors2gnfk3bOoU1Q=="
+    },
     "@apollo/react-common": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/@apollo/react-common/-/react-common-3.1.2.tgz",
-      "integrity": "sha512-6+gTeBZoIyCE6VnHD2EI9Wz+Dm05MBxplUTmVgswzvTe05lUO78SxGgB3XJc9GM/TmNexgCc0eS84vUpG/f6Tg==",
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/@apollo/react-common/-/react-common-3.1.3.tgz",
+      "integrity": "sha512-Q7ZjDOeqjJf/AOGxUMdGxKF+JVClRXrYBGVq+SuVFqANRpd68MxtVV2OjCWavsFAN0eqYnRqRUrl7vtUCiJqeg==",
       "requires": {
         "ts-invariant": "^0.4.4",
         "tslib": "^1.10.0"
       }
     },
     "@apollo/react-hooks": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/@apollo/react-hooks/-/react-hooks-3.1.2.tgz",
-      "integrity": "sha512-PV5u40E9iwfwM7u61r2P9PTjcGaM3zRwiwrJGDKOKaOn1Y9wTHhKOVEQa7YOsCWciSaMVK1slpKMvQbD2Ypqtw==",
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/@apollo/react-hooks/-/react-hooks-3.1.3.tgz",
+      "integrity": "sha512-reIRO9xKdfi+B4gT/o/hnXuopUnm7WED/ru8VQydPw+C/KG/05Ssg1ZdxFKHa3oxwiTUIDnevtccIH35POanbA==",
       "requires": {
-        "@apollo/react-common": "^3.1.2",
+        "@apollo/react-common": "^3.1.3",
         "@wry/equality": "^0.1.9",
         "ts-invariant": "^0.4.4",
         "tslib": "^1.10.0"
@@ -1061,28 +1077,28 @@
       }
     },
     "@emotion/core": {
-      "version": "10.0.21",
-      "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.21.tgz",
-      "integrity": "sha512-U9zbc7ovZ2ceIwbLXYZPJy6wPgnOdTNT4jENZ31ee6v2lojetV5bTbCVk6ciT8G3wQRyVaTTfUCH9WCrMzpRIw==",
+      "version": "10.0.22",
+      "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.22.tgz",
+      "integrity": "sha512-7eoP6KQVUyOjAkE6y4fdlxbZRA4ILs7dqkkm6oZUJmihtHv0UBq98VgPirq9T8F9K2gKu0J/au/TpKryKMinaA==",
       "dev": true,
       "requires": {
         "@babel/runtime": "^7.5.5",
         "@emotion/cache": "^10.0.17",
-        "@emotion/css": "^10.0.14",
-        "@emotion/serialize": "^0.11.10",
+        "@emotion/css": "^10.0.22",
+        "@emotion/serialize": "^0.11.12",
         "@emotion/sheet": "0.9.3",
         "@emotion/utils": "0.11.2"
       }
     },
     "@emotion/css": {
-      "version": "10.0.14",
-      "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.14.tgz",
-      "integrity": "sha512-MozgPkBEWvorcdpqHZE5x1D/PLEHUitALQCQYt2wayf4UNhpgQs2tN0UwHYS4FMy5ROBH+0ALyCFVYJ/ywmwlg==",
+      "version": "10.0.22",
+      "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.22.tgz",
+      "integrity": "sha512-8phfa5mC/OadBTmGpMpwykIVH0gFCbUoO684LUkyixPq4F1Wwri7fK5Xlm8lURNBrd2TuvTbPUGxFsGxF9UacA==",
       "dev": true,
       "requires": {
-        "@emotion/serialize": "^0.11.8",
+        "@emotion/serialize": "^0.11.12",
         "@emotion/utils": "0.11.2",
-        "babel-plugin-emotion": "^10.0.14"
+        "babel-plugin-emotion": "^10.0.22"
       }
     },
     "@emotion/hash": {
@@ -1107,9 +1123,9 @@
       "dev": true
     },
     "@emotion/serialize": {
-      "version": "0.11.11",
-      "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.11.tgz",
-      "integrity": "sha512-YG8wdCqoWtuoMxhHZCTA+egL0RSGdHEc+YCsmiSBPBEDNuVeMWtjEWtGrhUterSChxzwnWBXvzSxIFQI/3sHLw==",
+      "version": "0.11.13",
+      "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.13.tgz",
+      "integrity": "sha512-Tw+z6oIFCXeznoH25TozFoOUJ9BIyKBgZ9Gif3ej9aqPeP/Dzct8WIXSsz08xxyt1RPlKokvJ3fzMDq0UjL3RQ==",
       "dev": true,
       "requires": {
         "@emotion/hash": "0.7.3",
@@ -1126,24 +1142,24 @@
       "dev": true
     },
     "@emotion/styled": {
-      "version": "10.0.17",
-      "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.17.tgz",
-      "integrity": "sha512-zHMgWjHDMNjD+ux64POtDnjLAObniu3znxFBLSdV/RiEhSLjHIowfvSbbd/C33/3uwtI6Uzs2KXnRZtka/PpAQ==",
+      "version": "10.0.22",
+      "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.22.tgz",
+      "integrity": "sha512-3+dnBk8NjXnddI8Gi2VJLMmup0bCG8HQkZLaeNky+GSLl8VyxQfuaK5I5aDVvgQ3UzkxrcZrFB3vHYU/iUakBA==",
       "dev": true,
       "requires": {
-        "@emotion/styled-base": "^10.0.17",
-        "babel-plugin-emotion": "^10.0.17"
+        "@emotion/styled-base": "^10.0.22",
+        "babel-plugin-emotion": "^10.0.22"
       }
     },
     "@emotion/styled-base": {
-      "version": "10.0.19",
-      "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.19.tgz",
-      "integrity": "sha512-Sz6GBHTbOZoeZQKvkE9gQPzaJ6/qtoQ/OPvyG2Z/6NILlYk60Es1cEcTgTkm26H8y7A0GSgp4UmXl+srvsnFPg==",
+      "version": "10.0.22",
+      "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.22.tgz",
+      "integrity": "sha512-ikSuAcz86BcmlZM5EysqCH0EUssYm5ardrWNVM3Ri5ODpOlKPrT//jVozJU2uK3q5GRcqZHLqagP/nd9beNUfQ==",
       "dev": true,
       "requires": {
         "@babel/runtime": "^7.5.5",
         "@emotion/is-prop-valid": "0.8.3",
-        "@emotion/serialize": "^0.11.11",
+        "@emotion/serialize": "^0.11.12",
         "@emotion/utils": "0.11.2"
       }
     },
@@ -1487,17 +1503,17 @@
       }
     },
     "@storybook/addon-actions": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-5.2.3.tgz",
-      "integrity": "sha512-7/Ax5QX2HHuIYS/TwgysEtJhvsfNekc0ofzVQRSlowU+Io5u/wMaD+/FEn43Cx8MXzWxPs+x/KNZ5cWRXx2vjg==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-5.2.5.tgz",
+      "integrity": "sha512-81N+M1GX4XB7Mirhhu3kiZJkjspfk2e1ysoJtwULjWeZfo2CLYLUAil4onr08Os2LH4RLJaj2hpS3hLflBio4g==",
       "dev": true,
       "requires": {
-        "@storybook/addons": "5.2.3",
-        "@storybook/api": "5.2.3",
-        "@storybook/client-api": "5.2.3",
-        "@storybook/components": "5.2.3",
-        "@storybook/core-events": "5.2.3",
-        "@storybook/theming": "5.2.3",
+        "@storybook/addons": "5.2.5",
+        "@storybook/api": "5.2.5",
+        "@storybook/client-api": "5.2.5",
+        "@storybook/components": "5.2.5",
+        "@storybook/core-events": "5.2.5",
+        "@storybook/theming": "5.2.5",
         "core-js": "^3.0.1",
         "fast-deep-equal": "^2.0.1",
         "global": "^4.3.2",
@@ -1509,32 +1525,32 @@
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         }
       }
     },
     "@storybook/addon-knobs": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-5.2.3.tgz",
-      "integrity": "sha512-dOFvN3M7rNAHAnlYmOHr2fHKwgAgR5JjCrlMrOxtRG4Qnz7Zprha6T2o9TIVjlAggTM1MpMcFe7db9/OCnbIwg==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-5.2.5.tgz",
+      "integrity": "sha512-jr8HvtGciYaJqWgsl8CVYemcvC0Apw9YaLCV/ez8wmB4im94lmotE4llE+ZgpyIn6U6ikUYjQEeNzUMvEn25Xg==",
       "dev": true,
       "requires": {
-        "@storybook/addons": "5.2.3",
-        "@storybook/api": "5.2.3",
-        "@storybook/client-api": "5.2.3",
-        "@storybook/components": "5.2.3",
-        "@storybook/core-events": "5.2.3",
-        "@storybook/theming": "5.2.3",
+        "@storybook/addons": "5.2.5",
+        "@storybook/api": "5.2.5",
+        "@storybook/client-api": "5.2.5",
+        "@storybook/components": "5.2.5",
+        "@storybook/core-events": "5.2.5",
+        "@storybook/theming": "5.2.5",
         "@types/react-color": "^3.0.1",
         "copy-to-clipboard": "^3.0.8",
         "core-js": "^3.0.1",
         "escape-html": "^1.0.3",
         "fast-deep-equal": "^2.0.1",
         "global": "^4.3.2",
-        "lodash": "^4.17.11",
+        "lodash": "^4.17.15",
         "prop-types": "^15.7.2",
         "qs": "^6.6.0",
         "react-color": "^2.17.0",
@@ -1543,22 +1559,22 @@
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         }
       }
     },
     "@storybook/addon-links": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-5.2.3.tgz",
-      "integrity": "sha512-HuMG2WPldOjF4LvMrwzllpNjLwgwzXeMviTs82ijtRDrNUWHtyfxNaI53MTilpQwdosExPyHvtpWBeiHbrsATg==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-5.2.5.tgz",
+      "integrity": "sha512-QuXOcZlDSRWEIwmHJZ9uAsjtNysVUsofX5yABX+x5Nkm4BCqT1NyAuu8Xq9IlyLF1ngiOF61dy530p4lcntmHA==",
       "dev": true,
       "requires": {
-        "@storybook/addons": "5.2.3",
-        "@storybook/core-events": "5.2.3",
-        "@storybook/router": "5.2.3",
+        "@storybook/addons": "5.2.5",
+        "@storybook/core-events": "5.2.5",
+        "@storybook/router": "5.2.5",
         "common-tags": "^1.8.0",
         "core-js": "^3.0.1",
         "global": "^4.3.2",
@@ -1567,51 +1583,51 @@
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         }
       }
     },
     "@storybook/addons": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-5.2.3.tgz",
-      "integrity": "sha512-LTkUJB8ZDc4++yt9acNHNjlnGWCyNtP+NVYPDvg7zFOaMip21Pj4T0pg9UwYxdqrFBWz9tVz7DJeXroS3egXxg==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-5.2.5.tgz",
+      "integrity": "sha512-CvMj7Bs3go9tv5rZuAvFwuwe8p/16LDCHS7+5nVFosvcL8nuN339V3rzakw8nLy/S6XKeZ1ACu4t3vYkreRE3w==",
       "dev": true,
       "requires": {
-        "@storybook/api": "5.2.3",
-        "@storybook/channels": "5.2.3",
-        "@storybook/client-logger": "5.2.3",
-        "@storybook/core-events": "5.2.3",
+        "@storybook/api": "5.2.5",
+        "@storybook/channels": "5.2.5",
+        "@storybook/client-logger": "5.2.5",
+        "@storybook/core-events": "5.2.5",
         "core-js": "^3.0.1",
         "global": "^4.3.2",
         "util-deprecate": "^1.0.2"
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         }
       }
     },
     "@storybook/api": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/api/-/api-5.2.3.tgz",
-      "integrity": "sha512-2csxa/d64rXy4Dwoc7YjbPeNUJRgcI/wJUo30CLujk2stEFzDnKeMPR1mlHMCIFDW+KDxJ28bW59VPxwrqJFjw==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/api/-/api-5.2.5.tgz",
+      "integrity": "sha512-JvLafqFVgA3dIWpLMoGNk4sRuogE5imhD6/g0d8DOwnCID9xowj5xIptSrCTKvGGGxuN3wWRGn6I2lEbY6969g==",
       "dev": true,
       "requires": {
-        "@storybook/channels": "5.2.3",
-        "@storybook/client-logger": "5.2.3",
-        "@storybook/core-events": "5.2.3",
-        "@storybook/router": "5.2.3",
-        "@storybook/theming": "5.2.3",
+        "@storybook/channels": "5.2.5",
+        "@storybook/client-logger": "5.2.5",
+        "@storybook/core-events": "5.2.5",
+        "@storybook/router": "5.2.5",
+        "@storybook/theming": "5.2.5",
         "core-js": "^3.0.1",
         "fast-deep-equal": "^2.0.1",
         "global": "^4.3.2",
-        "lodash": "^4.17.11",
+        "lodash": "^4.17.15",
         "memoizerific": "^1.11.3",
         "prop-types": "^15.6.2",
         "react": "^16.8.3",
@@ -1623,9 +1639,9 @@
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         },
         "semver": {
@@ -1637,100 +1653,101 @@
       }
     },
     "@storybook/channel-postmessage": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-5.2.3.tgz",
-      "integrity": "sha512-ixlpr6aAYoRM72cKwEWU/W0rWzOn3mYqb/eUdIaz3Da5BtFGKm3yEFguII0l1my82uhMm5/d3UNfoh0rO3pUyg==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-5.2.5.tgz",
+      "integrity": "sha512-GoiC6dUM3YfNKpvj3syxQIQJLHBnH61CfLJzz4xygmn+3keHtjtz6yPHaU4+00MSSP2uDzqePkjgXx4DcLedHA==",
       "dev": true,
       "requires": {
-        "@storybook/channels": "5.2.3",
-        "@storybook/client-logger": "5.2.3",
+        "@storybook/channels": "5.2.5",
+        "@storybook/client-logger": "5.2.5",
         "core-js": "^3.0.1",
         "global": "^4.3.2",
         "telejson": "^3.0.2"
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         }
       }
     },
     "@storybook/channels": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-5.2.3.tgz",
-      "integrity": "sha512-13Mlb+XbE0mHXiLLHdg0w9byhRy/bE605U7U96PGQp2cwX4lf+4jpViO2mDCsndAFRc0+2hexXPTkwgzvZzq0A==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-5.2.5.tgz",
+      "integrity": "sha512-I+zB3ym5ozBcNBqyzZbvB6gRIG/ZKKkqy5k6LwKd5NMx7NU7zU74+LQUBBOcSIrigj8kCArZz7rlgb0tlSKXxQ==",
       "dev": true,
       "requires": {
         "core-js": "^3.0.1"
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         }
       }
     },
     "@storybook/client-api": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-5.2.3.tgz",
-      "integrity": "sha512-anXxcf2z+KQAk94xxdbeG1N6nTEWXj087XHQ22L3pOoX9TRzfG71UjL0/S7vj4EFUiXVHj8d6YUFwLb5LwpUIw==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-5.2.5.tgz",
+      "integrity": "sha512-n7CAZ3+DZ7EUdmXbq8mXRb+stOavC8GMw3CzjGSo8O6t4rFcMpZQAzjS0YRX1RG/CGFSv9d3R3TNvEBcBGTwRg==",
       "dev": true,
       "requires": {
-        "@storybook/addons": "5.2.3",
-        "@storybook/channel-postmessage": "5.2.3",
-        "@storybook/channels": "5.2.3",
-        "@storybook/client-logger": "5.2.3",
-        "@storybook/core-events": "5.2.3",
-        "@storybook/router": "5.2.3",
+        "@storybook/addons": "5.2.5",
+        "@storybook/channel-postmessage": "5.2.5",
+        "@storybook/channels": "5.2.5",
+        "@storybook/client-logger": "5.2.5",
+        "@storybook/core-events": "5.2.5",
+        "@storybook/router": "5.2.5",
         "common-tags": "^1.8.0",
         "core-js": "^3.0.1",
         "eventemitter3": "^4.0.0",
         "global": "^4.3.2",
         "is-plain-object": "^3.0.0",
-        "lodash": "^4.17.11",
+        "lodash": "^4.17.15",
         "memoizerific": "^1.11.3",
         "qs": "^6.6.0",
         "util-deprecate": "^1.0.2"
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         }
       }
     },
     "@storybook/client-logger": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.2.3.tgz",
-      "integrity": "sha512-Z1irXW4jiFs7rClgqJqYOgg5op51ynV6dVuoIqxkSC0MrOG5s/VbX7T+ojGPXKyQWD4XYGw66Hnw9jouSfXL9g==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-5.2.5.tgz",
+      "integrity": "sha512-6DyYUrMgAvF+th0foH7UNz+2JJpRdvNbpvYKtvi/+hlvRIaI6AqANgLkPUgMibaif5TLzjCr0bLdAYcjeJz03w==",
       "dev": true,
       "requires": {
         "core-js": "^3.0.1"
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         }
       }
     },
     "@storybook/components": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/components/-/components-5.2.3.tgz",
-      "integrity": "sha512-EiWKa3xONP2BPxrssiRdvKELhF2tO14HVL131CCFY+Zg/ylExzWWWVSBun7vYcKhkI52K5lmvC1vFSsB6Gmlhw==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/components/-/components-5.2.5.tgz",
+      "integrity": "sha512-6NVaBJm5wY53e9k+2ZiL2ABsHghE1ssQciLTG3jJPahnM6rfkM8ue66rhxhP88jE9isT48JgOZOJepEyxDz/fg==",
       "dev": true,
       "requires": {
-        "@storybook/client-logger": "5.2.3",
-        "@storybook/theming": "5.2.3",
+        "@storybook/client-logger": "5.2.5",
+        "@storybook/theming": "5.2.5",
         "@types/react-syntax-highlighter": "10.1.0",
+        "@types/react-textarea-autosize": "^4.3.3",
         "core-js": "^3.0.1",
         "global": "^4.3.2",
         "markdown-to-jsx": "^6.9.1",
@@ -1749,17 +1766,17 @@
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         }
       }
     },
     "@storybook/core": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/core/-/core-5.2.3.tgz",
-      "integrity": "sha512-sktjYY8pH4kQGFRKjXwtwwShdG3ajjHkrnw8oh3R383MRPom7i9owx5yHHMuQedLCXIwAg84s2DzO01I2URTcg==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/core/-/core-5.2.5.tgz",
+      "integrity": "sha512-R6A6VzSh++pB1a+9DsywW5Mlp0/eauQz1A8m2DrllWcTHTjbn0ZovlG5HBrKjpknFXpCWxkUKE4eTAE2tWsryA==",
       "dev": true,
       "requires": {
         "@babel/plugin-proposal-class-properties": "^7.3.3",
@@ -1767,15 +1784,15 @@
         "@babel/plugin-syntax-dynamic-import": "^7.2.0",
         "@babel/plugin-transform-react-constant-elements": "^7.2.0",
         "@babel/preset-env": "^7.4.5",
-        "@storybook/addons": "5.2.3",
-        "@storybook/channel-postmessage": "5.2.3",
-        "@storybook/client-api": "5.2.3",
-        "@storybook/client-logger": "5.2.3",
-        "@storybook/core-events": "5.2.3",
-        "@storybook/node-logger": "5.2.3",
-        "@storybook/router": "5.2.3",
-        "@storybook/theming": "5.2.3",
-        "@storybook/ui": "5.2.3",
+        "@storybook/addons": "5.2.5",
+        "@storybook/channel-postmessage": "5.2.5",
+        "@storybook/client-api": "5.2.5",
+        "@storybook/client-logger": "5.2.5",
+        "@storybook/core-events": "5.2.5",
+        "@storybook/node-logger": "5.2.5",
+        "@storybook/router": "5.2.5",
+        "@storybook/theming": "5.2.5",
+        "@storybook/ui": "5.2.5",
         "airbnb-js-shims": "^1 || ^2",
         "ansi-to-html": "^0.6.11",
         "autoprefixer": "^9.4.9",
@@ -1833,9 +1850,9 @@
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         },
         "node-fetch": {
@@ -1859,26 +1876,26 @@
       }
     },
     "@storybook/core-events": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-5.2.3.tgz",
-      "integrity": "sha512-sZEv93yE1o+/UJdhtqQ6vo2EauZ90FjN/L8F7CR7iqDEZzqo9g77Idg9LSgcN3TAeXcGAWVSrPb1vkK7H96L2g==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-5.2.5.tgz",
+      "integrity": "sha512-O5GM8XEBbYNbM6Z7a4H1bbnbO2cxQrXMhEwansC7a7YinQdkTPiuGxke3NiyK+7pLDh778kpQyjoCjXq6UfAoQ==",
       "dev": true,
       "requires": {
         "core-js": "^3.0.1"
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         }
       }
     },
     "@storybook/node-logger": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-5.2.3.tgz",
-      "integrity": "sha512-5p+5ltLdr7cZTSCG+vdIMDLHq5AAaL/CQ/bygjl+Rw/RSpvBO5Rg8hryszFyhogToHJbn2JinUbypLA+P6tcuQ==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-5.2.5.tgz",
+      "integrity": "sha512-UNyXGOhOr4Bn9wKwBTZABTBXQzrgvGxPLSmvAFZuMx9ZhqoT/EXAuLUl0/wiJtkyuYpoOOskNwIdKxLBdTKS2w==",
       "dev": true,
       "requires": {
         "chalk": "^2.4.2",
@@ -1889,9 +1906,9 @@
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         },
         "regenerator-runtime": {
@@ -1903,17 +1920,17 @@
       }
     },
     "@storybook/react": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/react/-/react-5.2.3.tgz",
-      "integrity": "sha512-7DLUkpwyPTyDHoih/AvFr2QXQAxzXQMVDvvR5r0J0oiffLWwrqshl1TL4b16YoFvel0ZPtUdrcei6knLXhg+Wg==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/react/-/react-5.2.5.tgz",
+      "integrity": "sha512-yPOL0jBEfYo3YkRJkXnIzAQ3L9lTju27mg+0bW+y3lpJAM23ffAxrRyOGV7bzj99EA7dak2lw8Hj4yVHTplBdg==",
       "dev": true,
       "requires": {
         "@babel/plugin-transform-react-constant-elements": "^7.2.0",
         "@babel/preset-flow": "^7.0.0",
         "@babel/preset-react": "^7.0.0",
-        "@storybook/addons": "5.2.3",
-        "@storybook/core": "5.2.3",
-        "@storybook/node-logger": "5.2.3",
+        "@storybook/addons": "5.2.5",
+        "@storybook/core": "5.2.5",
+        "@storybook/node-logger": "5.2.5",
         "@svgr/webpack": "^4.0.3",
         "@types/webpack-env": "^1.13.7",
         "babel-plugin-add-react-displayname": "^0.0.5",
@@ -1923,7 +1940,7 @@
         "common-tags": "^1.8.0",
         "core-js": "^3.0.1",
         "global": "^4.3.2",
-        "lodash": "^4.17.11",
+        "lodash": "^4.17.15",
         "mini-css-extract-plugin": "^0.7.0",
         "prop-types": "^15.7.2",
         "react-dev-utils": "^9.0.0",
@@ -1933,9 +1950,9 @@
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         },
         "regenerator-runtime": {
@@ -1953,37 +1970,37 @@
       }
     },
     "@storybook/router": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/router/-/router-5.2.3.tgz",
-      "integrity": "sha512-sOu6y2GySaY82SdXfF3yOn0IJTKMqd2BDOSGEno7PWWtSenHFQWY+z99C9k0dLBTkjRes5tPcgm0OJ7RdQVRDQ==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/router/-/router-5.2.5.tgz",
+      "integrity": "sha512-e6ElDAWSoEW1KSnsTbVwbpzaZ8CNWYw0Ok3b5AHfY2fuSH5L4l6s6k/bP7QSYqvWUeTvkFQYux7A2rOFCriAgA==",
       "dev": true,
       "requires": {
         "@reach/router": "^1.2.1",
         "@types/reach__router": "^1.2.3",
         "core-js": "^3.0.1",
         "global": "^4.3.2",
-        "lodash": "^4.17.11",
+        "lodash": "^4.17.15",
         "memoizerific": "^1.11.3",
         "qs": "^6.6.0"
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         }
       }
     },
     "@storybook/theming": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.2.3.tgz",
-      "integrity": "sha512-3/0bo8CaoaHDYZaexydpYcwP6WW8BKRqSQBGXJY9y0TLhwY2Who5nPX9XdOLyu9d7lN//PRZlt8JnZynuncxoQ==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-5.2.5.tgz",
+      "integrity": "sha512-PGZNYrRgAhXFJKnktFpyyKlaDXEhtTi5XPq5ASVJrsPW6l963Mk2EMKSm4TCTxIJhs0Kx4cv2MnNZFDqHf47eg==",
       "dev": true,
       "requires": {
         "@emotion/core": "^10.0.14",
         "@emotion/styled": "^10.0.14",
-        "@storybook/client-logger": "5.2.3",
+        "@storybook/client-logger": "5.2.5",
         "common-tags": "^1.8.0",
         "core-js": "^3.0.1",
         "deep-object-diff": "^1.1.0",
@@ -1996,27 +2013,27 @@
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         }
       }
     },
     "@storybook/ui": {
-      "version": "5.2.3",
-      "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-5.2.3.tgz",
-      "integrity": "sha512-SNyo5oxupb105N4Rz8O5/iJMs/THrmdvP+vsN7CpOTxebM01rHyvk51cNUwHKG1QwlZmpXL8GbtWlbvqL2d/gQ==",
-      "dev": true,
-      "requires": {
-        "@storybook/addons": "5.2.3",
-        "@storybook/api": "5.2.3",
-        "@storybook/channels": "5.2.3",
-        "@storybook/client-logger": "5.2.3",
-        "@storybook/components": "5.2.3",
-        "@storybook/core-events": "5.2.3",
-        "@storybook/router": "5.2.3",
-        "@storybook/theming": "5.2.3",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-5.2.5.tgz",
+      "integrity": "sha512-C+5KmeTtdG6xkGXPmFDHPxTcSvVohuFD1399fnzjYhfLlRJ04ix3g16rcyDTxRtrFgFidOyGHdzCypgkdaN8dQ==",
+      "dev": true,
+      "requires": {
+        "@storybook/addons": "5.2.5",
+        "@storybook/api": "5.2.5",
+        "@storybook/channels": "5.2.5",
+        "@storybook/client-logger": "5.2.5",
+        "@storybook/components": "5.2.5",
+        "@storybook/core-events": "5.2.5",
+        "@storybook/router": "5.2.5",
+        "@storybook/theming": "5.2.5",
         "copy-to-clipboard": "^3.0.8",
         "core-js": "^3.0.1",
         "core-js-pure": "^3.0.1",
@@ -2024,7 +2041,7 @@
         "fast-deep-equal": "^2.0.1",
         "fuse.js": "^3.4.4",
         "global": "^4.3.2",
-        "lodash": "^4.17.11",
+        "lodash": "^4.17.15",
         "markdown-to-jsx": "^6.9.3",
         "memoizerific": "^1.11.3",
         "polished": "^3.3.1",
@@ -2045,9 +2062,9 @@
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         },
         "regenerator-runtime": {
@@ -2278,9 +2295,9 @@
       }
     },
     "@types/jest": {
-      "version": "24.0.18",
-      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.18.tgz",
-      "integrity": "sha512-jcDDXdjTcrQzdN06+TSVsPPqxvsZA/5QkYfIZlq1JMw7FdP5AZylbOc+6B/cuDurctRe+MziUMtQ3xQdrbjqyQ==",
+      "version": "24.0.20",
+      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.20.tgz",
+      "integrity": "sha512-M8ebEkOpykGdLoRrmew7UowTZ1DANeeP0HiSIChl/4DGgmnSC1ntitNtkyNSXjMTsZvXuaxJrxjImEnRWNPsPw==",
       "dev": true,
       "requires": {
         "@types/jest-diff": "*"
@@ -2314,9 +2331,9 @@
       }
     },
     "@types/node": {
-      "version": "12.7.12",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.12.tgz",
-      "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ=="
+      "version": "12.11.7",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.11.7.tgz",
+      "integrity": "sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA=="
     },
     "@types/prop-types": {
       "version": "15.7.3",
@@ -2331,9 +2348,9 @@
       "dev": true
     },
     "@types/ramda": {
-      "version": "0.26.29",
-      "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.26.29.tgz",
-      "integrity": "sha512-j0rrDm19024J0X5wHl8ZK0mQas9TVvL7KQPocDEZU0nq/OUtmh0mBBBrfSIKGJZF1VLhtW6MGw+YRojUSY+5kg==",
+      "version": "0.26.33",
+      "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.26.33.tgz",
+      "integrity": "sha512-sUCQmKfAWmlbb6PpFqvndbGgTf0bCcmHLJqMYw8ErVS0UoZTTiz952aFedJhV+JERiVH7poh33358c7p0AAN8A==",
       "dev": true,
       "requires": {
         "ts-toolbelt": "^4.7.7"
@@ -2350,9 +2367,9 @@
       }
     },
     "@types/react": {
-      "version": "16.9.5",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.5.tgz",
-      "integrity": "sha512-jQ12VMiFOWYlp+j66dghOWcmDDwhca0bnlcTxS4Qz/fh5gi6wpaZDthPEu/Gc/YlAuO87vbiUXL8qKstFvuOaA==",
+      "version": "16.9.11",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.11.tgz",
+      "integrity": "sha512-UBT4GZ3PokTXSWmdgC/GeCGEJXE5ofWyibCcecRLUVN2ZBpXQGVgQGtG2foS7CrTKFKlQVVswLvf7Js6XA/CVQ==",
       "dev": true,
       "requires": {
         "@types/prop-types": "*",
@@ -2369,9 +2386,9 @@
       }
     },
     "@types/react-dom": {
-      "version": "16.9.1",
-      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.1.tgz",
-      "integrity": "sha512-1S/akvkKr63qIUWVu5IKYou2P9fHLb/P2VAwyxVV85JGaGZTcUniMiTuIqM3lXFB25ej6h+CYEQ27ERVwi6eGA==",
+      "version": "16.9.3",
+      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.3.tgz",
+      "integrity": "sha512-FUuZKXPr9qlzUT9lhuzrZgLjH63TvNn28Ch3MvKG4B+F52zQtO8DtE0Opbncy3xaucNZM2WIPfuNTgkbKx5Brg==",
       "dev": true,
       "requires": {
         "@types/react": "*"
@@ -2386,6 +2403,15 @@
         "@types/react": "*"
       }
     },
+    "@types/react-textarea-autosize": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/@types/react-textarea-autosize/-/react-textarea-autosize-4.3.4.tgz",
+      "integrity": "sha512-LLqG27BJGt8ja9x4umQXbnK9pRd0dI23X/GXBcuf476feOZ+e5QiKJYmWOHwAJC3YLl3YixDSigzfF4gzVQZ5w==",
+      "dev": true,
+      "requires": {
+        "@types/react": "*"
+      }
+    },
     "@types/stack-utils": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
@@ -2940,12 +2966,12 @@
       }
     },
     "ansi-to-html": {
-      "version": "0.6.11",
-      "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.11.tgz",
-      "integrity": "sha512-88XZtrcwrfkyn6fGstHnkaF1kl7hGtNCYh4vSmItgEV+6JnQHryDBf7udF4f2RhTRQmYvJvPcTtqgaqrxzc9oA==",
+      "version": "0.6.12",
+      "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.12.tgz",
+      "integrity": "sha512-qBkIqLW979675mP76yB7yVkzeAWtATegdnDQ0RA3CZzknx0yUlNxMSML4xFdBfTs2GWYFQ1FELfbGbVSPzJ+LA==",
       "dev": true,
       "requires": {
-        "entities": "^1.1.1"
+        "entities": "^1.1.2"
       },
       "dependencies": {
         "entities": {
@@ -3206,9 +3232,9 @@
       },
       "dependencies": {
         "es-abstract": {
-          "version": "1.15.0",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz",
-          "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==",
+          "version": "1.16.0",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz",
+          "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==",
           "dev": true,
           "requires": {
             "es-to-primitive": "^1.2.0",
@@ -3237,9 +3263,9 @@
       },
       "dependencies": {
         "es-abstract": {
-          "version": "1.15.0",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz",
-          "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==",
+          "version": "1.16.0",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz",
+          "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==",
           "dev": true,
           "requires": {
             "es-to-primitive": "^1.2.0",
@@ -3593,15 +3619,15 @@
       }
     },
     "babel-plugin-emotion": {
-      "version": "10.0.21",
-      "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.21.tgz",
-      "integrity": "sha512-03o+T6sfVAJhNDcSdLapgv4IeewcFPzxlvBUVdSf7o5PI57ZSxoDvmy+ZulVWSu+rOWAWkEejNcsb29TuzJHbg==",
+      "version": "10.0.22",
+      "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.22.tgz",
+      "integrity": "sha512-e3Yo9+GD6ovrcZlt2Unjgfyy0gfdz0+8httltToWL+biFMhLPPT1PJlc0GHy9i+vtPSrTBNY2hawfPJnuG2L3g==",
       "dev": true,
       "requires": {
         "@babel/helper-module-imports": "^7.0.0",
         "@emotion/hash": "0.7.3",
         "@emotion/memoize": "0.7.3",
-        "@emotion/serialize": "^0.11.11",
+        "@emotion/serialize": "^0.11.12",
         "babel-plugin-macros": "^2.0.0",
         "babel-plugin-syntax-jsx": "^6.18.0",
         "convert-source-map": "^1.5.0",
@@ -3753,13 +3779,13 @@
       "dev": true
     },
     "babel-plugin-react-docgen": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-3.1.0.tgz",
-      "integrity": "sha512-W6xqZnZIWjZuE9IjP7XolxxgFGB5Y9GZk4cLPSWKa10MrT86q7bX4ke9jbrNhFVIRhbmzL8wE1Sn++mIWoJLbw==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-3.2.0.tgz",
+      "integrity": "sha512-MZ3fhnJ+/tUDhWFGgWsajuLct/dD1xoprmStqrBgtt9flFLPrKIOKOfqwjXjsn6/THs5QrG5rkcDFE3TMMZDjQ==",
       "dev": true,
       "requires": {
-        "lodash": "^4.17.11",
-        "react-docgen": "^4.1.0",
+        "lodash": "^4.17.15",
+        "react-docgen": "^4.1.1",
         "recast": "^0.14.7"
       }
     },
@@ -5116,9 +5142,9 @@
       }
     },
     "core-js-pure": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.2.1.tgz",
-      "integrity": "sha512-+qpvnYrsi/JDeQTArB7NnNc2VoMYLE1YSkziCDHgjexC2KH7OFiGhLUd3urxfyWmNjSwSW7NYXPWHMhuIJx9Ow==",
+      "version": "3.3.4",
+      "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.3.4.tgz",
+      "integrity": "sha512-hqxt6XpR4zIMNUY920oNyAtwaq4yg8IScmXumnfyRWF9+ur7wtjr/4eCdfTJzY64jmi8WRCwIqNBKzYeOKdvnw==",
       "dev": true
     },
     "core-util-is": {
@@ -5321,9 +5347,9 @@
       },
       "dependencies": {
         "schema-utils": {
-          "version": "2.4.1",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz",
-          "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==",
+          "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",
@@ -5513,9 +5539,9 @@
       }
     },
     "csstype": {
-      "version": "2.6.6",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.6.tgz",
-      "integrity": "sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg==",
+      "version": "2.6.7",
+      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.7.tgz",
+      "integrity": "sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ==",
       "dev": true
     },
     "currently-unhandled": {
@@ -7520,9 +7546,9 @@
       }
     },
     "focus-lock": {
-      "version": "0.6.5",
-      "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.6.5.tgz",
-      "integrity": "sha512-i/mVBOoa9o+tl+u9owOJUF8k8L85odZNIsctB+JAK2HFT8jckiBwmk+3uydlm6FN8czgnkIwQtBv6yyAbrzXjw==",
+      "version": "0.6.6",
+      "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.6.6.tgz",
+      "integrity": "sha512-Dx69IXGCq1qsUExWuG+5wkiMqVM/zGx/reXSJSLogECwp3x6KeNQZ+NAetgxEFpnC41rD8U3+jRCW68+LNzdtw==",
       "dev": true
     },
     "follow-redirects": {
@@ -8255,9 +8281,9 @@
       "dev": true
     },
     "functions-have-names": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.1.1.tgz",
-      "integrity": "sha512-U0kNHUoxwPNPWOJaMG7Z00d4a/qZVrFtzWJRaK8V9goaVOCXBSQSJpt3MYGNtkScKEBKovxLjnNdC9MlXwo5Pw==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.0.tgz",
+      "integrity": "sha512-zKXyzksTeaCSw5wIX79iCA40YAa6CJMJgNg9wdkU/ERBrIdPSimPICYiLp65lRbSBqtiHql/HZfS2DyI/AH6tQ==",
       "dev": true
     },
     "fuse.js": {
@@ -10753,15 +10779,15 @@
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         },
         "dotenv": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz",
-          "integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA==",
+          "version": "8.2.0",
+          "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
+          "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
           "dev": true
         }
       }
@@ -11712,9 +11738,9 @@
       }
     },
     "node-sass": {
-      "version": "4.12.0",
-      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz",
-      "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==",
+      "version": "4.13.0",
+      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.0.tgz",
+      "integrity": "sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA==",
       "dev": true,
       "requires": {
         "async-foreach": "^0.1.3",
@@ -11724,7 +11750,7 @@
         "get-stdin": "^4.0.1",
         "glob": "^7.0.3",
         "in-publish": "^2.0.0",
-        "lodash": "^4.17.11",
+        "lodash": "^4.17.15",
         "meow": "^3.7.0",
         "mkdirp": "^0.5.1",
         "nan": "^2.13.2",
@@ -12537,9 +12563,9 @@
       }
     },
     "popper.js": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz",
-      "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==",
+      "version": "1.16.0",
+      "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.0.tgz",
+      "integrity": "sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw==",
       "dev": true
     },
     "portfinder": {
@@ -13973,9 +13999,9 @@
       }
     },
     "react": {
-      "version": "16.10.2",
-      "resolved": "https://registry.npmjs.org/react/-/react-16.10.2.tgz",
-      "integrity": "sha512-MFVIq0DpIhrHFyqLU0S3+4dIcBhhOvBE8bJ/5kHPVOVaGdo0KuiQzpcjCPsf585WvhypqtrMILyoE2th6dT+Lw==",
+      "version": "16.11.0",
+      "resolved": "https://registry.npmjs.org/react/-/react-16.11.0.tgz",
+      "integrity": "sha512-M5Y8yITaLmU0ynd0r1Yvfq98Rmll6q8AxaEe88c8e7LxO8fZ2cNgmFt0aGAS9wzf1Ao32NKXtCl+/tVVtkxq6g==",
       "requires": {
         "loose-envify": "^1.1.0",
         "object-assign": "^4.1.1",
@@ -14222,20 +14248,20 @@
       }
     },
     "react-dom": {
-      "version": "16.10.2",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.10.2.tgz",
-      "integrity": "sha512-kWGDcH3ItJK4+6Pl9DZB16BXYAZyrYQItU4OMy0jAkv5aNqc+mAKb4TpFtAteI6TJZu+9ZlNhaeNQSVQDHJzkw==",
+      "version": "16.11.0",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.11.0.tgz",
+      "integrity": "sha512-nrRyIUE1e7j8PaXSPtyRKtz+2y9ubW/ghNgqKFHHAHaeP0fpF5uXR+sq8IMRHC+ZUxw7W9NyCDTBtwWxvkb0iA==",
       "requires": {
         "loose-envify": "^1.1.0",
         "object-assign": "^4.1.1",
         "prop-types": "^15.6.2",
-        "scheduler": "^0.16.2"
+        "scheduler": "^0.17.0"
       }
     },
     "react-draggable": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.0.3.tgz",
-      "integrity": "sha512-4vD6zms+9QGeZ2RQXzlUBw8PBYUXy+dzYX5r22idjp9YwQKIIvD/EojL0rbjS1GK4C3P0rAJnmKa8gDQYWUDyA==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.1.0.tgz",
+      "integrity": "sha512-Or/qe70cfymshqoC8Lsp0ukTzijJObehb7Vfl7tb5JRxoV+b6PDkOGoqYaWBzZ59k9dH/bwraLGsnlW78/3vrA==",
       "dev": true,
       "requires": {
         "classnames": "^2.2.5",
@@ -14267,33 +14293,16 @@
       }
     },
     "react-helmet-async": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.0.3.tgz",
-      "integrity": "sha512-hthnzAPasSX0ZU0adR1YW51xtMhwQuMwxtyjb/OeS2Gu2bzqFnCtt2h93nENE0+97NPeUS0+YHOriEMX8j/W0w==",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.0.4.tgz",
+      "integrity": "sha512-KTGHE9sz8N7+fCkZ2a3vzXH9eIkiTNhL2NhKR7XzzQl3WsGlCHh76arauJUIiGdfhjeMp7DY7PkASAmYFXeJYg==",
       "dev": true,
       "requires": {
-        "@babel/runtime": "7.3.4",
-        "invariant": "2.2.4",
-        "prop-types": "15.7.2",
-        "react-fast-compare": "2.0.4",
-        "shallowequal": "1.1.0"
-      },
-      "dependencies": {
-        "@babel/runtime": {
-          "version": "7.3.4",
-          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz",
-          "integrity": "sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==",
-          "dev": true,
-          "requires": {
-            "regenerator-runtime": "^0.12.0"
-          }
-        },
-        "regenerator-runtime": {
-          "version": "0.12.1",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
-          "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==",
-          "dev": true
-        }
+        "@babel/runtime": "^7.3.4",
+        "invariant": "^2.2.4",
+        "prop-types": "^15.7.2",
+        "react-fast-compare": "^2.0.4",
+        "shallowequal": "^1.1.0"
       }
     },
     "react-hotkeys": {
@@ -14371,9 +14380,9 @@
       }
     },
     "react-popper-tooltip": {
-      "version": "2.9.1",
-      "resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-2.9.1.tgz",
-      "integrity": "sha512-LSbvXLEQlNKWig2GMKQW/1bBwCkWIr9cpJ+WJpSGGGhX45CthRtwyilPPLJQkc3qI6UMTAXPp0Fe/pj9E77trg==",
+      "version": "2.10.0",
+      "resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-2.10.0.tgz",
+      "integrity": "sha512-iMNWaY41G7kcx2/kcV+37GLe4C93yI9CPZ9DH+V9tOtJIJwEzm/w9+mlr6G1QLzxefDxjliqymMXk9X73pyuWA==",
       "dev": true,
       "requires": {
         "@babel/runtime": "^7.6.3",
@@ -14919,9 +14928,9 @@
       }
     },
     "react-sizeme": {
-      "version": "2.6.8",
-      "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-2.6.8.tgz",
-      "integrity": "sha512-eJKHV226d/S3st2He7bLIlY7FAmi2ItvZmUCmLLNjIvYjtiv58BksuFhTBQmvAxWaXZGb3Ao/44wfAS1voRdjA==",
+      "version": "2.6.10",
+      "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-2.6.10.tgz",
+      "integrity": "sha512-OJAPQxSqbcpbsXFD+fr5ARw4hNSAOimWcaTOLcRkIqnTp9+IFWY0w3Qdw1sMez6Ao378aimVL/sW6TTsgigdOA==",
       "dev": true,
       "requires": {
         "element-resize-detector": "^1.1.15",
@@ -15727,9 +15736,9 @@
       }
     },
     "scheduler": {
-      "version": "0.16.2",
-      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.16.2.tgz",
-      "integrity": "sha512-BqYVWqwz6s1wZMhjFvLfVR5WXP7ZY32M/wYPo04CcuPM7XZEbV2TBNW7Z0UkguPTl0dWMA59VbNXxK6q+pHItg==",
+      "version": "0.17.0",
+      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz",
+      "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==",
       "requires": {
         "loose-envify": "^1.1.0",
         "object-assign": "^4.1.1"
@@ -16126,9 +16135,9 @@
       },
       "dependencies": {
         "core-js": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
-          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
+          "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==",
           "dev": true
         }
       }
@@ -16896,12 +16905,33 @@
       "dev": true
     },
     "symbol.prototype.description": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.0.tgz",
-      "integrity": "sha512-I9mrbZ5M96s7QeJDv95toF1svkUjeBybe8ydhY7foPaBmr0SPJMFupArmMkDrOKTTj0sJVr+nvQNxWLziQ7nDQ==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.1.tgz",
+      "integrity": "sha512-smeS1BCkN6lcz1XveFK+cfvfBmNJ6dcPi6lgOnLUU8Po8SmV+rtmYGObbNOisW9RHWMyUfsgMA+eTQg+b3v9Vg==",
       "dev": true,
       "requires": {
+        "es-abstract": "^1.16.0",
         "has-symbols": "^1.0.0"
+      },
+      "dependencies": {
+        "es-abstract": {
+          "version": "1.16.0",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz",
+          "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==",
+          "dev": true,
+          "requires": {
+            "es-to-primitive": "^1.2.0",
+            "function-bind": "^1.1.1",
+            "has": "^1.0.3",
+            "has-symbols": "^1.0.0",
+            "is-callable": "^1.1.4",
+            "is-regex": "^1.0.4",
+            "object-inspect": "^1.6.0",
+            "object-keys": "^1.1.1",
+            "string.prototype.trimleft": "^2.1.0",
+            "string.prototype.trimright": "^2.1.0"
+          }
+        }
       }
     },
     "table": {
@@ -16968,9 +16998,9 @@
       }
     },
     "telejson": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/telejson/-/telejson-3.0.3.tgz",
-      "integrity": "sha512-gUOh6wox1zJjbGMg+e26NquZcp/F18EbIaqVvjiGqikRqVB4fYEAM8Nyin8smgwX30XhaRBOg+kCj4vInmvwAg==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/telejson/-/telejson-3.1.0.tgz",
+      "integrity": "sha512-mhiVy+xp2atri1bzSzdy/gVGXlOhibaoZ092AUq5xhnrZGdzhF0fLaOduHJQghkro+qmjYMwhsOL9CkD2zTicg==",
       "dev": true,
       "requires": {
         "@types/is-function": "^1.0.0",
@@ -17331,9 +17361,9 @@
       "dev": true
     },
     "ts-toolbelt": {
-      "version": "4.8.13",
-      "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.13.tgz",
-      "integrity": "sha512-FbZ5Jie0f5pSnGJ3AYE5OcH9IZ/qooOQV/ZW2nOFDHTtllV1vKzWDkbCK/S8+H3AmHL7jwNPo+LhtKIvfQce6w==",
+      "version": "4.9.0",
+      "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.9.0.tgz",
+      "integrity": "sha512-DX/fLvu1FUSnLF2ttf/8iEh9wYNseHAA7vPMNt/5YKZfOgeTfTOeOkUapdU5CkoVBwYM9oIyGH8FZVfkp0WwgA==",
       "dev": true
     },
     "tslib": {
@@ -17862,9 +17892,9 @@
       "dev": true
     },
     "webpack": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.1.tgz",
-      "integrity": "sha512-ak7u4tUu/U63sCVxA571IuPZO/Q0pZ9cEXKg+R/woxkDzVovq57uB6L2Hlg/pC8LCU+TWpvtcYwsstivQwMJmw==",
+      "version": "4.41.2",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.2.tgz",
+      "integrity": "sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==",
       "dev": true,
       "requires": {
         "@webassemblyjs/ast": "1.8.5",
diff --git a/web-app/package.json b/web-app/package.json
index 7b823055..81ada2d9 100644
--- a/web-app/package.json
+++ b/web-app/package.json
@@ -26,8 +26,8 @@
     "extends": "react-app"
   },
   "dependencies": {
-    "@alifd/next": "^1.17.12",
-    "@apollo/react-hooks": "^3.1.2",
+    "@alifd/next": "^1.18.8",
+    "@apollo/react-hooks": "^3.1.3",
     "apollo-boost": "^0.4.4",
     "graphql": "^14.5.8",
     "markdown-it": "^10.0.0",
@@ -35,30 +35,30 @@
     "markdown-it-prism": "^2.0.3",
     "moment": "^2.24.0",
     "ramda": "^0.26.1",
-    "react": "^16.10.2",
-    "react-dom": "^16.10.2",
+    "react": "^16.11.0",
+    "react-dom": "^16.11.0",
     "reselect": "^4.0.0",
     "typescript": "^3.6.4",
     "xstate": "^4.6.7"
   },
   "devDependencies": {
     "@babel/core": "^7.5.4",
-    "@storybook/addon-actions": "^5.2.3",
-    "@storybook/addon-knobs": "^5.2.3",
-    "@storybook/addon-links": "^5.2.3",
-    "@storybook/addons": "^5.2.3",
-    "@storybook/react": "^5.2.3",
+    "@storybook/addon-actions": "^5.2.5",
+    "@storybook/addon-knobs": "^5.2.5",
+    "@storybook/addon-links": "^5.2.5",
+    "@storybook/addons": "^5.2.5",
+    "@storybook/react": "^5.2.5",
     "@types/highlight.js": "^9.12.3",
-    "@types/jest": "^24.0.18",
+    "@types/jest": "^24.0.20",
     "@types/markdown-it": "0.0.9",
-    "@types/node": "^12.7.12",
-    "@types/ramda": "^0.26.29",
-    "@types/react": "^16.9.5",
-    "@types/react-dom": "^16.9.1",
+    "@types/node": "^12.11.7",
+    "@types/ramda": "^0.26.33",
+    "@types/react": "^16.9.11",
+    "@types/react-dom": "^16.9.3",
     "@types/storybook__react": "^4.0.2",
     "babel-loader": "8.0.5",
     "babel-plugin-import": "^1.12.1",
-    "node-sass": "^4.12.0",
+    "node-sass": "^4.13.0",
     "react-scripts": "^3.2.0",
     "sass-loader": "^8.0.0",
     "typescript-eslint-parser": "^22.0.0"

From 0ba1e1cfd9736527db17f5e6b8c64e57c722772b Mon Sep 17 00:00:00 2001
From: shmck <shawn.j.mckay@gmail.com>
Date: Sat, 26 Oct 2019 11:38:51 -0700
Subject: [PATCH 2/8] update typings

---
 typings/graphql.d.ts | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/typings/graphql.d.ts b/typings/graphql.d.ts
index d7740bf5..fcbf0e3c 100644
--- a/typings/graphql.d.ts
+++ b/typings/graphql.d.ts
@@ -583,3 +583,11 @@ export interface IntrospectionResultData {
 		}[];
 	};
 }
+
+const result: IntrospectionResultData = {
+	"__schema": {
+		"types": []
+	}
+};
+
+export default result;

From 8b5ad04657d9fdf60a22a84bcbc7796a87d94011 Mon Sep 17 00:00:00 2001
From: shmck <shawn.j.mckay@gmail.com>
Date: Sat, 26 Oct 2019 11:39:00 -0700
Subject: [PATCH 3/8] re-endable storybook level

---
 web-app/stories/Level.stories.tsx | 121 +++++++++++++-----------------
 web-app/stories/Login.stories.tsx |  11 ---
 web-app/stories/Stage.stories.tsx |  53 -------------
 web-app/stories/Step.stories.tsx  |   7 +-
 4 files changed, 57 insertions(+), 135 deletions(-)
 delete mode 100644 web-app/stories/Login.stories.tsx
 delete mode 100644 web-app/stories/Stage.stories.tsx

diff --git a/web-app/stories/Level.stories.tsx b/web-app/stories/Level.stories.tsx
index 46b8f7c1..ebbdb88f 100644
--- a/web-app/stories/Level.stories.tsx
+++ b/web-app/stories/Level.stories.tsx
@@ -1,82 +1,67 @@
 import React from 'react'
+import * as G from '../../typings/graphql'
 
-import { object, withKnobs } from '@storybook/addon-knobs'
 import { action } from '@storybook/addon-actions'
-import { linkTo } from '@storybook/addon-links'
+import { object, withKnobs } from '@storybook/addon-knobs'
 import { storiesOf } from '@storybook/react'
 import SideBarDecorator from './utils/SideBarDecorator'
 
-import apolloProvider from './utils/ApolloDecorator'
-import Level from '../src/containers/Tutorial/LevelPage/Level'
-import LevelSummaryPageContainer, { LevelSummaryPage } from '../src/containers/Tutorial/LevelPage'
+import Level from '../src/containers/Tutorial/LevelPage/Level/index'
 
 storiesOf('Tutorial SideBar', module)
   .addDecorator(SideBarDecorator)
   .addDecorator(withKnobs)
-  .add('Level', () => (
-    <Level
-      level={object('level', {
-        id: '1',
-        title: 'Sum Level',
-        text: 'A description of this stage',
-        stages: [
-          {
-            id: '1',
-            title: 'First',
-            text: 'some description',
-            status: 'COMPLETED',
+  .add('Level', () => {
+    const level: G.Level = {
+      id: 'L1',
+      title: 'A Title',
+      description: 'Some description',
+      setup: null,
+      status: 'ACTIVE',
+      steps: [
+        {
+          id: 'L1:S1',
+          title: 'First Step',
+          description: 'First step description',
+          setup: {
+            id: 'L1:S1:SETUP',
+            commits: ['abcdefg'],
           },
-          {
-            id: '2',
-            title: 'Second',
-            text: 'The second one',
-            status: 'ACTIVE',
+          solution: {
+            id: 'L1:S1:SOLUTION',
+            commits: ['hijklmn'],
           },
-          {
-            id: '3',
-            title: 'Third',
-            text: 'The third one',
-            status: 'INCOMPLETE',
+          status: 'COMPLETE',
+        },
+        {
+          id: 'L1:S2',
+          title: 'Second Step',
+          description: 'Second step description',
+          setup: {
+            id: 'L1:S2:SETUP',
+            commits: ['abcdefg'],
           },
-        ],
-      })}
-      onNext={linkTo('Tutorial SideBar', 'Stage')}
-      onBack={linkTo('TUtorial SideBar', 'Summary')}
-    />
-  ))
-  .add('Level Summary', () => {
-    return (
-      <LevelSummaryPage
-        send={action('send')}
-        level={{
-          id: '1',
-          title: 'Sum Level',
-          text: 'A description of this stage',
-          stages: [
-            {
-              id: '1',
-              title: 'First',
-              text: 'some description',
-              status: 'COMPLETE',
-            },
-            {
-              id: '2',
-              title: 'Second',
-              text: 'The second one',
-              status: 'ACTIVE',
-            },
-            {
-              id: '3',
-              title: 'Third',
-              text: 'The third one',
-              status: 'INCOMPLETE',
-            },
-          ],
-        }}
-      />
-    )
-  })
-  .addDecorator(apolloProvider)
-  .add('Level Summary Container', () => {
-    return <LevelSummaryPageContainer send={action('send')} />
+          solution: {
+            id: 'L1:S2:SOLUTION',
+            commits: ['hijklmn'],
+          },
+          status: 'ACTIVE',
+        },
+        {
+          id: 'L1:S3',
+          title: 'Third Step',
+          description: 'Third step description',
+          setup: {
+            id: 'L1:S3:SETUP',
+            commits: ['abcdefg'],
+          },
+          solution: {
+            id: 'L1:S3:SOLUTION',
+            commits: ['hijklmn'],
+          },
+          status: 'INCOMPLETE',
+        },
+      ],
+    }
+    return <Level level={level} onContinue={action('onContinue')} onLoadSolution={action('onLoadSolution')} />
   })
diff --git a/web-app/stories/Login.stories.tsx b/web-app/stories/Login.stories.tsx
deleted file mode 100644
index b2e74487..00000000
--- a/web-app/stories/Login.stories.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import React from 'react'
-
-import { storiesOf } from '@storybook/react'
-import { action } from '@storybook/addon-actions'
-
-import { LoginPage } from '../src/containers/Login'
-import SideBarDecorator from './utils/SideBarDecorator'
-
-storiesOf('Login', module)
-  .addDecorator(SideBarDecorator)
-  .add('Page', () => <LoginPage onGitHubLogin={action('onGitHubLogin')} />)
diff --git a/web-app/stories/Stage.stories.tsx b/web-app/stories/Stage.stories.tsx
deleted file mode 100644
index b4013fb2..00000000
--- a/web-app/stories/Stage.stories.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import React from 'react'
-
-import { action } from '@storybook/addon-actions'
-import { object, withKnobs } from '@storybook/addon-knobs'
-import { storiesOf } from '@storybook/react'
-import SideBarDecorator from './utils/SideBarDecorator'
-
-import Stage from '../src/containers/Tutorial/StagePage/Stage'
-import StageContainer from '../src/containers/Tutorial/StagePage'
-import ApolloDecorator from './utils/ApolloDecorator'
-
-storiesOf('Tutorial SideBar', module)
-  .addDecorator(SideBarDecorator)
-  .addDecorator(withKnobs)
-  .add('Stage', () => (
-    <Stage
-      stage={{
-        id: '1',
-        title: 'Stage Title',
-        text: 'A description of the stage',
-        steps: [
-          {
-            id: '1',
-            title: 'Sum',
-            text: 'Write a function `sum` that adds two numbers together',
-            status: 'COMPLETE',
-          },
-          {
-            id: '2',
-            title: 'Multiply',
-            text: `Write a function \`multiply\` that multiplies two numbers together
-
-    \`\`\`
-    function someExample(a) {
-      return a * 1
-    }
-    \`\`\`
-                `,
-            status: 'ACTIVE',
-          },
-          {
-            id: '3',
-            title: 'Divide',
-            text: 'Write a function `divide` that divides',
-            status: 'INCOMPLETE',
-          },
-        ],
-      }}
-      onContinue={action('onContinue')}
-    />
-  ))
-  .addDecorator(ApolloDecorator)
-  .add('Stage Summary Container', () => <StageContainer send={action('send')} />)
diff --git a/web-app/stories/Step.stories.tsx b/web-app/stories/Step.stories.tsx
index dfede1c9..e4971afc 100644
--- a/web-app/stories/Step.stories.tsx
+++ b/web-app/stories/Step.stories.tsx
@@ -4,7 +4,7 @@ import { boolean, text, withKnobs } from '@storybook/addon-knobs'
 import { storiesOf } from '@storybook/react'
 import SideBarDecorator from './utils/SideBarDecorator'
 
-import Step from '../src/containers/Tutorial/StagePage/Stage/StepDescription'
+import Step from '../src/containers/Tutorial/LevelPage/Level/StepDescription'
 
 const stepText =
   'This is a long paragraph of step text intended to wrap around the side after a short period of writing to demonstrate text wrap among other things'
@@ -32,5 +32,6 @@ const paragraphText = `Markdown included \`code\`, *bold*, & _italics_.
 storiesOf('Tutorial SideBar', module)
   .addDecorator(SideBarDecorator)
   .addDecorator(withKnobs)
-  .add('Step', () => <Step text={text('text', stepText)} hide={boolean('hide', false)} />)
-  .add('Step Markdown', () => <Step text={text('text', paragraphText)} hide={boolean('hide', false)} />)
+  .add('Step', () => <div>Step</div>)
+// .add('Step', () => <Step text={text('text', stepText)} hide={boolean('hide', false)} />)
+// .add('Step Markdown', () => <Step text={text('text', paragraphText)} hide={boolean('hide', false)} />)

From 9487160b03c4b37192e432908a7a397e086eb4ed Mon Sep 17 00:00:00 2001
From: shmck <shawn.j.mckay@gmail.com>
Date: Sat, 26 Oct 2019 11:45:17 -0700
Subject: [PATCH 4/8] fix storyboook steps

---
 web-app/stories/Step.stories.tsx | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/web-app/stories/Step.stories.tsx b/web-app/stories/Step.stories.tsx
index e4971afc..7e596203 100644
--- a/web-app/stories/Step.stories.tsx
+++ b/web-app/stories/Step.stories.tsx
@@ -1,10 +1,10 @@
 import React from 'react'
 
-import { boolean, text, withKnobs } from '@storybook/addon-knobs'
+import { select, boolean, text, withKnobs } from '@storybook/addon-knobs'
 import { storiesOf } from '@storybook/react'
 import SideBarDecorator from './utils/SideBarDecorator'
 
-import Step from '../src/containers/Tutorial/LevelPage/Level/StepDescription'
+import StepDescription from '../src/containers/Tutorial/LevelPage/Level/StepDescription'
 
 const stepText =
   'This is a long paragraph of step text intended to wrap around the side after a short period of writing to demonstrate text wrap among other things'
@@ -32,6 +32,15 @@ const paragraphText = `Markdown included \`code\`, *bold*, & _italics_.
 storiesOf('Tutorial SideBar', module)
   .addDecorator(SideBarDecorator)
   .addDecorator(withKnobs)
-  .add('Step', () => <div>Step</div>)
-// .add('Step', () => <Step text={text('text', stepText)} hide={boolean('hide', false)} />)
-// .add('Step Markdown', () => <Step text={text('text', paragraphText)} hide={boolean('hide', false)} />)
+  .add('Step Description', () => (
+    <StepDescription
+      text={text('text', stepText)}
+      mode={select('mode', { active: 'ACTIVE', complete: 'COMPLETE', incomplete: 'INCOMPLETE' }, 'active', 'step')}
+    />
+  ))
+  .add('Step Markdown', () => (
+    <StepDescription
+      text={text('text', paragraphText)}
+      mode={select('mode', { active: 'ACTIVE', complete: 'COMPLETE', incomplete: 'INCOMPLETE' }, 'active', 'step')}
+    />
+  ))

From ff318191c8aea3c088fdee02972fc13c21324a1f Mon Sep 17 00:00:00 2001
From: shmck <shawn.j.mckay@gmail.com>
Date: Sat, 26 Oct 2019 12:20:40 -0700
Subject: [PATCH 5/8] setup headers for level page

---
 .../LevelPage/Level/StepDescription/index.tsx |  2 +-
 .../Tutorial/LevelPage/Level/index.tsx        | 76 ++++++++++++++-----
 2 files changed, 57 insertions(+), 21 deletions(-)

diff --git a/web-app/src/containers/Tutorial/LevelPage/Level/StepDescription/index.tsx b/web-app/src/containers/Tutorial/LevelPage/Level/StepDescription/index.tsx
index 7ce82635..9870a21b 100644
--- a/web-app/src/containers/Tutorial/LevelPage/Level/StepDescription/index.tsx
+++ b/web-app/src/containers/Tutorial/LevelPage/Level/StepDescription/index.tsx
@@ -7,7 +7,7 @@ const styles = {
   //   backgroundColor: '#e6f7ff',
   // },
   card: {
-    paddingRight: '1rem',
+    padding: '0 1rem 1rem 0.5rem',
   },
 }
 
diff --git a/web-app/src/containers/Tutorial/LevelPage/Level/index.tsx b/web-app/src/containers/Tutorial/LevelPage/Level/index.tsx
index b2165c2d..fd2415a1 100644
--- a/web-app/src/containers/Tutorial/LevelPage/Level/index.tsx
+++ b/web-app/src/containers/Tutorial/LevelPage/Level/index.tsx
@@ -9,6 +9,13 @@ const styles = {
   card: {
     padding: 0,
   },
+  header: {
+    height: '36px',
+    backgroundColor: '#EBEBEB',
+    fontSize: '16px',
+    lineHeight: '16px',
+    padding: '10px 1rem',
+  },
   content: {
     padding: '0rem 1rem',
     paddingBottom: '1rem',
@@ -17,9 +24,24 @@ const styles = {
     padding: '0rem 1rem',
   },
   steps: {
-    padding: '1rem 0rem',
+    padding: '1rem 16px',
+  },
+  title: {
+    fontSize: '1.2rem',
+    fontWeight: 'bold' as 'bold',
+    lineHeight: '1.2rem',
+  },
+  footer: {
+    height: '36px',
+    backgroundColor: 'black',
+    fontSize: '16px',
+    lineHeight: '16px',
+    padding: '10px 1rem',
+    color: 'white',
+    position: 'absolute' as 'absolute',
+    bottom: 0,
+    width: '100%',
   },
-  title: {},
 }
 
 interface Props {
@@ -40,25 +62,36 @@ const Level = ({ level, onContinue, onLoadSolution }: Props) => {
 
   return (
     <div style={styles.card}>
-      <div style={styles.content}>
-        <h2 style={styles.title}>{level.title}</h2>
-        <Markdown>{level.description || ''}</Markdown>
+      <div>
+        <div style={styles.header}>
+          <span>Learn</span>
+        </div>
+        <div style={styles.content}>
+          <h2 style={styles.title}>{level.title}</h2>
+          <Markdown>{level.description || ''}</Markdown>
+        </div>
       </div>
-      <div style={styles.steps}>
-        <Step current={activeIndex} direction="ver" shape="dot" animation readOnly>
-          {level.steps.map((step: G.Step | null, index: number) => {
-            if (!step) {
-              return null
-            }
-            return (
-              <Step.Item
-                key={step.id}
-                title={step.title || `Step ${index + 1}`}
-                content={<StepDescription text={step.description} mode={step.status} onLoadSolution={onLoadSolution} />}
-              />
-            )
-          })}
-        </Step>
+
+      <div>
+        <div style={styles.header}>Tasks</div>
+        <div style={styles.steps}>
+          <Step current={activeIndex} direction="ver" shape="dot" animation readOnly>
+            {level.steps.map((step: G.Step | null, index: number) => {
+              if (!step) {
+                return null
+              }
+              return (
+                <Step.Item
+                  key={step.id}
+                  title={step.title || `Step ${index + 1}`}
+                  content={
+                    <StepDescription text={step.description} mode={step.status} onLoadSolution={onLoadSolution} />
+                  }
+                />
+              )
+            })}
+          </Step>
+        </div>
       </div>
 
       {level.status === 'COMPLETE' && (
@@ -66,6 +99,9 @@ const Level = ({ level, onContinue, onLoadSolution }: Props) => {
           <Button onClick={onContinue}>Continue</Button>
         </div>
       )}
+      <div>
+        <div style={styles.footer}>{level.title}</div>
+      </div>
     </div>
   )
 }

From 1a5c621449c22b1d18807d470f88a425557f7252 Mon Sep 17 00:00:00 2001
From: shmck <shawn.j.mckay@gmail.com>
Date: Sat, 26 Oct 2019 13:22:48 -0700
Subject: [PATCH 6/8] fix up stories

---
 web-app/.storybook/addons.ts                  |  2 +-
 web-app/.storybook/config.ts                  | 27 +++++++++---
 web-app/package-lock.json                     | 27 ++++++++++++
 web-app/src/containers/Login/index.tsx        | 31 -------------
 .../New/TutorialList/TutorialItem.tsx         |  4 +-
 .../src/containers/New/TutorialList/index.tsx |  2 +-
 .../Tutorial/LevelPage/Level/index.tsx        |  8 +++-
 web-app/src/services/selectors/tutorial.ts    |  8 ++--
 web-app/stories/Continue.stories.tsx          | 19 --------
 web-app/stories/Level.stories.tsx             |  7 +--
 web-app/stories/Loading.stories.tsx           |  2 +-
 web-app/stories/New.stories.tsx               | 43 +++++++++++--------
 web-app/stories/Router.stories.tsx            | 18 --------
 web-app/stories/Step.stories.tsx              | 17 +++++---
 web-app/stories/Summary.stories.tsx           |  4 +-
 15 files changed, 105 insertions(+), 114 deletions(-)
 delete mode 100644 web-app/src/containers/Login/index.tsx
 delete mode 100644 web-app/stories/Continue.stories.tsx
 delete mode 100644 web-app/stories/Router.stories.tsx

diff --git a/web-app/.storybook/addons.ts b/web-app/.storybook/addons.ts
index 8cee4ade..7e5cdab9 100644
--- a/web-app/.storybook/addons.ts
+++ b/web-app/.storybook/addons.ts
@@ -1,4 +1,4 @@
 import '@storybook/addon-actions/register'
 import '@storybook/addon-knobs/register'
 import '@storybook/addon-links/register'
-
+import '@storybook/addon-viewport/register'
\ No newline at end of file
diff --git a/web-app/.storybook/config.ts b/web-app/.storybook/config.ts
index 35c6a012..959b61f4 100644
--- a/web-app/.storybook/config.ts
+++ b/web-app/.storybook/config.ts
@@ -1,13 +1,13 @@
 import '@alifd/next/dist/next.css'
-import { configure } from '@storybook/react'
+import {configure, addParameters} from '@storybook/react'
 import '../src/styles/index.css'
 
 // setup acquireVsCodeApi mock
 // @ts-ignore
 global.acquireVsCodeApi = () => ({
-  postMessage(event: string) {
-    console.log('postMessage', event)
-  }
+	postMessage(event: string) {
+		console.log('postMessage', event)
+	}
 })
 
 
@@ -15,7 +15,24 @@ global.acquireVsCodeApi = () => ({
 const req = require.context('../stories', true, /\.stories\.tsx$/)
 
 function loadStories() {
-  req.keys().forEach(req)
+	req.keys().forEach(req)
 }
 
+// set viewport width
+// see https://www.npmjs.com/package/@storybook/addon-viewport
+addParameters({
+	viewport: {
+		viewports: {
+			name: 'SideMenu',
+			styles: {
+				width: 200,
+				height: window.innerHeight,
+			},
+			type: 'mobile'
+		},
+		defaultViewport: 'SideMenu',
+	},
+})
+
 configure(loadStories, module)
+
diff --git a/web-app/package-lock.json b/web-app/package-lock.json
index 00ce0652..7afee999 100644
--- a/web-app/package-lock.json
+++ b/web-app/package-lock.json
@@ -1590,6 +1590,33 @@
         }
       }
     },
+    "@storybook/addon-viewport": {
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-5.2.5.tgz",
+      "integrity": "sha512-BmRyJuvSeYMCkfFe8SN5qW5btEa/H/PTCJYSNZ4Iud5ii9x+qeGGlBuOmiv8xa/efygZ88qfNEpZ+vlbrKCZfA==",
+      "dev": true,
+      "requires": {
+        "@storybook/addons": "5.2.5",
+        "@storybook/api": "5.2.5",
+        "@storybook/client-logger": "5.2.5",
+        "@storybook/components": "5.2.5",
+        "@storybook/core-events": "5.2.5",
+        "@storybook/theming": "5.2.5",
+        "core-js": "^3.0.1",
+        "global": "^4.3.2",
+        "memoizerific": "^1.11.3",
+        "prop-types": "^15.7.2",
+        "util-deprecate": "^1.0.2"
+      },
+      "dependencies": {
+        "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==",
+          "dev": true
+        }
+      }
+    },
     "@storybook/addons": {
       "version": "5.2.5",
       "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-5.2.5.tgz",
diff --git a/web-app/src/containers/Login/index.tsx b/web-app/src/containers/Login/index.tsx
deleted file mode 100644
index ef0727f1..00000000
--- a/web-app/src/containers/Login/index.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import * as React from 'react'
-import { Button } from '@alifd/next'
-
-interface Props {
-  onGitHubLogin(e: any): void
-}
-
-const styles = {
-  page: {
-    display: 'flex',
-    alignItems: 'center',
-    justifyContent: 'center',
-    height: window.innerHeight - 20,
-  },
-}
-
-export const LoginPage = (props: Props) => (
-  <div style={styles.page}>
-    <div>Login</div>
-    <Button onClick={props.onGitHubLogin}>Sign in With GitHub</Button>
-  </div>
-)
-
-export default () => (
-  <LoginPage
-    onGitHubLogin={(e: any) => {
-      const { value } = e.target
-      console.log('value', value)
-    }}
-  />
-)
diff --git a/web-app/src/containers/New/TutorialList/TutorialItem.tsx b/web-app/src/containers/New/TutorialList/TutorialItem.tsx
index f7e22370..aef19f5a 100644
--- a/web-app/src/containers/New/TutorialList/TutorialItem.tsx
+++ b/web-app/src/containers/New/TutorialList/TutorialItem.tsx
@@ -3,14 +3,14 @@ import { Button } from '@alifd/next'
 
 interface Props {
   title?: string
-  text?: string
+  description?: string
   onSelect(): void
 }
 
 const TutorialItem = (props: Props) => (
   <div>
     <h3>{props.title || 'Title'}</h3>
-    <p>{props.text || 'Description'}</p>
+    <p>{props.description || 'Description'}</p>
     <Button onClick={props.onSelect}>Start</Button>
   </div>
 )
diff --git a/web-app/src/containers/New/TutorialList/index.tsx b/web-app/src/containers/New/TutorialList/index.tsx
index be17cf9e..f472159c 100644
--- a/web-app/src/containers/New/TutorialList/index.tsx
+++ b/web-app/src/containers/New/TutorialList/index.tsx
@@ -24,7 +24,7 @@ const TutorialList = (props: Props) => {
           key={tutorial.id}
           onSelect={() => onSelect(tutorial)}
           title={tutorial.version.summary.title || ''}
-          text={tutorial.version.summary.description || ''}
+          description={tutorial.version.summary.description || ''}
         />
       ))}
     </div>
diff --git a/web-app/src/containers/Tutorial/LevelPage/Level/index.tsx b/web-app/src/containers/Tutorial/LevelPage/Level/index.tsx
index fd2415a1..472fd6b7 100644
--- a/web-app/src/containers/Tutorial/LevelPage/Level/index.tsx
+++ b/web-app/src/containers/Tutorial/LevelPage/Level/index.tsx
@@ -45,7 +45,7 @@ const styles = {
 }
 
 interface Props {
-  level: G.Level
+  level: G.Level & { index: number }
   onContinue(): void
   onLoadSolution(): void
 }
@@ -100,7 +100,11 @@ const Level = ({ level, onContinue, onLoadSolution }: Props) => {
         </div>
       )}
       <div>
-        <div style={styles.footer}>{level.title}</div>
+        <div style={styles.footer}>
+          <span>
+            {level.index.toString()}. {level.title}
+          </span>
+        </div>
       </div>
     </div>
   )
diff --git a/web-app/src/services/selectors/tutorial.ts b/web-app/src/services/selectors/tutorial.ts
index ae785194..7c453521 100644
--- a/web-app/src/services/selectors/tutorial.ts
+++ b/web-app/src/services/selectors/tutorial.ts
@@ -25,11 +25,13 @@ export const currentLevel = (context: MachineContext): G.Level => createSelector
 		// sent with the test to ensure consistency
 		const levels: G.Level[] = version.data.levels
 
-		const level: G.Level | undefined = levels.find((l: G.Level) => l.id === context.position.levelId)
-
-		if (!level) {
+		const levelIndex = levels.findIndex((l: G.Level) => l.id === context.position.levelId)
+		if (levelIndex < 0) {
 			throw new Error('Level not found when selecting level')
 		}
+		const level: G.Level = levels[levelIndex]
+		level.index = levelIndex
+
 		return level
 	})(context)
 
diff --git a/web-app/stories/Continue.stories.tsx b/web-app/stories/Continue.stories.tsx
deleted file mode 100644
index 2aaf9bf4..00000000
--- a/web-app/stories/Continue.stories.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from 'react'
-
-import { storiesOf } from '@storybook/react'
-import { action } from '@storybook/addon-actions'
-
-import apolloProvider from './utils/ApolloDecorator'
-import ContinuePageContainer, { ContinuePage } from '../src/containers/Continue'
-
-storiesOf('Continue', module)
-  .add('Page', () => {
-    const tutorial = {
-      id: '1',
-      title: 'Example Tutorial',
-      text: 'Some summary',
-    }
-    return <ContinuePage tutorial={tutorial} onContinue={action('onContinue')} />
-  })
-  .addDecorator(apolloProvider)
-  .add('Container', () => <ContinuePageContainer />)
diff --git a/web-app/stories/Level.stories.tsx b/web-app/stories/Level.stories.tsx
index ebbdb88f..c902bba5 100644
--- a/web-app/stories/Level.stories.tsx
+++ b/web-app/stories/Level.stories.tsx
@@ -2,18 +2,19 @@ import React from 'react'
 import * as G from '../../typings/graphql'
 
 import { action } from '@storybook/addon-actions'
-import { object, withKnobs } from '@storybook/addon-knobs'
+import { withKnobs } from '@storybook/addon-knobs'
 import { storiesOf } from '@storybook/react'
-import SideBarDecorator from './utils/SideBarDecorator'
 
+import SideBarDecorator from './utils/SideBarDecorator'
 import Level from '../src/containers/Tutorial/LevelPage/Level/index'
 
 storiesOf('Tutorial SideBar', module)
   .addDecorator(SideBarDecorator)
   .addDecorator(withKnobs)
   .add('Level', () => {
-    const level: G.Level = {
+    const level: G.Level & { index: number } = {
       id: 'L1',
+      index: 2,
       title: 'A Title',
       description: 'Some description',
       setup: null,
diff --git a/web-app/stories/Loading.stories.tsx b/web-app/stories/Loading.stories.tsx
index 6b15b819..5890defa 100644
--- a/web-app/stories/Loading.stories.tsx
+++ b/web-app/stories/Loading.stories.tsx
@@ -1,8 +1,8 @@
 import React from 'react'
 
 import { storiesOf } from '@storybook/react'
-import SideBarDecorator from './utils/SideBarDecorator'
 
+import SideBarDecorator from './utils/SideBarDecorator'
 import LoadingPage from '../src/containers/LoadingPage'
 
 storiesOf('Components', module)
diff --git a/web-app/stories/New.stories.tsx b/web-app/stories/New.stories.tsx
index f8a9eeee..d839637f 100644
--- a/web-app/stories/New.stories.tsx
+++ b/web-app/stories/New.stories.tsx
@@ -1,36 +1,41 @@
 import React from 'react'
 import { storiesOf } from '@storybook/react'
 import { action } from '@storybook/addon-actions'
-import * as T from '../../typings/graphql'
-import apolloProvider from './utils/ApolloDecorator'
 
+import SideBarDecorator from './utils/SideBarDecorator'
 import TutorialList from '../src/containers/New/TutorialList'
 import TutorialItem from '../src/containers/New/TutorialList/TutorialItem'
-import NewContainer from '../src/containers/New'
 
 storiesOf('New', module)
-  .add('Tutorial', () => {
-    const tutorial = {
-      id: '1',
-      title: 'Tutorial 1',
-      text: 'The first one',
-    }
-    return <TutorialItem onSelect={action('onSelect')} title={tutorial.title} text={tutorial.text} />
-  })
-  .add('TutorialList', () => {
+  .addDecorator(SideBarDecorator)
+  .add('Tutorial List', () => {
     const tutorialList = [
       {
         id: '1',
-        title: 'Tutorial 1',
-        text: 'The first one',
+        version: {
+          summary: {
+            title: 'Tutorial 1',
+            description: 'The first one',
+          },
+        },
       },
       {
         id: '2',
-        title: 'Tutorial 2',
-        text: 'The second one',
+        version: {
+          summary: {
+            title: 'Tutorial 2',
+            description: 'The second one',
+          },
+        },
       },
     ]
-    return <TutorialList tutorialList={tutorialList} onNew={action('onNew')} />
+    return <TutorialList tutorialList={tutorialList} />
+  })
+  .add('Tutorial Item', () => {
+    const tutorial = {
+      id: '1',
+      title: 'Tutorial 1',
+      description: 'The first one',
+    }
+    return <TutorialItem onSelect={action('onSelect')} title={tutorial.title} description={tutorial.description} />
   })
-  .addDecorator(apolloProvider)
-  .add('Container', () => <NewContainer />)
diff --git a/web-app/stories/Router.stories.tsx b/web-app/stories/Router.stories.tsx
deleted file mode 100644
index 53132b32..00000000
--- a/web-app/stories/Router.stories.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import React from 'react'
-
-import { storiesOf } from '@storybook/react'
-import SideBarDecorator from './utils/SideBarDecorator'
-
-import Router from '../src/components/Router'
-
-const { Route } = Router
-
-storiesOf('Components', module)
-  .addDecorator(SideBarDecorator)
-  .add('Router', () => (
-    <Router state="Third">
-      <Route path="First">First</Route>
-      <Route path="Second">Second</Route>
-      <Route path="Third">Third</Route>
-    </Router>
-  ))
diff --git a/web-app/stories/Step.stories.tsx b/web-app/stories/Step.stories.tsx
index 7e596203..6fc8ba69 100644
--- a/web-app/stories/Step.stories.tsx
+++ b/web-app/stories/Step.stories.tsx
@@ -1,6 +1,7 @@
 import React from 'react'
 
-import { select, boolean, text, withKnobs } from '@storybook/addon-knobs'
+import { action } from '@storybook/addon-actions'
+import { select, text, withKnobs } from '@storybook/addon-knobs'
 import { storiesOf } from '@storybook/react'
 import SideBarDecorator from './utils/SideBarDecorator'
 
@@ -12,20 +13,20 @@ const stepText =
 const paragraphText = `Markdown included \`code\`, *bold*, & _italics_.
   \`\`\`javascript
   var a = 12
-  
+
   function example(a) {
     return a + 1
   }
   \`\`\`
-  
+
   Headers can be added:
-  
+
   # h1
   ## h2
   ### h3
   #### h4
   ##### h5
-  
+
   Emojis: :) :| :(
   `
 
@@ -35,12 +36,14 @@ storiesOf('Tutorial SideBar', module)
   .add('Step Description', () => (
     <StepDescription
       text={text('text', stepText)}
-      mode={select('mode', { active: 'ACTIVE', complete: 'COMPLETE', incomplete: 'INCOMPLETE' }, 'active', 'step')}
+      mode={select('mode', { ACTIVE: 'ACTIVE', COMPLETE: 'COMPLETE', INCOMPLETE: 'INCOMPLETE' }, 'ACTIVE', 'step')}
+      onLoadSolution={action('onLoadSolution')}
     />
   ))
   .add('Step Markdown', () => (
     <StepDescription
       text={text('text', paragraphText)}
-      mode={select('mode', { active: 'ACTIVE', complete: 'COMPLETE', incomplete: 'INCOMPLETE' }, 'active', 'step')}
+      mode={select('mode', { ACTIVE: 'ACTIVE', COMPLETE: 'COMPLETE', INCOMPLETE: 'INCOMPLETE' }, 'ACTIVE', 'step')}
+      onLoadSolution={action('onLoadSolution')}
     />
   ))
diff --git a/web-app/stories/Summary.stories.tsx b/web-app/stories/Summary.stories.tsx
index df547406..b72b6d34 100644
--- a/web-app/stories/Summary.stories.tsx
+++ b/web-app/stories/Summary.stories.tsx
@@ -2,12 +2,12 @@ import React from 'react'
 
 import { linkTo } from '@storybook/addon-links'
 import { storiesOf } from '@storybook/react'
-import SideBarDecorator from './utils/SideBarDecorator'
 
+import SideBarDecorator from './utils/SideBarDecorator'
 import Summary from '../src/containers/Tutorial/SummaryPage/Summary'
 
 storiesOf('Tutorial SideBar', module)
   .addDecorator(SideBarDecorator)
   .add('Summary', () => (
-    <Summary title="Some Title" text="Some description" onNext={linkTo('Tutorial SideBar', 'Level')} />
+    <Summary title="Some Title" description="Some description" onNext={linkTo('Tutorial SideBar', 'Level')} />
   ))

From 2a3d9e2c6a9021ef3689b637326c9b6f8ce34335 Mon Sep 17 00:00:00 2001
From: shmck <shawn.j.mckay@gmail.com>
Date: Sat, 26 Oct 2019 14:04:21 -0700
Subject: [PATCH 7/8] cleanup new tutorial page

---
 typings/graphql.d.ts                          |  1 +
 web-app/src/containers/New/NewPage.tsx        | 36 +++++++++++++
 .../New/TutorialList/TutorialItem.tsx         | 38 ++++++++++++--
 web-app/src/containers/New/index.tsx          | 13 +----
 .../Tutorial/LevelPage/Level/index.tsx        |  4 +-
 web-app/stories/New.stories.tsx               | 51 ++++++++++---------
 6 files changed, 100 insertions(+), 43 deletions(-)
 create mode 100644 web-app/src/containers/New/NewPage.tsx

diff --git a/typings/graphql.d.ts b/typings/graphql.d.ts
index fcbf0e3c..6a736242 100644
--- a/typings/graphql.d.ts
+++ b/typings/graphql.d.ts
@@ -76,6 +76,7 @@ export type GithubUser = {
 export type Level = {
 	__typename?: 'Level',
 	id: Scalars['ID'],
+	index?: number
 	title: Scalars['String'],
 	description: Scalars['String'],
 	steps: Array<Step>,
diff --git a/web-app/src/containers/New/NewPage.tsx b/web-app/src/containers/New/NewPage.tsx
new file mode 100644
index 00000000..89a216dc
--- /dev/null
+++ b/web-app/src/containers/New/NewPage.tsx
@@ -0,0 +1,36 @@
+import * as React from 'react'
+import * as G from 'typings/graphql'
+import TutorialList from './TutorialList'
+
+const styles = {
+  header: {
+    height: '36px',
+    backgroundColor: '#EBEBEB',
+    fontSize: '16px',
+    lineHeight: '16px',
+    padding: '10px 1rem',
+  },
+  banner: {
+    height: '50px',
+    fontSize: '1rem',
+    padding: '1rem',
+  },
+}
+
+interface Props {
+  tutorialList: G.Tutorial[]
+}
+
+const NewPage = (props: Props) => (
+  <div>
+    <div style={styles.header}>
+      <span>CodeRoad</span>
+    </div>
+    <div style={styles.banner}>
+      <span>Select a Tutorial to Start</span>
+    </div>
+    <TutorialList tutorialList={props.tutorialList} />
+  </div>
+)
+
+export default NewPage
diff --git a/web-app/src/containers/New/TutorialList/TutorialItem.tsx b/web-app/src/containers/New/TutorialList/TutorialItem.tsx
index aef19f5a..d59933d2 100644
--- a/web-app/src/containers/New/TutorialList/TutorialItem.tsx
+++ b/web-app/src/containers/New/TutorialList/TutorialItem.tsx
@@ -1,5 +1,22 @@
 import * as React from 'react'
-import { Button } from '@alifd/next'
+import { Card } from '@alifd/next'
+
+const styles = {
+  card: {
+    cursor: 'pointer',
+  },
+  languages: {
+    display: 'flex',
+    flexDirection: 'row',
+    alignItems: 'center',
+    justifyContent: 'flex-end',
+    width: '100%',
+  },
+  languageIcon: {
+    width: 30,
+    height: 30,
+  },
+}
 
 interface Props {
   title?: string
@@ -7,12 +24,25 @@ interface Props {
   onSelect(): void
 }
 
+// icons from https://konpa.github.io/devicon/
+const LanguageIcon = () => (
+  <svg viewBox="0 0 128 128" style={styles.languageIcon}>
+    <path fill="#F0DB4F" d="M1.408 1.408h125.184v125.185h-125.184z"></path>
+    <path
+      fill="#323330"
+      d="M116.347 96.736c-.917-5.711-4.641-10.508-15.672-14.981-3.832-1.761-8.104-3.022-9.377-5.926-.452-1.69-.512-2.642-.226-3.665.821-3.32 4.784-4.355 7.925-3.403 2.023.678 3.938 2.237 5.093 4.724 5.402-3.498 5.391-3.475 9.163-5.879-1.381-2.141-2.118-3.129-3.022-4.045-3.249-3.629-7.676-5.498-14.756-5.355l-3.688.477c-3.534.893-6.902 2.748-8.877 5.235-5.926 6.724-4.236 18.492 2.975 23.335 7.104 5.332 17.54 6.545 18.873 11.531 1.297 6.104-4.486 8.08-10.234 7.378-4.236-.881-6.592-3.034-9.139-6.949-4.688 2.713-4.688 2.713-9.508 5.485 1.143 2.499 2.344 3.63 4.26 5.795 9.068 9.198 31.76 8.746 35.83-5.176.165-.478 1.261-3.666.38-8.581zm-46.885-37.793h-11.709l-.048 30.272c0 6.438.333 12.34-.714 14.149-1.713 3.558-6.152 3.117-8.175 2.427-2.059-1.012-3.106-2.451-4.319-4.485-.333-.584-.583-1.036-.667-1.071l-9.52 5.83c1.583 3.249 3.915 6.069 6.902 7.901 4.462 2.678 10.459 3.499 16.731 2.059 4.082-1.189 7.604-3.652 9.448-7.401 2.666-4.915 2.094-10.864 2.07-17.444.06-10.735.001-21.468.001-32.237z"
+    ></path>
+  </svg>
+)
+
 const TutorialItem = (props: Props) => (
-  <div>
+  <Card onClick={props.onSelect} style={styles.card}>
     <h3>{props.title || 'Title'}</h3>
     <p>{props.description || 'Description'}</p>
-    <Button onClick={props.onSelect}>Start</Button>
-  </div>
+    <div style={styles.languages}>
+      <LanguageIcon />
+    </div>
+  </Card>
 )
 
 export default TutorialItem
diff --git a/web-app/src/containers/New/index.tsx b/web-app/src/containers/New/index.tsx
index a8750542..08efd229 100644
--- a/web-app/src/containers/New/index.tsx
+++ b/web-app/src/containers/New/index.tsx
@@ -4,20 +4,9 @@ import * as G from 'typings/graphql'
 import * as CR from 'typings'
 
 import queryTutorials from '../../services/apollo/queries/tutorials'
+import NewPage from './NewPage'
 import LoadingPage from '../LoadingPage'
 import ErrorView from '../../components/Error'
-import TutorialList from './TutorialList'
-
-interface Props {
-  tutorialList: G.Tutorial[]
-}
-
-export const NewPage = (props: Props) => (
-  <div>
-    <h2>Start a New Tutorial</h2>
-    <TutorialList tutorialList={props.tutorialList} />
-  </div>
-)
 
 const Loading = () => <LoadingPage text="Loading tutorials" />
 
diff --git a/web-app/src/containers/Tutorial/LevelPage/Level/index.tsx b/web-app/src/containers/Tutorial/LevelPage/Level/index.tsx
index 472fd6b7..96da427f 100644
--- a/web-app/src/containers/Tutorial/LevelPage/Level/index.tsx
+++ b/web-app/src/containers/Tutorial/LevelPage/Level/index.tsx
@@ -45,7 +45,7 @@ const styles = {
 }
 
 interface Props {
-  level: G.Level & { index: number }
+  level: G.Level
   onContinue(): void
   onLoadSolution(): void
 }
@@ -102,7 +102,7 @@ const Level = ({ level, onContinue, onLoadSolution }: Props) => {
       <div>
         <div style={styles.footer}>
           <span>
-            {level.index.toString()}. {level.title}
+            {level.index ? `${level.index.toString()}.` : ''} {level.title}
           </span>
         </div>
       </div>
diff --git a/web-app/stories/New.stories.tsx b/web-app/stories/New.stories.tsx
index d839637f..b22c24c1 100644
--- a/web-app/stories/New.stories.tsx
+++ b/web-app/stories/New.stories.tsx
@@ -3,39 +3,40 @@ import { storiesOf } from '@storybook/react'
 import { action } from '@storybook/addon-actions'
 
 import SideBarDecorator from './utils/SideBarDecorator'
+import NewPage from '../src/containers/New/NewPage'
 import TutorialList from '../src/containers/New/TutorialList'
 import TutorialItem from '../src/containers/New/TutorialList/TutorialItem'
 
+const tutorialList = [
+  {
+    id: '1',
+    version: {
+      summary: {
+        title: 'Tutorial 1',
+        description: 'The first one',
+      },
+    },
+  },
+  {
+    id: '2',
+    version: {
+      summary: {
+        title: 'Tutorial 2',
+        description: 'The second one',
+      },
+    },
+  },
+]
+
 storiesOf('New', module)
   .addDecorator(SideBarDecorator)
+  .add('New Page', () => {
+    return <NewPage tutorialList={tutorialList} />
+  })
   .add('Tutorial List', () => {
-    const tutorialList = [
-      {
-        id: '1',
-        version: {
-          summary: {
-            title: 'Tutorial 1',
-            description: 'The first one',
-          },
-        },
-      },
-      {
-        id: '2',
-        version: {
-          summary: {
-            title: 'Tutorial 2',
-            description: 'The second one',
-          },
-        },
-      },
-    ]
     return <TutorialList tutorialList={tutorialList} />
   })
   .add('Tutorial Item', () => {
-    const tutorial = {
-      id: '1',
-      title: 'Tutorial 1',
-      description: 'The first one',
-    }
+    const tutorial = tutorialList[0]
     return <TutorialItem onSelect={action('onSelect')} title={tutorial.title} description={tutorial.description} />
   })

From e6461684a56b804b545add9e6401e6654480bae3 Mon Sep 17 00:00:00 2001
From: shmck <shawn.j.mckay@gmail.com>
Date: Sat, 26 Oct 2019 14:09:57 -0700
Subject: [PATCH 8/8] fix build issue

---
 typings/graphql.d.ts                                     | 7 -------
 web-app/src/containers/New/TutorialList/TutorialItem.tsx | 8 ++++----
 2 files changed, 4 insertions(+), 11 deletions(-)

diff --git a/typings/graphql.d.ts b/typings/graphql.d.ts
index 6a736242..a95e6c6a 100644
--- a/typings/graphql.d.ts
+++ b/typings/graphql.d.ts
@@ -585,10 +585,3 @@ export interface IntrospectionResultData {
 	};
 }
 
-const result: IntrospectionResultData = {
-	"__schema": {
-		"types": []
-	}
-};
-
-export default result;
diff --git a/web-app/src/containers/New/TutorialList/TutorialItem.tsx b/web-app/src/containers/New/TutorialList/TutorialItem.tsx
index d59933d2..6fe9bba4 100644
--- a/web-app/src/containers/New/TutorialList/TutorialItem.tsx
+++ b/web-app/src/containers/New/TutorialList/TutorialItem.tsx
@@ -6,10 +6,10 @@ const styles = {
     cursor: 'pointer',
   },
   languages: {
-    display: 'flex',
-    flexDirection: 'row',
-    alignItems: 'center',
-    justifyContent: 'flex-end',
+    display: 'flex' as 'flex',
+    flexDirection: 'row' as 'row',
+    alignItems: 'center' as 'center',
+    justifyContent: 'flex-end' as 'flex-end',
     width: '100%',
   },
   languageIcon: {