diff --git a/.gitignore b/.gitignore
index 89cd3a04bf87af7b2a1702d23ad8e3ba722d39a8..7a092e5462aba57b68487980ec243b39b0c5844a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -49,3 +49,32 @@ Temporary Items
 .apdisk
 
 # End of https://www.gitignore.io/api/osx,linux
+*.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# webpack build
+_build
diff --git a/packages/client/package.json b/packages/client/package.json
index c208c0cb0781797cdbd0d0e0258907f875a6de69..0a127e4003bc9f535fec3b01e37210c86624016a 100644
--- a/packages/client/package.json
+++ b/packages/client/package.json
@@ -31,7 +31,8 @@
     "redux-logger": "^3.0.1",
     "redux-thunk": "^2.2.0",
     "reselect": "^3.0.1",
-    "styled-components": "^3.1.4"
+    "styled-components": "^2.4.0",
+    "styled-normalize": "^3.0.1"
   },
   "devDependencies": {
     "babel-cli": "^6.26.0",
diff --git a/packages/client/src/components/Root.js b/packages/client/src/components/Root.js
index ddef90e2ad99efa9a6ee3961fe4e11bd9c83d52a..c32b04c7eae3b3273a2780a7b4ea60ca7c0e8381 100644
--- a/packages/client/src/components/Root.js
+++ b/packages/client/src/components/Root.js
@@ -3,11 +3,16 @@ import { ConnectedRouter } from 'react-router-redux'
 import { Provider } from 'react-redux'
 import PropTypes from 'prop-types'
 import { ThemeProvider } from 'styled-components'
+import StyleRoot, { injectGlobalStyles } from '../helpers/StyleRoot'
+
+injectGlobalStyles()
 
 const Root = ({ store, history, routes, theme }) => (
   <Provider store={store}>
     <ConnectedRouter history={history}>
-      <ThemeProvider theme={theme}>{routes}</ThemeProvider>
+      <ThemeProvider theme={theme}>
+        <StyleRoot>{routes}</StyleRoot>
+      </ThemeProvider>
     </ConnectedRouter>
   </Provider>
 )
diff --git a/packages/client/src/helpers/StyleRoot.js b/packages/client/src/helpers/StyleRoot.js
new file mode 100644
index 0000000000000000000000000000000000000000..d4ec515067da7b333f2dfb01dfa9c9a9d99befbb
--- /dev/null
+++ b/packages/client/src/helpers/StyleRoot.js
@@ -0,0 +1,22 @@
+import styled, { injectGlobal } from 'styled-components'
+import styledNormalize from 'styled-normalize'
+import { th } from '@pubsweet/ui'
+
+const injectGlobalStyles = () => injectGlobal`
+  ${styledNormalize}
+`
+
+const StyleRoot = styled.div`
+  background-color: ${th('colorBackground')};
+  font-family: ${th('fontInterface')}, sans-serif;
+  font-size: ${th('fontSizeBase')};
+  color: ${th('colorText')};
+  line-height: ${th('fontLineHeight')};
+
+  * {
+    box-sizing: border-box;
+  }
+`
+
+export default StyleRoot
+export { injectGlobalStyles }
diff --git a/packages/components/config/test.js b/packages/components/config/default.js
similarity index 100%
rename from packages/components/config/test.js
rename to packages/components/config/default.js
diff --git a/packages/components/package.json b/packages/components/package.json
index 4dbb6d32481f298cb9f8dd2a0488af6aff4918f3..e8d30bd86a056e7967c866f832c016ca3a4b1e06 100644
--- a/packages/components/package.json
+++ b/packages/components/package.json
@@ -7,7 +7,8 @@
     "test": "jest --coverage"
   },
   "devDependencies": {
-    "@pubsweet/logger": "^0.2.2",
+    "@pubsweet/logger": "^0.2.1",
+    "@pubsweet/styleguide": "^1.0.0",
     "babel-cli": "^6.26.0",
     "babel-eslint": "^8.0.3",
     "babel-loader": "^7.1.2",
@@ -58,5 +59,6 @@
       "config/"
     ],
     "setupTestFrameworkScriptFile": "<rootDir>/test/jest-setup.js"
-  }
+  },
+  "dependencies": {}
 }
diff --git a/packages/components/packages/Blog/Blog.md b/packages/components/packages/Blog/Blog.md
index 634a624f8325c637f5d791935b9937b6ded62dc6..366d4895029884e0c200b15e618c58dac1e7dc99 100644
--- a/packages/components/packages/Blog/Blog.md
+++ b/packages/components/packages/Blog/Blog.md
@@ -1,30 +1,30 @@
-# Blog
+The main component of a blog or news page.
 
-> The main component of a blog or news page.
+Basic display:
 
-Basic display
+```js
+const getCollections = () => new Promise(() => null)
 
-    const getCollections = () => new Promise(() => null);
-    
-    <Blog 
-        blog={{title: 'Some Blog'}}
-        posts={[]}
-        actions={{getCollections}}
-    />
-    
-With a post
-    
-    const getCollections = () => new Promise(() => null);
-    
-    <Blog 
-        blog={{title: 'Some Blog'}}
-        posts={[{
-            id: 1,
-            title: 'A post', 
-            source: '<abstract>Something something something</abstract>',
-            owners: [{username: 'Anne Author'}],
-            published_at: '2017-01-02',
-            published: true
-        }]}
-        actions={{getCollections}}
-    />
+;<Blog blog={{ title: 'Some Blog' }} posts={[]} actions={{ getCollections }} />
+```
+
+With a post:
+
+```js
+const getCollections = () => new Promise(() => null)
+
+;<Blog
+  blog={{ title: 'Some Blog' }}
+  posts={[
+    {
+      id: 1,
+      title: 'A post',
+      source: '<abstract>Something something something</abstract>',
+      owners: [{ username: 'Anne Author' }],
+      published_at: '2017-01-02',
+      published: true,
+    },
+  ]}
+  actions={{ getCollections }}
+/>
+```
diff --git a/packages/components/packages/Blog/Summary.md b/packages/components/packages/Blog/Summary.md
index f3cac1a1a5ca90af795d920c40fbbff6a175ec9f..1b59bc817718f1b52ce45cdfe86458afef80ea8b 100644
--- a/packages/components/packages/Blog/Summary.md
+++ b/packages/components/packages/Blog/Summary.md
@@ -1,22 +1,24 @@
-# Blog post summary
-
-> Post preview with link to read more.
+Post preview with link to read more.
 
 Basic display
 
-    const fragment = {
-        title: 'A post', 
-        owners: [{username: 'Anne Author'}],
-        published_at: '2017-01-02'
-    };
-    <Summary fragment={fragment}/>
+```js
+const fragment = {
+  title: 'A post',
+  owners: [{ username: 'Anne Author' }],
+  published_at: '2017-01-02',
+}
+;<Summary fragment={fragment} />
+```
 
 With abstract and two authors
 
-    const fragment = {
-        title: 'A post',
-        source: '<abstract>Something something something</abstract>',
-        owners: [{username: 'Rae Searcher'}, {username: 'Si Entist'}],
-        published_at: '2017-01-02'
-    };
-    <Summary fragment={fragment}/>
+```js
+const fragment = {
+  title: 'A post',
+  source: '<abstract>Something something something</abstract>',
+  owners: [{ username: 'Rae Searcher' }, { username: 'Si Entist' }],
+  published_at: '2017-01-02',
+}
+;<Summary fragment={fragment} />
+```
diff --git a/packages/components/packages/Draft.js/Draft.md b/packages/components/packages/Draft.js/Draft.md
index f42f338873cd4144e514f89f7d0874e712c6484a..792ba104950cf6d787d484523784f2c1af5d0328 100644
--- a/packages/components/packages/Draft.js/Draft.md
+++ b/packages/components/packages/Draft.js/Draft.md
@@ -1,12 +1,12 @@
-# Draft.js
+Draft.js text editor
 
-> Draft.js text editor
+```js
+const dummy = () => new Promise(() => null)
 
-    const dummy = () => new Promise(() => null);
-
-    <Draft
-        id="1"
-        blog={{id: '2'}}
-        fragment={{}}
-        actions={{getCollections: dummy, updateFragment: dummy}}
-    />
+;<Draft
+  id="1"
+  blog={{ id: '2' }}
+  fragment={{}}
+  actions={{ getCollections: dummy, updateFragment: dummy }}
+/>
+```
diff --git a/packages/components/packages/FormGroup/README.md b/packages/components/packages/FormGroup/README.md
index 1bae16a0ad90afce61cd0374915105c861c0a88e..38ae6bb80688ffec9e2217f7f43b3e353a34e751 100644
--- a/packages/components/packages/FormGroup/README.md
+++ b/packages/components/packages/FormGroup/README.md
@@ -36,4 +36,3 @@ var title = ReactDOM.findDOMNode(this.title).value
 ## License
 
 MIT
-
diff --git a/packages/components/packages/FormGroup/package.json b/packages/components/packages/FormGroup/package.json
index 7e3e66ff785749cf002672d0c7dc2bd327bde951..cce9db55154da37cecbafe9164c1123b4c16dc8b 100644
--- a/packages/components/packages/FormGroup/package.json
+++ b/packages/components/packages/FormGroup/package.json
@@ -1,15 +1,14 @@
 {
   "name": "pubsweet-component-form-group",
   "version": "1.0.2",
-  "description": "Form component based on react-bootstrap with validation support for PubSweet",
+  "description": "Form component with validation support for PubSweet",
   "main": "index.js",
   "author": "Collaborative Knowledge Foundation",
   "license": "MIT",
   "dependencies": {
     "joi-browser": "^13.0.1",
     "prop-types": "^15.5.10",
-    "pubsweet-server": "^2.0.0",
-    "react-bootstrap": "^0.32.0"
+    "pubsweet-server": "^2.0.0"
   },
   "peerDependencies": {
     "pubsweet-client": ">=1.0.0",
diff --git a/packages/components/packages/HTML/HTML.jsx b/packages/components/packages/HTML/HTML.jsx
index da5766b5216635f481c63aed128bca39345a3809..9e0f8e2d4970c7317ec49662daeafb3284f064f7 100644
--- a/packages/components/packages/HTML/HTML.jsx
+++ b/packages/components/packages/HTML/HTML.jsx
@@ -1,7 +1,11 @@
 import React from 'react'
 import PropTypes from 'prop-types'
+import styled from 'styled-components'
 
-import './HTML.scss'
+const Root = styled.div`
+  margin-left: auto;
+  margin-right: auto;
+`
 
 export default class HTML extends React.Component {
   constructor(props) {
@@ -18,10 +22,7 @@ export default class HTML extends React.Component {
 
     if (fragment) {
       return (
-        <div
-          className="fragment"
-          dangerouslySetInnerHTML={{ __html: fragment.presentation }}
-        />
+        <Root dangerouslySetInnerHTML={{ __html: fragment.presentation }} />
       )
     }
     return <div>No fragment found</div>
diff --git a/packages/components/packages/HTML/HTML.md b/packages/components/packages/HTML/HTML.md
index 204dba12ba5a4c433af64d06e43fc8b4a6cd59ea..464dc9315c5d0fa3a81a66fe7e23d68202d7da88 100644
--- a/packages/components/packages/HTML/HTML.md
+++ b/packages/components/packages/HTML/HTML.md
@@ -1,13 +1,10 @@
-# HTML component
+Load and display a fragment
 
-> Load and display a fragment
+```js
+const getCollections = () => new Promise(() => null)
+const fragment = {
+  presentation: '<h2>This is a title</h2><p>This is some text</p>',
+}
 
-    const getCollections = () => new Promise(() => null);
-    const fragment = {
-        presentation: '<h2>This is a title</h2><p>This is some text</p>'
-    };
-    
-    <HTML
-        id="123" 
-        fragment={fragment} 
-        actions={{getCollections}}/>
\ No newline at end of file
+;<HTML id="123" fragment={fragment} actions={{ getCollections }} />
+```
diff --git a/packages/components/packages/HTML/HTML.scss b/packages/components/packages/HTML/HTML.scss
deleted file mode 100644
index c3e4678886b0fc3bed2440a095381f327fb7cf3c..0000000000000000000000000000000000000000
--- a/packages/components/packages/HTML/HTML.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-.fragment {
-  margin-left: auto;
-  margin-right: auto;
-
-  @media (min-width: 768px) {
-    width: 750px;
-  }
-
-  @media (min-width: 992px) {
-    width: 970px;
-  }
-
-  @media (min-width: 1200px) {
-    width: 1170px;
-  }
-}
diff --git a/packages/components/packages/Login/Login.jsx b/packages/components/packages/Login/Login.jsx
index 6a719356d5af1cdfaaa7cff3b36b5406e2008f90..1395334adf1d8f26b59ca6f3c78f244448d0a247 100644
--- a/packages/components/packages/Login/Login.jsx
+++ b/packages/components/packages/Login/Login.jsx
@@ -1,10 +1,19 @@
 import React from 'react'
 import PropTypes from 'prop-types'
-import { Link } from 'react-router-dom'
 import { Field } from 'redux-form'
-import { Button, TextField } from '@pubsweet/ui'
+import {
+  CenteredColumn,
+  ErrorText,
+  H1,
+  Link,
+  Button,
+  TextField,
+} from '@pubsweet/ui'
+import styled from 'styled-components'
 
-import classes from './Login.local.scss'
+// These enable tests to select components
+const Signup = styled.div``
+const ResetPassword = styled.div``
 
 const UsernameInput = props => <TextField label="Username" {...props.input} />
 const PasswordInput = props => (
@@ -17,37 +26,33 @@ const Login = ({
   signup = true,
   passwordReset = true,
 }) => (
-  <div className={classes.root}>
-    <div className={classes.title}>Login</div>
+  <CenteredColumn small>
+    <H1>Login</H1>
 
-    {error && <div className={classes.error}>{error}</div>}
+    {error && <ErrorText>{error}</ErrorText>}
 
-    <form className={classes.form} onSubmit={handleSubmit}>
+    <form onSubmit={handleSubmit}>
       <Field component={UsernameInput} name="username" />
       <Field component={PasswordInput} name="password" />
-      <Button className={classes.button} primary type="submit">
+      <Button primary type="submit">
         Login
       </Button>
     </form>
 
     {signup && (
-      <div className={classes.alternate}>
-        <span className={classes.message}>Don&apos;t have an account?</span>
-        <Link className={classes.link} to="/signup">
-          Sign up
-        </Link>
-      </div>
+      <Signup>
+        <span>Don&apos;t have an account? </span>
+        <Link to="/signup">Sign up</Link>
+      </Signup>
     )}
 
     {passwordReset && (
-      <div className={classes.alternate}>
-        <span className={classes.message}>Forgot your password?</span>
-        <Link className={classes.link} to="/password-reset">
-          Reset password
-        </Link>
-      </div>
+      <ResetPassword>
+        <span>Forgot your password? </span>
+        <Link to="/password-reset">Reset password</Link>
+      </ResetPassword>
     )}
-  </div>
+  </CenteredColumn>
 )
 
 Login.propTypes = {
@@ -58,4 +63,8 @@ Login.propTypes = {
   passwordReset: PropTypes.bool,
 }
 
+// used by tests
+export { Login, ErrorText, Signup, ResetPassword }
+
+// used by consumers
 export default Login
diff --git a/packages/components/packages/Login/Login.local.scss b/packages/components/packages/Login/Login.local.scss
deleted file mode 100644
index a971e4e10139e5856356bb105ea60af967783aa8..0000000000000000000000000000000000000000
--- a/packages/components/packages/Login/Login.local.scss
+++ /dev/null
@@ -1,78 +0,0 @@
-.root {
-  font-family: 'Fira Sans Condensed', sans-serif;
-  margin: 0 auto;
-  width: 30ch;
-}
-
-.title {
-  font-size: 2em;
-  margin-bottom: 1.2em;
-  text-align: left;
-}
-
-.root input {
-  border: 0 none;
-  border-bottom: 1px dashed #aaa;
-  display: block;
-  font-family: 'Fira Sans', sans-serif;
-  padding: 0;
-  width: 100%;
-}
-
-.form {
-  font-size: 0.8em;
-  margin-top: 1em;
-
-  label {
-    cursor: text;
-    display: block;
-    font-style: italic;
-    text-transform: lowercase;
-
-    &:hover {
-      color: var(--color-primary);
-    }
-
-    input {
-      font-size: 1.3em;
-      line-height: 1;
-      margin-bottom: 3em;
-      margin-top: 0.6em;
-    }
-  }
-}
-
-.root input:hover,
-.root input:focus {
-  border-bottom: 1px dashed var(--color-primary);
-  border-color: transparent;
-  box-shadow: none;
-  outline-style: none;
-}
-
-.button {
-  display: block;
-  margin-top: 1em;
-  padding: 0.4em 2em;
-}
-
-.alternate {
-  color: #777;
-  font-size: 0.8em;
-  margin-top: 1.6em;
-  text-align: left;
-
-  .message {
-    margin-right: 1ch;
-  }
-
-  .link {
-    border-bottom: 1px solid currentcolor;
-    color: var(--color-primary);
-    cursor: pointer;
-  }
-}
-
-.error {
-  color: red;
-}
diff --git a/packages/components/packages/Login/Login.md b/packages/components/packages/Login/Login.md
new file mode 100644
index 0000000000000000000000000000000000000000..3cbb4bea0d2de62a0cb78e2d02a74ed14fe35d88
--- /dev/null
+++ b/packages/components/packages/Login/Login.md
@@ -0,0 +1,26 @@
+A login form
+
+```js
+const { reduxForm } = require('redux-form')
+
+const LoginForm = reduxForm({
+  form: 'login',
+  onSubmit: val => console.log(val),
+})(Login)
+;<LoginForm />
+```
+
+Which can have an error message:
+
+```js
+const { reduxForm, SubmissionError } = require('redux-form')
+
+const LoginForm = reduxForm({
+  form: 'login-error',
+  onSubmit: val => {
+    console.log(val)
+    return Promise.reject(new SubmissionError({ _error: 'Error message' }))
+  },
+})(Login)
+;<LoginForm />
+```
diff --git a/packages/components/packages/Login/Login.test.jsx b/packages/components/packages/Login/Login.test.jsx
index 79cd883466a6144bdb2f986399e3409bef49f044..3249452fb29657e7527474208423fa7f731d1039 100644
--- a/packages/components/packages/Login/Login.test.jsx
+++ b/packages/components/packages/Login/Login.test.jsx
@@ -1,28 +1,28 @@
 import { shallow } from 'enzyme'
 import React from 'react'
 
-import Login from './Login'
+import { Login, ErrorText, Signup, ResetPassword } from './Login'
 
 describe('<Login/>', () => {
   const makeWrapper = (props = {}) => shallow(<Login {...props} />)
 
   it('shows error', () => {
     const wrapper = makeWrapper({ error: 'Yikes!' })
-    expect(wrapper.text()).toContain('Yikes!')
+    expect(wrapper.find(ErrorText)).toHaveLength(1)
   })
 
   it('can hide sign up link', () => {
     const wrapper1 = makeWrapper()
     const wrapper2 = makeWrapper({ signup: false })
-    expect(wrapper1.text()).toContain("Don't have an account?")
-    expect(wrapper2.text()).not.toContain("Don't have an account?")
+    expect(wrapper1.find(Signup)).toHaveLength(1)
+    expect(wrapper2.find(Signup)).toHaveLength(0)
   })
 
   it('can hide password reset link', () => {
     const wrapper1 = makeWrapper()
     const wrapper2 = makeWrapper({ passwordReset: false })
-    expect(wrapper1.text()).toContain('Forgot your password?')
-    expect(wrapper2.text()).not.toContain('Forgot your password?')
+    expect(wrapper1.find(ResetPassword)).toHaveLength(1)
+    expect(wrapper2.find(ResetPassword)).toHaveLength(0)
   })
 
   it('triggers submit handler', () => {
diff --git a/packages/components/packages/Login/package.json b/packages/components/packages/Login/package.json
index 05ddbea85b5692ed07957d08f36766da36b80dd2..f6dc45d29727e65fff9c76989bb97455613fa4e5 100644
--- a/packages/components/packages/Login/package.json
+++ b/packages/components/packages/Login/package.json
@@ -7,7 +7,6 @@
   "license": "MIT",
   "dependencies": {
     "prop-types": "^15.5.10",
-    "react-bootstrap": "^0.32.0",
     "react-redux": "^5.0.6",
     "react-router-dom": "^4.2.2",
     "react-router-redux": "^5.0.0-alpha.9",
diff --git a/packages/components/packages/PasswordResetFrontend/PasswordReset.jsx b/packages/components/packages/PasswordResetFrontend/PasswordReset.jsx
index 9e9f5de8ead6fb437a976762256d67ad6d7b96f5..a8d230831479954f63d1a8374d00231acb48ba63 100644
--- a/packages/components/packages/PasswordResetFrontend/PasswordReset.jsx
+++ b/packages/components/packages/PasswordResetFrontend/PasswordReset.jsx
@@ -1,19 +1,19 @@
 import React from 'react'
 import { Link, withRouter } from 'react-router-dom'
 import PropTypes from 'prop-types'
-import {
-  Grid,
-  Row,
-  Col,
-  Alert,
-  FormGroup,
-  ControlLabel,
-  Button,
-  FormControl,
-} from 'react-bootstrap'
 import queryString from 'query-string'
+import styled from 'styled-components'
+import { TextField, Button, th } from '@pubsweet/ui'
 import * as api from 'pubsweet-client/src/helpers/api'
-import styles from './PasswordReset.local.scss'
+
+const Root = styled.div`
+  margin: 0 auto;
+  width: 40ch;
+`
+
+const Alert = styled.div`
+  color: ${th('colorError')};
+`
 
 class PasswordReset extends React.Component {
   constructor(props) {
@@ -137,12 +137,10 @@ class PasswordReset extends React.Component {
     const {
       username,
       emailSent,
-      emailError,
       emailErrorMessage,
       emailSending,
       password,
       passwordChanged,
-      passwordError,
       passwordErrorMessage,
       passwordSending,
     } = this.state
@@ -152,7 +150,7 @@ class PasswordReset extends React.Component {
     const buildForm = () => {
       if (passwordChanged) {
         return (
-          <Alert bsStyle="success">
+          <Alert>
             Your password has been changed, you can now{' '}
             <Link to="/login">login with the new password</Link>.
           </Alert>
@@ -164,27 +162,17 @@ class PasswordReset extends React.Component {
 
         return (
           <form onSubmit={this.handlePasswordSubmit}>
-            <FormGroup validationState={passwordError ? 'error' : 'success'}>
-              <ControlLabel>New password</ControlLabel>
-
-              <FormControl
-                onChange={this.handlePasswordChange}
-                placeholder="Enter a new password…"
-                type="password"
-                value={password}
-              />
-            </FormGroup>
-
-            <div>
-              <Button
-                block
-                bsStyle="primary"
-                disabled={passwordSending}
-                type="submit"
-              >
-                {passwordSending ? 'Saving…' : 'Save new password'}
-              </Button>
-            </div>
+            <TextField
+              label="New password"
+              onChange={this.handlePasswordChange}
+              placeholder="Enter a new password…"
+              type="password"
+              value={password}
+            />
+
+            <Button disabled={passwordSending} type="submit">
+              {passwordSending ? 'Saving…' : 'Save new password'}
+            </Button>
           </form>
         )
       }
@@ -201,27 +189,16 @@ class PasswordReset extends React.Component {
 
       return (
         <form onSubmit={this.handleUsernameSubmit}>
-          <FormGroup validationState={emailError ? 'error' : 'success'}>
-            <ControlLabel>Username</ControlLabel>
-
-            <FormControl
-              onChange={this.handleUsernameChange}
-              placeholder="Enter your username"
-              type="text"
-              value={username}
-            />
-          </FormGroup>
-
-          <div>
-            <Button
-              block
-              bsStyle="primary"
-              disabled={emailSending}
-              type="submit"
-            >
-              {emailSending ? 'Sending…' : 'Send email'}
-            </Button>
-          </div>
+          <TextField
+            label="Username"
+            onChange={this.handleUsernameChange}
+            placeholder="Enter your username"
+            type="text"
+            value={username}
+          />
+          <Button disabled={emailSending} type="submit">
+            {emailSending ? 'Sending…' : 'Send email'}
+          </Button>
         </form>
       )
     }
@@ -259,37 +236,16 @@ class PasswordReset extends React.Component {
     }
 
     return (
-      <div className="bootstrap" style={{ marginTop: 20 }}>
-        <Grid>
-          <Row>
-            <Col md={2} mdOffset={5}>
-              <img
-                alt="pubsweet-logo"
-                className={styles.logo}
-                src="/assets/pubsweet-rgb-small.jpg"
-                style={{ maxWidth: '100%' }}
-              />
-            </Col>
-          </Row>
-
-          <Row>
-            <Col md={4}>
-              {buildError(emailErrorMessage)}
-              {buildError(passwordErrorMessage)}
-            </Col>
-
-            <Col className={styles.passwordReset} md={4} xs={12}>
-              <h1>Password reset</h1>
-
-              {buildForm()}
-
-              <div style={{ marginTop: 20 }}>
-                <Link to="/login">Return to login form</Link>
-              </div>
-            </Col>
-          </Row>
-        </Grid>
-      </div>
+      <Root>
+        {buildError(emailErrorMessage)}
+        {buildError(passwordErrorMessage)}
+
+        <h1>Password reset</h1>
+
+        {buildForm()}
+
+        <Link to="/login">Return to login form</Link>
+      </Root>
     )
   }
 }
diff --git a/packages/components/packages/PasswordResetFrontend/PasswordReset.local.scss b/packages/components/packages/PasswordResetFrontend/PasswordReset.local.scss
deleted file mode 100644
index 9ad02b6f44bac4527c792a3a66492f0f6270122e..0000000000000000000000000000000000000000
--- a/packages/components/packages/PasswordResetFrontend/PasswordReset.local.scss
+++ /dev/null
@@ -1 +0,0 @@
-// This file is meant to be overridden by the styles provided by pubsweet-theme-plugin (this way of theming is deprecated)
diff --git a/packages/components/packages/PasswordResetFrontend/package.json b/packages/components/packages/PasswordResetFrontend/package.json
index b5a0877b1a9225f2e09521d2bbf4fa705e935204..278165dc6129489380802354c5e773582eb00030 100644
--- a/packages/components/packages/PasswordResetFrontend/package.json
+++ b/packages/components/packages/PasswordResetFrontend/package.json
@@ -6,10 +6,11 @@
   "author": "Collaborative Knowledge Foundation",
   "license": "MIT",
   "dependencies": {
+    "@pubsweet/ui": "^2.0.0",
     "prop-types": "^15.5.10",
     "query-string": "^5.0.0",
-    "react-bootstrap": "^0.32.0",
-    "react-router": "^4.2.0"
+    "react-router": "^4.2.0",
+    "styled-components": "^2.4.0"
   },
   "peerDependencies": {
     "pubsweet-client": ">=1.0.0",
diff --git a/packages/components/packages/PostsManager/Post.jsx b/packages/components/packages/PostsManager/Post.jsx
index 34a9d7ac6598150137e92cc8b197592ae7aa3962..e01bd32a2e671b2763339399c221804184337f6d 100644
--- a/packages/components/packages/PostsManager/Post.jsx
+++ b/packages/components/packages/PostsManager/Post.jsx
@@ -1,16 +1,14 @@
 import React from 'react'
+import { withRouter } from 'react-router'
 import PropTypes from 'prop-types'
-import { Button } from 'react-bootstrap'
-import { LinkContainer } from 'react-router-bootstrap'
+import { Button, EditableValue } from '@pubsweet/ui'
 
 import Authorize from 'pubsweet-client/src/helpers/Authorize'
-import TextInput from './TextInput'
-import styles from './Post.local.scss'
 
-export default class Post extends React.Component {
+class Post extends React.Component {
   constructor(props) {
     super(props)
-    this.onSave = this.onSave.bind(this)
+    this.onUpdateTitle = this.onUpdateTitle.bind(this)
     this.onPublish = this.onPublish.bind(this)
     this.onUnpublish = this.onUnpublish.bind(this)
     this.onDestroyClick = this.onDestroyClick.bind(this)
@@ -21,7 +19,7 @@ export default class Post extends React.Component {
     }
   }
 
-  onSave(title) {
+  onUpdateTitle(title) {
     this.props.update(
       this.props.blog,
       Object.assign(this.props.blogpost, {
@@ -59,40 +57,18 @@ export default class Post extends React.Component {
 
   render() {
     const { blogpost, number } = this.props
-    let input
-    if (this.state.isEditing) {
-      input = (
-        <TextInput
-          className="edit"
-          onSave={this.onSave}
-          value={blogpost.title}
-        />
-      )
-    }
 
     let changePublished
     if (!blogpost.published) {
       changePublished = (
-        <Button
-          aria-label="Publish"
-          bsStyle="success"
-          className={styles.button}
-          onClick={this.onPublish}
-          title="Publish"
-        >
-          <i className="fa fa-paper-plane-o" />
+        <Button onClick={this.onPublish} plain>
+          Publish
         </Button>
       )
     } else {
       changePublished = (
-        <Button
-          aria-label="Unpublish"
-          bsStyle="warning"
-          className={styles.button}
-          onClick={this.onUnpublish}
-          title="Unpublish"
-        >
-          <i className="fa fa-chain-broken" />
+        <Button onClick={this.onUnpublish} plain>
+          Unpublish
         </Button>
       )
     }
@@ -103,30 +79,29 @@ export default class Post extends React.Component {
 
     return (
       <tr key={blogpost.key}>
-        <td className="index">{number}</td>
-        <td className="main">
-          <label onDoubleClick={this.onDoubleClick}>{blogpost.title}</label>
-          {input}
+        <td>{number}</td>
+        <td>
+          <EditableValue
+            onSave={this.onUpdateTitle}
+            required
+            value={this.props.blogpost.title}
+          />
         </td>
         <td>{blogpost.owners.map(owner => owner.username).join(', ')}</td>
-        <td className={blogpost.published ? 'published' : 'unpublished'}>
-          <i className="fa fa-circle" /> ({blogpost.published
-            ? 'Published'
-            : 'Unpublished'}) <br />
+        <td>
+          {blogpost.published ? 'Published' : 'Unpublished'} <br />
           {blogpost.published_at}
         </td>
         <td>
           <Authorize object={blogpost} operation="PATCH">
-            <LinkContainer to={`/manage/sciencewriter/${blogpost.id}`}>
-              <Button
-                aria-label="Edit"
-                bsStyle="primary"
-                className={styles.button}
-                title="Edit"
-              >
-                <i className="fa fa-pencil" />
-              </Button>
-            </LinkContainer>
+            <Button
+              onClick={() =>
+                this.props.history.push(`/manage/sciencewriter/${blogpost.id}`)
+              }
+              plain
+            >
+              Edit
+            </Button>
           </Authorize>
 
           <Authorize object={blogpost} operation="PATCH">
@@ -134,14 +109,8 @@ export default class Post extends React.Component {
           </Authorize>
 
           <Authorize object={blogpost} operation="DELETE">
-            <Button
-              aria-label="Delete"
-              bsStyle="danger"
-              className={styles.button}
-              onClick={this.onDestroyClick}
-              title="Delete"
-            >
-              <i className="fa fa-trash-o" />
+            <Button onClick={this.onDestroyClick} plain>
+              Delete
             </Button>
           </Authorize>
         </td>
@@ -157,3 +126,5 @@ Post.propTypes = {
   delete: PropTypes.func,
   update: PropTypes.func,
 }
+
+export default withRouter(Post)
diff --git a/packages/components/packages/PostsManager/Post.local.scss b/packages/components/packages/PostsManager/Post.local.scss
deleted file mode 100644
index f56466406783395f795103a7405b06ebc7d1800d..0000000000000000000000000000000000000000
--- a/packages/components/packages/PostsManager/Post.local.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-.button {
-  margin-right: 5px !important;
-}
diff --git a/packages/components/packages/PostsManager/PostCreator.jsx b/packages/components/packages/PostsManager/PostCreator.jsx
index 85ae46699bf654f142165227089421337b8259ad..a03d17783375948f30d37ae69ffc216ea77b99b9 100644
--- a/packages/components/packages/PostsManager/PostCreator.jsx
+++ b/packages/components/packages/PostsManager/PostCreator.jsx
@@ -1,16 +1,23 @@
 import React from 'react'
 import PropTypes from 'prop-types'
-import { Button } from 'react-bootstrap'
-import FormGroup from 'pubsweet-component-form-group/FormGroup'
+import { Button, TextField } from '@pubsweet/ui'
 
 export default class PostCreator extends React.Component {
   constructor(props) {
     super(props)
     this.onSave = this.onSave.bind(this)
+    this.onTitleChange = this.onTitleChange.bind(this)
+    this.state = { title: '' }
   }
 
-  onSave(text) {
-    const title = this.titleInputNode.value
+  onTitleChange(event) {
+    this.setState({ title: event ? event.target.value : '' })
+  }
+
+  onSave(event) {
+    event.preventDefault()
+
+    const { title } = this.state
 
     if (title !== '') {
       this.props.create({
@@ -18,32 +25,24 @@ export default class PostCreator extends React.Component {
         title,
         published: false,
       })
+      this.setState({ title: '' })
     }
-
-    this.titleInputNode.blur()
   }
+
   render() {
     return (
-      <div>
+      <form onSubmit={this.onSave}>
         <h3>Create a new blog post</h3>
-        <FormGroup
-          controlId="fragment.title"
-          inputRef={input => {
-            this.titleInputNode = input
-          }}
+        <TextField
           label="Title"
-          modelProperty="fragment.title"
+          name="title"
+          onChange={this.onTitleChange}
           placeholder="One fine day..."
+          required
+          value={this.state.title}
         />
-        <Button
-          aria-label="Create"
-          bsStyle="primary"
-          onClick={this.onSave}
-          title="Create"
-        >
-          <i className="fa fa-plus" /> Create
-        </Button>
-      </div>
+        <Button type="submit">Create</Button>
+      </form>
     )
   }
 }
diff --git a/packages/components/packages/PostsManager/PostCreator.scss b/packages/components/packages/PostsManager/PostCreator.scss
deleted file mode 100644
index 9ad02b6f44bac4527c792a3a66492f0f6270122e..0000000000000000000000000000000000000000
--- a/packages/components/packages/PostsManager/PostCreator.scss
+++ /dev/null
@@ -1 +0,0 @@
-// This file is meant to be overridden by the styles provided by pubsweet-theme-plugin (this way of theming is deprecated)
diff --git a/packages/components/packages/PostsManager/PostList.jsx b/packages/components/packages/PostsManager/PostList.jsx
index a06e3530ca63eb4064476baf420c63a12717c13f..cfe0058228596bb41b6a5e3e6cdf5896b114bf78 100644
--- a/packages/components/packages/PostsManager/PostList.jsx
+++ b/packages/components/packages/PostsManager/PostList.jsx
@@ -2,8 +2,6 @@ import React from 'react'
 import PropTypes from 'prop-types'
 import Post from './Post'
 
-import styles from './PostList.scss'
-
 const PostList = props => {
   const blogposts = props.blogposts.map((blogpost, key) => {
     const id = blogpost.id ? blogpost.id : key + 1
@@ -20,12 +18,12 @@ const PostList = props => {
     )
   })
   return (
-    <div className={styles.list}>
-      <table className="table table-hover">
+    <div>
+      <table>
         <thead>
           <tr>
-            <th className="index">#</th>
-            <th className="main">Title</th>
+            <th>#</th>
+            <th>Title</th>
             <th>Author</th>
             <th>Status</th>
             <th>Actions</th>
diff --git a/packages/components/packages/PostsManager/PostList.scss b/packages/components/packages/PostsManager/PostList.scss
deleted file mode 100644
index 9ad02b6f44bac4527c792a3a66492f0f6270122e..0000000000000000000000000000000000000000
--- a/packages/components/packages/PostsManager/PostList.scss
+++ /dev/null
@@ -1 +0,0 @@
-// This file is meant to be overridden by the styles provided by pubsweet-theme-plugin (this way of theming is deprecated)
diff --git a/packages/components/packages/PostsManager/PostsManager.jsx b/packages/components/packages/PostsManager/PostsManager.jsx
index e63509ae57cfc362917257776b8df4f84d430100..8ba6e3cfcd59f48802861f3709d6017de855463d 100644
--- a/packages/components/packages/PostsManager/PostsManager.jsx
+++ b/packages/components/packages/PostsManager/PostsManager.jsx
@@ -1,10 +1,8 @@
 import React from 'react'
 import PropTypes from 'prop-types'
-import { Grid, Alert } from 'react-bootstrap'
 import Authorize from 'pubsweet-client/src/helpers/Authorize'
 import PostList from './PostList'
 import PostCreator from './PostCreator'
-import styles from './PostsManager.local.scss'
 
 export default class PostsManager extends React.Component {
   componentWillMount() {
@@ -19,37 +17,27 @@ export default class PostsManager extends React.Component {
 
     if (Array.isArray(blogposts) && blog) {
       return (
-        <div className="bootstrap">
-          <div className={styles.container}>
-            <Grid>
-              <Authorize
-                object={blog}
-                operation="GET"
-                unauthorized={
-                  <Alert bsStyle="warning">
-                    You are not authorized to view this page.
-                  </Alert>
-                }
-              >
-                <div>
-                  {error ? <Alert bsStyle="warning">{error}</Alert> : null}
-                  <h2 className={styles.header}>{blog && blog.title}</h2>
-                  <h3 className={styles.header}>blog posts</h3>
-                  <PostList
-                    blog={blog}
-                    blogposts={blogposts}
-                    currentUser={currentUser}
-                    delete={actions.deleteFragment}
-                    update={actions.updateFragment}
-                  />
-                  <Authorize object={blog} operation="POST">
-                    <PostCreator create={createBlogpost} />
-                  </Authorize>
-                </div>
-              </Authorize>
-            </Grid>
+        <Authorize
+          object={blog}
+          operation="GET"
+          unauthorized={<div>You are not authorized to view this page.</div>}
+        >
+          <div>
+            {error ? <div>{error}</div> : null}
+            <h2>{blog && blog.title}</h2>
+            <h3>blog posts</h3>
+            <PostList
+              blog={blog}
+              blogposts={blogposts}
+              currentUser={currentUser}
+              delete={actions.deleteFragment}
+              update={actions.updateFragment}
+            />
+            <Authorize object={blog} operation="POST">
+              <PostCreator create={createBlogpost} />
+            </Authorize>
           </div>
-        </div>
+        </Authorize>
       )
     }
 
diff --git a/packages/components/packages/PostsManager/PostsManager.local.scss b/packages/components/packages/PostsManager/PostsManager.local.scss
deleted file mode 100644
index 9ad02b6f44bac4527c792a3a66492f0f6270122e..0000000000000000000000000000000000000000
--- a/packages/components/packages/PostsManager/PostsManager.local.scss
+++ /dev/null
@@ -1 +0,0 @@
-// This file is meant to be overridden by the styles provided by pubsweet-theme-plugin (this way of theming is deprecated)
diff --git a/packages/components/packages/PostsManager/TextInput.js b/packages/components/packages/PostsManager/TextInput.js
deleted file mode 100644
index 168ddf3dd4a440a235bea8c42d333188b827d829..0000000000000000000000000000000000000000
--- a/packages/components/packages/PostsManager/TextInput.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import React from 'react'
-import PropTypes from 'prop-types'
-
-const ENTER_KEY_CODE = 13
-
-export default class TextInput extends React.Component {
-  constructor(props) {
-    super(props)
-    this._save = this._save.bind(this)
-    this._onChange = this._onChange.bind(this)
-    this._onKeyDown = this._onKeyDown.bind(this)
-    this.state = {
-      value: this.props.value || '',
-    }
-  }
-
-  _save() {
-    this.props.onSave(this.state.value)
-    this.setState({
-      value: '',
-    })
-  }
-
-  _onChange(event) {
-    this.setState({
-      value: event.target.value,
-    })
-  }
-
-  _onKeyDown(event) {
-    if (event.keyCode === ENTER_KEY_CODE) {
-      this._save()
-    }
-  }
-
-  render() {
-    return (
-      <input
-        // eslint-disable-next-line jsx-a11y/no-autofocus
-        autoFocus
-        className={this.props.className}
-        id={this.props.id}
-        onChange={this._onChange}
-        onKeyDown={this._onKeyDown}
-        placeholder={this.props.placeholder}
-        value={this.state.value}
-      />
-    )
-  }
-}
-
-TextInput.propTypes = {
-  className: PropTypes.string,
-  id: PropTypes.string,
-  placeholder: PropTypes.string,
-  onSave: PropTypes.func.isRequired,
-  value: PropTypes.string,
-}
diff --git a/packages/components/packages/PostsManager/package.json b/packages/components/packages/PostsManager/package.json
index d8e60a0c086f0bc85f69708522299c6db7e61538..70f3075072295850ded1c5e2f6b1089220dbeded 100644
--- a/packages/components/packages/PostsManager/package.json
+++ b/packages/components/packages/PostsManager/package.json
@@ -6,12 +6,11 @@
   "author": "Collaborative Knowledge Foundation",
   "license": "MIT",
   "dependencies": {
+    "@pubsweet/ui": "^2.0.0",
     "prop-types": "^15.5.10",
-    "pubsweet-component-form-group": "^1.0.2",
-    "react-bootstrap": "^0.32.0",
+    "pubsweet-component-form-group": "^1.0.0",
     "react-dom": "^16.2.0",
     "react-redux": "^5.0.6",
-    "react-router-bootstrap": "^0.24.4",
     "react-router-dom": "^4.2.2",
     "redux": "^3.7.2"
   },
diff --git a/packages/components/packages/Signup/Signup.jsx b/packages/components/packages/Signup/Signup.jsx
index b12efd5e11350c5626d745aaba949d0a5e002d51..e6c5bc700d0f2415cecf50ec3f8201d9042dcb28 100644
--- a/packages/components/packages/Signup/Signup.jsx
+++ b/packages/components/packages/Signup/Signup.jsx
@@ -1,8 +1,13 @@
 import React from 'react'
 import { Field } from 'redux-form'
-import { Link } from 'react-router-dom'
-import { Button, TextField } from '@pubsweet/ui'
-import classes from './Signup.local.scss'
+import {
+  CenteredColumn,
+  Link,
+  H1,
+  ErrorText,
+  Button,
+  TextField,
+} from '@pubsweet/ui'
 
 const UsernameInput = props => <TextField label="Username" {...props.input} />
 const EmailInput = props => (
@@ -13,27 +18,25 @@ const PasswordInput = props => (
 )
 
 const Signup = ({ error, handleSubmit }) => (
-  <div className={classes.root}>
-    <div className={classes.title}>Sign up</div>
+  <CenteredColumn small>
+    <H1>Sign up</H1>
 
-    {error && <div className={classes.error}>{error}</div>}
+    {error && <ErrorText>{error}</ErrorText>}
 
-    <form className={classes.form} onSubmit={handleSubmit}>
+    <form onSubmit={handleSubmit}>
       <Field component={UsernameInput} name="username" />
       <Field component={EmailInput} name="email" />
       <Field component={PasswordInput} name="password" />
-      <Button className={classes.button} primary type="submit">
+      <Button primary type="submit">
         Sign up
       </Button>
     </form>
 
-    <div className={classes.alternate}>
-      <span className={classes.message}>Already have an account?</span>
-      <Link className={classes.link} to="/login">
-        Login
-      </Link>
+    <div>
+      <span>Already have an account? </span>
+      <Link to="/login">Login</Link>
     </div>
-  </div>
+  </CenteredColumn>
 )
 
 export default Signup
diff --git a/packages/components/packages/Signup/Signup.local.scss b/packages/components/packages/Signup/Signup.local.scss
deleted file mode 100644
index a971e4e10139e5856356bb105ea60af967783aa8..0000000000000000000000000000000000000000
--- a/packages/components/packages/Signup/Signup.local.scss
+++ /dev/null
@@ -1,78 +0,0 @@
-.root {
-  font-family: 'Fira Sans Condensed', sans-serif;
-  margin: 0 auto;
-  width: 30ch;
-}
-
-.title {
-  font-size: 2em;
-  margin-bottom: 1.2em;
-  text-align: left;
-}
-
-.root input {
-  border: 0 none;
-  border-bottom: 1px dashed #aaa;
-  display: block;
-  font-family: 'Fira Sans', sans-serif;
-  padding: 0;
-  width: 100%;
-}
-
-.form {
-  font-size: 0.8em;
-  margin-top: 1em;
-
-  label {
-    cursor: text;
-    display: block;
-    font-style: italic;
-    text-transform: lowercase;
-
-    &:hover {
-      color: var(--color-primary);
-    }
-
-    input {
-      font-size: 1.3em;
-      line-height: 1;
-      margin-bottom: 3em;
-      margin-top: 0.6em;
-    }
-  }
-}
-
-.root input:hover,
-.root input:focus {
-  border-bottom: 1px dashed var(--color-primary);
-  border-color: transparent;
-  box-shadow: none;
-  outline-style: none;
-}
-
-.button {
-  display: block;
-  margin-top: 1em;
-  padding: 0.4em 2em;
-}
-
-.alternate {
-  color: #777;
-  font-size: 0.8em;
-  margin-top: 1.6em;
-  text-align: left;
-
-  .message {
-    margin-right: 1ch;
-  }
-
-  .link {
-    border-bottom: 1px solid currentcolor;
-    color: var(--color-primary);
-    cursor: pointer;
-  }
-}
-
-.error {
-  color: red;
-}
diff --git a/packages/components/packages/Signup/Signup.md b/packages/components/packages/Signup/Signup.md
new file mode 100644
index 0000000000000000000000000000000000000000..6ba7e53aba41eb4e195bf18eeeb1a3197de0f3d0
--- /dev/null
+++ b/packages/components/packages/Signup/Signup.md
@@ -0,0 +1,26 @@
+A login form
+
+```js
+const { reduxForm } = require('redux-form')
+
+const SignupForm = reduxForm({
+  form: 'signup',
+  onChange: values => console.log(values),
+})(Signup)
+;<SignupForm />
+```
+
+Which can have an error message:
+
+```js
+const { reduxForm, SubmissionError } = require('redux-form')
+
+const SignupForm = reduxForm({
+  form: 'signup-error',
+  onSubmit: val => {
+    console.log(val)
+    return Promise.reject(new SubmissionError({ _error: 'Error message' }))
+  },
+})(Signup)
+;<SignupForm />
+```
diff --git a/packages/components/packages/TeamsManager/Team.jsx b/packages/components/packages/TeamsManager/Team.jsx
index 972915804ce1648cfd3b24255feac3ae09b04f47..17771fd4f1ca3dd873fc6bdb1ac475d4fdd76d04 100644
--- a/packages/components/packages/TeamsManager/Team.jsx
+++ b/packages/components/packages/TeamsManager/Team.jsx
@@ -1,8 +1,6 @@
 import React from 'react'
 import PropTypes from 'prop-types'
-import Select from 'react-select'
-import 'react-select/dist/react-select.css'
-import { Button } from 'react-bootstrap'
+import { Button, Menu } from '@pubsweet/ui'
 
 class Team extends React.Component {
   constructor(props) {
@@ -30,7 +28,7 @@ class Team extends React.Component {
     }))
 
     return (
-      <tr className="team">
+      <tr>
         <td>{number}</td>
         <td>{team.name}</td>
         <td>
@@ -40,7 +38,8 @@ class Team extends React.Component {
           {team.object.type} {team.object.id}
         </td>
         <td>
-          <Select
+          <Menu
+            inline
             multi
             name="members"
             onChange={this.updateMembers}
@@ -49,14 +48,7 @@ class Team extends React.Component {
           />
         </td>
         <td>
-          <Button
-            aria-label="Delete"
-            bsStyle="danger"
-            onClick={this.onDelete}
-            title="Delete"
-          >
-            <i className="fa fa-trash-o" />
-          </Button>
+          <Button onClick={this.onDelete}>Delete</Button>
         </td>
       </tr>
     )
diff --git a/packages/components/packages/TeamsManager/TeamCreator.jsx b/packages/components/packages/TeamsManager/TeamCreator.jsx
index 4fa4627d868483902c221034d14d4bcf64286af5..5ccdea05cd7469383d7fbc1efe3940fb8ef58426 100644
--- a/packages/components/packages/TeamsManager/TeamCreator.jsx
+++ b/packages/components/packages/TeamsManager/TeamCreator.jsx
@@ -1,8 +1,6 @@
 import React from 'react'
 import PropTypes from 'prop-types'
-import { FormControl, Button, Row, Col } from 'react-bootstrap'
-import Select from 'react-select'
-import 'react-select/dist/react-select.css'
+import { Button, Menu, TextField } from '@pubsweet/ui'
 
 export default class TeamCreator extends React.Component {
   constructor(props) {
@@ -41,19 +39,24 @@ export default class TeamCreator extends React.Component {
         },
         members: [],
       })
+      this.setState({
+        teamName: '',
+        collectionSelected: null,
+        teamTypeSelected: null,
+      })
     }
   }
 
   onNameChange(event) {
-    this.setState({ teamName: event ? event.target.value : null })
+    this.setState({ teamName: event ? event.target.value : '' })
   }
 
-  onCollectionSelect(collection) {
-    this.setState({ collectionSelected: collection ? collection.value : null })
+  onCollectionSelect(collectionId) {
+    this.setState({ collectionSelected: collectionId || null })
   }
 
   onTeamTypeSelect(teamType) {
-    this.setState({ teamTypeSelected: teamType ? teamType.value : null })
+    this.setState({ teamTypeSelected: teamType || null })
   }
 
   render() {
@@ -72,45 +75,31 @@ export default class TeamCreator extends React.Component {
     return (
       <form onSubmit={this.onSave}>
         <h3>Create a new team</h3>
-        <FormControl
+        <TextField
           label="Name"
           name="teamName"
           onChange={this.onNameChange}
           placeholder="Team Awesome"
           required
-          type="text"
+          value={this.state.teamName}
+        />
+        <h4>Team type</h4>
+        <Menu
+          name="teamType"
+          onChange={this.onTeamTypeSelect}
+          options={types}
+          required
+          value={this.state.teamTypeSelected}
+        />
+        <h4>Collection</h4>
+        <Menu
+          name="collection"
+          onChange={this.onCollectionSelect}
+          options={collections}
+          required
+          value={this.state.collectionSelected}
         />
-        <Row>
-          <Col md={3}>
-            <h4>Team type</h4>
-            <Select
-              name="teamType"
-              onChange={this.onTeamTypeSelect}
-              options={types}
-              required
-              value={this.state.teamTypeSelected}
-            />
-          </Col>
-          <Col md={9}>
-            <h4>Collection</h4>
-            <Select
-              name="collection"
-              onChange={this.onCollectionSelect}
-              options={collections}
-              required
-              value={this.state.collectionSelected}
-            />
-          </Col>
-        </Row>
-        <br />
-        <Button
-          aria-label="Create"
-          bsStyle="primary"
-          title="Create"
-          type="submit"
-        >
-          <i className="fa fa-plus" /> Create
-        </Button>
+        <Button type="submit">Create</Button>
       </form>
     )
   }
diff --git a/packages/components/packages/TeamsManager/TeamsManager.jsx b/packages/components/packages/TeamsManager/TeamsManager.jsx
index 1017ab19be89260d492ed61c8bb6f760e7413f1e..469e719500c9985779c5c361f0c3d3dfb2f5584d 100644
--- a/packages/components/packages/TeamsManager/TeamsManager.jsx
+++ b/packages/components/packages/TeamsManager/TeamsManager.jsx
@@ -1,6 +1,5 @@
 import React from 'react'
 import PropTypes from 'prop-types'
-import { Grid, Alert } from 'react-bootstrap'
 import config from 'config'
 
 import Team from './Team'
@@ -18,41 +17,39 @@ export default class TeamsManager extends React.Component {
 
     if (teams && collections && users) {
       return (
-        <div className="bootstrap pubsweet-component pubsweet-component-scroll">
-          <Grid>
-            {error ? <Alert bsStyle="warning">{error}</Alert> : null}
-            <div>
-              <table className="table">
-                <thead>
-                  <tr>
-                    <th>#</th>
-                    <th>Name</th>
-                    <th>Type</th>
-                    <th>Object</th>
-                    <th>Members</th>
-                    <th>Actions</th>
-                  </tr>
-                </thead>
-                <tbody>
-                  {teams.map((team, key) => (
-                    <Team
-                      delete={actions.deleteTeam}
-                      key={team.id}
-                      number={key + 1}
-                      team={team}
-                      update={actions.updateTeam}
-                      users={users}
-                    />
-                  ))}
-                </tbody>
-              </table>
-              <TeamCreator
-                collections={collections}
-                create={actions.createTeam}
-                types={config.authsome.teams}
-              />
-            </div>
-          </Grid>
+        <div>
+          {error ? <div>{error}</div> : null}
+          <div>
+            <table>
+              <thead>
+                <tr>
+                  <th>#</th>
+                  <th>Name</th>
+                  <th>Type</th>
+                  <th>Object</th>
+                  <th>Members</th>
+                  <th>Actions</th>
+                </tr>
+              </thead>
+              <tbody>
+                {teams.map((team, key) => (
+                  <Team
+                    delete={actions.deleteTeam}
+                    key={team.id}
+                    number={key + 1}
+                    team={team}
+                    update={actions.updateTeam}
+                    users={users}
+                  />
+                ))}
+              </tbody>
+            </table>
+            <TeamCreator
+              collections={collections}
+              create={actions.createTeam}
+              types={config.authsome.teams}
+            />
+          </div>
         </div>
       )
     }
diff --git a/packages/components/packages/TeamsManager/package.json b/packages/components/packages/TeamsManager/package.json
index 5d39e83281a14ef034eb3aba78a302a8b0c96bff..a5f9522acb0211b1d0e1bc6179f256db888e2703 100644
--- a/packages/components/packages/TeamsManager/package.json
+++ b/packages/components/packages/TeamsManager/package.json
@@ -6,11 +6,10 @@
   "author": "Collaborative Knowledge Foundation",
   "license": "MIT",
   "dependencies": {
+    "@pubsweet/ui": "^2.0.0",
     "prop-types": "^15.5.10",
-    "react-bootstrap": "^0.32.0",
     "react-dom": "^16.2.0",
     "react-redux": "^5.0.6",
-    "react-select": "^1.0.0-rc.10",
     "redux": "^3.7.2"
   },
   "peerDependencies": {
diff --git a/packages/components/styleguide.config.js b/packages/components/styleguide.config.js
index 480071b7d9e725f876d85546c1b747f24b79abd4..ebcb484b3c248f802aa5d01e787b91d7c98756ba 100644
--- a/packages/components/styleguide.config.js
+++ b/packages/components/styleguide.config.js
@@ -1,13 +1,23 @@
 module.exports = {
+  context: {
+    faker: 'faker',
+  },
   styleguideComponents: {
-    Wrapper: require.resolve('./styleguidist/Wrapper.jsx'),
+    Wrapper: require.resolve('@pubsweet/styleguide/src/components/Wrapper'),
+    StyleGuideRenderer: require.resolve(
+      '@pubsweet/styleguide/src/components/StyleGuideRenderer',
+    ),
   },
   components: 'packages/**/*.jsx',
+  skipComponentsWithoutExample: true,
+  serverPort: 6063,
+  title: 'PubSweet Components',
   ignore: [
     '**/packages/Manage/**',
     '**/packages/InkBackend/**',
     '**/packages/PasswordResetBackend/**',
     '**/packages/MediumDraft/CustomImageSideButton.jsx',
+    '**/packages/FormGroup/FormGroup.jsx',
     '**/node_modules/**',
     '**/*.test.{js,jsx}',
   ],
diff --git a/packages/components/styleguidist/Wrapper.jsx b/packages/components/styleguidist/Wrapper.jsx
deleted file mode 100644
index 57ebf6f85a03ec90390654b79f146a30d4418c72..0000000000000000000000000000000000000000
--- a/packages/components/styleguidist/Wrapper.jsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react'
-import PropTypes from 'prop-types'
-import { Provider } from 'react-redux'
-import { createStore, applyMiddleware } from 'redux'
-import thunk from 'redux-thunk'
-import { BrowserRouter } from 'react-router-dom'
-
-const initialState = {}
-const store = createStore(state => state, initialState, applyMiddleware(thunk))
-
-const Wrapper = ({ children }) => (
-  <BrowserRouter>
-    <Provider store={store}>{children}</Provider>
-  </BrowserRouter>
-)
-
-Wrapper.propTypes = {
-  children: PropTypes.node,
-}
-
-export default Wrapper
diff --git a/packages/components/styleguidist/config.json b/packages/components/styleguidist/config.json
deleted file mode 100644
index 8e30f6b1aca7e0a53f20373f61dfdd64d1b1ecdd..0000000000000000000000000000000000000000
--- a/packages/components/styleguidist/config.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "pubsweet-server": {},
-  "pubsweet-client": {
-    "API_ENDPOINT": ""
-  }
-}
\ No newline at end of file
diff --git a/packages/components/webpack.config.js b/packages/components/webpack.config.js
index 7a7eed4f57450d88af2f949a0e375bdcac43e3a8..7305b52ffc7eef9adc0486a07feeab156a507e0a 100644
--- a/packages/components/webpack.config.js
+++ b/packages/components/webpack.config.js
@@ -1,61 +1,22 @@
 const path = require('path')
-const webpack = require('webpack')
+const config = require('config')
+const fs = require('fs-extra')
 
-module.exports = {
-  module: {
-    rules: [
-      {
-        test: /\.jsx?$/,
-        exclude: /node_modules\/(?!pubsweet-)/,
-        loader: 'babel-loader',
-      },
-      {
-        test: /\.s?css$/,
-        exclude: /\.local\.s?css$/,
-        loader: [
-          { loader: 'style-loader' },
-          { loader: 'css-loader' },
-          { loader: 'sass-loader' },
-        ],
-      },
-      {
-        test: /\.local\.s?css$/,
-        use: [
-          'style-loader',
-          {
-            loader: 'css-loader',
-            options: {
-              modules: true,
-              importLoaders: 1,
-            },
-          },
-          'sass-loader',
-        ],
-      },
-      {
-        test: /\.woff|\.woff2|\.svg|.eot|\.ttf/,
-        loader: [
-          {
-            loader: 'url-loader',
-            options: {
-              prefix: 'font',
-              limit: 1000,
-            },
-          },
-        ],
-      },
-    ],
-  },
-  resolve: {
-    alias: {
-      joi: 'joi-browser',
-      config: path.join(__dirname, 'styleguidist', 'config.json'),
-    },
-    extensions: ['.js', '.jsx', '.json', '.scss'],
+// can't use node-config in webpack so save whitelisted client config into the build and alias it below
+const outputPath = path.resolve(__dirname, '_build', 'config')
+fs.ensureDirSync(outputPath)
+const clientConfigPath = path.join(outputPath, 'client-config.json')
+fs.writeJsonSync(clientConfigPath, config, { spaces: 2 })
+
+const makeWebpackConfig = require('@pubsweet/styleguide/src/webpack-config')
+
+const webpackConfig = makeWebpackConfig(__dirname)
+
+webpackConfig.resolve = {
+  alias: {
+    joi: 'joi-browser',
+    config: clientConfigPath,
   },
-  plugins: [
-    new webpack.DefinePlugin({
-      PUBSWEET_COMPONENTS: JSON.stringify([]),
-    }),
-  ],
 }
+
+module.exports = webpackConfig
diff --git a/packages/default-theme/package.json b/packages/default-theme/package.json
index 88c585c5ed227f9606f413947349311cbadea650..57acfa4fa8bfc1c2ad93534394fa3791e3236a70 100644
--- a/packages/default-theme/package.json
+++ b/packages/default-theme/package.json
@@ -6,5 +6,11 @@
   "license": "MIT",
   "publishConfig": {
     "access": "public"
+  },
+  "dependencies": {
+    "styled-components": "^2.4.0",
+    "typeface-noto-sans": "^0.0.54",
+    "typeface-noto-serif": "^0.0.54",
+    "typeface-ubuntu-mono": "^0.0.54"
   }
 }
diff --git a/packages/default-theme/src/index.js b/packages/default-theme/src/index.js
index fa7d923d92608791a2878ed120b37a8d69cfe3f9..cc597cfa76525ce2f59d8f024ef58783d94d0758 100644
--- a/packages/default-theme/src/index.js
+++ b/packages/default-theme/src/index.js
@@ -1,3 +1,57 @@
-const theme = {}
+/* eslint-disable import/extensions */
+import 'typeface-noto-sans'
+import 'typeface-noto-serif'
+import 'typeface-ubuntu-mono'
 
-export default theme
+export default {
+  /* Colors */
+  colorBackground: 'white',
+  colorPrimary: '#205d86',
+  colorSecondary: '#e7e7e7',
+  colorQuiet: '#aaa',
+  colorFurniture: '#ccc',
+  colorBorder: '#aaa',
+  colorBackgroundHue:
+    '#f1f1f1' /* marginally darker shade of the app background so that it can be used to divide the interface when needed */,
+  colorSuccess: '#050',
+  colorError: '#b50000',
+  colorWarning: '#ffcc00',
+  colorText: '#333',
+  colorTextReverse: '#fff',
+  colorTextPlaceholder: '#595959',
+
+  /* Text variables */
+  fontInterface: "'Noto Sans'",
+  fontHeading: "'Noto Sans'",
+  fontReading: "'Noto Serif'",
+  fontWriting: "'Ubuntu mono'",
+  fontSizeBase: '18px',
+  fontSizeBaseSmall: '16px',
+  fontSizeHeading1: '36px',
+  fontSizeHeading2: '32px',
+  fontSizeHeading3: '29px',
+  fontSizeHeading4: '26px',
+  fontSizeHeading5: '23px',
+  fontSizeHeading6: '20px',
+  fontLineHeight: '32px',
+
+  /* Spacing */
+  gridUnit: '32px',
+  subGridUnit: '8px',
+
+  /* Border */
+  borderRadius: '8px',
+  borderWidth: '1px',
+  borderStyle: 'solid',
+
+  /* Shadow (for tooltip) */
+  boxShadow: '0 2px 4px 0 rgba(51, 51, 51, 0.3)',
+
+  /* Transition */
+  transitionDuration: '1s',
+  transitionDurationM: '0.5s',
+  transitionDurationS: '0.2s',
+  transitionDurationXs: '0.1s',
+  transitionTimingFunction: 'ease',
+  transitionDelay: '500ms',
+}
diff --git a/packages/elife-theme/CHANGELOG.md b/packages/elife-theme/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..7bdba4d920f6daaefc2cb9fadac156d83b0b0398
--- /dev/null
+++ b/packages/elife-theme/CHANGELOG.md
@@ -0,0 +1,12 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+<a name="0.1.0"></a>
+
+# 0.1.0 (2018-02-08)
+
+### Features
+
+* **theme:** add default theme package ([5231a56](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/5231a56))
diff --git a/packages/elife-theme/README.md b/packages/elife-theme/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b1e2a9a6aa209244a06824deb0279fe15c77050b
--- /dev/null
+++ b/packages/elife-theme/README.md
@@ -0,0 +1,145 @@
+# eLife Theme
+
+This theme is based on the values used by the eLife [pattern-library](https://github.com/elifesciences/pattern-library/blob/develop/assets/sass/_variables.scss): see the link for the latest version.
+
+The pattern-library values at time of writing are:
+
+```css
+// Colors
+$color-primary: #0288d1;
+$color-primary-dark: #0277bd;
+$color-primary-light: #b3e5fc;
+
+$color-text: #212121;
+$color-text-secondary: #888;
+$color-text-placeholder: #bdbdbd;
+$color-text-dividers: #e0e0e0;
+$color-text-ui-background: #fff;
+$color-text-ui-background-hue: #f5f5f5;
+$color-text-ui-code: #f7f7f7;
+
+$color-text--reverse: #fff;
+$color-text-secondary--reverse: #9e9e9e;
+// there is no $color-text-placeholder--reverse
+$color-text-dividers--reverse: #616161;
+$color-text-ui-background--reverse: #212121;
+$color-text-ui-background-hue--reverse: #333;
+
+$color-information: #0288d1;
+$color-success: #629f43;
+$color-success-dark: #569037;
+$color-attention: #cf0c4e;
+
+$color-overlay: rgba(0, 0, 0, 0.8);
+
+// Typography
+$font-primary: Georgia, serif;
+$font-secondary: 'Avenir Next Webfont', Arial, Helvetica, sans-serif;
+$font-monospace: 'Courier 10 Pitch', Courier, monospace;
+$font-size-base-in-px: 16;
+$font-size-h1-in-px: 36;
+$font-size-h2-in-px: 26;
+$font-size-h3-in-px: 22;
+$font-size-h4-in-px: 20;
+$font-size-h5-in-px: 18;
+$font-size-h6-in-px: 16;
+$font-size-caption-in-px: 13;
+$box-font-scaling-factor: 0.85;
+
+/*
+ * Baseline grid
+ */
+$blg-space-extra-small-in-px: 12;
+$blg-space-small-in-px: $blg-space-extra-small-in-px * 2;
+$blg-space-smallish-in-px: $blg-space-small-in-px * 1.5;
+$blg-space-medium-in-px: $blg-space-small-in-px * 2;
+$blg-space-large-in-px: $blg-space-small-in-px * 3;
+$blg-space-extra-large-in-px: $blg-space-small-in-px * 5;
+
+// Widths
+$max-width-grid-listing-item: 400;
+$max-width-block-link: 600;
+$max-width-image-link: $max-width-block-link;
+$med-width-grid-listing-item: 263;
+$min-width-grid-listing-item: 245;
+$grid-listing-spacing-measure: $blg-space-smallish-in-px;
+
+$max-site-width: 1114;
+$max-site-width-in-rem: get-rem-from-px($max-site-width);
+$viewport-width-when-site-hits-max-width-in-px: 1245;
+$viewport-width-when-site-hits-max-width-in-rem: get-rem-from-px(
+  $viewport-width-when-site-hits-max-width-in-px
+);
+
+// Heights
+$audio-player-height: 90;
+// TODO: link name with blg spacing for 72px somehow?
+$audio-player-height--js: 72;
+$content-header-image-height--narrow-screen: 264;
+$content-header-image-height--medium-width-screen: 288;
+$content-header-image-height--wide-screen: 336;
+$content-header-image-credit-height: 48;
+$carousel-height: 400;
+
+$button-height-extra-small: 24;
+$button-height-small: 36;
+$button-height-regular: 48;
+
+// Widths
+$content-header-download-width: 20;
+$content-header-download-width-medium: 44;
+$content-header-profile-width: 48;
+
+$button-speech-bubble-width-in-px: 42;
+
+// Spacing
+$teaser-spacing-top: 23;
+// 23 not 24 to account for a 1px border (Because of the way the elements are nested, border-box doesn't help us here.)
+$teaser-spacing-bottom: 23;
+$teaser-spacing-left: 16;
+// TODO: link name with blg spacing for 72px somehow?
+$listing-list-spacing: 72;
+
+$content-header-padding: 24;
+
+// TODO: rename these
+$content-header-side-padding: 6; //vw
+$content-header-side-padding--extra-wide: 30; //px
+
+// Breakpoints
+
+$bkpt-site--x-small: 320;
+$bkpt-site--small: 480;
+$bkpt-site--medium: 730;
+$bkpt-site--wide: 900;
+$bkpt-site--x-wide: 1200;
+
+// TODO: Replace the use of these with site breakpoints above
+$bkpt-content-header--medium-width: $bkpt-site--medium;
+$bkpt-content-header--wide: $bkpt-site--wide;
+$bkpt-content-header--extra-wide: $bkpt-site--x-wide;
+
+//$bkpt-block-link: 600;
+$bkpt-block-link: $bkpt-site--medium;
+$bkpt-image-link: $bkpt-block-link;
+$bkpt-grid-listing--narrow-screen: $bkpt-block-link;
+$bkpt-grid-listing--medium-width: 882;
+$bkpt-grid-link-listing--wide-screen: 1174;
+
+$bkpt-captioned-asset-caption: 430;
+$bkpt-view-selector: $bkpt-site--x-wide;
+
+// TODO: review these breakpoints:
+$bkpt-article-download-links-list: 560;
+$bkpt-pull-quote: 560;
+$bkpt-section-listing: $bkpt-site--x-wide;
+
+// Borders
+$border-radius: 3;
+$border-width: 1;
+
+// Animations
+$transition-duration: 0.5s;
+$transition-delay: 50ms;
+$transition-timing-function: ease-in-out;
+```
diff --git a/packages/elife-theme/package.json b/packages/elife-theme/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ff76a2a1fecf41bcf87df481928b37ef0c556952
--- /dev/null
+++ b/packages/elife-theme/package.json
@@ -0,0 +1,13 @@
+{
+  "name": "@pubsweet/elife-theme",
+  "version": "0.0.1",
+  "description": "Theme for eLife apps",
+  "main": "src",
+  "license": "MIT",
+  "publishConfig": {
+    "access": "public"
+  },
+  "dependencies": {
+    "styled-components": "^2.4.0"
+  }
+}
diff --git a/packages/elife-theme/src/fonts/249228f0-61ac-40cc-a5a5-5609c9816e3f.woff2 b/packages/elife-theme/src/fonts/249228f0-61ac-40cc-a5a5-5609c9816e3f.woff2
new file mode 100755
index 0000000000000000000000000000000000000000..b153887186430c9608725b04b30d7773c186f54d
Binary files /dev/null and b/packages/elife-theme/src/fonts/249228f0-61ac-40cc-a5a5-5609c9816e3f.woff2 differ
diff --git a/packages/elife-theme/src/fonts/627fbb5a-3bae-4cd9-b617-2f923e29d55e.woff2 b/packages/elife-theme/src/fonts/627fbb5a-3bae-4cd9-b617-2f923e29d55e.woff2
new file mode 100755
index 0000000000000000000000000000000000000000..abb3d33ca246f982481562dad22ddcf9abcacdfe
Binary files /dev/null and b/packages/elife-theme/src/fonts/627fbb5a-3bae-4cd9-b617-2f923e29d55e.woff2 differ
diff --git a/packages/elife-theme/src/fonts/efba18ed-80cc-49c4-997a-fbb140739d19.woff b/packages/elife-theme/src/fonts/efba18ed-80cc-49c4-997a-fbb140739d19.woff
new file mode 100755
index 0000000000000000000000000000000000000000..dfa6f202af9f15c3273f4cd565d8f0170ea60f18
Binary files /dev/null and b/packages/elife-theme/src/fonts/efba18ed-80cc-49c4-997a-fbb140739d19.woff differ
diff --git a/packages/elife-theme/src/fonts/f26faddb-86cc-4477-a253-1e1287684336.woff b/packages/elife-theme/src/fonts/f26faddb-86cc-4477-a253-1e1287684336.woff
new file mode 100755
index 0000000000000000000000000000000000000000..fdf59edc1267de03f004b8162a9b0182604dfa1f
Binary files /dev/null and b/packages/elife-theme/src/fonts/f26faddb-86cc-4477-a253-1e1287684336.woff differ
diff --git a/packages/elife-theme/src/fonts/index.css b/packages/elife-theme/src/fonts/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..cae6ea131e17c3f1dc3d636eb7f1161293641141
--- /dev/null
+++ b/packages/elife-theme/src/fonts/index.css
@@ -0,0 +1,14 @@
+/* Demi */
+@font-face {
+  font-family: 'Avenir Next Webfont';
+  font-weight: 700;
+  src: url('249228f0-61ac-40cc-a5a5-5609c9816e3f.woff2') format('woff2'),
+    url('efba18ed-80cc-49c4-997a-fbb140739d19.woff') format('woff');
+}
+
+/* Medium */
+@font-face {
+  font-family: 'Avenir Next Webfont';
+  src: url('627fbb5a-3bae-4cd9-b617-2f923e29d55e.woff2') format('woff2'),
+    url('f26faddb-86cc-4477-a253-1e1287684336.woff') format('woff');
+}
diff --git a/packages/elife-theme/src/index.js b/packages/elife-theme/src/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..f5f91bb4446d2830d0ad1bb3528e39460b0fdd0f
--- /dev/null
+++ b/packages/elife-theme/src/index.js
@@ -0,0 +1,54 @@
+/* eslint-disable import/extensions */
+import './fonts/index.css'
+
+export default {
+  /* Colors */
+  colorBackground: '#fff',
+  colorPrimary: '#0288d1',
+  colorSecondary: '#888',
+  colorFurniture: '#ccc',
+  colorBorder: '#aaa',
+  colorBackgroundHue:
+    '#f5f5f5' /* marginally darker shade of the app background so that it can be used to divide the interface when needed */,
+  colorSuccess: '#629f43',
+  colorError: '#b50000',
+  colorWarning: '#cf0c4e',
+  colorText: '#212121',
+  colorTextReverse: '#fff',
+  colorTextPlaceholder: '#bdbdbd',
+
+  /* Text variables */
+  fontInterface: 'Georgia, serif',
+  fontHeading: '"Avenir Next Webfont", Arial, Helvetica, sans-serif',
+  fontReading: 'Georgia, serif',
+  fontWriting: '"Courier 10 Pitch", Courier, monospace',
+  fontSizeBase: '16px',
+  fontSizeBaseSmall: '13px',
+  fontSizeHeading1: '36px',
+  fontSizeHeading2: '26px',
+  fontSizeHeading3: '22px',
+  fontSizeHeading4: '20px',
+  fontSizeHeading5: '18px',
+  fontSizeHeading6: '16px',
+  fontLineHeight: '32px',
+
+  /* Spacing */
+  gridUnit: '24px',
+  subGridUnit: '6px',
+
+  /* Border */
+  borderRadius: '3px',
+  borderWidth: '1px',
+  borderStyle: 'solid',
+
+  /* Shadow (for tooltip) */
+  boxShadow: '0 2px 4px 0 rgba(51, 51, 51, 0.3)',
+
+  /* Transition */
+  transitionDuration: '1s',
+  transitionDurationM: '0.5s',
+  transitionDurationS: '0.2s',
+  transitionDurationXs: '0.1s',
+  transitionTimingFunction: 'ease-in-out',
+  transitionDelay: '500ms',
+}
diff --git a/packages/styleguide/package.json b/packages/styleguide/package.json
index ab54e05571672656815bf985c80ce103bee305d3..a3db1ea211959755e8cbc42dfecf7b5c7de37571 100644
--- a/packages/styleguide/package.json
+++ b/packages/styleguide/package.json
@@ -4,14 +4,17 @@
   "files": ["src", "dist"],
   "main": "src",
   "dependencies": {
-    "@pubsweet/theme": "^0.1.3",
+    "@pubsweet/default-theme": "^0.1.0",
+    "@pubsweet/elife-theme": "^0.0.1",
+    "@pubsweet/ui": "^2.0.0",
     "react": "^16.2.0",
     "react-dom": "^16.2.0",
     "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2",
     "recompose": "^0.26.0",
     "redux": "^3.6.0",
-    "redux-form": "^7.0.3"
+    "redux-form": "^7.0.3",
+    "styled-components": "^2.4.0"
   },
   "devDependencies": {
     "babel-core": "^6.26.0",
diff --git a/packages/styleguide/src/components/StyleGuideRenderer.js b/packages/styleguide/src/components/StyleGuideRenderer.js
index b1a65700dfd22533f14e9ac59fc07e47849c3114..04c73e1a0a19bc3db0e417281422856681b0e6df 100644
--- a/packages/styleguide/src/components/StyleGuideRenderer.js
+++ b/packages/styleguide/src/components/StyleGuideRenderer.js
@@ -1,18 +1,122 @@
 import React from 'react'
-import classes from './StyleGuideRenderer.local.scss'
+import styled, { css, ThemeProvider } from 'styled-components'
+import { Button, th } from '@pubsweet/ui'
+import StyleRoot, {
+  injectGlobalStyles,
+} from 'pubsweet-client/src/helpers/StyleRoot'
+import defaultTheme from '@pubsweet/default-theme'
 
-const StyleGuideRenderer = ({ title, children, toc }) => (
-  <div className={classes.root}>
-    <div className={classes.sidebar}>
-      <header className={classes.header}>
-        <h1 className={classes.title}>{title}</h1>
-      </header>
+injectGlobalStyles()
 
-      <nav className={classes.nav}>{toc}</nav>
-    </div>
+const aDark = 'rgba(255, 0, 0, 0.2)'
+const aLight = 'rgba(255, 69, 69, 0.1)'
+const bDark = 'rgba(0, 121, 253, 0.2)'
+const bLight = 'rgba(68, 158, 255, 0.1)'
 
-    <div className={classes.content}>{children}</div>
-  </div>
-)
+const grid = css`
+  div[data-preview] {
+    background-image: ${props => `repeating-linear-gradient( to bottom,
+    ${aDark},
+    ${aDark} ${props.theme.subGridUnit},
+    ${aLight} ${props.theme.subGridUnit},
+    ${aLight} calc(2 * ${props.theme.subGridUnit}),
+    ${bDark} calc(2 * ${props.theme.subGridUnit}),
+    ${bDark} calc(3 * ${props.theme.subGridUnit}),
+    ${bLight} calc(3 * ${props.theme.subGridUnit}),
+    ${bLight} calc(4 * ${props.theme.subGridUnit}),
+    ${bDark} calc(4 * ${props.theme.subGridUnit}),
+    ${bDark} calc(5 * ${props.theme.subGridUnit}),
+    ${bLight} calc(5 * ${props.theme.subGridUnit}),
+    ${bLight} calc(6 * ${props.theme.subGridUnit}),
+    ${aDark} calc(6 * ${props.theme.subGridUnit}),
+    ${aDark} calc(7 * ${props.theme.subGridUnit}),
+    ${aLight} calc(7 * ${props.theme.subGridUnit}),
+    ${aLight} calc(8 * ${props.theme.subGridUnit})
+  )`};
 
+    border-color: white;
+  }
+`
+
+const Root = styled.div`
+  display: grid;
+  grid-template-areas: 'side content';
+  grid-template-columns: 1fr 3fr;
+  height: 100vh;
+  width: 100vw;
+`
+
+const Sidebar = styled.div`
+  display: flex;
+  flex-direction: column;
+  grid-area: side;
+  overflow-y: hidden;
+`
+
+const Header = styled.header`
+  padding: 0.5rem;
+`
+
+const Title = styled.h1`
+  font-family: ${th('fontInterface')};
+  font-size: ${th('fontSizeBase')};
+  margin-bottom: 0;
+  padding: 0 1rem;
+`
+
+const Content = styled.div`
+  grid-area: content;
+  overflow-y: auto;
+  padding: 1rem;
+  *[data-preview] {
+    padding: calc(${th('gridUnit')} / 2);
+  }
+  ${props => props.grid && grid};
+`
+
+const Nav = styled.nav`
+  flex: 1;
+  overflow-y: auto;
+  padding: 0.5rem;
+`
+const NarrowButton = styled(Button)`
+  margin: ${props => `
+    0
+    calc(${props.theme.subGridUnit} * 6)
+    ${props.theme.subGridUnit}
+    calc(${props.theme.subGridUnit} * 4)
+  `};
+`
+
+class StyleGuideRenderer extends React.Component {
+  constructor() {
+    super()
+    this.state = { grid: false }
+  }
+  render() {
+    const { title, children, toc } = this.props
+    const GridToggle = () => (
+      <NarrowButton onClick={() => this.setState({ grid: !this.state.grid })}>
+        Toggle Grid
+      </NarrowButton>
+    )
+
+    return (
+      <ThemeProvider theme={defaultTheme}>
+        <StyleRoot>
+          <Root>
+            <Sidebar>
+              <Header>
+                <Title>{title}</Title>
+              </Header>
+              <GridToggle />
+              <Nav>{toc}</Nav>
+            </Sidebar>
+            <Content grid={this.state.grid}>{children}</Content>
+          </Root>
+        </StyleRoot>
+      </ThemeProvider>
+    )
+  }
+}
 export default StyleGuideRenderer
diff --git a/packages/styleguide/src/components/StyleGuideRenderer.local.scss b/packages/styleguide/src/components/StyleGuideRenderer.local.scss
deleted file mode 100644
index bdd3e8097da381478d55ed6ac804cf701de0422d..0000000000000000000000000000000000000000
--- a/packages/styleguide/src/components/StyleGuideRenderer.local.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-.root {
-  display: grid;
-  grid-template-areas: "side content";
-  grid-template-columns: 1fr 3fr;
-  height: 100vh;
-  width: 100vw;
-}
-
-.sidebar {
-  display: flex;
-  flex-direction: column;
-  grid-area: side;
-  overflow-y: hidden;
-}
-
-.content {
-  grid-area: content;
-  overflow-y: auto;
-  padding: 1rem;
-}
-
-.header {
-  padding: 0.5rem;
-}
-
-.nav {
-  flex: 1;
-  overflow-y: auto;
-  padding: 0.5rem;
-}
-
-.title {
-  font-family: "Fira Sans", sans-serif;
-  font-size: 1rem;
-  margin-bottom: 0;
-  padding: 0 1rem;
-}
diff --git a/packages/styleguide/src/components/Wrapper.js b/packages/styleguide/src/components/Wrapper.js
index 11c73bf368d41cea6b986b9940854d8b158ae8c2..afd2d6a3a065ac3bf2fd2a54d7b0138282e2f49c 100644
--- a/packages/styleguide/src/components/Wrapper.js
+++ b/packages/styleguide/src/components/Wrapper.js
@@ -3,10 +3,8 @@ import { Provider } from 'react-redux'
 import { BrowserRouter as Router } from 'react-router-dom'
 import { reducer as formReducer } from 'redux-form'
 import { createStore, combineReducers } from 'redux'
-
-import '@pubsweet/theme'
-
-import classes from './Wrapper.local.scss'
+import styled, { ThemeProvider } from 'styled-components'
+import theme from '@pubsweet/default-theme'
 
 const rootReducer = combineReducers({
   form: formReducer,
@@ -17,11 +15,15 @@ const store = createStore(
   window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(),
 )
 
+const Root = styled.div``
+
 const Wrapper = ({ children }) => (
   <Provider store={store}>
-    <Router>
-      <div className={classes.root}>{children}</div>
-    </Router>
+    <ThemeProvider theme={theme}>
+      <Router>
+        <Root>{children}</Root>
+      </Router>
+    </ThemeProvider>
   </Provider>
 )
 
diff --git a/packages/styleguide/src/components/Wrapper.local.scss b/packages/styleguide/src/components/Wrapper.local.scss
deleted file mode 100644
index 7f3a1cd9c7537ff5770c04584c6c0372a5f0f062..0000000000000000000000000000000000000000
--- a/packages/styleguide/src/components/Wrapper.local.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-:global(body) {
-  overflow: hidden;
-}
-
-.root {
-  font-family: 'Fira Sans', sans-serif;
-}
diff --git a/packages/styleguide/src/webpack-config.js b/packages/styleguide/src/webpack-config.js
index 102bd2e3eda4506e69b52106a69038283799e317..ef8080284deb876438c307c0346544ecf9b2ca2f 100644
--- a/packages/styleguide/src/webpack-config.js
+++ b/packages/styleguide/src/webpack-config.js
@@ -8,12 +8,14 @@ const webpack = require('webpack')
 module.exports = dir => {
   const include = [
     path.join(dir, 'src'),
+    path.join(dir, 'packages'),
     /pubsweet-[^/]+\/src/,
     /xpub-[^/]+\/src/,
     /wax-[^/]+\/src/,
     /@pubsweet\/[^/]+\/src/,
     /styleguide\/src/,
     /ui\/src/,
+    /server\/src\/models/,
   ]
 
   return {
@@ -28,7 +30,7 @@ module.exports = dir => {
           oneOf: [
             // ES6 modules
             {
-              test: /\.js$/,
+              test: /\.jsx?$/,
               include,
               loader: 'babel-loader',
               options: {
@@ -101,7 +103,7 @@ module.exports = dir => {
 
             // Files
             {
-              exclude: [/\.js$/, /\.html$/, /\.json$/],
+              exclude: [/\.jsx?$/, /\.html$/, /\.json$/],
               loader: 'file-loader',
               options: {
                 name: 'static/media/[name].[hash:8].[ext]',
diff --git a/packages/ui/docs/colors.md b/packages/ui/docs/colors.md
index 4f66808b4c9f6b308d598e21cc58ab723aa8de17..8d24a0e815d474445180b836a1a7463b8ad17b5e 100644
--- a/packages/ui/docs/colors.md
+++ b/packages/ui/docs/colors.md
@@ -2,44 +2,121 @@ CSS variables are used to define the theme's color scheme.
 
 ## Brand colors
 
-`--color-primary`
+`colorText`
+
+Default font color
 
 ```js
-<div style={{ color: 'var(--color-primary)' }}>
-{faker.lorem.sentence(5)}
-</div>
+const ColorText = require('styled-components').default.div`
+  color: ${props => props.theme.colorText};
+`
+;<ColorText>{faker.lorem.sentence(5)}</ColorText>
 ```
 
-## Colors for interactions
+`colorTextReverse`
 
-`--color-danger`
+Reverse font color
 
 ```js
-<div style={{ color: 'var(--color-danger)' }}>
-{faker.lorem.sentence(5)}
-</div>
+const ColorTextReverse = require('styled-components').default.div`
+  background-color: ${props => props.theme.colorText};
+  color: ${props => props.theme.colorTextReverse};
+`
+;<ColorTextReverse>{faker.lorem.sentence(5)}</ColorTextReverse>
 ```
 
-`--color-valid`
+`colorPrimary`
+
+Indicates a primary call to action
 
 ```js
-<div style={{ color: 'var(--color-valid)' }}>
-{faker.lorem.sentence(5)}
-</div>
+const ColorPrimary = require('styled-components').default.div`
+  color: ${props => props.theme.colorPrimary};
+`
+;<ColorPrimary>{faker.lorem.sentence(5)}</ColorPrimary>
+```
+
+`colorSecondary`
+
+Default color for non-primary actions
+
+```js
+const ColorSecondary = require('styled-components').default.div`
+  color: ${props => props.theme.colorSecondary};
+`
+;<ColorSecondary>{faker.lorem.sentence(5)}</ColorSecondary>
 ```
 
-`--color-warning`
+`colorFurniture`
+
+Meant to be applied to elements that indicate content division
 
 ```js
-<div style={{ color: 'var(--color-warning)' }}>
-{faker.lorem.sentence(5)}
+const Divider = require('styled-components').default.span`
+  color: ${props => props.theme.colorFurniture};
+`
+;<div>
+  {faker.lorem.sentence(2)}
+  <Divider> | </Divider>
+  {faker.lorem.sentence(2)}
+  <Divider> | </Divider>
+  {faker.lorem.sentence(2)}
 </div>
 ```
 
-`--color-pending`
+`colorBorder`
+
+For borders around form elements
+
+```js
+<TextField inline value={faker.lorem.sentence(3)} />
+```
+
+`colorTextPlaceholder`
+
+Used for text field placeholders
 
 ```js
-<div style={{ color: 'var(--color-pending)' }}>
-{faker.lorem.sentence(5)}
+<TextField inline placeholder={faker.lorem.sentence(3)} />
+```
+
+`colorBackgroundHue`
+
+Used to create a discrete contrast the default background color
+
+```js
+const BackgroundHue = require('styled-components').default.div`
+  background-color: ${props => props.theme.colorBackgroundHue};
+`
+;<div>
+  <div>{faker.lorem.sentence(5)}</div>
+  <BackgroundHue>{faker.lorem.sentence(5)}</BackgroundHue>
+  <div>{faker.lorem.sentence(5)}</div>
+  <BackgroundHue>{faker.lorem.sentence(5)}</BackgroundHue>
+  <div>{faker.lorem.sentence(5)}</div>
 </div>
 ```
+
+## Colors for interactions
+
+`colorSuccess`
+
+Used to indicate a successful validation state
+
+```js
+const ColorSuccess = require('styled-components').default.div`
+  color: ${props => props.theme.colorSuccess};
+`
+;<ColorSuccess>{faker.lorem.sentence(5)}</ColorSuccess>
+```
+
+Used to indicate an error in validation
+
+`colorError`
+
+```js
+const ColorError = require('styled-components').default.div`
+  color: ${props => props.theme.colorError};
+`
+;<ColorError>{faker.lorem.sentence(5)}</ColorError>
+```
diff --git a/packages/ui/docs/fonts.md b/packages/ui/docs/fonts.md
index e3d69cb97261e1f84da01f2d5a58042a738a6025..988d1e1a3f8d8b9e438573cab55f7a9a4974b6bb 100644
--- a/packages/ui/docs/fonts.md
+++ b/packages/ui/docs/fonts.md
@@ -1,33 +1,37 @@
 CSS variables are used to define font families.
 
-`--font-author`
+`fontInterface`
 
 ```js
-<div style={{ fontFamily: 'var(--font-author)' }}>
-{faker.lorem.sentence(5)}
-</div>
+const FontInterface = require('styled-components').default.div`
+  font-family: ${props => props.theme.fontInterface};
+`
+;<FontInterface>{faker.lorem.sentence(5)}</FontInterface>
 ```
 
-`--font-reviewer`
+`fontHeading`
 
 ```js
-<div style={{ fontFamily: 'var(--font-reviewer)' }}>
-{faker.lorem.sentence(5)}
-</div>
+const FontHeading = require('styled-components').default.div`
+  font-family: ${props => props.theme.fontHeading};
+`
+;<FontHeading>{faker.lorem.sentence(5)}</FontHeading>
 ```
 
-`--font-interface`
+`fontReading`
 
 ```js
-<div style={{ fontFamily: 'var(--font-interface)' }}>
-{faker.lorem.sentence(5)}
-</div>
+const FontReading = require('styled-components').default.div`
+  font-family: ${props => props.theme.fontReading};
+`
+;<FontReading>{faker.lorem.sentence(5)}</FontReading>
 ```
 
-`--font-mono`
+`fontWriting`
 
 ```js
-<div style={{ fontFamily: 'var(--font-mono)' }}>
-{faker.lorem.sentence(5)}
-</div>
+const FontWriting = require('styled-components').default.div`
+  font-family: ${props => props.theme.fontWriting};
+`
+;<FontWriting>{faker.lorem.sentence(5)}</FontWriting>
 ```
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 2064e6360ee650cc24080091fb82b7c8dec30466..6a93eb09a8973966d49accc2ebac85b16b5995b0 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -22,7 +22,7 @@
     "prop-types": "^15.5.10",
     "react": "^16.2.0",
     "react-dom": "^16.2.0",
-    "react-feather": "^1.0.7",
+    "react-feather": "^1.0.8",
     "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2",
     "react-tag-autocomplete": "^5.4.1",
diff --git a/packages/ui/src/atoms/AlignmentBox.js b/packages/ui/src/atoms/AlignmentBox.js
index f9481d5104aca098d73cff247399172e91b205e9..e1fd9ac62c0ed3e35b1353051531ff876fab9b72 100644
--- a/packages/ui/src/atoms/AlignmentBox.js
+++ b/packages/ui/src/atoms/AlignmentBox.js
@@ -7,7 +7,7 @@ const mainGrey = '#666'
 const whiteRGBA = 'rgba(255, 255, 255, 1)'
 
 const borderRule = position => props => `
-    border-${position}-width: ${props.noBorder[position] ? '0' : '1px'};
+    border-${position}-width: ${props.noBorder[position] ? '0' : '1px'}
   `
 
 const Root = styled.div.attrs({
@@ -20,10 +20,12 @@ const Root = styled.div.attrs({
 
   border-style: solid;
   border-color: ${mainGrey};
-  ${borderRule('top')} ${borderRule('right')} ${borderRule(
-      'bottom',
-    )} ${borderRule('left')} background-color: ${props =>
-      props.active ? mainGrey : 'transparent'};
+  ${borderRule('top')};
+  ${borderRule('right')};
+  ${borderRule('bottom')};
+  ${borderRule('left')};
+
+  background-color: ${props => (props.active ? mainGrey : 'transparent')};
 
   &:hover {
     background-color: ${lightGrey};
diff --git a/packages/ui/src/atoms/Attachment.js b/packages/ui/src/atoms/Attachment.js
index 445adafd1223764fa86e5fff5873eb52cd9ace62..9bada7d52fa6a1f483072f6e128c282e4f8a8522 100644
--- a/packages/ui/src/atoms/Attachment.js
+++ b/packages/ui/src/atoms/Attachment.js
@@ -1,44 +1,59 @@
 import React from 'react'
 import styled from 'styled-components'
+import th from '../helpers/themeHelper'
 import Icon from './Icon'
 
 const Filename = styled.span`
-  color: var(--color-primary);
+  color: ${props =>
+    props.uploaded ? props.theme.colorPrimary : props.theme.colorSecondary};
   display: inline-flex;
   overflow-wrap: break-word;
   padding: 0;
   word-break: break-all;
 `
 
-const IconContainer = styled.span`
-  --color-local: var(--color-primary);
-  --icon-size: 16px;
+const uploadedIcon = ({ theme }) => `
+  stroke: ${th('colorPrimary')};
+  height: ${th('fontSizeBaseSmall')};
+  width: ${th('fontSizeBaseSmall')};
+`
 
-  margin: 0.5em;
+const uploadingIcon = ({ theme }) => `
+  stroke: ${th('colorText')};
+  height: ${th('fontSizeBase')};
+  width: ${th('fontSizeBase')};
+`
+
+const IconContainer = styled.span`
+  margin: 0 ${th('subGridUnit')};
 
   & svg {
-    height: var(--icon-size);
-    width: var(--icon-size);
+    ${props => (props.uploaded ? uploadedIcon : uploadingIcon)};
   }
 `
 
 const Root = styled.a`
   align-items: center;
   display: flex;
-  line-height: 1.15;
   text-decoration: none;
 
   &:hover ${Filename} {
-    text-decoration: underline;
+    text-decoration: ${props => (props.uploaded ? 'underline' : 'none')};
   }
 `
 
-const Attachment = ({ value }) => (
-  <Root download={value.name} href={value.url}>
-    <IconContainer>
-      <Icon color="var(--color-local)">paperclip</Icon>
+const Attachment = ({ file, error, uploaded }) => (
+  <Root
+    download={uploaded && file.name}
+    href={uploaded && file.url}
+    uploaded={uploaded}
+  >
+    <IconContainer uploaded={uploaded}>
+      <Icon>paperclip</Icon>
     </IconContainer>
-    <Filename>{value.name}</Filename>
+    <Filename uploaded={uploaded}>
+      {error || (uploaded ? file.name : 'Uploading...')}
+    </Filename>
   </Root>
 )
 
diff --git a/packages/ui/src/atoms/Attachment.md b/packages/ui/src/atoms/Attachment.md
index 3156671c60e5ad5582b67a7a9c8e51471750767f..2428ab84684a1ca4c4631c07a7e2f2d752e27677 100644
--- a/packages/ui/src/atoms/Attachment.md
+++ b/packages/ui/src/atoms/Attachment.md
@@ -1,10 +1,21 @@
 A file attached to a note.
 
+By default the file is displayed as uploading
+
 ```js
-const value = {
-    name: faker.system.commonFileName(),
-    url: faker.internet.url()
-};
+const file = {
+  name: faker.system.commonFileName(),
+  url: faker.internet.url(),
+}
+;<Attachment file={file} />
+```
 
-<Attachment value={value}/>
+When passed the `uploaded` prop, it becomes a link:
+
+```js
+const file = {
+  name: faker.system.commonFileName(),
+  url: faker.internet.url(),
+}
+;<Attachment file={file} uploaded />
 ```
diff --git a/packages/ui/src/atoms/Avatar.js b/packages/ui/src/atoms/Avatar.js
index e662578d4efe259640c22ea57fcf75bbd0c3088e..973e3a2de9cf152fc7064279d985f57733a041e2 100644
--- a/packages/ui/src/atoms/Avatar.js
+++ b/packages/ui/src/atoms/Avatar.js
@@ -1,14 +1,19 @@
 import React from 'react'
 import styled from 'styled-components'
+import th from '../helpers/themeHelper'
+
+const statusColor = props =>
+  ({
+    declined: props.theme.colorError,
+    pending: props.theme.colorSecondary,
+  }[props.status] || props.theme.colorPrimary)
 
 const Container = styled.svg.attrs({
-  viewBox: props => `0 0 ${props.width + 5} ${props.height}`,
+  viewBox: props => `0 0 105 70`,
   xmlns: 'http://www.w3.org/2000/svg',
 })`
-  height: auto;
-  max-height: 100vh;
-  max-width: 100%;
-  width: auto;
+  width: calc(${th('gridUnit')} * 3);
+  height: calc(${th('gridUnit')} * 2);
 `
 
 const Persona = styled.path.attrs({
@@ -16,34 +21,32 @@ const Persona = styled.path.attrs({
     ' M 47.666 50.14 C 44.947 49 41.588 47.535 41.588 46.395 L 41.588 39.07 C 45.587 35.977 47.986 31.093 47.986 26.047 L 47.986 16.279 C 47.986 7.326 40.788 0 31.991 0 C 23.193 0 15.995 7.326 15.995 16.279 L 15.995 26.047 C 15.995 31.093 18.395 36.14 22.393 39.07 L 22.393 46.395 C 22.393 47.372 19.034 48.837 16.315 50.14 C 9.757 52.907 0 57.14 0 68.372 L 0 70 L 63.981 70 L 63.981 68.372 C 63.981 57.14 54.224 52.907 47.666 50.14 Z ',
 })`
   display: block;
-  fill: var(
-    --color-${props => ({ declined: 'danger', pending: 'pending' }[props.status] || 'primary')}
-  );
+  fill: ${statusColor};
 `
 
 const Check = styled.path.attrs({
   d: ` M 60.106 37.467 C 59.299 36.645 58.895 35.617 58.895 34.486 C 58.895 33.458 59.299 32.43 60.106 31.608 C 60.813 30.888 61.823 30.375 62.934 30.375 C 64.045 30.375 65.055 30.888 65.762 31.608 L 74.246 40.242 L 93.132 21.021 C 93.839 20.301 94.95 19.89 95.96 19.89 C 97.071 19.89 98.081 20.301 98.788 21.021 C 99.596 21.843 100 22.871 100 24.002 C 100 25.03 99.596 26.057 98.788 26.88 L 74.246 51.857 L 60.106 37.467 Z `,
 })`
   display: ${props => (props.status === 'accepted' ? 'block' : 'none')};
-  fill: var(--color-primary);
+  fill: ${statusColor};
 `
 
 const X = styled.path.attrs({
   d: ` M 70.964 37.518 L 62.025 46.615 C 61.217 47.54 60.712 48.671 60.712 49.904 C 60.712 51.138 61.217 52.268 62.025 53.091 C 62.934 54.016 64.045 54.427 65.257 54.427 C 66.469 54.427 67.58 54.016 68.388 53.091 L 77.326 43.994 L 86.265 53.091 C 87.173 54.016 88.284 54.427 89.496 54.427 C 90.708 54.427 91.819 54.016 92.627 53.091 C 93.536 52.268 93.94 51.138 93.94 49.904 C 93.94 48.671 93.536 47.54 92.627 46.615 L 83.689 37.518 L 92.627 28.422 C 93.536 27.599 93.94 26.469 93.94 25.235 C 93.94 24.002 93.536 22.871 92.627 21.946 C 91.819 21.124 90.708 20.61 89.496 20.61 C 88.284 20.61 87.173 21.124 86.265 21.946 L 77.326 31.043 L 68.388 21.946 C 67.58 21.124 66.469 20.61 65.257 20.61 C 64.045 20.61 62.934 21.124 62.025 21.946 C 61.217 22.871 60.712 24.002 60.712 25.235 C 60.712 26.469 61.217 27.599 62.025 28.422 L 70.964 37.518 Z`,
 })`
   display: ${props => (props.status === 'declined' ? 'block' : 'none')};
-  fill: var(--color-danger);
+  fill: ${statusColor};
 `
 
 const QuestionMark = styled.path.attrs({
   d: ` M 79.674 23.203 L 79.674 23.203 Q 83.397 23.203 85.424 25.077 L 85.424 25.077 L 85.424 25.077 Q 87.451 26.95 87.451 29.771 L 87.451 29.771 L 87.451 29.771 Q 87.451 31.75 86.728 33.14 L 86.728 33.14 L 86.728 33.14 Q 86.003 34.529 85.011 35.371 L 85.011 35.371 L 85.011 35.371 Q 84.018 36.214 82.404 37.224 L 82.404 37.224 L 82.404 37.224 Q 80.625 38.361 79.798 39.182 L 79.798 39.182 L 79.798 39.182 Q 78.97 40.003 78.97 41.308 L 78.97 41.308 L 78.97 41.308 Q 78.97 41.94 79.094 42.319 L 79.094 42.319 L 72.971 43.287 L 72.971 43.287 Q 72.64 42.024 72.64 41.098 L 72.64 41.098 L 72.64 41.098 Q 72.64 39.203 73.282 37.898 L 73.282 37.898 L 73.282 37.898 Q 73.923 36.593 74.833 35.814 L 74.833 35.814 L 74.833 35.814 Q 75.743 35.035 77.15 34.108 L 77.15 34.108 L 77.15 34.108 Q 78.681 33.056 79.405 32.298 L 79.405 32.298 L 79.405 32.298 Q 80.129 31.54 80.129 30.403 L 80.129 30.403 L 80.129 30.403 Q 80.129 29.603 79.653 29.203 L 79.653 29.203 L 79.653 29.203 Q 79.177 28.803 78.35 28.803 L 78.35 28.803 L 78.35 28.803 Q 76.405 28.803 74.006 31.245 L 74.006 31.245 L 70.282 27.708 L 70.282 27.708 Q 74.171 23.203 79.674 23.203 L 79.674 23.203 Z  M 75.371 53.94 L 75.371 53.94 Q 73.84 53.94 72.93 52.951 L 72.93 52.951 L 72.93 52.951 Q 72.02 51.961 72.02 50.445 L 72.02 50.445 L 72.02 50.445 Q 72.02 48.635 73.24 47.33 L 73.24 47.33 L 73.24 47.33 Q 74.461 46.024 76.24 46.024 L 76.24 46.024 L 76.24 46.024 Q 77.77 46.024 78.681 47.014 L 78.681 47.014 L 78.681 47.014 Q 79.591 48.003 79.591 49.561 L 79.591 49.561 L 79.591 49.561 Q 79.591 51.414 78.37 52.677 L 78.37 52.677 L 78.37 52.677 Q 77.15 53.94 75.371 53.94 L 75.371 53.94 Z `,
 })`
   display: ${props => (props.status === 'pending' ? 'block' : 'none')};
-  fill: var(--color-pending);
+  fill: ${statusColor};
 `
 
 const ReviewerText = styled.text`
-  fill: var(--color-primary);
+  fill: ${th('colorPrimary')};
   font-family: 'Fira Sans Condensed', sans-serif;
   font-size: 50px;
   font-style: normal;
@@ -66,17 +69,14 @@ const Reviewer = ({ status, letter }) => {
 
 const STATUSES = ['accepted', 'pending', 'declined', 'submitted']
 
-const Avatar = ({ status, width, height, reviewerLetter }) => {
+const Avatar = ({ status, reviewerLetter }) => {
   status = status.toLowerCase()
   if (!STATUSES.includes(status)) {
     status = 'default'
   }
 
-  width = width || 100
-  height = height || 70
-
   return (
-    <Container height={height} width={width}>
+    <Container>
       <Persona status={status} />
       <Check status={status} />
       <X status={status} />
diff --git a/packages/ui/src/atoms/Avatar.md b/packages/ui/src/atoms/Avatar.md
index c24261caba41fe172482130ebc8cc9c05d063247..27ae316f837fe0d820645b669dcd3e25aaaaaf00 100644
--- a/packages/ui/src/atoms/Avatar.md
+++ b/packages/ui/src/atoms/Avatar.md
@@ -1,10 +1,10 @@
 A general purpose Avatar element.
 
 ```js
-<div>
+<div style={{ display: 'flex' }}>
   <Avatar status="Accepted" />
   <Avatar status="Pending" />
   <Avatar status="Declined" />
-  <Avatar status="Submitted" reviewerLetter="B-" />
+  <Avatar status="Submitted" reviewerLetter="B" />
 </div>
 ```
diff --git a/packages/ui/src/atoms/Badge.js b/packages/ui/src/atoms/Badge.js
index ec3dfcb4c9402a4a347ba8cc512c17c6ac75f7b3..f5d741d430273b1101edb1a3f6a5524298da9649 100644
--- a/packages/ui/src/atoms/Badge.js
+++ b/packages/ui/src/atoms/Badge.js
@@ -11,7 +11,6 @@ const Root = styled.span`
     #fff 1.15em,
     #fff 2em
   );
-  font-family: var(--font-interface);
   font-size: 1em;
   margin-right: 1em;
   padding-bottom: 1em;
diff --git a/packages/ui/src/atoms/Button.js b/packages/ui/src/atoms/Button.js
index 72a106f98ab7f37c52eccc6cdcb69140dcb8301f..10201047638566192eb0dd5781229fbdb6a5bdc8 100644
--- a/packages/ui/src/atoms/Button.js
+++ b/packages/ui/src/atoms/Button.js
@@ -1,115 +1,65 @@
 import React from 'react'
 import styled from 'styled-components'
+import th from '../helpers/themeHelper'
 
 const BaseStandardButton = styled.button.attrs({
   type: 'button',
 })`
-  background: #ddd;
-  border: none;
+  background: ${th('colorSecondary')};
+  border: ${th('borderWidth')} ${th('borderStyle')} ${th('colorBorder')};
+  border-radius: ${th('borderRadius')};
+
   cursor: pointer;
-  font-family: var(--font-interface);
+
+  font-family: ${th('fontInterface')};
   font-size: inherit;
   letter-spacing: 0.05em;
-  padding: 10px 20px;
-  position: relative;
-  text-transform: uppercase;
 
-  &:hover,
-  &:focus {
-    background: #777;
-    color: white;
-    outline: 1px solid transparent;
-  }
+  min-width: calc(${th('gridUnit')} * 4);
+  height: calc(${th('gridUnit')} * 2);
+  padding: 0 calc(${th('gridUnit')} / 4);
+  margin-right: ${th('subGridUnit')};
 
   &:active {
     transform: scale(0.8);
   }
-
-  &::after {
-    animation: 1s warning;
-    opacity: 1;
-  }
 `
 
 const PrimaryStandardButton = BaseStandardButton.extend`
-  background-color: var(--color-primary);
-  border: 2px solid transparent;
-  border-bottom: 4px solid var(--color-primary);
-  color: white;
-
-  &:hover,
-  &:focus {
-    background: white;
-    border: 2px solid var(--color-primary);
-    border-bottom: 4px solid var(--color-primary);
-    color: var(--color-primary);
-    outline: 1px solid transparent;
-  }
-
-  &:focus {
-    box-shadow: 0 2px 0 0 var(--color-primary);
-  }
+  background-color: ${th('colorPrimary')};
+  border-color: ${th('colorPrimary')};
+  color: ${th('colorBackground')};
 `
 
 const DisabledStandardButton = BaseStandardButton.extend.attrs({
   disabled: true,
 })`
-  background: white;
-  border: 2px solid transparent;
-  border-bottom: 2px solid #bbb;
-  color: #bbb;
-
-  &:hover {
-    background: transparent;
-    border: 2px solid transparent;
-    border-bottom: 2px solid #bbb;
-    color: #aaa;
-    cursor: not-allowed;
-  }
-
-  &:hover::after {
-    color: var(--color-danger);
-    content: 'sorry, this action is not possible';
-    display: inline;
-    font-size: 0.9em;
-    font-style: italic;
-    left: 115%;
-    letter-spacing: 0;
-    opacity: 1;
-    position: absolute;
-    text-align: left;
-    text-transform: lowercase;
-    top: 30%;
-  }
+  background: ${th('colorBackground')};
+  border-color: transparent;
+  color: ${th('colorSecondary')};
+  cursor: not-allowed;
 `
 
-const plainButtonOverrides = `
+const BasePlainButton = styled.button.attrs({
+  type: 'button',
+})`
   background: none;
-  border: 0;
-  border-bottom: 2px solid #777;
-  font-style: italic;
-  letter-spacing: 0;
+  border: none;
   padding: 0;
-  text-transform: none;
-
-  &:hover,
-  &:focus {
-    background: transparent;
-    border: 0;
-    border-bottom: 2px solid var(--color-primary);
-    color: var(--color-primary);
-  }
-
-  &:active {
-    transform: scale(0.99);
-  }
+  color: ${th('colorPrimary')};
+  text-decoration: underline;
+  cursor: pointer;
+  font-family: inherit;
+  font-size: inherit;
 `
 
-const DisabledPlainButton = DisabledStandardButton.extend`
-  ${plainButtonOverrides};
-`
-const BasePlainButton = BaseStandardButton.extend`
-  ${plainButtonOverrides};
+const DisabledPlainButton = BasePlainButton.extend.attrs({
+  disabled: true,
+})`
+  &, &:hover, &:focus {
+    color: ${th('colorSecondary')};
+    cursor: not-allowed;
+  }
 `
 
 const Button = ({ children, disabled, primary, plain, ...props }) => {
diff --git a/packages/ui/src/atoms/CenteredColumn.js b/packages/ui/src/atoms/CenteredColumn.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f1e5f6136afada0031ee1b42adb4ef49e67fe84
--- /dev/null
+++ b/packages/ui/src/atoms/CenteredColumn.js
@@ -0,0 +1,18 @@
+import styled from 'styled-components'
+import PropTypes from 'prop-types'
+
+const CenteredColumn = styled.div`
+  margin: 0 auto;
+  width: ${props =>
+    (props.small && '40ch') || (props.medium && '60ch') || '60ch'};
+`
+
+CenteredColumn.propTypes = {
+  small: PropTypes.bool,
+  medium: PropTypes.bool,
+}
+
+/**
+ * @component
+ */
+export default CenteredColumn
diff --git a/packages/ui/src/atoms/CenteredColumn.md b/packages/ui/src/atoms/CenteredColumn.md
new file mode 100644
index 0000000000000000000000000000000000000000..9c6320ffe8da6242ba3356a0407b4786519ea348
--- /dev/null
+++ b/packages/ui/src/atoms/CenteredColumn.md
@@ -0,0 +1,9 @@
+A layout component used for wrapping various forms:
+
+```js
+<CenteredColumn>contents................</CenteredColumn>
+```
+
+```js
+<CenteredColumn small>contents................</CenteredColumn>
+```
diff --git a/packages/ui/src/atoms/Checkbox.js b/packages/ui/src/atoms/Checkbox.js
index ae1f4cfcc4f4ddb9bf1a0b67deea6ddf66c49954..d8399dfc336be6d948745a24c53a0b5cce5e1e92 100644
--- a/packages/ui/src/atoms/Checkbox.js
+++ b/packages/ui/src/atoms/Checkbox.js
@@ -1,5 +1,6 @@
 import React from 'react'
 import styled, { keyframes } from 'styled-components'
+import th from '../helpers/themeHelper'
 
 const checking = keyframes`
   0% {
@@ -16,18 +17,19 @@ const checking = keyframes`
   }
 `
 
+const localBorderSize = '3px'
+const localBorderTwoSize = '1px'
+
 const Root = styled.label`
   align-items: center;
   display: ${props => (props.inline ? 'inline-flex' : 'flex')};
-  font-family: var(--font-author);
-  font-size: 1em;
+  font-family: ${th('fontAuthor')};
   font-style: italic;
   letter-spacing: 1px;
   transition: all 2s;
 
   &:not(:last-child) {
     margin-right: ${props => (props.inline ? '2.7em' : '0')};
-    margin-bottom: ${props => (props.inline ? '0' : '0.5rem')};
   }
 
   & input {
@@ -36,19 +38,15 @@ const Root = styled.label`
   }
 
   & span {
-    border-bottom: 1px solid transparent;
     font-size: 1.1em;
     transition: color 0.5s;
   }
 
   &:hover span {
-    color: var(--color-primary);
+    color: ${th('colorPrimary')};
   }
 
   & span::before {
-    --local-border-size: 3px;
-    --local-borderTwo-size: 1px;
-
     content: ' ';
     display: inline-block;
     vertical-align: middle;
@@ -58,8 +56,8 @@ const Root = styled.label`
     margin-right: 0.5em;
 
     background: ${props => (props.checked ? 'currentcolor' : 'transparent')};
-    border: var(--local-border-size) solid white;
-    box-shadow: 0 0 0 var(--local-borderTwo-size) currentcolor;
+    border: ${localBorderSize} solid white;
+    box-shadow: 0 0 0 ${localBorderTwoSize} currentcolor;
 
     transition: border 0.5s ease, background-size 0.3s ease;
   }
@@ -67,8 +65,8 @@ const Root = styled.label`
   &:hover span::before {
     animation: ${checking} 0.5s;
 
-    background: var(--color-primary);
-    box-shadow: 0 0 0 var(--local-borderTwo-size) var(--color-primary);
+    background: ${th('colorPrimary')};
+    box-shadow: 0 0 0 ${localBorderTwoSize} ${th('colorPrimary')};
   }
 `
 
@@ -84,7 +82,7 @@ const Checkbox = ({
   checked = checked || false
 
   return (
-    <Root checked={checked}>
+    <Root checked={checked} inline={inline}>
       <input
         checked={checked}
         name={name}
diff --git a/packages/ui/src/atoms/Colorize.js b/packages/ui/src/atoms/Colorize.js
new file mode 100644
index 0000000000000000000000000000000000000000..a0ef643fad60c98b70cb032989093d1639f9825e
--- /dev/null
+++ b/packages/ui/src/atoms/Colorize.js
@@ -0,0 +1,38 @@
+import React from 'react'
+import { withTheme } from 'styled-components'
+import { compose } from 'recompose'
+
+const Colorize = Component => {
+  const Colorized = ({
+    primary,
+    secondary,
+    quiet,
+    furniture,
+    success,
+    error,
+    warning,
+    reverse,
+    placeholder,
+    theme = {},
+    ...props
+  }) => {
+    const color =
+      (primary && theme.colorPrimary) ||
+      (secondary && theme.colorSecondary) ||
+      (quiet && theme.colorQuiet) ||
+      (furniture && theme.colorFurniture) ||
+      (success && theme.colorSuccess) ||
+      (error && theme.colorError) ||
+      (warning && theme.colorWarning) ||
+      (reverse && theme.colorTextReverse) ||
+      (placeholder && theme.colorTextPlaceholder) ||
+      theme.colorText
+
+    return <Component color={color} {...props} />
+  }
+
+  Colorized.propTypes = Object.assign({}, Component.propTypes)
+  return Colorized
+}
+
+export default compose(withTheme, Colorize)
diff --git a/packages/ui/src/atoms/Colorize.md b/packages/ui/src/atoms/Colorize.md
new file mode 100644
index 0000000000000000000000000000000000000000..8cd91b7d8b6b2f1bc978ab9961f78bb53d589796
--- /dev/null
+++ b/packages/ui/src/atoms/Colorize.md
@@ -0,0 +1 @@
+A hoc that accepts color names and delivers a corresponding color theme variable on a `color` prop
diff --git a/packages/ui/src/atoms/ErrorText.js b/packages/ui/src/atoms/ErrorText.js
new file mode 100644
index 0000000000000000000000000000000000000000..6ed06486f5df7b4eb9b8e4016ce45746504e6982
--- /dev/null
+++ b/packages/ui/src/atoms/ErrorText.js
@@ -0,0 +1,11 @@
+import styled from 'styled-components'
+import th from '../helpers/themeHelper'
+
+const ErrorText = styled.div`
+  color: ${th('colorError')};
+`
+
+/**
+ * @component
+ */
+export default ErrorText
diff --git a/packages/ui/src/atoms/ErrorText.md b/packages/ui/src/atoms/ErrorText.md
new file mode 100644
index 0000000000000000000000000000000000000000..82628a2f06cad5363cf53de9e632f38e0bad6233
--- /dev/null
+++ b/packages/ui/src/atoms/ErrorText.md
@@ -0,0 +1,5 @@
+Error text:
+
+```js
+<ErrorText>Error message</ErrorText>
+```
diff --git a/packages/ui/src/atoms/File.js b/packages/ui/src/atoms/File.js
index 547f2fec4828a047d47f9655722684768635ad6e..4da77e54d7e77169a80db0bb92394fe0df9efaca 100644
--- a/packages/ui/src/atoms/File.js
+++ b/packages/ui/src/atoms/File.js
@@ -1,122 +1,6 @@
 import React from 'react'
-import styled from 'styled-components'
+import UploadingFile from './UploadingFile'
 
-const Icon = styled.div`
-  background: #ddd;
-  height: 100px;
-  padding: 5px;
-  position: relative;
-  transition: transform 0.3s ease;
-  width: 70px;
-`
-
-const Extension = styled.div`
-  background: #888;
-  color: white;
-  font-size: 12px;
-  left: 20px;
-  padding: 2px;
-  position: absolute;
-  right: 0;
-  text-align: center;
-  text-transform: uppercase;
-  top: 20px;
-`
-
-const Filename = styled.div`
-  color: #aaa;
-  font-size: 1em;
-  font-style: italic;
-  margin: 0.7em;
-  text-align: center;
-  width: 20ch;
-  word-break: break-all; /* to divide into lines */
-`
-
-const Root = styled.div`
-  align-items: center;
-  display: inline-flex;
-  flex-direction: column;
-  margin-bottom: 2em;
-  margin-right: 3em;
-  position: relative;
-  width: 20ch;
-
-  &::before,
-  &::after {
-    cursor: pointer;
-    transition: transform 0.3s;
-  }
-
-  &::after {
-    background: var(--color-danger);
-    border: 1px solid white;
-    color: white;
-    content: 'remove';
-    cursor: pointer;
-    font-size: 0.8em;
-    left: 70%;
-    letter-spacing: 0.5px;
-    padding: 0.2em 0.4em;
-    position: absolute;
-    text-transform: uppercase;
-    top: 4em;
-    transform: scaleX(0);
-    transform-origin: 0 0;
-    z-index: 2;
-  }
-
-  &::before {
-    background: var(--color-primary);
-    border: 1px solid white;
-    color: white;
-    content: 'replace';
-    cursor: pointer;
-    font-size: 0.8em;
-    left: 70%;
-    letter-spacing: 0.5px;
-    padding: 0.2em 0.4em;
-    position: absolute;
-    text-transform: uppercase;
-    top: 6em;
-    transform: scaleX(0);
-    transform-origin: 0 0;
-    z-index: 3;
-  }
-
-  &:hover {
-    ${Extension} {
-      background: white;
-      border-right: 2px solid #ddd;
-      color: var(--color-primary);
-    }
-
-    ${Icon} {
-      background: var(--color-primary);
-      transform: skewY(6deg) rotate(-6deg);
-    }
-
-    &::after,
-    &::before {
-      transform: scaleX(1);
-    }
-  }
-`
-
-const getFileExtension = ({ name }) => name.replace(/^.+\./, '')
-
-const File = ({ value }) => (
-  <Root>
-    <Icon>
-      <Extension>{getFileExtension(value)}</Extension>
-    </Icon>
-
-    <Filename>
-      <a download={value.name} href={value.url}>
-        {value.name}
-      </a>
-    </Filename>
-  </Root>
-)
+const File = props => <UploadingFile {...props} uploaded />
 
 export default File
diff --git a/packages/ui/src/atoms/File.md b/packages/ui/src/atoms/File.md
index fe482efec8cf6a7c0a415456133adfde90930f7e..529b1a1d71f3f5bee915548730186004fdfe9dde 100644
--- a/packages/ui/src/atoms/File.md
+++ b/packages/ui/src/atoms/File.md
@@ -1,31 +1,13 @@
+Deprecated: use `UploadingFile` with `uploaded` prop.
+
 A file.
 
 ```js
-const value = {
+const file = {
   name: faker.system.commonFileName(),
+  url: faker.internet.url(),
   // type: faker.system.commonFileType(),
   // size: faker.random.number(),
-};
-
-<File value={value}/>
-```
-
-Upload progress is displayed as an overlay.
-
-```js
-const value = {
-  name: faker.system.commonFileName(),
-};
-
-<File value={value} progress={0.5}/>
-```
-
-An upload error is displayed above the file.
-
-```js
-const value = {
-  name: faker.system.commonFileName(),
-};
-
-<File value={value} error="There was an error"/>
+}
+;<File file={file} />
 ```
diff --git a/packages/ui/src/atoms/Flexbox.js b/packages/ui/src/atoms/Flexbox.js
new file mode 100644
index 0000000000000000000000000000000000000000..011f886ac2c5e7303214a19e0fe38699e00f4a93
--- /dev/null
+++ b/packages/ui/src/atoms/Flexbox.js
@@ -0,0 +1,18 @@
+import styled from 'styled-components'
+import PropTypes from 'prop-types'
+
+const Flexbox = styled.div`
+  display: flex;
+  flex-direction: ${props => (props.column ? 'column' : 'row')};
+  justify-content: ${props => (props.center ? 'center' : 'left')};
+`
+
+Flexbox.propTypes = {
+  column: PropTypes.bool,
+  center: PropTypes.bool,
+}
+
+/**
+ * @component
+ */
+export default Flexbox
diff --git a/packages/ui/src/atoms/Flexbox.md b/packages/ui/src/atoms/Flexbox.md
new file mode 100644
index 0000000000000000000000000000000000000000..38214dfc53a70c419f31b199956a519c0d66cec6
--- /dev/null
+++ b/packages/ui/src/atoms/Flexbox.md
@@ -0,0 +1 @@
+A flexbox container
diff --git a/packages/ui/src/atoms/Heading.js b/packages/ui/src/atoms/Heading.js
new file mode 100644
index 0000000000000000000000000000000000000000..a87db5d81f23a737dbf8777227e423869d1a9c2a
--- /dev/null
+++ b/packages/ui/src/atoms/Heading.js
@@ -0,0 +1,23 @@
+import React from 'react'
+import styled from 'styled-components'
+
+import th from '../helpers/themeHelper'
+
+const Heading = styled.span`
+  color: ${th('colorPrimary')};
+  font-size: ${({ level = 1, theme }) => theme[`fontSizeHeading${level}`]};
+  font-family: ${th('fontHeading')};
+  margin-bottom: calc(1 * ${th('gridUnit')});
+`
+
+export const H1 = ({ children }) => <Heading level={1}>{children}</Heading>
+export const H2 = ({ children }) => <Heading level={2}>{children}</Heading>
+export const H3 = ({ children }) => <Heading level={3}>{children}</Heading>
+export const H4 = ({ children }) => <Heading level={4}>{children}</Heading>
+export const H5 = ({ children }) => <Heading level={5}>{children}</Heading>
+export const H6 = ({ children }) => <Heading level={6}>{children}</Heading>
+
+/**
+ * @component
+ */
+export default Heading
diff --git a/packages/ui/src/atoms/Heading.md b/packages/ui/src/atoms/Heading.md
new file mode 100644
index 0000000000000000000000000000000000000000..c447a172a82dfa0e1582035247efd542a995bd84
--- /dev/null
+++ b/packages/ui/src/atoms/Heading.md
@@ -0,0 +1,13 @@
+A Heading
+
+```js
+<Heading level={1}>Level 1</Heading>
+```
+
+Levels correspond to h1, h2, etc.
+
+```js
+<Heading level={4}>Level 4</Heading>
+```
+
+H1, H2, etc. components are also exported
diff --git a/packages/ui/src/atoms/Icon.js b/packages/ui/src/atoms/Icon.js
index 5d78520b45912621a1d2eabf673709cbcd5d10b0..cf315da424525a8f66285cd01ea8df02eadea0ae 100644
--- a/packages/ui/src/atoms/Icon.js
+++ b/packages/ui/src/atoms/Icon.js
@@ -2,20 +2,41 @@ import React from 'react'
 import { pascalize } from 'humps'
 import * as icons from 'react-feather'
 import styled from 'styled-components'
+import PropTypes from 'prop-types'
+import Colorize from './Colorize'
+import th from '../helpers/themeHelper'
 
 const Container = styled.span`
   display: inline-flex;
-  width: var(--icon-size);
+  padding: calc(${th('subGridUnit')} / 2);
+  svg {
+    stroke: ${props => props.color || props.theme.colorText};
+    width: calc(${props => props.size} * ${th('subGridUnit')});
+    height: calc(${props => props.size} * ${th('subGridUnit')});
+  }
 `
 
-const Icon = ({ children, color = 'var(--color-local, black)', size = 24 }) => {
+const Icon = ({ children, color, size = 3, ...props }) => {
   // convert `arrow_left` to `ArrowLeft`
   const name = pascalize(children)
 
   // select the icon
   const icon = icons[name]
 
-  return <Container>{icon({ color, size })}</Container>
+  if (!icon) {
+    console.warn("Icon '%s' not found", name)
+  }
+
+  return (
+    <Container color={color} size={size}>
+      {icon ? icon({}) : ''}
+    </Container>
+  )
+}
+
+Icon.protoTypes = {
+  size: PropTypes.number,
+  color: PropTypes.string,
 }
 
-export default Icon
+export default Colorize(Icon)
diff --git a/packages/ui/src/atoms/Icon.md b/packages/ui/src/atoms/Icon.md
index bbee0593695c749fbedce849fd13fcc740629a74..e98e104d94cdb1b712796eddc2a3f1fb57972224 100644
--- a/packages/ui/src/atoms/Icon.md
+++ b/packages/ui/src/atoms/Icon.md
@@ -7,11 +7,14 @@ An icon, from the [Feather](https://feathericons.com/) icon set.
 The color can be changed.
 
 ```js
-<Icon color="red">arrow_right</Icon>
-``` 
+<div>
+  <Icon error>arrow_right</Icon>
+  <Icon primary>arrow_right</Icon>
+</div>
+```
 
 The size can be changed.
 
 ```js
-<Icon size={48}>arrow_right</Icon>
-``` 
+<Icon size={6}>arrow_right</Icon>
+```
diff --git a/packages/ui/src/atoms/Link.js b/packages/ui/src/atoms/Link.js
new file mode 100644
index 0000000000000000000000000000000000000000..03158152cb180ef0928852843235240966b1398b
--- /dev/null
+++ b/packages/ui/src/atoms/Link.js
@@ -0,0 +1,13 @@
+import styled from 'styled-components'
+import { Link as UnstyledLink } from 'react-router-dom'
+import th from '../helpers/themeHelper'
+
+const Link = styled(UnstyledLink)`
+  color: ${th('colorPrimary')};
+  cursor: pointer;
+`
+
+/**
+ * @component
+ */
+export default Link
diff --git a/packages/ui/src/atoms/Link.md b/packages/ui/src/atoms/Link.md
new file mode 100644
index 0000000000000000000000000000000000000000..5499b01b0e4a6a85369d641ed66607ec6c826cee
--- /dev/null
+++ b/packages/ui/src/atoms/Link.md
@@ -0,0 +1,5 @@
+A styled link
+
+```js
+<Link to={'www.google.com'}>Click here</Link>
+```
diff --git a/packages/ui/src/atoms/Menu.js b/packages/ui/src/atoms/Menu.js
index 2203f7f5fa9fe501791a95aff68a58c073b49003..a7119c040c23c4bdc02e036a5bc203a08c54161c 100644
--- a/packages/ui/src/atoms/Menu.js
+++ b/packages/ui/src/atoms/Menu.js
@@ -1,58 +1,74 @@
 import React from 'react'
 import styled from 'styled-components'
+import th from '../helpers/themeHelper'
 
 // TODO: match the width of the container to the width of the widest option?
 // TODO: use a <select> element instead of divs?
+// TODO: determine the correct color for non-selected options
+// FIXME: putting markup inside a <button> is invalid
 
 const Root = styled.div`
-  font-size: 1em;
+  max-width: calc(${th('gridUnit')} * 14);
+  margin-bottom: ${props => (props.inline ? '0' : props.theme.gridUnit)};
 `
 
-const Label = styled.span`
+const Label = styled.label`
+  font-size: ${th('fontSizeBaseSmall')};
   display: block;
-  font-size: 1em;
-  margin-bottom: 0.5em;
 `
 
-const OpenerContainer = styled.div``
-
 const Opener = styled.button.attrs({
   type: 'button',
 })`
   background: transparent;
-  border: none;
+  border: ${th('borderWidth')} ${th('borderStyle')} ${th('colorBorder')};
+  border-radius: ${th('borderRadius')};
   cursor: pointer;
   font-family: inherit;
-  font-size: 1.2em;
 
-  border-left: 2px solid
-    ${props => (props.open ? 'var(--color-primary)' : 'lightgrey')};
-  color: ${props => (props.open ? 'var(--color-primary)' : 'inherit')};
+  width: 100%;
+  height: calc(${th('gridUnit')} * 2);
+  padding: 0;
+
+  display: flex;
+  align-items: center;
 
   &:hover {
-    border-left: 2px solid var(--color-primary);
-    color: var(--color-primary);
+    border-color: ${th('colorPrimary')};
   }
 `
 
-const Placeholder = styled.span`
-  font-family: var(--font-interface);
-  font-style: italic;
-  font-weight: 400;
-  text-transform: normal;
-  color: #aaa;
+const Value = styled.span`
+  flex-grow: 1;
+
+  text-align: left;
+  padding: 0 calc(${th('gridUnit')} / 2);
 
   &:hover {
-    color: var(--color-primary);
+    color: ${th('colorPrimary')};
   }
 `
 
+const Placeholder = Value.extend`
+  color: ${th('colorTextPlaceholder')};
+  font-style: italic;
+`
+
+const ArrowContainer = styled.span`
+  border-left: ${th('borderWidth')} ${th('borderStyle')} ${th('colorFurniture')};
+
+  width: calc(${th('gridUnit')} * 2);
+  height: calc(${th('gridUnit')} * 2 - ${th('borderWidth')} * 2);
+
+  display: flex;
+  align-items: center;
+  justify-content: center;
+`
+
 const Arrow = styled.span`
-  display: inline-block;
   font-size: 50%;
-  margin-left: 10px;
   transition: transform 0.2s;
-  transform: scaleX(2.2) scaleY(${props => (props.open ? -1.2 : 1.2)});
+  transform: scaleX(2) scaleY(${props => (props.open ? -1.2 : 1.2)});
 `
 
 const Main = styled.div.attrs({
@@ -63,23 +79,20 @@ const Main = styled.div.attrs({
 
 const OptionsContainer = styled.div`
   position: absolute;
+  left: 0;
+  right: 0;
 `
 
 const Options = styled.div`
-  background-color: white;
-  border-bottom: 2px solid var(--color-primary);
-  border-left: 2px solid var(--color-primary);
-  left: 0;
-  padding-bottom: 0.5em;
-  padding-top: 0.5em;
   position: absolute;
   top: 0;
-  transition: opacity 2s;
-  width: 0;
-  z-index: 10;
+  left: 0;
+  right: 0;
 
-  min-width: ${props => (props.open ? '10em' : '0')};
-  opacity: ${props => (props.open ? '1' : '0')};
+  background-color: ${th('colorBackground')};
+  border: ${th('borderWidth')} ${th('borderStyle')} ${th('colorBorder')};
+  border-radius: ${th('borderRadius')};
+  overflow: hidden;
 `
 
 const Option = styled.div.attrs({
@@ -87,43 +100,29 @@ const Option = styled.div.attrs({
   tabIndex: '0',
   'aria-selected': props => props.active,
 })`
-  color: ${props => (props.active ? 'black' : '#444')};
+  color: ${props => (props.active ? props.theme.textColor : '#444')};
   font-weight: ${props => (props.active ? '600' : 'inherit')};
   cursor: pointer;
-  font-family: var(--font-author);
-  padding: 10px;
+  font-family: ${th('fontAuthor')};
+  padding: calc(${th('subGridUnit')} - ${th('borderWidth')} * 2)
+    calc(${th('subGridUnit')} * 2);
+  border: ${th('borderWidth')} ${th('borderStyle')} transparent;
+  border-width: ${th('borderWidth')} 0 ${th('borderWidth')} 0;
   white-space: nowrap;
 
   &:hover {
-    color: var(--color-primary);
+    background: ${th('colorBackgroundHue')};
+    border-color: ${th('colorBorder')};
   }
-`
-
-/* Not used for now
-.inline {
-  align-items: flex-end;
-  display: flex;
-  flex-direction: row;
-  justify-content: flex-start;
-  margin-right: 0.5em;
-}
-
-.inline .label {
-  margin-right: 0.5em;
-}
 
-.inline .opener {
-  margin-bottom: -4px;
-}
-
-.root .inline {
-  flex-direction: columns;
-}
+  &:first-child:hover {
+    border-top-color: ${th('colorBackgroundHue')};
+  }
 
-.root.author {
-  font-family: var(--font-author);
-}
-*/
+  &:last-child:hover {
+    border-bottom-color: ${th('colorBackgroundHue')};
+  }
+`
 
 class Menu extends React.Component {
   constructor(props) {
@@ -163,24 +162,29 @@ class Menu extends React.Component {
   }
 
   render() {
-    const { label, options, placeholder = 'Choose in the list' } = this.props
+    const {
+      label,
+      options,
+      inline,
+      placeholder = 'Choose in the list',
+    } = this.props
     const { open, selected } = this.state
 
     return (
-      <Root open={open}>
+      <Root inline={inline} open={open}>
         {label && <Label>{label}</Label>}
 
         <Main>
-          <OpenerContainer>
-            <Opener onClick={this.toggleMenu} open={open}>
-              {selected ? (
-                <span>{this.optionLabel(selected)}</span>
-              ) : (
-                <Placeholder>{placeholder}</Placeholder>
-              )}
+          <Opener onClick={this.toggleMenu} open={open}>
+            {selected ? (
+              <Value>{this.optionLabel(selected)}</Value>
+            ) : (
+              <Placeholder>{placeholder}</Placeholder>
+            )}
+            <ArrowContainer>
               <Arrow open={open}>â–¼</Arrow>
-            </Opener>
-          </OpenerContainer>
+            </ArrowContainer>
+          </Opener>
 
           <OptionsContainer>
             {open && (
diff --git a/packages/ui/src/atoms/Radio.js b/packages/ui/src/atoms/Radio.js
index 90a9409d6bb1c5a76e6fe9dadf6ff09e05cd508a..8d9ded2130c3afe3c665ef9b6178944b2c556d1a 100644
--- a/packages/ui/src/atoms/Radio.js
+++ b/packages/ui/src/atoms/Radio.js
@@ -1,33 +1,34 @@
 import React from 'react'
 import styled, { keyframes } from 'styled-components'
+import th from '../helpers/themeHelper'
 
 const Input = styled.input`
   display: none;
 `
 
 const PseudoInput = styled.span`
-  --local-border-size: 2px;
-  --local-borderTwo-size: 1px;
-
   display: inline-block;
   content: ' ';
-  width: 0.6em;
-  height: 0.6em;
+  width: calc(${th('subGridUnit')} * 2);
+  height: calc(${th('subGridUnit')} * 2);
   vertical-align: center;
-  margin-left: 0.2em;
-  margin-right: 0.6em;
+  margin-left: ${th('subGridUnit')};
+  margin-right: ${th('subGridUnit')};
 
-  border: var(--local-border-size) solid white;
+  /* This is not a real border (box-shadow provides that), so not themed as such */
+  border: calc(${th('subGridUnit')} / 4) solid white;
   border-radius: 50%;
 
-  transition: border 0.2s ease;
+  transition: border ${th('transitionDurationXs')}
+    ${th('transitionTimingFunction')};
+
   color: ${props => props.color};
 `
 
 const Label = styled.span`
   display: inline-block;
   font-family: inherit;
-  font-size: 1em;
+  font-size: ${th('fontSizeBase')};
   font-style: italic;
 `
 
@@ -50,28 +51,29 @@ const Root = styled.label`
   align-items: center;
   cursor: pointer;
   display: ${props => (props.inline ? 'inline-flex' : 'flex')};
-  transition: all 2s;
+  transition: all ${th('transitionDuration')};
+  min-height: ${th('gridUnit')};
 
   &:not(:last-child) {
-    margin-right: ${props => (props.inline ? '2.7em' : '0')};
-    margin-bottom: ${props => (props.inline ? '0' : '0.5rem')};
+    margin-right: ${props => (props.inline ? props.theme.gridUnit : '0')};
+    margin-bottom: 0;
   }
 
   ${PseudoInput} {
     background: ${props => (props.checked ? 'currentcolor' : 'transparent')};
-    box-shadow: 0 0 0 var(--local-borderTwo-size) currentcolor;
+    box-shadow: 0 0 0 ${th('borderWidth')} currentcolor;
   }
 
   &:hover {
     ${Label} {
-      color: ${props => (props.checked ? 'inherit' : 'var(--color-primary)')};
+      color: ${props => (props.checked ? 'inherit' : props.theme.colorPrimary)};
     }
 
     ${PseudoInput} {
       animation-name: ${props => (props.checked ? 'none' : checking)};
-      animation-duration: 0.5s;
-      box-shadow: 0 0 0 var(--local-borderTwo-size)
-        ${props => (props.checked ? 'currentcolor' : 'var(--color-primary)')};
+      animation-duration: ${th('transitionDurationS')};
+      box-shadow: 0 0 0 ${th('borderWidth')}
+        ${props => (props.checked ? 'currentcolor' : props.theme.colorPrimary)};
     }
   }
   color: ${props => props.color};
@@ -79,7 +81,7 @@ const Root = styled.label`
 
 /* Not used for now
 .root.author {
-  font-family: var(--font-author);
+  font-family: ${th("fontAuthor")};
 }
 
 .root.author span {
@@ -100,7 +102,7 @@ const Radio = ({
   onChange,
   readonly,
 }) => (
-  <Root checked={checked} color={color}>
+  <Root checked={checked} color={color} inline={inline}>
     <Input
       checked={checked}
       disabled={readonly}
diff --git a/packages/ui/src/atoms/Section.js b/packages/ui/src/atoms/Section.js
new file mode 100644
index 0000000000000000000000000000000000000000..d5b670c4d7c231608e6e9ba74d191d32b4575bf7
--- /dev/null
+++ b/packages/ui/src/atoms/Section.js
@@ -0,0 +1,15 @@
+import styled from 'styled-components'
+import th from '../helpers/themeHelper'
+
+const Section = styled.div`
+  margin: 0 ${th('gridUnit')} ${th('gridUnit')} 0;
+
+  &:not(:last-of-type) {
+    margin-bottom: calc(${th('gridUnit')} * 2);
+  }
+`
+
+/**
+ * @component
+ */
+export default Section
diff --git a/packages/ui/src/atoms/Section.md b/packages/ui/src/atoms/Section.md
new file mode 100644
index 0000000000000000000000000000000000000000..d364dc6ef9eb68585d643beaca338564b5be7ace
--- /dev/null
+++ b/packages/ui/src/atoms/Section.md
@@ -0,0 +1 @@
+Wraps a div with margin
diff --git a/packages/ui/src/atoms/Spinner.js b/packages/ui/src/atoms/Spinner.js
index 59f9f291e4a75f6c1526d4d56d3e8a8e6b4ec02c..52f0cc68c9722fc03d7af35b2bb4f5d00d579ba5 100644
--- a/packages/ui/src/atoms/Spinner.js
+++ b/packages/ui/src/atoms/Spinner.js
@@ -3,7 +3,7 @@ import propTypes from 'prop-types'
 import { Icon } from '@pubsweet/ui'
 import styled, { keyframes } from 'styled-components'
 
-const Spinner = ({ icon = 'loader', size = 16, color = '#444' }) => (
+const Spinner = ({ icon = 'loader', size = 2, color = '#444' }) => (
   <Root>
     <Icon color={color} size={size}>
       {icon}
diff --git a/packages/ui/src/atoms/Spinner.md b/packages/ui/src/atoms/Spinner.md
index 7d51d6a5306d60b07bad6c0997c7e55681005981..df2233f6a74701a0165a4522304218ed29d383b3 100644
--- a/packages/ui/src/atoms/Spinner.md
+++ b/packages/ui/src/atoms/Spinner.md
@@ -4,6 +4,8 @@ Spinning icon used when loading or waiting for API calls to finish.
 <Spinner />
 ```
 
+The size, colour and icon can be changed:
+
 ```js
-<Spinner color="pink" size={40} icon="compass" />
+<Spinner color="pink" size={8} icon="compass" />
 ```
diff --git a/packages/ui/src/atoms/StateItem.js b/packages/ui/src/atoms/StateItem.js
index 870a639d9665804725f91fd4cb7d1f0c9ba6c7d6..92b668735fd198e7457d5c88396dc33a3b9a9e14 100644
--- a/packages/ui/src/atoms/StateItem.js
+++ b/packages/ui/src/atoms/StateItem.js
@@ -1,36 +1,34 @@
 import PropTypes from 'prop-types'
-import styled from 'styled-components'
+import styled, { css } from 'styled-components'
 import React from 'react'
+import th from '../helpers/themeHelper'
 
-const darkGrey = '#404040'
-const lightGrey = '#b3b3b3'
-
-const disabled = `
-  color: ${lightGrey};
+const disabled = css`
+  color: ${th('colorSecondary')};
   cursor: default;
 
   &:hover {
-    color: ${lightGrey};
+    color: ${th('colorSecondary')};
   }
 `
 
 const Root = styled.span`
   cursor: pointer;
-  font-family: var(--font-interface);
-  font-size: 16px;
+  font-family: ${th('fontInterface')};
+  font-size: ${th('fontSizeBaseSmall')};
   font-style: italic;
-  padding: 0;
 
   &:focus {
     outline: none;
   }
 
   &:hover {
-    color: ${darkGrey};
-    transition: 0.25s ease-in-out 0s;
+    color: ${th('colorText')};
+    transition: ${th('transitionDurationUnit')}
+      ${th('transitionTimingFunction')};
   }
 
-  ${props => (props.disabled ? disabled : '')};
+  ${props => props.disabled && disabled};
 `
 
 const StateItem = ({ update, disabled, values, index }) => {
diff --git a/packages/ui/src/atoms/Tags.js b/packages/ui/src/atoms/Tags.js
index 40a082a93e80137fe56ffc9eecd07cdd4a4b50eb..b44b0b8297cd78e7639ccf423468d5196276b4ea 100644
--- a/packages/ui/src/atoms/Tags.js
+++ b/packages/ui/src/atoms/Tags.js
@@ -1,6 +1,7 @@
 import React from 'react'
 import ReactTags from 'react-tag-autocomplete'
 import styled from 'styled-components'
+import th from '../helpers/themeHelper'
 
 // TODO: separate tags when pasted
 // TODO: allow tags to be edited
@@ -96,14 +97,12 @@ const Tags = styled(TagsUnstyled)`
   .${classNames.root} {
     /* clicking anywhere will focus the input */
     cursor: text;
-    font-size: 1em;
-    line-height: 1.2;
-    padding: 6px 0 0 6px;
+    padding: ${th('subGridUnit')} 0 0 ${th('subGridUnit')};
     position: relative;
   }
 
   .${classNames.root}.${classNames.rootFocused} {
-    border-color: var(--color-primary);
+    border-color: ${th('colorPrimary')};
   }
 
   .${classNames.selected} {
@@ -111,59 +110,48 @@ const Tags = styled(TagsUnstyled)`
   }
 
   .${classNames.selectedTag} {
-    border: 0 solid transparent;
-    box-sizing: border-box;
+    border: 0;
     cursor: pointer;
     display: inline-block;
-    font-family: 'Vollkorn', serif;
+    font-family: ${th('fontReading')};
 
     /* match the font styles */
-    font-size: inherit;
-    line-height: inherit;
-    margin: 0 1em 1em 0;
+    margin: 0 ${th('subGridUnit')} ${th('gridUnit')} 0;
     padding: 0.1em 0.3em;
 
-    ${realBorder('#aaa', 'white')}
+    ${props => realBorder(props.theme.colorBorder, props.theme.colorBackground)}
   }
 
   .${classNames.selectedTag}::after {
-    background: white;
-    color: #aaa;
+    color: ${th('colorBorder')};
     content: '\\2715';
-    // margin: 0;
     display: inline-block;
-    font-size: 0.9em;
+    font-size: ${th('fontSizeBaseSmall')};
     font-weight: 600;
-    height: 10px;
-    margin-left: 8px;
-    padding: 3px 0 0;
-    text-shadow: none;
-    width: 13px;
-
-    &:hover {
-      background: var(--color-primary);
-    }
+    margin-left: ${th('subGridUnit')};
+    padding: ${th('subGridUnit')} 0 0
+    width: ${th('subGridUnit')};
   }
 
   .${classNames.selectedTag}:hover,
   .${classNames.selectedTag}:focus {
     text-decoration: line-through;
 
-    ${realBorder('transparent', 'white')}
+    ${props => realBorder('transparent', props.theme.colorBackground)}
 
     &::after {
-      color: var(--color-danger);
+      color: ${th('colorError')};
     }
   }
   .${classNames.search} {
     display: inline-block;
 
     /* match tag layout */
-    margin: 0 1em 1em 0;
+    margin: 0 0 ${th('gridUnit')} 0;
 
     /* prevent autoresize overflowing the container */
-    max-width: 100px;
-    padding: 0.1em 0.3em;
+    max-width: calc(${th('gridUnit')} * 5);
+    padding: ${th('subGridUnit')} ${th('subGridUnit')};
   }
 
   @media screen and (min-width: 30em) {
@@ -175,9 +163,9 @@ const Tags = styled(TagsUnstyled)`
 
   .${classNames.search} input {
     border: 0;
-    border-bottom: 1px dashed grey;
-    color: black;
-    font-family: 'Vollkorn', serif;
+    border-bottom: ${th('borderWidth')} dashed ${th('colorBorder')};
+    color: ${th('colorText')};
+    font-family: ${th('fontReading')};
 
     /* match the font styles */
     font-size: inherit;
@@ -188,18 +176,18 @@ const Tags = styled(TagsUnstyled)`
 
     /* prevent autoresize overflowing the container */
     max-width: 100%;
-    min-width: 15ch;
+    min-width: calc(${th('gridUnit')} * 5);
     outline: none;
     padding: 0;
 
     &::placeholder {
-      font-family: 'Fira Sans Condensed', sans-serif;
-      opacity: 0.5;
+      font-family: ${th('fontInterface')};
+      color: ${th('colorTextPlaceholder')};
     }
 
     &:focus,
     &:hover {
-      border-bottom: 1px dashed var(--color-primary);
+      border-bottom: ${th('borderWidth')} dashed ${th('colorPrimary')};
     }
   }
 
diff --git a/packages/ui/src/atoms/TextField.js b/packages/ui/src/atoms/TextField.js
index fb17a19a21758c1a5ec57ec20193cc206382c42e..edd3c651f2c5c84d7a3dc775741f49e1a296f868 100644
--- a/packages/ui/src/atoms/TextField.js
+++ b/packages/ui/src/atoms/TextField.js
@@ -1,62 +1,40 @@
 import React from 'react'
 import styled from 'styled-components'
+import th from '../helpers/themeHelper'
 
-const Root = styled.label`
-  --font-local: var(--font-reviewer);
-
-  align-items: center;
+const Root = styled.div`
   display: flex;
-  font-size: 1em;
-  line-height: 1.8;
+  flex-direction: column;
+  max-width: calc(${th('gridUnit')} * 14);
+  margin-bottom: ${props => (props.inline ? '0' : props.theme.gridUnit)};
 `
 
-const Label = styled.span`
-  margin-right: 10px;
+const Label = styled.label`
+  font-size: ${th('fontSizeBaseSmall')};
+  display: block;
 `
 
-const Input = styled.input`
-  --color-back: darkgray;
+const borderColor = ({ theme, validationStatus = 'default' }) =>
+  ({
+    error: theme.colorError,
+    success: theme.colorSuccess,
+    warning: theme.colorWarning,
+    default: theme.colorBorder,
+  }[validationStatus])
 
-  background: linear-gradient(
-      to right,
-      transparent 0%,
-      transparent 2px,
-      white 2px,
-      white 4px
-    ),
-    linear-gradient(white 0%, white 90%, var(--color-back) 95%, white 100%);
-  background-position: 0 0, 0.2em 0;
-  background-repeat: repeat-X, repeat-Y;
-  background-size: 7px 100%, 100% 1.3em;
-  border: none;
-  border-left: 1px solid darkgrey;
-  caret-color: var(--color-primary);
-  flex: 1;
-  font-family: var(--font-local), serif;
-  font-size: inherit;
-  max-width: 100%;
-  padding: 0 0.5em;
+const Input = styled.input`
+  border: ${th('borderWidth')} ${th('borderStyle')} ${borderColor};
 
-  &:hover,
-  &:focus {
-    border-color: transparent;
-    box-shadow: none;
-    outline-style: none;
-  }
+  border-radius: ${th('borderRadius')};
 
-  &:hover {
-    --color-back: var(--color-primary);
-  }
+  font-family: inherit;
+  font-size: inherit;
 
-  &:focus {
-    --color-back: #aaa;
-  }
+  padding: 0 calc(${th('gridUnit')} / 2);
+  height: calc(${th('gridUnit')} * 2);
 
   &::placeholder {
-    color: #999;
-    font-family: var(--font-interface);
-    font-size: 1em;
-    font-style: italic;
+    color: ${th('colorTextPlaceholder')};
   }
 `
 
@@ -69,18 +47,23 @@ const TextField = ({
   value = '',
   onBlur,
   onChange,
+  onKeyDown,
   readonly,
+  validationStatus,
+  inline,
 }) => (
-  <Root>
+  <Root inline={inline}>
     {label && <Label>{label}</Label>}
     <Input
       name={name}
       onBlur={onBlur}
       onChange={onChange}
+      onKeyDown={onKeyDown}
       placeholder={placeholder}
       readOnly={readonly}
       required={required}
       type={type}
+      validationStatus={validationStatus}
       value={value}
     />
   </Root>
diff --git a/packages/ui/src/atoms/Title.js b/packages/ui/src/atoms/Title.js
new file mode 100644
index 0000000000000000000000000000000000000000..c12a6dfa465009e293f72c68fb693164f1c36760
--- /dev/null
+++ b/packages/ui/src/atoms/Title.js
@@ -0,0 +1,23 @@
+import styled from 'styled-components'
+import th from '../helpers/themeHelper'
+
+const fontSize = ({ theme, level = 1 }) =>
+  ({
+    1: theme.fontSizeHeading1,
+    2: theme.fontSizeHeading2,
+    3: theme.fontSizeHeading3,
+    4: theme.fontSizeHeading4,
+    5: theme.fontSizeHeading5,
+    6: theme.fontSizeHeading6,
+  }[level])
+
+const Title = styled.div`
+  font-size: ${fontSize};
+  font-family: ${th('fontHeading')};
+  margin-bottom: ${th('gridUnit')};
+`
+
+/**
+ * @component
+ */
+export default Title
diff --git a/packages/ui/src/atoms/UploadButton.js b/packages/ui/src/atoms/UploadButton.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9583aa8feeceb87ba762256cbe929b38c4bd8af
--- /dev/null
+++ b/packages/ui/src/atoms/UploadButton.js
@@ -0,0 +1,34 @@
+import React from 'react'
+import styled from 'styled-components'
+import th from '../helpers/themeHelper'
+
+const Button = styled.button.attrs({
+  type: 'button',
+})`
+  background: transparent;
+  border: ${th('borderWidth')} dashed ${th('colorBorder')};
+  height: ${th('gridUnit')};
+  cursor: pointer;
+  margin-bottom: ${th('gridUnit')};
+  padding: ${th('subGridUnit')};
+`
+
+const UploadButton = ({ name, buttonText, onChange }) => {
+  let fileInput
+  return (
+    <div>
+      <Button onClick={() => fileInput.click()}>{buttonText}</Button>
+
+      <input
+        multiple
+        name={name}
+        onChange={onChange}
+        ref={input => (fileInput = input)}
+        style={{ display: 'none' }}
+        type="file"
+      />
+    </div>
+  )
+}
+
+export default UploadButton
diff --git a/packages/ui/src/atoms/UploadButton.md b/packages/ui/src/atoms/UploadButton.md
new file mode 100644
index 0000000000000000000000000000000000000000..bfb7ca50f12584b743af49d023b67832d393ec33
--- /dev/null
+++ b/packages/ui/src/atoms/UploadButton.md
@@ -0,0 +1,8 @@
+A button for uploading files
+
+```js
+<UploadButton
+  buttonText={'Upload'}
+  onChange={() => console.log('UploadButton clicked')}
+/>
+```
diff --git a/packages/ui/src/atoms/UploadingFile.js b/packages/ui/src/atoms/UploadingFile.js
index 8274a3c67411c7ac0c3e5ea294cfad50cc1c4bfa..99c878ab2a066ecba7b3bef1b8450d4b949021e0 100644
--- a/packages/ui/src/atoms/UploadingFile.js
+++ b/packages/ui/src/atoms/UploadingFile.js
@@ -1,129 +1,138 @@
 import React from 'react'
 import styled from 'styled-components'
-
-// TODO: cancel button
-
-const Root = styled.div`
-  align-items: center;
-  display: inline-flex;
-  flex-direction: column;
-  margin-bottom: 2em;
-  margin-right: 3em;
-  position: relative;
-  width: 20ch;
-`
-
-const ErrorWrapper = styled.div`
-  background: var(--color-danger);
-  border: 2px solid white;
-  color: white;
-  font-size: 0.8em;
-  letter-spacing: 0.01em;
-  opacity: 1;
-  padding: 0.3em 0.5em;
-  position: absolute;
-  top: 25%;
-  z-index: 4;
-`
+import th from '../helpers/themeHelper'
 
 const Icon = styled.div`
-  background: #ddd;
-  height: 100px;
-  margin: 5px;
+  background: ${th('colorFurniture')};
+  height: calc(${th('subGridUnit')} * 15);
+  margin-bottom: ${th('subGridUnit')};
   opacity: 0.5;
   position: relative;
-  width: 70px;
+  width: calc(${th('gridUnit')} * 3);
 `
 
 const Progress = styled.div`
-  background-image:
-    linear-gradient(
-      var(--color-primary-light) 50%,
-      var(--color-primary) 75%,
-      to top
-    );
-  bottom: 0;
-  content: '';
+  color: ${th('colorTextReverse')};
   display: block;
-  left: 0;
-  opacity: 1;
+  position: absolute;
+  bottom: ${th('subGridUnit')};
+  left: calc(${th('subGridUnit')} * 4);
+`
+
+const Extension = styled.div`
+  background: ${th('colorText')};
+  color: ${th('colorTextReverse')};
+  font-size: ${th('fontSizeBaseSmall')};
+  left: calc(${th('subGridUnit')} * 2);
   position: absolute;
   right: 0;
-  transform-origin: 0 0;
+  text-align: center;
+  text-transform: uppercase;
+  top: calc(${th('subGridUnit')} * 2);
+`
+
+const Filename = styled.div`
+  color: ${th('colorText')};
+  font-size: ${th('fontSizeBaseSmall')};
+  font-style: italic;
+  max-width: calc(${th('gridUnit')} * 10);
+`
+
+const Uploading = styled.div`
+  align-items: center;
+  display: inline-flex;
+  flex-direction: column;
+  margin-bottom: ${th('gridUnit')};
+  margin-right: calc(${th('subGridUnit')} * 3);
+  position: relative;
+  width: calc(${th('gridUnit')} * 10);
+`
 
+const Uploaded = Uploading.extend`
+  &::before,
   &::after {
-    /* we can use a data attribute for the numbering below */
-    bottom: 2px;
-    color: white;
-    content: '${props => props.percent}%';
-    display: block;
+    cursor: pointer;
+    transition: transform ${th('transitionDurationS')};
+    font-size: ${th('fontSizeBaseSmall')};
+    left: 65%;
+    padding: 0 ${th('subGridUnit')} 0 ${th('subGridUnit')};
     position: absolute;
-    right: 2px;
+    border: ${th('borderWidth')} ${th('borderStyle')} ${th('colorTextReverse')};
+    color: ${th('colorTextReverse')};
+    text-transform: uppercase;
+    cursor: pointer;
+    transform: scaleX(0);
+    transform-origin: 0 0;
   }
-`
 
-const Filename = styled.div`
-  color: gray;
-  font-size: 90%;
-  font-style: italic;
-  margin: 5px;
-  max-width: 20ch;
+  &::after {
+    background: ${th('colorError')};
+    content: 'Remove';
+    top: calc(${th('subGridUnit')} * 5);
+    z-index: 2;
+  }
+
+  &::before {
+    background: ${th('colorPrimary')};
+    content: 'Replace';
+    top: calc(${th('subGridUnit')} * 10);
+    z-index: 3;
+  }
+
+  &:hover ${Extension} {
+    background: ${th('colorTextReverse')};
+    color: ${th('colorPrimary')};
+  }
+
+  &:hover ${Icon} {
+    opacity: 1;
+    background: ${th('colorPrimary')};
+    transform: skewY(6deg) rotate(-6deg);
+  }
+
+  &:hover::after,
+  &:hover::before {
+    transform: scaleX(1);
+  }
 `
-const Extension = styled.div`
-  background: #888;
-  color: white;
-  font-size: 12px;
-  left: 20px;
-  padding: 2px;
+
+const ErrorWrapper = styled.div`
+  background: ${th('colorError')};
+  border: calc(${th('borderWidth')} * 2) ${th('borderStyle')}
+    ${th('colorTextReverse')};
+  color: ${th('colorTextReverse')};
+  font-size: ${th('fontSizeBaseSmall')};
+  letter-spacing: 0.01em;
+  opacity: 1;
+  padding: ${th('subGridUnit')} ${th('subGridUnit')};
   position: absolute;
-  right: 0;
-  text-align: center;
-  text-transform: uppercase;
-  top: 20px;
+  top: 25%;
+  z-index: 4;
 `
-const extension = ({ name }) => name.replace(/^.+\./, '')
-
-const UploadingFile = ({ file, error, progress }) => (
-  <Root>
-    {!!error && <ErrorWrapper>{error}</ErrorWrapper>}
-    <Icon>
-      {!!progress && <Progress percent={progress * 100} />}
-      <Extension>{extension(file)}</Extension>
-    </Icon>
-    <Filename>{file.name}</Filename>
-  </Root>
-)
 
-export default UploadingFile
+const getFileExtension = ({ name }) => name.replace(/^.+\./, '')
 
-// clock experiment, on hold.
-// const Progress = styled.div`
-//    opacity: 1;
-//    background: var(--color-primary);
-//    position: absolute;
-//    bottom: 10%;
-//    right: 10%;
-//    content: '';
-//    width: 3px;
-//    height: 1em;
-//    display: block;
-//    // margin-left: 30%;
-//    transform-origin: 0 0;
-//    animation: rotate 1s infinite ease-in-out ;
-//    background-image:
-//    &:after {
-//      content: "uploading";
-//      display: block;
-//      position: absolute;
-//      width: 1em;
-//      height:  1em;
-//    }
-//
-//  @keyframes rotate {
-//    0% {
-//      transform: rotate(0)
-//    }
-//    100% {
-//      transform: rotate(360deg);
-//    }
-// `
+const UploadingFile = ({ file, progress, error, uploaded }) => {
+  const Root = uploaded ? Uploaded : Uploading
+
+  return (
+    <Root>
+      {!!error && <ErrorWrapper>{error}</ErrorWrapper>}
+      <Icon>
+        {!!progress && <Progress>{progress * 100}%</Progress>}
+        <Extension>{getFileExtension(file)}</Extension>
+      </Icon>
+      <Filename>
+        {uploaded ? (
+          <a download={file.name} href={file.url}>
+            {file.name}
+          </a>
+        ) : (
+          file.name
+        )}
+      </Filename>
+    </Root>
+  )
+}
+
+export default UploadingFile
diff --git a/packages/ui/src/atoms/UploadingFile.md b/packages/ui/src/atoms/UploadingFile.md
index 7a9db24c9529226c34bc9262ed3ec23ad1a5e091..ee286ca28c23474e1d411348f8c801a29441152c 100644
--- a/packages/ui/src/atoms/UploadingFile.md
+++ b/packages/ui/src/atoms/UploadingFile.md
@@ -2,10 +2,9 @@ A file that's being uploaded.
 
 ```js
 const file = {
-  name: faker.system.commonFileName()
-};
-
-<UploadingFile file={file}/>
+  name: faker.system.commonFileName(),
+}
+;<UploadingFile file={file} />
 ```
 
 Upload progress is displayed as an overlay.
@@ -13,9 +12,8 @@ Upload progress is displayed as an overlay.
 ```js
 const file = {
   name: faker.system.commonFileName(),
-};
-
-<UploadingFile file={file} progress={0.5}/>
+}
+;<UploadingFile file={file} progress={0.5} />
 ```
 
 An upload error is displayed above the file.
@@ -23,7 +21,16 @@ An upload error is displayed above the file.
 ```js
 const file = {
   name: faker.system.commonFileName(),
-};
+}
+;<UploadingFile file={file} error="There was an error" />
+```
 
-<UploadingFile file={file} error="There was an error"/>
+When the file has finished uploading it can be hovered:
+
+```js
+const file = {
+  name: faker.system.commonFileName(),
+  url: faker.internet.url(),
+}
+;<UploadingFile file={file} uploaded />
 ```
diff --git a/packages/ui/src/atoms/ValidatedField.js b/packages/ui/src/atoms/ValidatedField.js
index b44af74a8d1e9a882cf0152c30ecc4e6d42fb79b..6dfffe55422c5a94911dc244d405c3f7a0004bf9 100644
--- a/packages/ui/src/atoms/ValidatedField.js
+++ b/packages/ui/src/atoms/ValidatedField.js
@@ -2,46 +2,51 @@ import React from 'react'
 import { compose, withHandlers } from 'recompose'
 import { Field } from 'redux-form'
 import styled from 'styled-components'
+import th from '../helpers/themeHelper'
 
 // TODO: pass ...props.input to children automatically?
 
 const MessageWrapper = styled.div`
-  font-family: var(--font-author);
-  display: inline-block;
-  font-style: italic;
-  margin-left: 1em;
-  margin-top: 10px;
+  font-family: ${th('fontInterface')};
+  display: block;
+  margin-top: calc(${th('gridUnit')} * -1);
 `
 
 const Message = styled.div`
   &:not(:last-child) {
-    margin-bottom: 10px;
+    margin-bottom: ${th('subGridUnit')};
   }
-  font-size: 0.9em;
-  letter-spacing: 0.01em;
+  font-size: ${th('fontSizeBaseSmall')};
 `
 
 const ErrorMessage = Message.extend`
-  color: var(--color-danger);
+  color: ${th('colorError')};
 `
 
 const WarningMessage = Message.extend`
-  color: var(--color-warning);
+  color: ${th('colorWarning')};
 `
 
-const ValidatedFieldComponent = ({ component }) => ({ meta, input }) => (
-  <div>
-    {component(input)}
-
-    {meta.touched &&
-      (meta.error || meta.warning) && (
-        <MessageWrapper>
-          {meta.error && <ErrorMessage>{meta.error}</ErrorMessage>}
-          {meta.warning && <WarningMessage>{meta.warning}</WarningMessage>}
-        </MessageWrapper>
-      )}
-  </div>
-)
+const ValidatedFieldComponent = ({ component }) => ({ meta, input }) => {
+  let validationStatus
+  if (meta.touched) validationStatus = 'success'
+  if (meta.touched && meta.error) validationStatus = 'error'
+  if (meta.touched && meta.warning) validationStatus = 'warning'
+
+  return (
+    <div>
+      {component({ ...input, validationStatus })}
+
+      {meta.touched &&
+        (meta.error || meta.warning) && (
+          <MessageWrapper>
+            {meta.error && <ErrorMessage>{meta.error}</ErrorMessage>}
+            {meta.warning && <WarningMessage>{meta.warning}</WarningMessage>}
+          </MessageWrapper>
+        )}
+    </div>
+  )
+}
 
 const ValidatedField = ({ fieldComponent, ...rest }) => (
   <Field {...rest} component={fieldComponent} />
diff --git a/packages/ui/src/atoms/ValidatedField.md b/packages/ui/src/atoms/ValidatedField.md
index 136df6151838d3a57fea4c08e20b4feabaa49aa2..0d8292de4180c0b2afe6824cc53c376ab57da1c9 100644
--- a/packages/ui/src/atoms/ValidatedField.md
+++ b/packages/ui/src/atoms/ValidatedField.md
@@ -1,33 +1,49 @@
 A form field that displays the results of validation.
 
+With an error:
+
 ```js
-const { reduxForm } = require('redux-form');
+const { reduxForm } = require('redux-form')
 
-const ValidatedFieldForm = reduxForm({ 
+const ValidatedFieldForm = reduxForm({
   form: 'validated-field-error',
-  onChange: values => console.log(values)
-})(ValidatedField);
-
-const TextInput = input => <TextField {...input}/>;
-
-<ValidatedFieldForm 
-    name="error" 
-    validate={() => 'Required'}
-    component={TextInput}/>
+  onChange: values => console.log(values),
+})(ValidatedField)
+;<ValidatedFieldForm
+  name="error"
+  validate={() => 'Required'}
+  component={TextField}
+/>
 ```
 
+With a warning:
+
 ```js
-const { reduxForm } = require('redux-form');
+const { reduxForm } = require('redux-form')
 
-const ValidatedFieldForm = reduxForm({ 
+const ValidatedFieldForm = reduxForm({
   form: 'validated-field-warning',
-  onChange: values => console.log(values)
-})(ValidatedField);
+  onChange: values => console.log(values),
+})(ValidatedField)
+;<ValidatedFieldForm
+  name="warning"
+  warn={() => 'Expected'}
+  component={TextField}
+/>
+```
 
-const TextInput = input => <TextField {...input}/>;
+Or with success color only:
 
-<ValidatedFieldForm 
-    name="warning" 
-    warn={() => 'Expected'}
-    component={TextInput}/>
+```js
+const { reduxForm } = require('redux-form')
+
+const ValidatedFieldForm = reduxForm({
+  form: 'validated-field-success',
+  onChange: values => console.log(values),
+})(ValidatedField)
+;<ValidatedFieldForm
+  name="success"
+  validate={() => undefined}
+  component={TextField}
+/>
 ```
diff --git a/packages/ui/src/helpers/themeHelper.js b/packages/ui/src/helpers/themeHelper.js
new file mode 100644
index 0000000000000000000000000000000000000000..492c2afb9502ec5d95998507972e63cafc5ae059
--- /dev/null
+++ b/packages/ui/src/helpers/themeHelper.js
@@ -0,0 +1,13 @@
+/*
+
+A bit of syntactic sugar for styled-components. Lets you replace this:
+
+  ${props => props.theme.colorPrimary}
+
+with this:
+
+  ${th('colorPrimary')}
+
+*/
+
+export default name => props => props.theme[name]
diff --git a/packages/ui/src/index.js b/packages/ui/src/index.js
index a8bb669d52436785714fc024035b44e8b6193a31..8dc5c1683a431984431dab1d0e418d0667de6c6f 100644
--- a/packages/ui/src/index.js
+++ b/packages/ui/src/index.js
@@ -14,12 +14,22 @@ export { default as TextField } from './atoms/TextField'
 export { default as ValidatedField } from './atoms/ValidatedField'
 export { default as StateItem } from './atoms/StateItem'
 export { default as AlignmentBox } from './atoms/AlignmentBox'
+export { default as UploadButton } from './atoms/UploadButton'
+export { default as Flexbox } from './atoms/Flexbox'
+export { default as Link } from './atoms/Link'
+export { default as Heading, H1, H2, H3, H4, H5, H6 } from './atoms/Heading'
+export { default as ErrorText } from './atoms/ErrorText'
+export { default as CenteredColumn } from './atoms/CenteredColumn'
+export { default as Section } from './atoms/Section'
+export { default as Colorize } from './atoms/Colorize'
 
 /* molecules */
 export { default as AppBar } from './molecules/AppBar'
 export { default as Attachments } from './molecules/Attachments'
 export { default as CheckboxGroup } from './molecules/CheckboxGroup'
+export { default as EditableValue } from './molecules/EditableValue'
 export { default as Files } from './molecules/Files'
+export { default as FileUploadList } from './molecules/FileUploadList'
 export { default as PlainButton } from './molecules/PlainButton'
 export { default as Supplementary } from './molecules/Supplementary'
 export { default as RadioGroup } from './molecules/RadioGroup'
@@ -28,5 +38,8 @@ export { default as StateList } from './molecules/StateList'
 export {
   default as AlignmentBoxWithLabel,
 } from './molecules/AlignmentBoxWithLabel'
-export { default as AlignmentTool } from './molecules/AlignmentTool.js'
+export { default as AlignmentTool } from './molecules/AlignmentTool'
 export { default as Steps } from './molecules/Steps'
+
+/* helpers */
+export { default as th } from './helpers/themeHelper'
diff --git a/packages/ui/src/lib/animation.scss b/packages/ui/src/lib/animation.scss
deleted file mode 100644
index 21b94773710e9976eb746ef7a3e142ebf53c7999..0000000000000000000000000000000000000000
--- a/packages/ui/src/lib/animation.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-/* This file is here to share animations between modules, not used yet.. */
-
-@keyframes bounce {
-  33% {
-    transform: translateY(-20px);
-  }
-
-  66% {
-    transform: translateY(0);
-  }
-}
-
-.bounce {
-  animation: bounce 1s infinite ease-in-out;
-}
-
-@keyframes rotate {
-  from {
-    transform: rotate(0);
-  }
-
-  to {
-    transform: rotate(360deg);
-  }
-}
-
-.rotate {
-  animation: rotate 1s infinite ease-in-out;
-}
diff --git a/packages/ui/src/lib/colors.local.scss b/packages/ui/src/lib/colors.local.scss
deleted file mode 100644
index 16b8c8ca3a6fd5c4b72f6c2686e018e5afdab2cc..0000000000000000000000000000000000000000
--- a/packages/ui/src/lib/colors.local.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-.primary {
-  background-color: var(--color-primary);
-  color: white;
-}
diff --git a/packages/ui/src/molecules/AlignmentBoxWithLabel.js b/packages/ui/src/molecules/AlignmentBoxWithLabel.js
index 94be09374d7bc37f5440e5c0034b6ce0e6942fcd..2a00f542dca0ccb893f906a668ef143d7060bf60 100644
--- a/packages/ui/src/molecules/AlignmentBoxWithLabel.js
+++ b/packages/ui/src/molecules/AlignmentBoxWithLabel.js
@@ -1,6 +1,7 @@
 import PropTypes from 'prop-types'
 import React from 'react'
 import styled from 'styled-components'
+import th from '../helpers/themeHelper'
 
 import AlignmentBox from '../atoms/AlignmentBox'
 
@@ -14,7 +15,7 @@ const Root = styled.div`
 
 const Label = styled.span`
   color: ${blue};
-  font-family: var(--font-interface);
+  font-family: ${th('fontInterface')};
   font-size: 16px;
   font-style: italic;
   margin-left: ${props => (props.positionRight ? '10px' : '0')};
diff --git a/packages/ui/src/molecules/AppBar.js b/packages/ui/src/molecules/AppBar.js
index 26de4325be942ceab5cb079aff58234bd8fab49a..933fc53864be5d2a8afd3da2fe100b7817afb64d 100644
--- a/packages/ui/src/molecules/AppBar.js
+++ b/packages/ui/src/molecules/AppBar.js
@@ -1,75 +1,34 @@
 import React from 'react'
-import { Link } from 'react-router-dom'
 import styled from 'styled-components'
+import PropTypes from 'prop-types'
 
+import th from '../helpers/themeHelper'
 import Icon from '../atoms/Icon'
+import Link from '../atoms/Link'
 
 const Root = styled.nav`
   display: flex;
+  align-items: center;
   justify-content: space-between;
-  margin: 1rem;
-
-  a {
-    color: var(--color-primary);
-    text-decoration: none;
-
-    &::before {
-      color: #aaa;
-      display: inline-block;
-      height: 1em;
-      margin-right: 0.3em;
-      text-align: center;
-
-      &:hover {
-        color: var(--color-primary);
-      }
-    }
-  }
+  min-height: calc(${th('gridUnit')} * 2);
 `
 
 const Section = styled.div`
   display: flex;
 `
 
-const NavLinks = styled.div`
-  align-items: center;
-  display: flex;
-  margin: 0 1rem;
-
-  a {
-    padding: 0 1rem;
-
-    &:global(.active) {
-      font-weight: bold;
-    }
-  }
-`
-
-const Logo = styled(Link)`
-  font-weight: bold;
-  text-decoration: none;
-
-  &::before {
-    content: '';
+const Logo = styled.span`
+  margin: calc(${th('subGridUnit')} * 2) 1rem calc(${th('subGridUnit')} * 2)
+    1rem;
+  & svg {
+    height: calc(${th('gridUnit')} * 2);
   }
 `
 
-const itemStyle = `
+const Item = styled.span`
   align-items: center;
   display: inline-flex;
-  padding: 0 1rem;
-
-  svg {
-    margin-right: 0.3rem;
-  }
-`
-
-const Item = styled.span`
-  ${itemStyle};
-`
-const ActionItem = Item.withComponent('a')
-const LinkItem = styled(Link)`
-  ${itemStyle};
+  margin: calc(${th('gridUnit')} * 1) 1rem calc(${th('gridUnit')} * 1) 1rem;
 `
 
 const AppBar = ({
@@ -77,36 +36,60 @@ const AppBar = ({
   brand,
   loginLink = '/login',
   onLogoutClick,
-  navLinks,
+  navLinkComponents,
   user,
-  className,
 }) => (
   <Root>
     <Section>
-      {brand && <Logo to={brandLink}>{brand}</Logo>}
+      {brand && (
+        <Logo>
+          <Link to={brandLink}>{brand}</Link>
+        </Logo>
+      )}
 
-      {navLinks && <NavLinks>{navLinks}</NavLinks>}
+      {navLinkComponents &&
+        navLinkComponents.map((NavLinkComponent, idx) => (
+          <span key={NavLinkComponent.props.to}>
+            <Item>{NavLinkComponent}</Item>
+            {idx < navLinkComponents.length - 1 && <Item>|</Item>}
+          </span>
+        ))}
     </Section>
 
     <Section>
       {user && (
         <Item>
-          <Icon size={16}>user</Icon>
+          <Icon size={2}>user</Icon>
           {user.username}
           {user.admin ? ' (admin)' : ''}
         </Item>
       )}
 
       {user && (
-        <ActionItem href="#" onClick={onLogoutClick}>
-          <Icon size={16}>power</Icon>
-          Logout
-        </ActionItem>
+        <Item>
+          <Link onClick={onLogoutClick} to="#">
+            <Icon size={2}>power</Icon>
+            Logout
+          </Link>
+        </Item>
       )}
 
-      {!user && <LinkItem to={loginLink}>Login</LinkItem>}
+      {!user && (
+        <Item>
+          <Link to={loginLink}>Login</Link>
+        </Item>
+      )}
     </Section>
   </Root>
 )
 
+AppBar.propTypes = {
+  brandLink: PropTypes.string,
+  brand: PropTypes.node,
+  loginLink: PropTypes.string,
+  onLogoutClick: PropTypes.func,
+  navLinkComponents: PropTypes.arrayOf(PropTypes.element),
+  user: PropTypes.object,
+}
+
 export default AppBar
diff --git a/packages/ui/src/molecules/AppBar.md b/packages/ui/src/molecules/AppBar.md
index 6e9a7e258f7f1a13c137fa2fb4cc99d8e25dbdf7..6adc425c59143ec73e8388c4f0e38c459c3dfbcb 100644
--- a/packages/ui/src/molecules/AppBar.md
+++ b/packages/ui/src/molecules/AppBar.md
@@ -20,9 +20,8 @@ Can optionally pass navigation links or image for brand.
   brand={
     <svg
       xmlns="http://www.w3.org/2000/svg"
-      viewBox="-150 -50 300 300"
-      width="50"
-      height="42"
+      viewBox="-220 -50 440 300"
+      width="64"
       fillOpacity="0.5"
     >
       <circle cx="0" cy="50" fill="red" r="100" />
@@ -30,10 +29,9 @@ Can optionally pass navigation links or image for brand.
       <circle cx="-70" cy="150" fill="green" r="100" />
     </svg>
   }
-  navLinks={
-    <div>
-      <a href="">Home</a> | <a href="">About</a>
-    </div>
-  }
+  navLinkComponents={[
+    <Link to="/home">Home</Link>,
+    <Link to="/about">About</Link>,
+  ]}
 />
 ```
diff --git a/packages/ui/src/molecules/Attachments.js b/packages/ui/src/molecules/Attachments.js
index 0160b88bf90c9fde6e6265238e68b2555ea014fc..039adb1a5dc12569a880c0b341ffe5d935eb19bc 100644
--- a/packages/ui/src/molecules/Attachments.js
+++ b/packages/ui/src/molecules/Attachments.js
@@ -1,43 +1,15 @@
 import React from 'react'
-import styled from 'styled-components'
 
-import Files from './Files'
+import FileUploadList from './FileUploadList'
 import Attachment from '../atoms/Attachment'
-import Icon from '../atoms/Icon'
 
 // TODO: show upload progress
 
-const Root = styled.div`
-  display: flex;
-  flex-direction: column;
-  margin-bottom: 2em;
-  margin-top: 2em;
-`
-
-const Paperclip = styled.span`
-  color: gray;
-  margin-right: 10px;
-`
-
-const Filename = styled.span`
-  color: gray;
-`
-
-const UploadingFile = ({ file, progress, error }) => (
-  <Root>
-    <Paperclip>
-      <Icon color="var(--color-local, black)">paperclip</Icon>
-    </Paperclip>
-    <Filename>{error || 'Uploading…'}</Filename>
-  </Root>
-)
-
 const Attachments = props => (
-  <Files
+  <FileUploadList
     {...props}
     buttonText="Attach file"
-    uploadedFile={value => <Attachment key={value.url} value={value} />}
-    uploadingFile={UploadingFile}
+    FileComponent={Attachment}
   />
 )
 
diff --git a/packages/ui/src/molecules/Attachments.md b/packages/ui/src/molecules/Attachments.md
index 01dbde245a9731b110829726f65d2ad3a928c44f..2245b815f2de64f6aedb8e5ebc2f5d6a9a437760 100644
--- a/packages/ui/src/molecules/Attachments.md
+++ b/packages/ui/src/molecules/Attachments.md
@@ -1,18 +1,15 @@
 A list of files attached to a note, and a button to attach a new file.
 
 ```js
-const value = [
+const files = [
   {
     name: faker.system.commonFileName(),
-    url: faker.internet.url()
+    url: faker.internet.url(),
   },
   {
     name: faker.system.commonFileName(),
-    url: faker.internet.url()
-  }
-];
-
-<Attachments 
-  value={value}
-  uploadFile={file => new XMLHttpRequest()}/>
+    url: faker.internet.url(),
+  },
+]
+;<Attachments files={files} uploadFile={file => new XMLHttpRequest()} />
 ```
diff --git a/packages/ui/src/molecules/CheckboxGroup.js b/packages/ui/src/molecules/CheckboxGroup.js
index 152bf26ce5e01870b61d93588c33245c92dcf4d7..3181c94243b36754a95adad2b1274dcf7cb35355 100644
--- a/packages/ui/src/molecules/CheckboxGroup.js
+++ b/packages/ui/src/molecules/CheckboxGroup.js
@@ -1,5 +1,7 @@
 import React from 'react'
+
 import Checkbox from '../atoms/Checkbox'
+import Flexbox from '../atoms/Flexbox'
 
 class CheckboxGroup extends React.Component {
   constructor(props) {
@@ -31,7 +33,7 @@ class CheckboxGroup extends React.Component {
     const { values } = this.state
 
     return (
-      <div>
+      <Flexbox column={!inline}>
         {options.map(option => (
           <Checkbox
             checked={values.includes(option.value)}
@@ -44,7 +46,7 @@ class CheckboxGroup extends React.Component {
             value={option.value}
           />
         ))}
-      </div>
+      </Flexbox>
     )
   }
 }
diff --git a/packages/ui/src/molecules/EditableValue.js b/packages/ui/src/molecules/EditableValue.js
new file mode 100644
index 0000000000000000000000000000000000000000..7b99acd6d0e543cfd01ff156ebd96ef6fa88b1f7
--- /dev/null
+++ b/packages/ui/src/molecules/EditableValue.js
@@ -0,0 +1,101 @@
+import React from 'react'
+import styled from 'styled-components'
+import PropTypes from 'prop-types'
+
+import th from '../helpers/themeHelper'
+import TextField from '../atoms/TextField'
+
+const Root = styled.div`
+  width: calc(${th('gridUnit')} * 14);
+  margin-bottom: ${props => (props.inline ? '0' : props.theme.gridUnit)};
+`
+
+const Value = styled.div`
+  padding: calc(${th('gridUnit')} / 2 - ${th('borderWidth')})
+    calc(${th('gridUnit')} / 2);
+  border: ${th('borderWidth')} ${th('borderStyle')} transparent;
+  border-radius: ${th('borderRadius')};
+  cursor: pointer;
+
+  &:hover {
+    border-color: ${th('colorSecondary')};
+  }
+`
+
+const ESCAPE_KEY_CODE = 27
+
+export default class EditableValue extends React.Component {
+  constructor(props) {
+    super(props)
+    this._save = this._save.bind(this)
+    this._onChange = this._onChange.bind(this)
+    this._onClick = this._onClick.bind(this)
+    this._onKeyDown = this._onKeyDown.bind(this)
+
+    this._storedValue = this.props.value
+    this.state = {
+      value: this._storedValue,
+      editing: false,
+    }
+  }
+
+  _save() {
+    if (typeof this.props.onSave === 'function') {
+      this.props.onSave(this.state.value)
+    }
+    this._storedValue = this.state.value
+    this.setState({
+      editing: false,
+    })
+  }
+
+  _onChange(event) {
+    this.setState({
+      value: event.target.value,
+    })
+  }
+
+  _onClick(event) {
+    this.setState({
+      editing: true,
+    })
+  }
+
+  _onKeyDown(event) {
+    if (event.keyCode === ESCAPE_KEY_CODE) {
+      this.setState({
+        value: this._storedValue,
+        editing: false,
+      })
+    }
+  }
+
+  render() {
+    if (this.state.editing) {
+      return (
+        <Root>
+          <form onSubmit={this._save}>
+            <TextField
+              inline={this.props.inline}
+              onChange={this._onChange}
+              onKeyDown={this._onKeyDown}
+              required={this.props.required}
+              value={this.state.value}
+            />
+          </form>
+        </Root>
+      )
+    }
+    return (
+      <Root>
+        <Value onClick={this._onClick}>{this.state.value}</Value>
+      </Root>
+    )
+  }
+}
+
+EditableValue.propTypes = {
+  required: PropTypes.bool,
+  onSave: PropTypes.func.isRequired,
+  value: PropTypes.string,
+}
diff --git a/packages/ui/src/molecules/EditableValue.md b/packages/ui/src/molecules/EditableValue.md
new file mode 100644
index 0000000000000000000000000000000000000000..ca7d13e61e7b733ea809edbbaba8501c06ce3fde
--- /dev/null
+++ b/packages/ui/src/molecules/EditableValue.md
@@ -0,0 +1,32 @@
+A field which displays a value which turns into a text field for editing when clicked.
+
+Hitting Enter saves the value and calls the `onSave` callback. Hitting Escape removes the text field and replaces the initial value.
+
+```js
+initialState = { value: 'Initial value' }
+;<div>
+  <EditableValue
+    inline
+    value={state.value}
+    onSave={newValue => setState({ value: newValue })}
+  />
+
+  <div>The current value is "{state.value}".</div>
+</div>
+```
+
+You can set `required` on it, which will prevent it from saving if empty.
+
+```js
+initialState = { value: 'Initial value' }
+;<div>
+  <EditableValue
+    required
+    inline
+    value={state.value}
+    onSave={newValue => setState({ value: newValue })}
+  />
+
+  <div>The current value is "{state.value}".</div>
+</div>
+```
diff --git a/packages/ui/src/molecules/FileUploadList.js b/packages/ui/src/molecules/FileUploadList.js
new file mode 100644
index 0000000000000000000000000000000000000000..bb0dfb13b7fc1e8571659f12080318ad3274ba0b
--- /dev/null
+++ b/packages/ui/src/molecules/FileUploadList.js
@@ -0,0 +1,90 @@
+import React from 'react'
+import styled from 'styled-components'
+import Upload from './Upload'
+import Flexbox from '../atoms/Flexbox'
+import UploadButton from '../atoms/UploadButton'
+
+const Root = styled.div``
+
+class FileUploadList extends React.Component {
+  constructor(props) {
+    super(props)
+
+    this.state = {
+      files: props.files || [],
+      uploads: [],
+    }
+  }
+
+  handleClick = () => {
+    this.fileInput.click()
+  }
+
+  handleChange = event => {
+    const { uploads } = this.state
+
+    Array.from(event.target.files).forEach(file => {
+      uploads.push({
+        file,
+        request: this.props.uploadFile(file),
+      })
+    })
+
+    this.setState({ uploads })
+  }
+
+  handleUploadedFile = ({ file, url }) => {
+    const files = this.state.files.concat({
+      name: file.name,
+      url,
+    })
+
+    const uploads = this.state.uploads.filter(
+      upload => upload.file.name !== upload.name,
+    )
+
+    this.setState({ files, uploads })
+
+    this.props.onChange(files)
+  }
+
+  render() {
+    const { name, buttonText, FileComponent } = this.props
+    const { files, uploads } = this.state
+
+    return (
+      <Root>
+        <UploadButton
+          buttonText={buttonText}
+          name={name}
+          onChange={this.handleChange}
+        />
+        <Flexbox column>
+          {uploads &&
+            uploads.map(upload => (
+              <Upload
+                file={upload.file}
+                handleUploadedFile={this.handleUploadedFile}
+                key={upload.file.name}
+                render={props => (
+                  <FileComponent
+                    file={props.file}
+                    key={props.file.name}
+                    {...props}
+                  />
+                )}
+                request={upload.request}
+              />
+            ))}
+
+          {files &&
+            files.map(file => (
+              <FileComponent file={file} key={file.name} uploaded />
+            ))}
+        </Flexbox>
+      </Root>
+    )
+  }
+}
+
+export default FileUploadList
diff --git a/packages/ui/src/molecules/FileUploadList.md b/packages/ui/src/molecules/FileUploadList.md
new file mode 100644
index 0000000000000000000000000000000000000000..c329e0cf15ad6b37d2259a5032846fe8fe1302e4
--- /dev/null
+++ b/packages/ui/src/molecules/FileUploadList.md
@@ -0,0 +1,21 @@
+A list of uploaded files, a list of uploading files and a button to upload more files.
+
+This is a higher-order component that accepts a component to represent a file and passes `uploaded` to any whose uploads have completed.
+
+```js
+const file = () => ({
+  name: faker.system.commonFileName(),
+  type: faker.system.commonFileType(),
+  size: faker.random.number(),
+})
+
+const files = [file(), file(), file()]
+;<FileUploadList
+  files={files}
+  buttonText="↑ Choose a file to upload"
+  FileComponent={({ file, progress, error, uploaded }) => (
+    <div style={{ color: uploaded ? 'black' : 'gray' }}>{file.name}</div>
+  )}
+  uploadFile={file => new XMLHttpRequest()}
+/>
+```
diff --git a/packages/ui/src/molecules/Files.js b/packages/ui/src/molecules/Files.js
index bf2ed87330375bfc62c8b2a96aeacb33abbc2a41..db9e6a036a2799499dffe7d225a34cbaf312f621 100644
--- a/packages/ui/src/molecules/Files.js
+++ b/packages/ui/src/molecules/Files.js
@@ -1,127 +1 @@
-import React from 'react'
-import styled from 'styled-components'
-import Upload from './Upload'
-
-const Root = styled.div``
-const Uploader = styled.div``
-
-const FileList = styled.div`
-  display: flex;
-  flex-direction: column;
-  font-size: 0.9em;
-  font-style: italic;
-  line-height: 1.5;
-`
-
-const AttachButton = styled.button.attrs({
-  type: 'button',
-})`
-  background: transparent;
-  border: 1px dashed grey;
-  cursor: pointer;
-  font-family: inherit;
-  font-size: inherit;
-  margin-bottom: 2em;
-  padding: 10px;
-`
-
-/* Not used for now
-.button {
-  background: transparent;
-  border: 1px dashed grey;
-  cursor: pointer;
-  font-family: inherit;
-  font-size: inherit;
-  margin-bottom: 2em;
-  padding: 10px;
-}
-
-.button:hover {
-  border-color: var(--color-primary);
-  color: var(--color-primary);
-}
-*/
-
-class Files extends React.Component {
-  constructor(props) {
-    super(props)
-
-    this.state = {
-      values: props.value || [],
-      uploads: [],
-    }
-  }
-
-  handleClick = () => {
-    this.fileInput.click()
-  }
-
-  handleChange = event => {
-    const { uploads } = this.state
-
-    Array.from(event.target.files).forEach(file => {
-      uploads.push({
-        file,
-        request: this.props.uploadFile(file),
-      })
-    })
-
-    this.setState({ uploads })
-  }
-
-  handleUploadedFile = ({ file, url }) => {
-    const values = this.state.values.concat({
-      name: file.name,
-      url,
-    })
-
-    const uploads = this.state.uploads.filter(
-      item => item.file.name !== file.name,
-    )
-
-    this.setState({ values, uploads })
-
-    this.props.onChange(values)
-  }
-
-  render() {
-    const { name, buttonText, uploadingFile, uploadedFile } = this.props
-    const { values, uploads } = this.state
-
-    return (
-      <Root>
-        <Uploader>
-          <AttachButton onClick={() => this.fileInput.click()}>
-            {buttonText}
-          </AttachButton>
-
-          <input
-            multiple
-            name={name}
-            onChange={this.handleChange}
-            ref={input => (this.fileInput = input)}
-            style={{ display: 'none' }}
-            type="file"
-          />
-        </Uploader>
-
-        <FileList>
-          {uploads &&
-            uploads.map(upload => (
-              <Upload
-                file={upload.file}
-                handleUploadedFile={this.handleUploadedFile}
-                key={upload.file.name}
-                render={uploadingFile}
-                request={upload.request}
-              />
-            ))}
-
-          {values && values.map(uploadedFile)}
-        </FileList>
-      </Root>
-    )
-  }
-}
-
-export default Files
+export { default } from './FileUploadList'
diff --git a/packages/ui/src/molecules/Files.md b/packages/ui/src/molecules/Files.md
index c13062d6641b1f23c7c24cea004b05c2c70a7973..5d48060f3bec05ba678fdf54dcb58cb2e0c5b5eb 100644
--- a/packages/ui/src/molecules/Files.md
+++ b/packages/ui/src/molecules/Files.md
@@ -1,22 +1 @@
-A list of uploaded files, a list of uploading files and a button to upload more files.
-
-```js
-const file = () => ({
-  name: faker.system.commonFileName(),
-  type: faker.system.commonFileType(),
-  size: faker.random.number(),
-});
-
-const value = [
-  file(),
-  file(),
-  file()
-];
-
-<Files
-  value={value}
-  buttonText="↑ Choose a file to upload"
-  uploadingFile={({ file, progress, error }) => <div style={{color:'gray'}}>{file.name}</div>}
-  uploadedFile={value => <div>{value.name}</div>}
-  uploadFile={file => new XMLHttpRequest()}/>
-```
+Deprecated: use `FileUploadList`
diff --git a/packages/ui/src/molecules/RadioGroup.js b/packages/ui/src/molecules/RadioGroup.js
index 75b2f4f65659459c7f9ef642514d4c3140eaf74e..e46d1eb7b5a70149abc9c3451f69b73f6bb7373e 100644
--- a/packages/ui/src/molecules/RadioGroup.js
+++ b/packages/ui/src/molecules/RadioGroup.js
@@ -1,5 +1,7 @@
 import React from 'react'
+
 import Radio from '../atoms/Radio'
+import Flexbox from '../atoms/Flexbox'
 
 class RadioGroup extends React.Component {
   constructor(props) {
@@ -21,7 +23,7 @@ class RadioGroup extends React.Component {
     const { value } = this.state
 
     return (
-      <div>
+      <Flexbox inline={!inline}>
         {options.map(option => (
           <Radio
             checked={option.value === value}
@@ -35,7 +37,7 @@ class RadioGroup extends React.Component {
             value={option.value}
           />
         ))}
-      </div>
+      </Flexbox>
     )
   }
 }
diff --git a/packages/ui/src/molecules/Supplementary.js b/packages/ui/src/molecules/Supplementary.js
index b876ff92e2202bae6aa5f51dedfa53e2b600edc7..9b296d6ac9cdd4dacabd9830911dd8064834731e 100644
--- a/packages/ui/src/molecules/Supplementary.js
+++ b/packages/ui/src/molecules/Supplementary.js
@@ -1,21 +1,12 @@
 import React from 'react'
-import Files from './Files'
+import FileUploadList from './FileUploadList'
 import UploadingFile from '../atoms/UploadingFile'
-import File from '../atoms/File'
 
 const Supplementary = props => (
-  <Files
+  <FileUploadList
     {...props}
     buttonText="↑ Upload files"
-    uploadedFile={value => <File key={value.url} value={value} />}
-    uploadingFile={({ file, progress, error }) => (
-      <UploadingFile
-        error={error}
-        file={file}
-        key={file.name}
-        progress={progress}
-      />
-    )}
+    FileComponent={UploadingFile}
   />
 )
 
diff --git a/packages/ui/src/molecules/Supplementary.md b/packages/ui/src/molecules/Supplementary.md
index c95a11fb4ef2b02637b55caebb0463ab8b451126..88a08b5d2a40150b6c9686ceaf32a9a4caf869cc 100644
--- a/packages/ui/src/molecules/Supplementary.md
+++ b/packages/ui/src/molecules/Supplementary.md
@@ -1,18 +1,15 @@
 A list of supplementary files, and a button to upload a new file.
 
 ```js
-const value = [
+const files = [
   {
     name: faker.system.commonFileName(),
-    url: faker.internet.url()
+    url: faker.internet.url(),
   },
   {
     name: faker.system.commonFileName(),
-    url: faker.internet.url()
-  }
-];
-
-<Supplementary 
-  value={value}
-  uploadFile={file => new XMLHttpRequest()}/>
+    url: faker.internet.url(),
+  },
+]
+;<Supplementary files={files} uploadFile={file => new XMLHttpRequest()} />
 ```
diff --git a/packages/ui/src/molecules/Upload.md b/packages/ui/src/molecules/Upload.md
new file mode 100644
index 0000000000000000000000000000000000000000..e23b5117808b4d816ce2aeb9f10159948cb1e633
--- /dev/null
+++ b/packages/ui/src/molecules/Upload.md
@@ -0,0 +1,3 @@
+A higher order component that handles upload state.
+
+It can be passed a render function to be called with `file`, `progress` and `error` arguments
diff --git a/packages/ui/src/molecules/YesOrNo.js b/packages/ui/src/molecules/YesOrNo.js
index e2a7e6501c61b6d565782caaba6f9142ad602204..fc5652aa573a5f166f3b14746384a3c295ec109b 100644
--- a/packages/ui/src/molecules/YesOrNo.js
+++ b/packages/ui/src/molecules/YesOrNo.js
@@ -1,5 +1,6 @@
 import React from 'react'
 import RadioGroup from './RadioGroup'
+import Colorize from '../atoms/Colorize'
 
 const options = [
   {
@@ -23,4 +24,4 @@ const YesOrNo = ({ name, value, required, onChange, color = 'black' }) => (
   />
 )
 
-export default YesOrNo
+export default Colorize(YesOrNo)
diff --git a/packages/ui/src/molecules/YesOrNo.md b/packages/ui/src/molecules/YesOrNo.md
index 7af8b4c056e1aeeb3e77b70bb0fbfefb13d6e72a..5735d49801151b21c4f34d7a173cc04ed1e4a679 100644
--- a/packages/ui/src/molecules/YesOrNo.md
+++ b/packages/ui/src/molecules/YesOrNo.md
@@ -14,12 +14,20 @@ If a value is set, one option is selected.
 />
 ```
 
-A colour can be passed in:
+Different statuses have different colours:
 
 ```js
-<YesOrNo
-  name="yesornocoloured"
-  color="darkgreen"
-  onChange={value => console.log(value)}
-/>
+<div>
+  <YesOrNo
+    primary
+    name="yesornocoloured"
+    onChange={value => console.log(value)}
+  />
+
+  <YesOrNo
+    warning
+    name="yesornocoloured"
+    onChange={value => console.log(value)}
+  />
+</div>
 ```
diff --git a/packages/ui/styleguide.config.js b/packages/ui/styleguide.config.js
index 00c0f2396fc676020a0e9c4807aeba98f3101ef6..7fe20e6f8029f98050923428162a52d7df76329a 100644
--- a/packages/ui/styleguide.config.js
+++ b/packages/ui/styleguide.config.js
@@ -27,13 +27,8 @@ module.exports = {
     ),
     Wrapper: require.resolve('@pubsweet/styleguide/src/components/Wrapper'),
   },
-  theme: {
-    color: {
-      link: 'cornflowerblue',
-    },
-    fontFamily: {
-      base: '"Fira Sans", sans-serif',
-    },
-  },
   title: 'PubSweet UI style guide',
+  compilerConfig: {
+    transforms: { dangerousTaggedTemplateString: true },
+  },
 }
diff --git a/packages/ui/test/AppBar.test.js b/packages/ui/test/AppBar.test.js
index 9454e51c2468f797224855128460faa1a5116d3a..0748cd297349403414daae93153eff83eb52d29d 100644
--- a/packages/ui/test/AppBar.test.js
+++ b/packages/ui/test/AppBar.test.js
@@ -4,61 +4,42 @@ import renderer from 'react-test-renderer'
 import 'jest-styled-components'
 
 import AppBar from '../src/molecules/AppBar'
+import TestThemeProvider from './setup/theme'
 
 const baseProps = {
   brand: 'some brand',
   onLogoutClick: () => {},
 }
 
+const render = (props = {}) =>
+  renderer
+    .create(
+      <MemoryRouter>
+        <TestThemeProvider>
+          <AppBar {...props} {...baseProps} />
+        </TestThemeProvider>
+      </MemoryRouter>,
+    )
+    .toJSON()
+
 describe('AppBar', () => {
   test('Basic display', () => {
-    const tree = renderer
-      .create(
-        <MemoryRouter>
-          <AppBar {...baseProps} />
-        </MemoryRouter>,
-      )
-      .toJSON()
-
+    const tree = render()
     expect(tree).toMatchSnapshot()
   })
 
   test('With admin user', () => {
-    const tree = renderer
-      .create(
-        <MemoryRouter>
-          <AppBar
-            {...baseProps}
-            user={{ username: 'some user', admin: true }}
-          />
-        </MemoryRouter>,
-      )
-      .toJSON()
-
+    const tree = render({ user: { username: 'some user', admin: true } })
     expect(tree).toMatchSnapshot()
   })
 
   test('With nav links', () => {
-    const tree = renderer
-      .create(
-        <MemoryRouter>
-          <AppBar {...baseProps} navLinks={<div>Links!</div>} />
-        </MemoryRouter>,
-      )
-      .toJSON()
-
+    const tree = render({ navLinks: <div>Links!</div> })
     expect(tree).toMatchSnapshot()
   })
 
   test('With custom brand and login links', () => {
-    const tree = renderer
-      .create(
-        <MemoryRouter>
-          <AppBar {...baseProps} brandLink="/home" loginLink="/signin" />
-        </MemoryRouter>,
-      )
-      .toJSON()
-
+    const tree = render({ brandLink: '/home', loginLink: '/signin' })
     expect(tree).toMatchSnapshot()
   })
 })
diff --git a/packages/ui/test/Menu.test.js b/packages/ui/test/Menu.test.js
index 5c2daaf4a94af49eaa9f10bb0745e9e6c41bae87..b8fc00e1206c7177c32547489cac4b17850c8930 100644
--- a/packages/ui/test/Menu.test.js
+++ b/packages/ui/test/Menu.test.js
@@ -3,21 +3,29 @@ import renderer from 'react-test-renderer'
 import 'jest-styled-components'
 
 import Menu from '../src/atoms/Menu'
+import TestThemeProvider from './setup/theme'
 
 const props = {
   options: [{ label: 'Foo', value: 'foo' }, { label: 'Bar', value: 'bar' }],
   value: 'foo',
 }
 
+const render = props =>
+  renderer.create(
+    <TestThemeProvider>
+      <Menu {...props} />
+    </TestThemeProvider>,
+  )
+
 describe('Menu', () => {
   test('is rendered correctly', () => {
-    const tree = renderer.create(<Menu {...props} />).toJSON()
+    const tree = render(props).toJSON()
     expect(tree).toMatchSnapshot()
   })
 
   test('is rendered correctly when open', () => {
-    const menu = renderer.create(<Menu {...props} />)
-    menu.getInstance().toggleMenu()
+    const menu = render(props)
+    menu.root.findByType(Menu).instance.toggleMenu()
     const tree = menu.toJSON()
     expect(tree).toMatchSnapshot()
   })
diff --git a/packages/ui/test/Radio.test.js b/packages/ui/test/Radio.test.js
index b6ac08bccd8fb27d8dccb54cc1c37105a6a6ce65..2430bf24779aee88aa9a2f94374fb96013db5fd5 100644
--- a/packages/ui/test/Radio.test.js
+++ b/packages/ui/test/Radio.test.js
@@ -4,6 +4,7 @@ import renderer from 'react-test-renderer'
 import 'jest-styled-components'
 
 import Radio from '../src/atoms/Radio'
+import TestThemeProvider from './setup/theme'
 
 const props = {
   checked: false,
@@ -13,16 +14,20 @@ const props = {
   value: 'TestValue',
 }
 
-const wrapper = mount(<Radio {...props} />)
-
 describe('Radio', () => {
   test('is rendered correctly', () => {
-    const tree = renderer.create(<Radio {...props} />).toJSON()
+    const tree = renderer
+      .create(
+        <TestThemeProvider>
+          <Radio {...props} />
+        </TestThemeProvider>,
+      )
+      .toJSON()
     expect(tree).toMatchSnapshot()
   })
 
   test('Input gets the correct props', () => {
-    const input = wrapper.find('input')
+    const input = mount(<Radio {...props} />).find('input')
 
     expect(input.prop('name')).toBe(props.name)
     expect(input.prop('value')).toBe(props.value)
diff --git a/packages/ui/test/RadioGroup.test.js b/packages/ui/test/RadioGroup.test.js
index d73e26a0a4aa0ef5791fc8a66f7bdf48559526ae..96ffaa6a4149ea1a325a315e458121538cde35d4 100644
--- a/packages/ui/test/RadioGroup.test.js
+++ b/packages/ui/test/RadioGroup.test.js
@@ -6,6 +6,7 @@ import 'jest-styled-components'
 
 import Radio from '../src/atoms/Radio'
 import RadioGroup from '../src/molecules/RadioGroup'
+import TestThemeProvider from './setup/theme'
 
 const props = {
   name: 'TestName',
@@ -32,7 +33,13 @@ const radios = wrapper.find(Radio)
 
 describe('Radio Group', () => {
   test('is rendered correctly', () => {
-    const tree = renderer.create(<RadioGroup {...props} />).toJSON()
+    const tree = renderer
+      .create(
+        <TestThemeProvider>
+          <RadioGroup {...props} />
+        </TestThemeProvider>,
+      )
+      .toJSON()
     expect(tree).toMatchSnapshot()
   })
 
diff --git a/packages/ui/test/StateItem.test.js b/packages/ui/test/StateItem.test.js
index 86faa3f858a373c0e4ea62a629dfbf8539a6643a..0a15d057585670b675488785e724697a3fe54f62 100644
--- a/packages/ui/test/StateItem.test.js
+++ b/packages/ui/test/StateItem.test.js
@@ -5,6 +5,7 @@ import 'jest-styled-components'
 import renderer from 'react-test-renderer'
 
 import StateItem from '../src/atoms/StateItem'
+import TestThemeProvider from './setup/theme'
 
 const myMock = jest.fn()
 const props = {
@@ -18,7 +19,13 @@ const wrapperRendered = render(<StateItem {...props} />)
 
 describe('StateItem', () => {
   test('is rendered correctly', () => {
-    const tree = renderer.create(<StateItem {...props} />).toJSON()
+    const tree = renderer
+      .create(
+        <TestThemeProvider>
+          <StateItem {...props} />
+        </TestThemeProvider>,
+      )
+      .toJSON()
     expect(tree).toMatchSnapshot()
   })
 
diff --git a/packages/ui/test/StateList.test.js b/packages/ui/test/StateList.test.js
index 750b0871c301db53838b8d80f527a8958a08c7d0..a8ee027dc2c468273e7e2c7956ce56759733652d 100644
--- a/packages/ui/test/StateList.test.js
+++ b/packages/ui/test/StateList.test.js
@@ -6,6 +6,7 @@ import renderer from 'react-test-renderer'
 
 import StateItem from '../src/atoms/StateItem'
 import StateList from '../src/molecules/StateList'
+import TestThemeProvider from './setup/theme'
 
 const currentValues = {
   style: 0,
@@ -30,7 +31,13 @@ const stateItems = wrapper.find(StateItem)
 
 describe('StateList', () => {
   test('is rendered correctly', () => {
-    const tree = renderer.create(<StateList {...props} />).toJSON()
+    const tree = renderer
+      .create(
+        <TestThemeProvider>
+          <StateList {...props} />
+        </TestThemeProvider>,
+      )
+      .toJSON()
     expect(tree).toMatchSnapshot()
   })
 
diff --git a/packages/ui/test/YesOrNo.test.js b/packages/ui/test/YesOrNo.test.js
index 2268fc2407126f702dab05a97bd2076a4a53da1b..f2725b2913624df114e1b2922b07da2d8e1d2ab5 100644
--- a/packages/ui/test/YesOrNo.test.js
+++ b/packages/ui/test/YesOrNo.test.js
@@ -5,6 +5,7 @@ import 'jest-styled-components'
 
 import YesOrNo from '../src/molecules/YesOrNo'
 import RadioGroup from '../src/molecules/RadioGroup'
+import TestThemeProvider from './setup/theme'
 
 const props = {
   name: 'TestName',
@@ -12,11 +13,21 @@ const props = {
 }
 
 const wrapper = shallow(<YesOrNo {...props} />)
+  .find('Colorized')
+  .shallow()
+  .find('YesOrNo')
+  .shallow()
 const radio = wrapper.find(RadioGroup)
 
 describe('Yes or No', () => {
-  test('is rendered correclty', () => {
-    const tree = renderer.create(<YesOrNo {...props} />).toJSON()
+  test('is rendered corrctly', () => {
+    const tree = renderer
+      .create(
+        <TestThemeProvider>
+          <YesOrNo {...props} />
+        </TestThemeProvider>,
+      )
+      .toJSON()
     expect(tree).toMatchSnapshot()
   })
 
diff --git a/packages/ui/test/__snapshots__/AlignmentBoxWithLabel.test.js.snap b/packages/ui/test/__snapshots__/AlignmentBoxWithLabel.test.js.snap
index b56feb42cd944e080cdaf6e832d13be58322678d..9971476b310860b4f376863e62eed6f1d8bfecbb 100644
--- a/packages/ui/test/__snapshots__/AlignmentBoxWithLabel.test.js.snap
+++ b/packages/ui/test/__snapshots__/AlignmentBoxWithLabel.test.js.snap
@@ -35,7 +35,6 @@ exports[`AlignmentBoxWithLabel is rendered correctly 1`] = `
 
 .c1 {
   color: #0d78f2;
-  font-family: var(--font-interface);
   font-size: 16px;
   font-style: italic;
   margin-left: 0;
diff --git a/packages/ui/test/__snapshots__/AlignmentTool.test.js.snap b/packages/ui/test/__snapshots__/AlignmentTool.test.js.snap
index b57e9903b02bd91a1b36c2afe52a903db0f92846..637dc392152272e6c4362fa6ba83cad2d3ebecd8 100644
--- a/packages/ui/test/__snapshots__/AlignmentTool.test.js.snap
+++ b/packages/ui/test/__snapshots__/AlignmentTool.test.js.snap
@@ -53,7 +53,6 @@ exports[`AlignmentTool is rendered correctly 1`] = `
 
 .c2 {
   color: #0d78f2;
-  font-family: var(--font-interface);
   font-size: 16px;
   font-style: italic;
   margin-left: 0;
@@ -65,7 +64,6 @@ exports[`AlignmentTool is rendered correctly 1`] = `
 
 .c5 {
   color: #0d78f2;
-  font-family: var(--font-interface);
   font-size: 16px;
   font-style: italic;
   margin-left: 10px;
diff --git a/packages/ui/test/__snapshots__/AppBar.test.js.snap b/packages/ui/test/__snapshots__/AppBar.test.js.snap
index 5a8041832d54a7670d24d847808f478849f3f697..3c49d60b1d4fcd21eda4c1181d6e15580a6721e8 100644
--- a/packages/ui/test/__snapshots__/AppBar.test.js.snap
+++ b/packages/ui/test/__snapshots__/AppBar.test.js.snap
@@ -1,33 +1,25 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`AppBar Basic display 1`] = `
+.c3 {
+  color: black;
+  cursor: pointer;
+}
+
 .c0 {
   display: -webkit-box;
   display: -webkit-flex;
   display: -ms-flexbox;
   display: flex;
+  -webkit-align-items: center;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
   -webkit-box-pack: justify;
   -webkit-justify-content: space-between;
   -ms-flex-pack: justify;
   justify-content: space-between;
-  margin: 1rem;
-}
-
-.c0 a {
-  color: var(--color-primary);
-  text-decoration: none;
-}
-
-.c0 a::before {
-  color: #aaa;
-  display: inline-block;
-  height: 1em;
-  margin-right: 0.3em;
-  text-align: center;
-}
-
-.c0 a::before:hover {
-  color: var(--color-primary);
+  min-height: calc(32px * 2);
 }
 
 .c1 {
@@ -38,15 +30,14 @@ exports[`AppBar Basic display 1`] = `
 }
 
 .c2 {
-  font-weight: bold;
-  text-decoration: none;
+  margin: calc(8px * 2) 1rem calc(8px * 2) 1rem;
 }
 
-.c2::before {
-  content: '';
+.c2 svg {
+  height: calc(32px * 2);
 }
 
-.c3 {
+.c4 {
   -webkit-align-items: center;
   -webkit-box-align: center;
   -ms-flex-align: center;
@@ -55,11 +46,7 @@ exports[`AppBar Basic display 1`] = `
   display: -webkit-inline-flex;
   display: -ms-inline-flexbox;
   display: inline-flex;
-  padding: 0 1rem;
-}
-
-.c3 svg {
-  margin-right: 0.3rem;
+  margin: calc(32px * 1) 1rem calc(32px * 1) 1rem;
 }
 
 <nav
@@ -68,35 +55,54 @@ exports[`AppBar Basic display 1`] = `
   <div
     className="c1"
   >
-    <a
+    <span
       className="c2"
-      href="/"
-      onClick={[Function]}
     >
-      some brand
-    </a>
+      <a
+        className="c3"
+        href="/"
+        onClick={[Function]}
+      >
+        some brand
+      </a>
+    </span>
   </div>
   <div
     className="c1"
   >
-    <a
-      className="c3"
-      href="/login"
-      onClick={[Function]}
+    <span
+      className="c4"
     >
-      Login
-    </a>
+      <a
+        className="c3"
+        href="/login"
+        onClick={[Function]}
+      >
+        Login
+      </a>
+    </span>
   </div>
 </nav>
 `;
 
 exports[`AppBar With admin user 1`] = `
-.c4 {
+.c5 {
   display: -webkit-inline-box;
   display: -webkit-inline-flex;
   display: -ms-inline-flexbox;
   display: inline-flex;
-  width: var(--icon-size);
+  padding: calc(8px / 2);
+}
+
+.c5 svg {
+  stroke: black;
+  width: calc(2 * 8px);
+  height: calc(2 * 8px);
+}
+
+.c3 {
+  color: black;
+  cursor: pointer;
 }
 
 .c0 {
@@ -104,28 +110,15 @@ exports[`AppBar With admin user 1`] = `
   display: -webkit-flex;
   display: -ms-flexbox;
   display: flex;
+  -webkit-align-items: center;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
   -webkit-box-pack: justify;
   -webkit-justify-content: space-between;
   -ms-flex-pack: justify;
   justify-content: space-between;
-  margin: 1rem;
-}
-
-.c0 a {
-  color: var(--color-primary);
-  text-decoration: none;
-}
-
-.c0 a::before {
-  color: #aaa;
-  display: inline-block;
-  height: 1em;
-  margin-right: 0.3em;
-  text-align: center;
-}
-
-.c0 a::before:hover {
-  color: var(--color-primary);
+  min-height: calc(32px * 2);
 }
 
 .c1 {
@@ -136,31 +129,14 @@ exports[`AppBar With admin user 1`] = `
 }
 
 .c2 {
-  font-weight: bold;
-  text-decoration: none;
-}
-
-.c2::before {
-  content: '';
-}
-
-.c3 {
-  -webkit-align-items: center;
-  -webkit-box-align: center;
-  -ms-flex-align: center;
-  align-items: center;
-  display: -webkit-inline-box;
-  display: -webkit-inline-flex;
-  display: -ms-inline-flexbox;
-  display: inline-flex;
-  padding: 0 1rem;
+  margin: calc(8px * 2) 1rem calc(8px * 2) 1rem;
 }
 
-.c3 svg {
-  margin-right: 0.3rem;
+.c2 svg {
+  height: calc(32px * 2);
 }
 
-.c5 {
+.c4 {
   -webkit-align-items: center;
   -webkit-box-align: center;
   -ms-flex-align: center;
@@ -169,11 +145,7 @@ exports[`AppBar With admin user 1`] = `
   display: -webkit-inline-flex;
   display: -ms-inline-flexbox;
   display: inline-flex;
-  padding: 0 1rem;
-}
-
-.c5 svg {
-  margin-right: 0.3rem;
+  margin: calc(32px * 1) 1rem calc(32px * 1) 1rem;
 }
 
 <nav
@@ -182,116 +154,115 @@ exports[`AppBar With admin user 1`] = `
   <div
     className="c1"
   >
-    <a
+    <span
       className="c2"
-      href="/"
-      onClick={[Function]}
     >
-      some brand
-    </a>
+      <a
+        className="c3"
+        href="/"
+        onClick={[Function]}
+      >
+        some brand
+      </a>
+    </span>
   </div>
   <div
     className="c1"
   >
     <span
-      className="c3"
+      className="c4"
     >
       <span
-        className="c4"
+        className="c5"
+        color="black"
+        size={2}
       >
         <svg
-          height={16}
+          fill="none"
+          height={undefined}
+          stroke={undefined}
+          strokeLinecap="round"
+          strokeLinejoin="round"
+          strokeWidth="2"
           viewBox="0 0 24 24"
-          width={16}
+          width={undefined}
           xmlns="http://www.w3.org/2000/svg"
         >
           <path
             d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"
-            fill="none"
-            stroke="var(--color-local, black)"
-            strokeLinecap="round"
-            strokeLinejoin="round"
-            strokeWidth="2"
           />
           <circle
             cx="12"
             cy="7"
-            fill="none"
             r="4"
-            stroke="var(--color-local, black)"
-            strokeLinecap="round"
-            strokeLinejoin="round"
-            strokeWidth="2"
           />
         </svg>
       </span>
       some user
        (admin)
     </span>
-    <a
-      className="c5"
-      href="#"
-      onClick={[Function]}
+    <span
+      className="c4"
     >
-      <span
-        className="c4"
+      <a
+        className="c3"
+        href="#"
+        onClick={[Function]}
       >
-        <svg
-          fill="none"
-          height={16}
-          stroke="var(--color-local, black)"
-          strokeLinecap="round"
-          strokeLinejoin="round"
-          strokeWidth="2"
-          viewBox="0 0 24 24"
-          width={16}
-          xmlns="http://www.w3.org/2000/svg"
+        <span
+          className="c5"
+          color="black"
+          size={2}
         >
-          <path
-            d="M18.36 6.64a9 9 0 1 1-12.73 0"
-          />
-          <line
-            x1="12"
-            x2="12"
-            y1="2"
-            y2="12"
-          />
-        </svg>
-      </span>
-      Logout
-    </a>
+          <svg
+            fill="none"
+            height={undefined}
+            stroke={undefined}
+            strokeLinecap="round"
+            strokeLinejoin="round"
+            strokeWidth="2"
+            viewBox="0 0 24 24"
+            width={undefined}
+            xmlns="http://www.w3.org/2000/svg"
+          >
+            <path
+              d="M18.36 6.64a9 9 0 1 1-12.73 0"
+            />
+            <line
+              x1="12"
+              x2="12"
+              y1="2"
+              y2="12"
+            />
+          </svg>
+        </span>
+        Logout
+      </a>
+    </span>
   </div>
 </nav>
 `;
 
 exports[`AppBar With custom brand and login links 1`] = `
+.c3 {
+  color: black;
+  cursor: pointer;
+}
+
 .c0 {
   display: -webkit-box;
   display: -webkit-flex;
   display: -ms-flexbox;
   display: flex;
+  -webkit-align-items: center;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
   -webkit-box-pack: justify;
   -webkit-justify-content: space-between;
   -ms-flex-pack: justify;
   justify-content: space-between;
-  margin: 1rem;
-}
-
-.c0 a {
-  color: var(--color-primary);
-  text-decoration: none;
-}
-
-.c0 a::before {
-  color: #aaa;
-  display: inline-block;
-  height: 1em;
-  margin-right: 0.3em;
-  text-align: center;
-}
-
-.c0 a::before:hover {
-  color: var(--color-primary);
+  min-height: calc(32px * 2);
 }
 
 .c1 {
@@ -302,15 +273,14 @@ exports[`AppBar With custom brand and login links 1`] = `
 }
 
 .c2 {
-  font-weight: bold;
-  text-decoration: none;
+  margin: calc(8px * 2) 1rem calc(8px * 2) 1rem;
 }
 
-.c2::before {
-  content: '';
+.c2 svg {
+  height: calc(32px * 2);
 }
 
-.c3 {
+.c4 {
   -webkit-align-items: center;
   -webkit-box-align: center;
   -ms-flex-align: center;
@@ -319,11 +289,7 @@ exports[`AppBar With custom brand and login links 1`] = `
   display: -webkit-inline-flex;
   display: -ms-inline-flexbox;
   display: inline-flex;
-  padding: 0 1rem;
-}
-
-.c3 svg {
-  margin-right: 0.3rem;
+  margin: calc(32px * 1) 1rem calc(32px * 1) 1rem;
 }
 
 <nav
@@ -332,56 +298,56 @@ exports[`AppBar With custom brand and login links 1`] = `
   <div
     className="c1"
   >
-    <a
+    <span
       className="c2"
-      href="/home"
-      onClick={[Function]}
     >
-      some brand
-    </a>
+      <a
+        className="c3"
+        href="/home"
+        onClick={[Function]}
+      >
+        some brand
+      </a>
+    </span>
   </div>
   <div
     className="c1"
   >
-    <a
-      className="c3"
-      href="/signin"
-      onClick={[Function]}
+    <span
+      className="c4"
     >
-      Login
-    </a>
+      <a
+        className="c3"
+        href="/signin"
+        onClick={[Function]}
+      >
+        Login
+      </a>
+    </span>
   </div>
 </nav>
 `;
 
 exports[`AppBar With nav links 1`] = `
+.c3 {
+  color: black;
+  cursor: pointer;
+}
+
 .c0 {
   display: -webkit-box;
   display: -webkit-flex;
   display: -ms-flexbox;
   display: flex;
+  -webkit-align-items: center;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
   -webkit-box-pack: justify;
   -webkit-justify-content: space-between;
   -ms-flex-pack: justify;
   justify-content: space-between;
-  margin: 1rem;
-}
-
-.c0 a {
-  color: var(--color-primary);
-  text-decoration: none;
-}
-
-.c0 a::before {
-  color: #aaa;
-  display: inline-block;
-  height: 1em;
-  margin-right: 0.3em;
-  text-align: center;
-}
-
-.c0 a::before:hover {
-  color: var(--color-primary);
+  min-height: calc(32px * 2);
 }
 
 .c1 {
@@ -391,33 +357,12 @@ exports[`AppBar With nav links 1`] = `
   display: flex;
 }
 
-.c3 {
-  -webkit-align-items: center;
-  -webkit-box-align: center;
-  -ms-flex-align: center;
-  align-items: center;
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  margin: 0 1rem;
-}
-
-.c3 a {
-  padding: 0 1rem;
-}
-
-.c3 a:global(.active) {
-  font-weight: bold;
-}
-
 .c2 {
-  font-weight: bold;
-  text-decoration: none;
+  margin: calc(8px * 2) 1rem calc(8px * 2) 1rem;
 }
 
-.c2::before {
-  content: '';
+.c2 svg {
+  height: calc(32px * 2);
 }
 
 .c4 {
@@ -429,11 +374,7 @@ exports[`AppBar With nav links 1`] = `
   display: -webkit-inline-flex;
   display: -ms-inline-flexbox;
   display: inline-flex;
-  padding: 0 1rem;
-}
-
-.c4 svg {
-  margin-right: 0.3rem;
+  margin: calc(32px * 1) 1rem calc(32px * 1) 1rem;
 }
 
 <nav
@@ -442,31 +383,32 @@ exports[`AppBar With nav links 1`] = `
   <div
     className="c1"
   >
-    <a
+    <span
       className="c2"
-      href="/"
-      onClick={[Function]}
     >
-      some brand
-    </a>
-    <div
-      className="c3"
-    >
-      <div>
-        Links!
-      </div>
-    </div>
+      <a
+        className="c3"
+        href="/"
+        onClick={[Function]}
+      >
+        some brand
+      </a>
+    </span>
   </div>
   <div
     className="c1"
   >
-    <a
+    <span
       className="c4"
-      href="/login"
-      onClick={[Function]}
     >
-      Login
-    </a>
+      <a
+        className="c3"
+        href="/login"
+        onClick={[Function]}
+      >
+        Login
+      </a>
+    </span>
   </div>
 </nav>
 `;
diff --git a/packages/ui/test/__snapshots__/Files.test.js.snap b/packages/ui/test/__snapshots__/Files.test.js.snap
index e51113233ef152a4dec1bee8fbbf8880a2ea36ff..5c58698a4ada03090bac7303438530351ff5c893 100644
--- a/packages/ui/test/__snapshots__/Files.test.js.snap
+++ b/packages/ui/test/__snapshots__/Files.test.js.snap
@@ -9,27 +9,22 @@ exports[`Files renders correctly 1`] = `
   -webkit-flex-direction: column;
   -ms-flex-direction: column;
   flex-direction: column;
-  font-size: 0.9em;
-  font-style: italic;
-  line-height: 1.5;
+  -webkit-box-pack: left;
+  -webkit-justify-content: left;
+  -ms-flex-pack: left;
+  justify-content: left;
 }
 
 .c0 {
   background: transparent;
-  border: 1px dashed grey;
+  border: dashed;
   cursor: pointer;
-  font-family: inherit;
-  font-size: inherit;
-  margin-bottom: 2em;
-  padding: 10px;
 }
 
 <div
   className=""
 >
-  <div
-    className=""
-  >
+  <div>
     <button
       className="c0"
       onClick={[Function]}
@@ -51,10 +46,6 @@ exports[`Files renders correctly 1`] = `
   </div>
   <div
     className="c1"
-  >
-    <div>
-      IMG_4346.JPG
-    </div>
-  </div>
+  />
 </div>
 `;
diff --git a/packages/ui/test/__snapshots__/Menu.test.js.snap b/packages/ui/test/__snapshots__/Menu.test.js.snap
index f5a6d6fbce5d49a9979c11eea1974d231acbdfef..0a4659f64af4d0a5c0b519b48a30d760492e188e 100644
--- a/packages/ui/test/__snapshots__/Menu.test.js.snap
+++ b/packages/ui/test/__snapshots__/Menu.test.js.snap
@@ -2,42 +2,82 @@
 
 exports[`Menu is rendered correctly 1`] = `
 .c0 {
-  font-size: 1em;
+  max-width: calc(32px * 14);
+  margin-bottom: 32px;
 }
 
 .c2 {
   background: transparent;
-  border: none;
+  border: 1px solid grey;
+  border-radius: 8px;
   cursor: pointer;
   font-family: inherit;
-  font-size: 1.2em;
-  border-left: 2px solid lightgrey;
-  color: inherit;
+  width: 100%;
+  height: calc(32px * 2);
+  padding: 0;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-align-items: center;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
 }
 
 .c2:hover {
-  border-left: 2px solid var(--color-primary);
-  color: var(--color-primary);
+  border-color: black;
 }
 
 .c3 {
-  display: inline-block;
+  -webkit-box-flex: 1;
+  -webkit-flex-grow: 1;
+  -ms-flex-positive: 1;
+  flex-grow: 1;
+  text-align: left;
+  padding: 0 calc(32px / 2);
+}
+
+.c3:hover {
+  color: black;
+}
+
+.c4 {
+  border-left: 1px solid grey;
+  width: calc(32px * 2);
+  height: calc(32px * 2 - 1px * 2);
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-align-items: center;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+}
+
+.c5 {
   font-size: 50%;
-  margin-left: 10px;
   -webkit-transition: -webkit-transform 0.2s;
   -webkit-transition: transform 0.2s;
   transition: transform 0.2s;
-  -webkit-transform: scaleX(2.2) scaleY(1.2);
-  -ms-transform: scaleX(2.2) scaleY(1.2);
-  transform: scaleX(2.2) scaleY(1.2);
+  -webkit-transform: scaleX(2) scaleY(1.2);
+  -ms-transform: scaleX(2) scaleY(1.2);
+  transform: scaleX(2) scaleY(1.2);
 }
 
 .c1 {
   position: relative;
 }
 
-.c4 {
+.c6 {
   position: absolute;
+  left: 0;
+  right: 0;
 }
 
 <div
@@ -48,28 +88,30 @@ exports[`Menu is rendered correctly 1`] = `
     className="c1"
     role="listbox"
   >
-    <div
-      className=""
+    <button
+      className="c2"
+      onClick={[Function]}
+      open={false}
+      type="button"
     >
-      <button
-        className="c2"
-        onClick={[Function]}
-        open={false}
-        type="button"
+      <span
+        className="c3"
+      >
+        Foo
+      </span>
+      <span
+        className="c4"
       >
-        <span>
-          Foo
-        </span>
         <span
-          className="c3"
+          className="c5"
           open={false}
         >
           â–¼
         </span>
-      </button>
-    </div>
+      </span>
+    </button>
     <div
-      className="c4"
+      className="c6"
     />
   </div>
 </div>
@@ -77,85 +119,138 @@ exports[`Menu is rendered correctly 1`] = `
 
 exports[`Menu is rendered correctly when open 1`] = `
 .c0 {
-  font-size: 1em;
+  max-width: calc(32px * 14);
+  margin-bottom: 32px;
 }
 
 .c2 {
   background: transparent;
-  border: none;
+  border: 1px solid grey;
+  border-radius: 8px;
   cursor: pointer;
   font-family: inherit;
-  font-size: 1.2em;
-  border-left: 2px solid var(--color-primary);
-  color: var(--color-primary);
+  width: 100%;
+  height: calc(32px * 2);
+  padding: 0;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-align-items: center;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
 }
 
 .c2:hover {
-  border-left: 2px solid var(--color-primary);
-  color: var(--color-primary);
+  border-color: black;
 }
 
 .c3 {
-  display: inline-block;
+  -webkit-box-flex: 1;
+  -webkit-flex-grow: 1;
+  -ms-flex-positive: 1;
+  flex-grow: 1;
+  text-align: left;
+  padding: 0 calc(32px / 2);
+}
+
+.c3:hover {
+  color: black;
+}
+
+.c4 {
+  border-left: 1px solid grey;
+  width: calc(32px * 2);
+  height: calc(32px * 2 - 1px * 2);
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-align-items: center;
+  -webkit-box-align: center;
+  -ms-flex-align: center;
+  align-items: center;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+}
+
+.c5 {
   font-size: 50%;
-  margin-left: 10px;
   -webkit-transition: -webkit-transform 0.2s;
   -webkit-transition: transform 0.2s;
   transition: transform 0.2s;
-  -webkit-transform: scaleX(2.2) scaleY(-1.2);
-  -ms-transform: scaleX(2.2) scaleY(-1.2);
-  transform: scaleX(2.2) scaleY(-1.2);
+  -webkit-transform: scaleX(2) scaleY(-1.2);
+  -ms-transform: scaleX(2) scaleY(-1.2);
+  transform: scaleX(2) scaleY(-1.2);
 }
 
 .c1 {
   position: relative;
 }
 
-.c4 {
+.c6 {
   position: absolute;
+  left: 0;
+  right: 0;
 }
 
-.c5 {
-  background-color: white;
-  border-bottom: 2px solid var(--color-primary);
-  border-left: 2px solid var(--color-primary);
-  left: 0;
-  padding-bottom: 0.5em;
-  padding-top: 0.5em;
+.c7 {
   position: absolute;
   top: 0;
-  -webkit-transition: opacity 2s;
-  transition: opacity 2s;
-  width: 0;
-  z-index: 10;
-  min-width: 10em;
-  opacity: 1;
+  left: 0;
+  right: 0;
+  background-color: white;
+  border: 1px solid grey;
+  border-radius: 8px;
+  overflow: hidden;
 }
 
-.c6 {
-  color: black;
+.c8 {
   font-weight: 600;
   cursor: pointer;
-  font-family: var(--font-author);
-  padding: 10px;
+  padding: calc(8px - 1px * 2) calc(8px * 2);
+  border: 1px solid transparent;
+  border-width: 1px 0 1px 0;
   white-space: nowrap;
 }
 
-.c6:hover {
-  color: var(--color-primary);
+.c8:hover {
+  background: grey;
+  border-color: grey;
 }
 
-.c7 {
+.c8:first-child:hover {
+  border-top-color: grey;
+}
+
+.c8:last-child:hover {
+  border-bottom-color: grey;
+}
+
+.c9 {
   color: #444;
   font-weight: inherit;
   cursor: pointer;
-  font-family: var(--font-author);
-  padding: 10px;
+  padding: calc(8px - 1px * 2) calc(8px * 2);
+  border: 1px solid transparent;
+  border-width: 1px 0 1px 0;
   white-space: nowrap;
 }
 
-.c7:hover {
-  color: var(--color-primary);
+.c9:hover {
+  background: grey;
+  border-color: grey;
+}
+
+.c9:first-child:hover {
+  border-top-color: grey;
+}
+
+.c9:last-child:hover {
+  border-bottom-color: grey;
 }
 
 <div
@@ -166,36 +261,38 @@ exports[`Menu is rendered correctly when open 1`] = `
     className="c1"
     role="listbox"
   >
-    <div
-      className=""
+    <button
+      className="c2"
+      onClick={[Function]}
+      open={true}
+      type="button"
     >
-      <button
-        className="c2"
-        onClick={[Function]}
-        open={true}
-        type="button"
+      <span
+        className="c3"
+      >
+        Foo
+      </span>
+      <span
+        className="c4"
       >
-        <span>
-          Foo
-        </span>
         <span
-          className="c3"
+          className="c5"
           open={true}
         >
           â–¼
         </span>
-      </button>
-    </div>
+      </span>
+    </button>
     <div
-      className="c4"
+      className="c6"
     >
       <div
-        className="c5"
+        className="c7"
         open={true}
       >
         <div
           aria-selected={true}
-          className="c6"
+          className="c8"
           onClick={[Function]}
           onKeyPress={[Function]}
           role="option"
@@ -205,7 +302,7 @@ exports[`Menu is rendered correctly when open 1`] = `
         </div>
         <div
           aria-selected={false}
-          className="c7"
+          className="c9"
           onClick={[Function]}
           onKeyPress={[Function]}
           role="option"
diff --git a/packages/ui/test/__snapshots__/Radio.test.js.snap b/packages/ui/test/__snapshots__/Radio.test.js.snap
index 6bcbc103f1ed180b6db8fb86dca90b119dd67c5f..42b7665512ef32b1dbba430de792c4c289585c48 100644
--- a/packages/ui/test/__snapshots__/Radio.test.js.snap
+++ b/packages/ui/test/__snapshots__/Radio.test.js.snap
@@ -6,26 +6,24 @@ exports[`Radio is rendered correctly 1`] = `
 }
 
 .c3 {
-  --local-border-size: 2px;
-  --local-borderTwo-size: 1px;
   display: inline-block;
   content: ' ';
-  width: 0.6em;
-  height: 0.6em;
+  width: calc(8px * 2);
+  height: calc(8px * 2);
   vertical-align: center;
-  margin-left: 0.2em;
-  margin-right: 0.6em;
-  border: var(--local-border-size) solid white;
+  margin-left: 8px;
+  margin-right: 8px;
+  border: calc(8px / 4) solid white;
   border-radius: 50%;
-  -webkit-transition: border 0.2s ease;
-  transition: border 0.2s ease;
+  -webkit-transition: border 0.1s ease;
+  transition: border 0.1s ease;
   color: black;
 }
 
 .c5 {
   display: inline-block;
   font-family: inherit;
-  font-size: 1em;
+  font-size: 18px;
   font-style: italic;
 }
 
@@ -39,31 +37,32 @@ exports[`Radio is rendered correctly 1`] = `
   display: -webkit-flex;
   display: -ms-flexbox;
   display: flex;
-  -webkit-transition: all 2s;
-  transition: all 2s;
+  -webkit-transition: all 1s;
+  transition: all 1s;
+  min-height: 32px;
   color: black;
 }
 
 .c0:not(:last-child) {
   margin-right: 0;
-  margin-bottom: 0.5rem;
+  margin-bottom: 0;
 }
 
 .c0 .c2 {
   background: transparent;
-  box-shadow: 0 0 0 var(--local-borderTwo-size) currentcolor;
+  box-shadow: 0 0 0 1px currentcolor;
 }
 
 .c0:hover .c4 {
-  color: var(--color-primary);
+  color: black;
 }
 
 .c0:hover .c2 {
   -webkit-animation-name: kLnLOV;
   animation-name: kLnLOV;
-  -webkit-animation-duration: 0.5s;
-  animation-duration: 0.5s;
-  box-shadow: 0 0 0 var(--local-borderTwo-size) var(--color-primary);
+  -webkit-animation-duration: 0.2s;
+  animation-duration: 0.2s;
+  box-shadow: 0 0 0 1px black;
 }
 
 <label
diff --git a/packages/ui/test/__snapshots__/RadioGroup.test.js.snap b/packages/ui/test/__snapshots__/RadioGroup.test.js.snap
index f8a0693c655fe308eca9f0f930a2fbb94760d44a..71e8272928972bab26d886359f64ea4a9d8d63ce 100644
--- a/packages/ui/test/__snapshots__/RadioGroup.test.js.snap
+++ b/packages/ui/test/__snapshots__/RadioGroup.test.js.snap
@@ -1,35 +1,33 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`Radio Group is rendered correctly 1`] = `
-.c1 {
+.c2 {
   display: none;
 }
 
-.c3 {
-  --local-border-size: 2px;
-  --local-borderTwo-size: 1px;
+.c4 {
   display: inline-block;
   content: ' ';
-  width: 0.6em;
-  height: 0.6em;
+  width: calc(8px * 2);
+  height: calc(8px * 2);
   vertical-align: center;
-  margin-left: 0.2em;
-  margin-right: 0.6em;
-  border: var(--local-border-size) solid white;
+  margin-left: 8px;
+  margin-right: 8px;
+  border: calc(8px / 4) solid white;
   border-radius: 50%;
-  -webkit-transition: border 0.2s ease;
-  transition: border 0.2s ease;
+  -webkit-transition: border 0.1s ease;
+  transition: border 0.1s ease;
   color: black;
 }
 
-.c5 {
+.c6 {
   display: inline-block;
   font-family: inherit;
-  font-size: 1em;
+  font-size: 18px;
   font-style: italic;
 }
 
-.c0 {
+.c1 {
   -webkit-align-items: center;
   -webkit-box-align: center;
   -ms-flex-align: center;
@@ -39,42 +37,59 @@ exports[`Radio Group is rendered correctly 1`] = `
   display: -webkit-flex;
   display: -ms-flexbox;
   display: flex;
-  -webkit-transition: all 2s;
-  transition: all 2s;
+  -webkit-transition: all 1s;
+  transition: all 1s;
+  min-height: 32px;
   color: black;
 }
 
-.c0:not(:last-child) {
+.c1:not(:last-child) {
   margin-right: 0;
-  margin-bottom: 0.5rem;
+  margin-bottom: 0;
 }
 
-.c0 .c2 {
+.c1 .c3 {
   background: transparent;
-  box-shadow: 0 0 0 var(--local-borderTwo-size) currentcolor;
+  box-shadow: 0 0 0 1px currentcolor;
 }
 
-.c0:hover .c4 {
-  color: var(--color-primary);
+.c1:hover .c5 {
+  color: black;
 }
 
-.c0:hover .c2 {
+.c1:hover .c3 {
   -webkit-animation-name: kLnLOV;
   animation-name: kLnLOV;
-  -webkit-animation-duration: 0.5s;
-  animation-duration: 0.5s;
-  box-shadow: 0 0 0 var(--local-borderTwo-size) var(--color-primary);
+  -webkit-animation-duration: 0.2s;
+  animation-duration: 0.2s;
+  box-shadow: 0 0 0 1px black;
+}
+
+.c0 {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex-direction: row;
+  -ms-flex-direction: row;
+  flex-direction: row;
+  -webkit-box-pack: left;
+  -webkit-justify-content: left;
+  -ms-flex-pack: left;
+  justify-content: left;
 }
 
-<div>
+<div
+  className="c0"
+>
   <label
     checked={false}
-    className="c0"
+    className="c1"
     color="black"
   >
     <input
       checked={false}
-      className="c1"
+      className="c2"
       disabled={undefined}
       name="TestName"
       onChange={[Function]}
@@ -84,12 +99,12 @@ exports[`Radio Group is rendered correctly 1`] = `
     />
      
     <span
-      className="c2 c3"
+      className="c3 c4"
       color="black"
     />
      
     <span
-      className="c4 c5"
+      className="c5 c6"
     >
        
       Yes
@@ -99,12 +114,12 @@ exports[`Radio Group is rendered correctly 1`] = `
   </label>
   <label
     checked={false}
-    className="c0"
+    className="c1"
     color="black"
   >
     <input
       checked={false}
-      className="c1"
+      className="c2"
       disabled={undefined}
       name="TestName"
       onChange={[Function]}
@@ -114,12 +129,12 @@ exports[`Radio Group is rendered correctly 1`] = `
     />
      
     <span
-      className="c2 c3"
+      className="c3 c4"
       color="black"
     />
      
     <span
-      className="c4 c5"
+      className="c5 c6"
     >
        
       No
@@ -129,12 +144,12 @@ exports[`Radio Group is rendered correctly 1`] = `
   </label>
   <label
     checked={false}
-    className="c0"
+    className="c1"
     color="black"
   >
     <input
       checked={false}
-      className="c1"
+      className="c2"
       disabled={undefined}
       name="TestName"
       onChange={[Function]}
@@ -144,12 +159,12 @@ exports[`Radio Group is rendered correctly 1`] = `
     />
      
     <span
-      className="c2 c3"
+      className="c3 c4"
       color="black"
     />
      
     <span
-      className="c4 c5"
+      className="c5 c6"
     >
        
       Maybe
diff --git a/packages/ui/test/__snapshots__/StateItem.test.js.snap b/packages/ui/test/__snapshots__/StateItem.test.js.snap
index 3f77c3a5f04080d5bd4c19ae4435d32ee95a2841..e3eb0a17826f1fe484933b3152904d8a390bbc71 100644
--- a/packages/ui/test/__snapshots__/StateItem.test.js.snap
+++ b/packages/ui/test/__snapshots__/StateItem.test.js.snap
@@ -3,10 +3,9 @@
 exports[`StateItem is rendered correctly 1`] = `
 .c0 {
   cursor: pointer;
-  font-family: var(--font-interface);
+  font-family: sans-serif;
   font-size: 16px;
   font-style: italic;
-  padding: 0;
 }
 
 .c0:focus {
@@ -14,9 +13,9 @@ exports[`StateItem is rendered correctly 1`] = `
 }
 
 .c0:hover {
-  color: #404040;
-  -webkit-transition: 0.25s ease-in-out 0s;
-  transition: 0.25s ease-in-out 0s;
+  color: black;
+  -webkit-transition: ease;
+  transition: ease;
 }
 
 <span
diff --git a/packages/ui/test/__snapshots__/StateList.test.js.snap b/packages/ui/test/__snapshots__/StateList.test.js.snap
index 830dbfac9789bfd5fedb2db07696c0aeba5ba907..3cad7297cf2819ea347e99dacf2c9a23af95716f 100644
--- a/packages/ui/test/__snapshots__/StateList.test.js.snap
+++ b/packages/ui/test/__snapshots__/StateList.test.js.snap
@@ -3,10 +3,9 @@
 exports[`StateList is rendered correctly 1`] = `
 .c2 {
   cursor: pointer;
-  font-family: var(--font-interface);
+  font-family: sans-serif;
   font-size: 16px;
   font-style: italic;
-  padding: 0;
 }
 
 .c2:focus {
@@ -14,9 +13,9 @@ exports[`StateList is rendered correctly 1`] = `
 }
 
 .c2:hover {
-  color: #404040;
-  -webkit-transition: 0.25s ease-in-out 0s;
-  transition: 0.25s ease-in-out 0s;
+  color: black;
+  -webkit-transition: ease;
+  transition: ease;
 }
 
 .c0 {
diff --git a/packages/ui/test/__snapshots__/YesOrNo.test.js.snap b/packages/ui/test/__snapshots__/YesOrNo.test.js.snap
index 8a6c833c4f6768fbf96ded9bc686b560d5d10d91..fed94e3bb75893daba6abef694eaf61083ecc81d 100644
--- a/packages/ui/test/__snapshots__/YesOrNo.test.js.snap
+++ b/packages/ui/test/__snapshots__/YesOrNo.test.js.snap
@@ -1,80 +1,95 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`Yes or No is rendered correclty 1`] = `
-.c1 {
+exports[`Yes or No is rendered corrctly 1`] = `
+.c2 {
   display: none;
 }
 
-.c3 {
-  --local-border-size: 2px;
-  --local-borderTwo-size: 1px;
+.c4 {
   display: inline-block;
   content: ' ';
-  width: 0.6em;
-  height: 0.6em;
+  width: calc(8px * 2);
+  height: calc(8px * 2);
   vertical-align: center;
-  margin-left: 0.2em;
-  margin-right: 0.6em;
-  border: var(--local-border-size) solid white;
+  margin-left: 8px;
+  margin-right: 8px;
+  border: calc(8px / 4) solid white;
   border-radius: 50%;
-  -webkit-transition: border 0.2s ease;
-  transition: border 0.2s ease;
+  -webkit-transition: border 0.1s ease;
+  transition: border 0.1s ease;
   color: black;
 }
 
-.c5 {
+.c6 {
   display: inline-block;
   font-family: inherit;
-  font-size: 1em;
+  font-size: 18px;
   font-style: italic;
 }
 
-.c0 {
+.c1 {
   -webkit-align-items: center;
   -webkit-box-align: center;
   -ms-flex-align: center;
   align-items: center;
   cursor: pointer;
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-transition: all 2s;
-  transition: all 2s;
+  display: -webkit-inline-box;
+  display: -webkit-inline-flex;
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -webkit-transition: all 1s;
+  transition: all 1s;
+  min-height: 32px;
   color: black;
 }
 
-.c0:not(:last-child) {
-  margin-right: 0;
-  margin-bottom: 0.5rem;
+.c1:not(:last-child) {
+  margin-right: 32px;
+  margin-bottom: 0;
 }
 
-.c0 .c2 {
+.c1 .c3 {
   background: transparent;
-  box-shadow: 0 0 0 var(--local-borderTwo-size) currentcolor;
+  box-shadow: 0 0 0 1px currentcolor;
 }
 
-.c0:hover .c4 {
-  color: var(--color-primary);
+.c1:hover .c5 {
+  color: black;
 }
 
-.c0:hover .c2 {
+.c1:hover .c3 {
   -webkit-animation-name: kLnLOV;
   animation-name: kLnLOV;
-  -webkit-animation-duration: 0.5s;
-  animation-duration: 0.5s;
-  box-shadow: 0 0 0 var(--local-borderTwo-size) var(--color-primary);
+  -webkit-animation-duration: 0.2s;
+  animation-duration: 0.2s;
+  box-shadow: 0 0 0 1px black;
+}
+
+.c0 {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex-direction: row;
+  -ms-flex-direction: row;
+  flex-direction: row;
+  -webkit-box-pack: left;
+  -webkit-justify-content: left;
+  -ms-flex-pack: left;
+  justify-content: left;
 }
 
-<div>
+<div
+  className="c0"
+>
   <label
     checked={false}
-    className="c0"
+    className="c1"
     color="black"
   >
     <input
       checked={false}
-      className="c1"
+      className="c2"
       disabled={undefined}
       name="TestName"
       onChange={[Function]}
@@ -84,12 +99,12 @@ exports[`Yes or No is rendered correclty 1`] = `
     />
      
     <span
-      className="c2 c3"
+      className="c3 c4"
       color="black"
     />
      
     <span
-      className="c4 c5"
+      className="c5 c6"
     >
        
       Yes
@@ -99,12 +114,12 @@ exports[`Yes or No is rendered correclty 1`] = `
   </label>
   <label
     checked={false}
-    className="c0"
+    className="c1"
     color="black"
   >
     <input
       checked={false}
-      className="c1"
+      className="c2"
       disabled={undefined}
       name="TestName"
       onChange={[Function]}
@@ -114,12 +129,12 @@ exports[`Yes or No is rendered correclty 1`] = `
     />
      
     <span
-      className="c2 c3"
+      className="c3 c4"
       color="black"
     />
      
     <span
-      className="c4 c5"
+      className="c5 c6"
     >
        
       No
diff --git a/packages/ui/test/setup/theme.js b/packages/ui/test/setup/theme.js
new file mode 100644
index 0000000000000000000000000000000000000000..f91cbc25d534aa96e77bba0c1b8b270dbd6c7fa7
--- /dev/null
+++ b/packages/ui/test/setup/theme.js
@@ -0,0 +1,60 @@
+import React from 'react'
+import { ThemeProvider } from 'styled-components'
+
+const theme = {
+  /* Colors */
+  colorBackground: 'white',
+  colorPrimary: 'black',
+  colorSecondary: 'grey',
+  colorQuiet: 'grey',
+  colorFurniture: 'grey',
+  colorBorder: 'grey',
+  colorBackgroundHue: 'grey',
+  colorSuccess: 'green',
+  colorError: 'red',
+  colorWarning: 'yellow',
+  colorText: 'black',
+  colorTextReverse: 'white',
+  colorTextPlaceholder: 'grey',
+
+  /* Text variables */
+  fontInterface: 'sans-serif',
+  fontHeading: 'serif',
+  fontReading: 'serif',
+  fontWriting: 'monospace',
+  fontSizeBase: '18px',
+  fontSizeBaseSmall: '16px',
+  fontSizeHeading1: '36px',
+  fontSizeHeading2: '32px',
+  fontSizeHeading3: '29px',
+  fontSizeHeading4: '26px',
+  fontSizeHeading5: '23px',
+  fontSizeHeading6: '20px',
+  fontLineHeight: '32px',
+
+  /* Spacing */
+  gridUnit: '32px',
+  subGridUnit: '8px',
+
+  /* Border */
+  borderRadius: '8px',
+  borderWidth: '1px',
+  borderStyle: 'solid',
+
+  /* Shadow (for tooltip) */
+  boxShadow: 'none',
+
+  /* Transition */
+  transitionDuration: '1s',
+  transitionDurationM: '0.5s',
+  transitionDurationS: '0.2s',
+  transitionDurationXs: '0.1s',
+  transitionTimingFunction: 'ease',
+  transitionDelay: '500ms',
+}
+
+const TestThemeProvider = ({ children }) => (
+  <ThemeProvider theme={theme}>{children}</ThemeProvider>
+)
+
+export default TestThemeProvider
diff --git a/yarn.lock b/yarn.lock
index 818777fa447f980c9e8a60a525c75b7ecf2626fc..2c4a3e08f30219ab60db7007717acb4d2adbfb7f 100755
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,114 +2,104 @@
 # yarn lockfile v1
 
 
-"@babel/code-frame@7.0.0-beta.31":
-  version "7.0.0-beta.31"
-  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz#473d021ecc573a2cce1c07d5b509d5215f46ba35"
+"@babel/code-frame@7.0.0-beta.40", "@babel/code-frame@^7.0.0-beta.35", "@babel/code-frame@^7.0.0-beta.40":
+  version "7.0.0-beta.40"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.40.tgz#37e2b0cf7c56026b4b21d3927cadf81adec32ac6"
   dependencies:
-    chalk "^2.0.0"
-    esutils "^2.0.2"
-    js-tokens "^3.0.0"
+    "@babel/highlight" "7.0.0-beta.40"
 
-"@babel/code-frame@^7.0.0-beta.35":
-  version "7.0.0-beta.38"
-  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.38.tgz#c0af5930617e55e050336838e3a3670983b0b2b2"
+"@babel/generator@7.0.0-beta.40":
+  version "7.0.0-beta.40"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.40.tgz#ab61f9556f4f71dbd1138949c795bb9a21e302ea"
   dependencies:
-    chalk "^2.0.0"
-    esutils "^2.0.2"
-    js-tokens "^3.0.0"
+    "@babel/types" "7.0.0-beta.40"
+    jsesc "^2.5.1"
+    lodash "^4.2.0"
+    source-map "^0.5.0"
+    trim-right "^1.0.1"
 
-"@babel/helper-function-name@7.0.0-beta.31":
-  version "7.0.0-beta.31"
-  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57"
+"@babel/helper-function-name@7.0.0-beta.40":
+  version "7.0.0-beta.40"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.40.tgz#9d033341ab16517f40d43a73f2d81fc431ccd7b6"
   dependencies:
-    "@babel/helper-get-function-arity" "7.0.0-beta.31"
-    "@babel/template" "7.0.0-beta.31"
-    "@babel/traverse" "7.0.0-beta.31"
-    "@babel/types" "7.0.0-beta.31"
+    "@babel/helper-get-function-arity" "7.0.0-beta.40"
+    "@babel/template" "7.0.0-beta.40"
+    "@babel/types" "7.0.0-beta.40"
 
-"@babel/helper-get-function-arity@7.0.0-beta.31":
-  version "7.0.0-beta.31"
-  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz#1176d79252741218e0aec872ada07efb2b37a493"
+"@babel/helper-get-function-arity@7.0.0-beta.40":
+  version "7.0.0-beta.40"
+  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.40.tgz#ac0419cf067b0ec16453e1274f03878195791c6e"
+  dependencies:
+    "@babel/types" "7.0.0-beta.40"
+
+"@babel/highlight@7.0.0-beta.40":
+  version "7.0.0-beta.40"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.40.tgz#b43d67d76bf46e1d10d227f68cddcd263786b255"
   dependencies:
-    "@babel/types" "7.0.0-beta.31"
+    chalk "^2.0.0"
+    esutils "^2.0.2"
+    js-tokens "^3.0.0"
 
-"@babel/runtime@^7.0.0-beta.38", "@babel/runtime@^7.0.0-beta.40":
+"@babel/runtime@^7.0.0-beta.38":
   version "7.0.0-beta.40"
   resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.40.tgz#8e3b8f1d2d8639d010e991a7e99c1d9ef578f886"
   dependencies:
     core-js "^2.5.3"
     regenerator-runtime "^0.11.1"
 
-"@babel/template@7.0.0-beta.31":
-  version "7.0.0-beta.31"
-  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda"
+"@babel/template@7.0.0-beta.40":
+  version "7.0.0-beta.40"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.40.tgz#034988c6424eb5c3268fe6a608626de1f4410fc8"
   dependencies:
-    "@babel/code-frame" "7.0.0-beta.31"
-    "@babel/types" "7.0.0-beta.31"
-    babylon "7.0.0-beta.31"
+    "@babel/code-frame" "7.0.0-beta.40"
+    "@babel/types" "7.0.0-beta.40"
+    babylon "7.0.0-beta.40"
     lodash "^4.2.0"
 
-"@babel/traverse@7.0.0-beta.31":
-  version "7.0.0-beta.31"
-  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.31.tgz#db399499ad74aefda014f0c10321ab255134b1df"
+"@babel/traverse@^7.0.0-beta.40":
+  version "7.0.0-beta.40"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.40.tgz#d140e449b2e093ef9fe1a2eecc28421ffb4e521e"
   dependencies:
-    "@babel/code-frame" "7.0.0-beta.31"
-    "@babel/helper-function-name" "7.0.0-beta.31"
-    "@babel/types" "7.0.0-beta.31"
-    babylon "7.0.0-beta.31"
+    "@babel/code-frame" "7.0.0-beta.40"
+    "@babel/generator" "7.0.0-beta.40"
+    "@babel/helper-function-name" "7.0.0-beta.40"
+    "@babel/types" "7.0.0-beta.40"
+    babylon "7.0.0-beta.40"
     debug "^3.0.1"
-    globals "^10.0.0"
+    globals "^11.1.0"
     invariant "^2.2.0"
     lodash "^4.2.0"
 
-"@babel/types@7.0.0-beta.31":
-  version "7.0.0-beta.31"
-  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.31.tgz#42c9c86784f674c173fb21882ca9643334029de4"
+"@babel/types@7.0.0-beta.40", "@babel/types@^7.0.0-beta.40":
+  version "7.0.0-beta.40"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.40.tgz#25c3d7aae14126abe05fcb098c65a66b6d6b8c14"
   dependencies:
     esutils "^2.0.2"
     lodash "^4.2.0"
     to-fast-properties "^2.0.0"
 
 "@commitlint/cli@^6.0.5":
-  version "6.0.5"
-  resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-6.0.5.tgz#c159c41434d24167c2f52c29e81cffc1959a6d0f"
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-6.1.2.tgz#dc4c7507ab2dee92a821e9753556f1ac1e261883"
   dependencies:
-    "@commitlint/core" "^6.0.5"
+    "@commitlint/format" "^6.1.2"
+    "@commitlint/lint" "^6.1.2"
+    "@commitlint/load" "^6.1.2"
+    "@commitlint/read" "^6.1.2"
     babel-polyfill "6.26.0"
-    chalk "2.3.0"
+    chalk "2.3.1"
     get-stdin "5.0.1"
-    lodash.merge "4.6.0"
+    lodash.merge "4.6.1"
     lodash.pick "4.4.0"
     meow "3.7.0"
 
 "@commitlint/config-conventional@^6.0.4":
-  version "6.0.4"
-  resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-6.0.4.tgz#f5332c3aaf5423f2fa62287849859a9b769484f3"
-
-"@commitlint/core@^6.0.5":
-  version "6.0.5"
-  resolved "https://registry.yarnpkg.com/@commitlint/core/-/core-6.0.5.tgz#a0f174f08a377eb9e5571bf31c2c9f60964a6ed9"
-  dependencies:
-    "@commitlint/execute-rule" "^6.0.4"
-    "@commitlint/is-ignored" "^6.0.4"
-    "@commitlint/parse" "^6.0.4"
-    "@commitlint/resolve-extends" "^6.0.4"
-    "@commitlint/rules" "^6.0.4"
-    "@commitlint/top-level" "^6.0.5"
-    "@marionebl/sander" "^0.6.0"
-    babel-runtime "^6.23.0"
-    chalk "^2.0.1"
-    cosmiconfig "^4.0.0"
-    git-raw-commits "^1.3.0"
-    lodash.merge "4.6.0"
-    lodash.mergewith "4.6.0"
-    lodash.pick "4.4.0"
-    lodash.topairs "4.3.0"
-    resolve-from "4.0.0"
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-6.1.2.tgz#66e328adf6051a7efb5e01c55f49bf78ebb15f08"
 
-"@commitlint/ensure@^6.0.4":
-  version "6.0.4"
-  resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-6.0.4.tgz#c5ae6d0a24797e58caceee61608c6ac9ced64691"
+"@commitlint/ensure@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-6.1.2.tgz#c27a69e213cfbe47023261f4169559c154378c51"
   dependencies:
     lodash.camelcase "4.3.0"
     lodash.kebabcase "4.1.1"
@@ -117,56 +107,96 @@
     lodash.startcase "4.4.0"
     lodash.upperfirst "4.3.1"
 
-"@commitlint/execute-rule@^6.0.4":
-  version "6.0.4"
-  resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-6.0.4.tgz#5db080be51b2cc057028ce24a1cd9142283774fc"
+"@commitlint/execute-rule@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-6.1.2.tgz#ef8c7ee10726f863211d494be8e4eaf001a0e258"
   dependencies:
     babel-runtime "6.26.0"
 
-"@commitlint/is-ignored@^6.0.4":
-  version "6.0.4"
-  resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-6.0.4.tgz#cc4cde7be8d101e848fa70b37381687fa837c417"
+"@commitlint/format@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-6.1.2.tgz#f46fa96f874369c166b420e3ed59f745c3bb3d49"
+  dependencies:
+    babel-runtime "^6.23.0"
+    chalk "^2.0.1"
+
+"@commitlint/is-ignored@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-6.1.2.tgz#254d5bab480823adcf4fa945cae1ea8d533262e1"
   dependencies:
     semver "5.5.0"
 
-"@commitlint/message@^6.0.4":
-  version "6.0.4"
-  resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-6.0.4.tgz#80fe320285cab5f0f4ab3847e8d3b98a3fd1e389"
+"@commitlint/lint@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-6.1.2.tgz#a7c5bc051eb0539d41924fb0c11af13bfe186cb2"
+  dependencies:
+    "@commitlint/is-ignored" "^6.1.2"
+    "@commitlint/parse" "^6.1.2"
+    "@commitlint/rules" "^6.1.2"
+    babel-runtime "^6.23.0"
+    lodash.topairs "4.3.0"
 
-"@commitlint/parse@^6.0.4":
-  version "6.0.4"
-  resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-6.0.4.tgz#3d7403b024200d32d66e913ee464eaf46bbac075"
+"@commitlint/load@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-6.1.2.tgz#20d16d2fd72bd3d1ed6a22b7234b1fd55c95fbdc"
+  dependencies:
+    "@commitlint/execute-rule" "^6.1.2"
+    "@commitlint/resolve-extends" "^6.1.2"
+    babel-runtime "^6.23.0"
+    cosmiconfig "^4.0.0"
+    lodash.merge "4.6.1"
+    lodash.mergewith "4.6.1"
+    lodash.pick "4.4.0"
+    lodash.topairs "4.3.0"
+    resolve-from "4.0.0"
+
+"@commitlint/message@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-6.1.2.tgz#7f0f71858bae2310ab45886aeff3f8ae48483c21"
+
+"@commitlint/parse@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-6.1.2.tgz#920c82a41ac28b0169f1a5d4ad4115cefda96205"
   dependencies:
     conventional-changelog-angular "^1.3.3"
     conventional-commits-parser "^2.1.0"
 
-"@commitlint/resolve-extends@^6.0.4":
-  version "6.0.4"
-  resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-6.0.4.tgz#8cce624e856df7582d5621c882e83f69b44c18c4"
+"@commitlint/read@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-6.1.2.tgz#6f39d62cc120c139d075ec205ed1dbfc681f173f"
+  dependencies:
+    "@commitlint/top-level" "^6.1.2"
+    "@marionebl/sander" "^0.6.0"
+    babel-runtime "^6.23.0"
+    git-raw-commits "^1.3.0"
+
+"@commitlint/resolve-extends@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-6.1.2.tgz#b48b7195243dc9381bcf341c2fcb6b1e803da8b4"
   dependencies:
     babel-runtime "6.26.0"
-    lodash.merge "4.6.0"
+    lodash.merge "4.6.1"
     lodash.omit "4.5.0"
     require-uncached "^1.0.3"
     resolve-from "^4.0.0"
     resolve-global "^0.1.0"
 
-"@commitlint/rules@^6.0.4":
-  version "6.0.4"
-  resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-6.0.4.tgz#6891d7e37908d6438dc3b382f193774ab4a36479"
+"@commitlint/rules@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-6.1.2.tgz#2ceffa7bf69d1fe327bcb178f7a71bd4e094e355"
   dependencies:
-    "@commitlint/ensure" "^6.0.4"
-    "@commitlint/message" "^6.0.4"
-    "@commitlint/to-lines" "^6.0.4"
+    "@commitlint/ensure" "^6.1.2"
+    "@commitlint/message" "^6.1.2"
+    "@commitlint/to-lines" "^6.1.2"
     babel-runtime "^6.23.0"
 
-"@commitlint/to-lines@^6.0.4":
-  version "6.0.4"
-  resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-6.0.4.tgz#c0bb6ca0b5c5f565f18d9747de12067cb2c4cc34"
+"@commitlint/to-lines@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-6.1.2.tgz#01d0272fe98a530e6538ef934f970aeae3fa498c"
 
-"@commitlint/top-level@^6.0.5":
-  version "6.0.5"
-  resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-6.0.5.tgz#01cac031f7452c0bebfda75d6ef7fb79d1714f81"
+"@commitlint/top-level@^6.1.2":
+  version "6.1.2"
+  resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-6.1.2.tgz#280c179afc517d2a58c1c79aa5019edffa5d443d"
   dependencies:
     find-up "^2.1.0"
 
@@ -178,71 +208,63 @@
     mkdirp "^0.5.1"
     rimraf "^2.5.2"
 
-"@pubsweet/db-manager@^0.0.12":
-  version "0.0.12"
-  resolved "https://registry.yarnpkg.com/@pubsweet/db-manager/-/db-manager-0.0.12.tgz#e05c2f2d6a664a33dcf70050e28f8b82a3a17564"
+"@pubsweet/db-manager@^0.0.16":
+  version "0.0.16"
+  resolved "https://registry.yarnpkg.com/@pubsweet/db-manager/-/db-manager-0.0.16.tgz#b2b39a7fd1b36e970cbeed48ba4dca2c2b2aaf7a"
   dependencies:
-    "@pubsweet/logger" "^0.1.2"
+    "@pubsweet/logger" "^0.2.1"
     fs-extra "^4.0.2"
     isomorphic-fetch "^2.2.1"
     joi "^13.1.0"
     pouchdb "^6.3.4"
-    pubsweet-server "^1.0.4"
+    pubsweet-server "^1.1.0"
 
-"@pubsweet/logger@^0.1.2":
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/@pubsweet/logger/-/logger-0.1.2.tgz#a7e27d346967beefd88eef51ea324922eb939d91"
+"@pubsweet/db-manager@^0.0.17":
+  version "0.0.17"
+  resolved "https://registry.yarnpkg.com/@pubsweet/db-manager/-/db-manager-0.0.17.tgz#f4fc6d17847f020fb4fa8a4e3ea5885c1181c51b"
   dependencies:
-    config "^1.26.2"
+    "@pubsweet/logger" "^0.2.2"
+    fs-extra "^4.0.2"
+    isomorphic-fetch "^2.2.1"
     joi "^13.1.0"
-    lodash "^4.17.4"
+    pouchdb "^6.3.4"
+    pubsweet-server "^1.1.1"
 
 "@pubsweet/starter@git+https://gitlab.coko.foundation/pubsweet/pubsweet-starter.git":
   version "1.0.0-alpha.1"
-  resolved "git+https://gitlab.coko.foundation/pubsweet/pubsweet-starter.git#52530830b98ca2f75cd652d81c04363949ca4863"
+  resolved "git+https://gitlab.coko.foundation/pubsweet/pubsweet-starter.git#80364013db8eee7ccc93901a8d33a5bf58e3cfd3"
   dependencies:
-    "@pubsweet/db-manager" "^0.0.12"
-    "@pubsweet/logger" "^0.1.2"
+    "@pubsweet/db-manager" "^0.0.16"
+    "@pubsweet/logger" "^0.2.1"
+    "@pubsweet/ui" "^2.0.0"
     authsome "^0.0.9"
-    pubsweet "^1.1.4"
-    pubsweet-client "^1.1.2"
-    pubsweet-component-blog "^0.3.1"
-    pubsweet-component-form-group "0.1.6"
+    pubsweet "^1.1.8"
+    pubsweet-client "^2.1.0"
+    pubsweet-component-blog "^1.0.0"
+    pubsweet-component-form-group "1.0.0"
     pubsweet-component-html "^0.2.0"
-    pubsweet-component-login "^0.5.2"
+    pubsweet-component-login "^1.0.1"
     pubsweet-component-manage "^0.2.2"
     pubsweet-component-medium-draft "^0.2.0"
-    pubsweet-component-navigation "^0.3.2"
+    pubsweet-component-navigation "^1.0.0"
     pubsweet-component-password-reset-backend "^0.2.0"
-    pubsweet-component-password-reset-frontend "^0.2.0"
+    pubsweet-component-password-reset-frontend "^1.0.0"
     pubsweet-component-pepper-theme "^0.0.5"
-    pubsweet-component-posts-manager "0.6.5"
-    pubsweet-component-signup "^0.4.0"
-    pubsweet-component-teams-manager "^0.3.0"
-    pubsweet-component-users-manager "^0.2.1"
-    pubsweet-server "^1.0.4"
+    pubsweet-component-posts-manager "1.0.0"
+    pubsweet-component-signup "^1.0.0"
+    pubsweet-component-teams-manager "^1.0.0"
+    pubsweet-component-users-manager "^1.0.0"
+    pubsweet-server "^1.1.0"
     pubsweet-theme-plugin "^0.0.3"
     react-router-redux next
 
-"@types/async@2.0.47":
-  version "2.0.47"
-  resolved "https://registry.yarnpkg.com/@types/async/-/async-2.0.47.tgz#f49ba1dd1f189486beb6e1d070a850f6ab4bd521"
-
-"@types/node@*":
-  version "9.3.0"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-9.3.0.tgz#3a129cda7c4e5df2409702626892cb4b96546dd5"
-
-"@types/node@^9.4.6":
+"@types/node@*", "@types/node@^9.4.6":
   version "9.4.6"
   resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.6.tgz#d8176d864ee48753d053783e4e463aec86b8d82e"
 
-"@types/zen-observable@0.5.3", "@types/zen-observable@^0.5.3":
-  version "0.5.3"
-  resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.5.3.tgz#91b728599544efbb7386d8b6633693a3c2e7ade5"
-
 JSONStream@^1.0.4:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a"
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea"
   dependencies:
     jsonparse "^1.2.0"
     through ">=2.2.7 <3"
@@ -255,17 +277,29 @@ abbrev@1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
 
-abstract-leveldown@~2.6.0, abstract-leveldown@~2.6.1:
-  version "2.6.3"
-  resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8"
+abstract-leveldown@2.4.1:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.4.1.tgz#b3bfedb884eb693a12775f0c55e9f0a420ccee64"
+  dependencies:
+    xtend "~4.0.0"
+
+abstract-leveldown@^4.0.0, abstract-leveldown@~4.0.0:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-4.0.3.tgz#cb636f4965fbe117f5c8b76a7d51dd42aaed0580"
+  dependencies:
+    xtend "~4.0.0"
+
+abstract-leveldown@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz#5cb89f958a44f526779d740d1440e743e0c30a57"
   dependencies:
     xtend "~4.0.0"
 
 accepts@^1.3.3, accepts@~1.3.4:
-  version "1.3.4"
-  resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f"
+  version "1.3.5"
+  resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
   dependencies:
-    mime-types "~2.1.16"
+    mime-types "~2.1.18"
     negotiator "0.6.1"
 
 acorn-dynamic-import@^2.0.0:
@@ -274,23 +308,33 @@ acorn-dynamic-import@^2.0.0:
   dependencies:
     acorn "^4.0.3"
 
+acorn-dynamic-import@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278"
+  dependencies:
+    acorn "^5.0.0"
+
 acorn-globals@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538"
   dependencies:
     acorn "^5.0.0"
 
-acorn-jsx@^3.0.0, acorn-jsx@^3.0.1:
+acorn-jsx@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
   dependencies:
     acorn "^3.0.4"
 
-acorn5-object-spread@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/acorn5-object-spread/-/acorn5-object-spread-4.0.0.tgz#d5758081eed97121ab0be47e31caaef2aa399697"
+acorn-jsx@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e"
   dependencies:
-    acorn "^5.1.2"
+    acorn "^5.0.3"
+
+acorn@^1.0.3:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-1.2.2.tgz#c8ce27de0acc76d896d2b1fad3df588d9e82f014"
 
 acorn@^3.0.4:
   version "3.3.0"
@@ -300,13 +344,9 @@ acorn@^4.0.3:
   version "4.0.13"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
 
-acorn@^5.0.0, acorn@^5.2.1:
-  version "5.2.1"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
-
-acorn@^5.1.2, acorn@^5.3.0:
-  version "5.3.0"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822"
+acorn@^5.0.0, acorn@^5.0.3, acorn@^5.2.1, acorn@^5.3.0, acorn@^5.4.0, acorn@^5.4.1:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.0.tgz#1abb587fbf051f94e3de20e6b26ef910b1828298"
 
 add-stream@^1.0.0:
   version "1.0.0"
@@ -316,10 +356,6 @@ address@1.0.3, address@^1.0.1:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
 
-after@~0.8.1:
-  version "0.8.2"
-  resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
-
 agent-base@2:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7"
@@ -331,9 +367,9 @@ ajv-keywords@^1.0.0:
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
 
-ajv-keywords@^2.0.0, ajv-keywords@^2.1.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
+ajv-keywords@^3.0.0, ajv-keywords@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be"
 
 ajv@^4.7.0, ajv@^4.9.1:
   version "4.11.8"
@@ -342,7 +378,7 @@ ajv@^4.7.0, ajv@^4.9.1:
     co "^4.6.0"
     json-stable-stringify "^1.0.1"
 
-ajv@^5.0.0:
+ajv@^5.0.0, ajv@^5.1.0, ajv@^5.3.0:
   version "5.5.2"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
   dependencies:
@@ -351,11 +387,10 @@ ajv@^5.0.0:
     fast-json-stable-stringify "^2.0.0"
     json-schema-traverse "^0.3.0"
 
-ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.3, ajv@^5.3.0:
-  version "5.5.1"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.1.tgz#b38bb8876d9e86bee994956a04e721e88b248eb2"
+ajv@^6.0.1, ajv@^6.1.0:
+  version "6.2.0"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.0.tgz#afac295bbaa0152449e522742e4547c1ae9328d2"
   dependencies:
-    co "^4.6.0"
     fast-deep-equal "^1.0.0"
     fast-json-stable-stringify "^2.0.0"
     json-schema-traverse "^0.3.0"
@@ -400,16 +435,12 @@ ansi-styles@^2.2.1:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
 
-ansi-styles@^3.1.0, ansi-styles@^3.2.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
+ansi-styles@^3.2.0:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
   dependencies:
     color-convert "^1.9.0"
 
-ansi@^0.3.0, ansi@~0.3.1:
-  version "0.3.1"
-  resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21"
-
 any-observable@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242"
@@ -434,91 +465,13 @@ apollo-cache-control@^0.0.x:
   dependencies:
     graphql-extensions "^0.0.x"
 
-apollo-cache-inmemory@^1.1.7:
-  version "1.1.9"
-  resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.1.9.tgz#8bcd05e8ec4e7dc5ffda7f68252244cab3197b71"
-  dependencies:
-    apollo-cache "^1.1.4"
-    apollo-utilities "^1.0.8"
-    graphql-anywhere "^4.1.5"
-
-apollo-cache@^1.1.4:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.1.4.tgz#a06544fdf4d946114168660961cf7a1fd340d8d6"
-  dependencies:
-    apollo-utilities "^1.0.8"
-
-apollo-client-preset@^1.0.8:
-  version "1.0.8"
-  resolved "https://registry.yarnpkg.com/apollo-client-preset/-/apollo-client-preset-1.0.8.tgz#23bd7176849d0d815f12c648774d009b258a449e"
-  dependencies:
-    apollo-cache-inmemory "^1.1.7"
-    apollo-client "^2.2.2"
-    apollo-link "^1.0.6"
-    apollo-link-http "^1.3.1"
-    graphql-tag "^2.4.2"
-
-apollo-client@^2.2.2:
-  version "2.2.5"
-  resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.2.5.tgz#bc00704aa181d0ec299fd5bb2b72d0b44800f5d0"
-  dependencies:
-    "@types/zen-observable" "^0.5.3"
-    apollo-cache "^1.1.4"
-    apollo-link "^1.0.0"
-    apollo-link-dedup "^1.0.0"
-    apollo-utilities "^1.0.8"
-    symbol-observable "^1.0.2"
-    zen-observable "^0.7.0"
-  optionalDependencies:
-    "@types/async" "2.0.47"
-
-apollo-link-context@^1.0.5:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/apollo-link-context/-/apollo-link-context-1.0.6.tgz#291a7e6717fbab473beb8008b33daefd3ca245fd"
-  dependencies:
-    apollo-link "^1.2.0"
-
-apollo-link-dedup@^1.0.0:
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/apollo-link-dedup/-/apollo-link-dedup-1.0.7.tgz#2fc31b04d7be5c2b6cb9aded03be9b634e5483c8"
-  dependencies:
-    apollo-link "^1.2.0"
-
-apollo-link-http-common@0.0.0:
-  version "0.0.0"
-  resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.0.0.tgz#b347db2925d9ad6cb248e165761f63d5c64f60b0"
-  dependencies:
-    apollo-link "^1.1.0"
-
-apollo-link-http-common@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.1.tgz#bd8dbb751633be8796f58fe1ba4ecdc0a2f46110"
-  dependencies:
-    apollo-link "^1.2.0"
-
-apollo-link-http@^1.3.1:
-  version "1.5.0"
-  resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.0.tgz#6a45407fae655996a668ae1a1ab528569b6ba61b"
-  dependencies:
-    apollo-link "^1.2.0"
-    apollo-link-http-common "^0.2.1"
-
-apollo-link@^1.0.0:
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.0.7.tgz#42cd38a7378332fc3e41a214ff6a6e5e703a556f"
-  dependencies:
-    "@types/zen-observable" "0.5.3"
-    apollo-utilities "^1.0.0"
-    zen-observable "^0.6.0"
-
-apollo-link@^1.0.6, apollo-link@^1.1.0, apollo-link@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.0.tgz#1abba5456eb35fc8b8a79f3be421e683a9ecfc41"
+apollo-link@^1.1.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.1.tgz#c120b16059f9bd93401b9f72b94d2f80f3f305d2"
   dependencies:
     "@types/node" "^9.4.6"
-    "@types/zen-observable" "0.5.3"
     apollo-utilities "^1.0.0"
-    zen-observable "^0.8.0"
+    zen-observable-ts "^0.8.6"
 
 apollo-server-core@^1.3.2:
   version "1.3.2"
@@ -545,14 +498,6 @@ apollo-tracing@^0.1.0:
   dependencies:
     graphql-extensions "^0.0.x"
 
-apollo-upload-client@^7.1.0-alpha.1:
-  version "7.1.0-alpha.1"
-  resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-7.1.0-alpha.1.tgz#738e7ff61ae66d0984371e9cffe5a9ef0f3b992c"
-  dependencies:
-    "@babel/runtime" "^7.0.0-beta.40"
-    apollo-link-http-common "0.0.0"
-    extract-files "^3.1.0"
-
 apollo-upload-server@^4.0.2:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/apollo-upload-server/-/apollo-upload-server-4.0.2.tgz#1a042e413d09d4bd5529738f9e0af45ba553cc2d"
@@ -562,10 +507,6 @@ apollo-upload-server@^4.0.2:
     object-path "^0.11.4"
 
 apollo-utilities@^1.0.0, apollo-utilities@^1.0.1:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.4.tgz#560009ea5541b9fdc4ee07ebb1714ee319a76c15"
-
-apollo-utilities@^1.0.8:
   version "1.0.8"
   resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.8.tgz#74d797d38953d2ba35e16f880326e2abcbc8b016"
 
@@ -599,8 +540,8 @@ archiver-utils@^1.3.0:
     readable-stream "^2.0.0"
 
 archiver@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/archiver/-/archiver-2.1.0.tgz#d2df2e8d5773a82c1dcce925ccc41450ea999afd"
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/archiver/-/archiver-2.1.1.tgz#ff662b4a78201494a3ee544d3a33fe7496509ebc"
   dependencies:
     archiver-utils "^1.3.0"
     async "^2.0.0"
@@ -619,8 +560,8 @@ are-we-there-yet@~1.1.2:
     readable-stream "^2.0.6"
 
 argparse@^1.0.7:
-  version "1.0.9"
-  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
   dependencies:
     sprintf-js "~1.0.2"
 
@@ -629,10 +570,11 @@ argsarray@0.0.1:
   resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb"
 
 aria-query@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.0.tgz#4af10a1e61573ddea0cf3b99b51c52c05b424d24"
+  version "0.7.1"
+  resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e"
   dependencies:
     ast-types-flow "0.0.7"
+    commander "^2.11.0"
 
 arr-diff@^2.0.0:
   version "2.0.0"
@@ -683,13 +625,6 @@ array-includes@^3.0.3:
     define-properties "^1.1.2"
     es-abstract "^1.7.0"
 
-array-index@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/array-index/-/array-index-1.0.0.tgz#ec56a749ee103e4e08c790b9c353df16055b97f9"
-  dependencies:
-    debug "^2.2.0"
-    es6-symbol "^3.0.2"
-
 array-iterate@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.1.tgz#865bf7f8af39d6b0982c60902914ac76bc0108f6"
@@ -736,8 +671,8 @@ asap@^2.0.6, asap@~2.0.3:
   resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
 
 asn1.js@^4.0.0:
-  version "4.9.2"
-  resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a"
+  version "4.10.1"
+  resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
   dependencies:
     bn.js "^4.0.0"
     inherits "^2.0.1"
@@ -762,8 +697,8 @@ assert@^1.1.1:
     util "0.10.3"
 
 assertion-error@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c"
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
 
 assign-symbols@^1.0.0:
   version "1.0.0"
@@ -773,14 +708,26 @@ ast-types-flow@0.0.7:
   version "0.0.7"
   resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
 
-ast-types@0.10.1, ast-types@^0.10.1:
+ast-types@0.10.1:
   version "0.10.1"
   resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd"
 
+ast-types@0.8.15:
+  version "0.8.15"
+  resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52"
+
 ast-types@0.9.11:
   version "0.9.11"
   resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.11.tgz#371177bb59232ff5ceaa1d09ee5cad705b1a5aa9"
 
+ast-types@0.9.6:
+  version "0.9.6"
+  resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9"
+
+ast-types@^0.10.1:
+  version "0.10.2"
+  resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.2.tgz#aef76a04fde54634976fc94defaad1a67e2eadb0"
+
 ast-types@^0.7.2:
   version "0.7.8"
   resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.7.8.tgz#902d2e0d60d071bdcd46dc115e1809ed11c138a9"
@@ -840,12 +787,14 @@ atob@~1.1.0:
   resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773"
 
 attempt-x@^1.1.0, attempt-x@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/attempt-x/-/attempt-x-1.1.1.tgz#fba64e96ce03c3e0bd92c92622061c4df387cb76"
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/attempt-x/-/attempt-x-1.1.3.tgz#9ac844c75bca2c4e9e30d8d5c01f41eeb481a8b7"
 
 attr-accept@^1.0.3:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-1.1.0.tgz#b5cd35227f163935a8f1de10ed3eba16941f6be6"
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-1.1.2.tgz#6836bfe054e4ef1ee3076fdde56cec9bb3ffead6"
+  dependencies:
+    core-js "^2.5.0"
 
 authsome@0.0.9, authsome@^0.0.9:
   version "0.0.9"
@@ -863,19 +812,19 @@ autoprefixer@^6.3.1:
     postcss-value-parser "^3.2.3"
 
 autoprefixer@^7.1.2:
-  version "7.2.2"
-  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.2.tgz#082293b964be00602efacc59aa4aa7df5158bb6e"
+  version "7.2.6"
+  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.6.tgz#256672f86f7c735da849c4f07d008abb056067dc"
   dependencies:
-    browserslist "^2.10.0"
-    caniuse-lite "^1.0.30000780"
+    browserslist "^2.11.3"
+    caniuse-lite "^1.0.30000805"
     normalize-range "^0.1.2"
     num2fraction "^1.2.2"
-    postcss "^6.0.14"
+    postcss "^6.0.17"
     postcss-value-parser "^3.2.3"
 
 aws-sdk@^2.185.0:
-  version "2.190.0"
-  resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.190.0.tgz#c7b48b3845345b60795943eb919700cf7edf5734"
+  version "2.205.0"
+  resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.205.0.tgz#1a93730253e2be027a4bd3af9248cbda0573de80"
   dependencies:
     buffer "4.9.1"
     events "^1.1.1"
@@ -926,7 +875,7 @@ babel-cli@^6.26.0:
   optionalDependencies:
     chokidar "^1.6.1"
 
-babel-code-frame@6.26.0, babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
+babel-code-frame@6.26.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
   dependencies:
@@ -959,17 +908,19 @@ babel-core@^6.0.0, babel-core@^6.26.0:
     source-map "^0.5.6"
 
 babel-eslint@^8.0.3:
-  version "8.0.3"
-  resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.3.tgz#f29ecf02336be438195325cd47c468da81ee4e98"
+  version "8.2.2"
+  resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.2.tgz#1102273354c6f0b29b4ea28a65f97d122296b68b"
   dependencies:
-    "@babel/code-frame" "7.0.0-beta.31"
-    "@babel/traverse" "7.0.0-beta.31"
-    "@babel/types" "7.0.0-beta.31"
-    babylon "7.0.0-beta.31"
+    "@babel/code-frame" "^7.0.0-beta.40"
+    "@babel/traverse" "^7.0.0-beta.40"
+    "@babel/types" "^7.0.0-beta.40"
+    babylon "^7.0.0-beta.40"
+    eslint-scope "~3.7.1"
+    eslint-visitor-keys "^1.0.0"
 
 babel-generator@^6.18.0, babel-generator@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
+  version "6.26.1"
+  resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
   dependencies:
     babel-messages "^6.23.0"
     babel-runtime "^6.26.0"
@@ -977,7 +928,7 @@ babel-generator@^6.18.0, babel-generator@^6.26.0:
     detect-indent "^4.0.0"
     jsesc "^1.3.0"
     lodash "^4.17.4"
-    source-map "^0.5.6"
+    source-map "^0.5.7"
     trim-right "^1.0.1"
 
 babel-helper-bindify-decorators@^6.24.1:
@@ -1113,23 +1064,16 @@ babel-jest@^21.2.0:
     babel-plugin-istanbul "^4.0.0"
     babel-preset-jest "^21.2.0"
 
-babel-jest@^22.1.0:
-  version "22.1.0"
-  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.1.0.tgz#7fae6f655fffe77e818a8c2868c754a42463fdfd"
-  dependencies:
-    babel-plugin-istanbul "^4.1.5"
-    babel-preset-jest "^22.1.0"
-
-babel-jest@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.2.0.tgz#2d04087f5d149585e14f641d529551963fc9b4f8"
+babel-jest@^22.4.1:
+  version "22.4.1"
+  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.1.tgz#ff53ebca45957347f27ff4666a31499fbb4c4ddd"
   dependencies:
     babel-plugin-istanbul "^4.1.5"
-    babel-preset-jest "^22.2.0"
+    babel-preset-jest "^22.4.1"
 
 babel-loader@^7.1.2:
-  version "7.1.2"
-  resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126"
+  version "7.1.3"
+  resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.3.tgz#ff5b440da716e9153abb946251a9ab7670037b16"
   dependencies:
     find-cache-dir "^1.0.0"
     loader-utils "^1.0.2"
@@ -1163,13 +1107,9 @@ babel-plugin-jest-hoist@^21.2.0:
   version "21.2.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006"
 
-babel-plugin-jest-hoist@^22.1.0:
-  version "22.1.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.1.0.tgz#c1281dd7887d77a1711dc760468c3b8285dde9ee"
-
-babel-plugin-jest-hoist@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.2.0.tgz#bd34f39d652406669713b8c89e23ef25c890b993"
+babel-plugin-jest-hoist@^22.4.1:
+  version "22.4.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.1.tgz#d712fe5da8b6965f3191dacddbefdbdf4fb66d63"
 
 babel-plugin-syntax-async-functions@^6.8.0:
   version "6.13.0"
@@ -1562,18 +1502,11 @@ babel-preset-jest@^21.2.0:
     babel-plugin-jest-hoist "^21.2.0"
     babel-plugin-syntax-object-rest-spread "^6.13.0"
 
-babel-preset-jest@^22.1.0:
-  version "22.1.0"
-  resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.1.0.tgz#ff4e704102f9642765e2254226050561d8942ec9"
-  dependencies:
-    babel-plugin-jest-hoist "^22.1.0"
-    babel-plugin-syntax-object-rest-spread "^6.13.0"
-
-babel-preset-jest@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.2.0.tgz#f77b43f06ef4d8547214b2e206cc76a25c3ba0e2"
+babel-preset-jest@^22.4.1:
+  version "22.4.1"
+  resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.1.tgz#efa2e5f5334242a9457a068452d7d09735db172a"
   dependencies:
-    babel-plugin-jest-hoist "^22.2.0"
+    babel-plugin-jest-hoist "^22.4.1"
     babel-plugin-syntax-object-rest-spread "^6.13.0"
 
 babel-preset-react@^6.24.1:
@@ -1662,6 +1595,10 @@ babylon@7.0.0-beta.31:
   version "7.0.0-beta.31"
   resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f"
 
+babylon@7.0.0-beta.40, babylon@^7.0.0-beta.40:
+  version "7.0.0-beta.40"
+  resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.40.tgz#91fc8cd56d5eb98b28e6fde41045f2957779940a"
+
 babylon@^6.18.0:
   version "6.18.0"
   resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
@@ -1678,9 +1615,13 @@ balanced-match@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
 
+base62@^1.1.0:
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/base62/-/base62-1.2.7.tgz#5c01aad73c0124f9535cff1bdb9c4e6ccf838cfb"
+
 base64-js@^1.0.2:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801"
 
 base64url@2.0.0, base64url@^2.0.0:
   version "2.0.0"
@@ -1740,9 +1681,9 @@ binary@~0.3.0:
     buffers "~0.1.1"
     chainsaw "~0.1.0"
 
-bindings@~1.2.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11"
+bindings@~1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7"
 
 bl@^1.0.0:
   version "1.2.1"
@@ -1750,12 +1691,6 @@ bl@^1.0.0:
   dependencies:
     readable-stream "^2.0.5"
 
-bl@~1.0.0:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/bl/-/bl-1.0.3.tgz#fc5421a28fd4226036c3b3891a66a25bc64d226e"
-  dependencies:
-    readable-stream "~2.0.5"
-
 block-stream@*:
   version "0.0.9"
   resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
@@ -1827,8 +1762,8 @@ bootstrap-sass@^3.3.7:
   resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.3.7.tgz#6596c7ab40f6637393323ab0bc80d064fc630498"
 
 brace-expansion@^1.0.0, brace-expansion@^1.1.7:
-  version "1.1.8"
-  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
   dependencies:
     balanced-match "^1.0.0"
     concat-map "0.0.1"
@@ -1841,9 +1776,9 @@ braces@^1.8.2:
     preserve "^0.2.0"
     repeat-element "^1.1.2"
 
-braces@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.0.tgz#a46941cb5fb492156b3d6a656e06c35364e3e66e"
+braces@^2.3.0, braces@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb"
   dependencies:
     arr-flatten "^1.1.0"
     array-unique "^0.3.2"
@@ -1851,6 +1786,7 @@ braces@^2.3.0:
     extend-shallow "^2.0.1"
     fill-range "^4.0.0"
     isobject "^3.0.1"
+    kind-of "^6.0.2"
     repeat-element "^1.1.2"
     snapdragon "^0.8.1"
     snapdragon-node "^2.0.1"
@@ -1940,12 +1876,12 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
     caniuse-db "^1.0.30000639"
     electron-to-chromium "^1.2.7"
 
-browserslist@^2.1.2, browserslist@^2.10.0:
-  version "2.10.0"
-  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.10.0.tgz#bac5ee1cc69ca9d96403ffb8a3abdc5b6aed6346"
+browserslist@^2.1.2, browserslist@^2.11.3:
+  version "2.11.3"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2"
   dependencies:
-    caniuse-lite "^1.0.30000780"
-    electron-to-chromium "^1.3.28"
+    caniuse-lite "^1.0.30000792"
+    electron-to-chromium "^1.3.30"
 
 bser@^2.0.0:
   version "2.0.0"
@@ -1953,18 +1889,18 @@ bser@^2.0.0:
   dependencies:
     node-int64 "^0.4.0"
 
-buble@^0.18.0:
-  version "0.18.0"
-  resolved "https://registry.yarnpkg.com/buble/-/buble-0.18.0.tgz#63b338b8248c474b46fd3e3546560ae08d8abe91"
+buble@^0.19.2:
+  version "0.19.3"
+  resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.3.tgz#01e9412062cff1da6f20342b6ecd72e7bf699d02"
   dependencies:
-    acorn "^5.1.2"
-    acorn-jsx "^3.0.1"
-    acorn5-object-spread "^4.0.0"
-    chalk "^2.1.0"
+    acorn "^5.4.1"
+    acorn-dynamic-import "^3.0.0"
+    acorn-jsx "^4.1.1"
+    chalk "^2.3.1"
     magic-string "^0.22.4"
     minimist "^1.2.0"
     os-homedir "^1.0.1"
-    vlq "^0.2.2"
+    vlq "^1.0.0"
 
 buffer-crc32@^0.2.1:
   version "0.2.13"
@@ -2009,8 +1945,8 @@ buffer@4.9.1, buffer@^4.3.0:
     isarray "^1.0.0"
 
 buffer@^5.0.3:
-  version "5.0.8"
-  resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.0.8.tgz#84daa52e7cf2fa8ce4195bc5cf0f7809e0930b24"
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.1.0.tgz#c913e43678c7cb7c8bd16afbcddb6c5505e8f9fe"
   dependencies:
     base64-js "^1.0.2"
     ieee754 "^1.1.4"
@@ -2043,22 +1979,22 @@ bytes@3.0.0:
   resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
 
 cacache@^10.0.0, cacache@^10.0.1:
-  version "10.0.2"
-  resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.2.tgz#105a93a162bbedf3a25da42e1939ed99ffb145f8"
+  version "10.0.4"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460"
   dependencies:
-    bluebird "^3.5.0"
+    bluebird "^3.5.1"
     chownr "^1.0.1"
     glob "^7.1.2"
     graceful-fs "^4.1.11"
     lru-cache "^4.1.1"
-    mississippi "^1.3.0"
+    mississippi "^2.0.0"
     mkdirp "^0.5.1"
     move-concurrently "^1.0.1"
     promise-inflight "^1.0.1"
-    rimraf "^2.6.1"
-    ssri "^5.0.0"
+    rimraf "^2.6.2"
+    ssri "^5.2.4"
     unique-filename "^1.1.0"
-    y18n "^3.2.1"
+    y18n "^4.0.0"
 
 cache-base@^1.0.1:
   version "1.0.1"
@@ -2074,9 +2010,9 @@ cache-base@^1.0.1:
     union-value "^1.0.0"
     unset-value "^1.0.0"
 
-cached-constructors-x@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/cached-constructors-x/-/cached-constructors-x-1.0.0.tgz#c421e3892a4b6f7794434bdcffd1299b330c181b"
+cached-constructors-x@^1.0.0, cached-constructors-x@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/cached-constructors-x/-/cached-constructors-x-1.0.2.tgz#d8a7b79b43fdcf13fd861bb763f38b627b0ccf91"
 
 cachedir@^1.1.0:
   version "1.2.0"
@@ -2112,6 +2048,14 @@ camelcase-keys@^2.0.0:
     camelcase "^2.0.0"
     map-obj "^1.0.0"
 
+camelcase-keys@^4.0.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77"
+  dependencies:
+    camelcase "^4.1.0"
+    map-obj "^2.0.0"
+    quick-lru "^1.0.0"
+
 camelcase@^1.0.2:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
@@ -2142,12 +2086,12 @@ caniuse-api@^1.5.2:
     lodash.uniq "^4.5.0"
 
 caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
-  version "1.0.30000800"
-  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000800.tgz#a86e6bc23bd9a707d5df42f33e64d0495cfda218"
+  version "1.0.30000810"
+  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000810.tgz#bd25830c41efab64339a2e381f49677343c84509"
 
-caniuse-lite@^1.0.30000780:
-  version "1.0.30000782"
-  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000782.tgz#5b82b8c385f25348745c471ca51320afb1b7f254"
+caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805:
+  version "1.0.30000810"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000810.tgz#47585fffce0e9f3593a6feea4673b945424351d9"
 
 capture-stack-trace@^1.0.0:
   version "1.0.0"
@@ -2172,13 +2116,16 @@ center-align@^0.1.1:
     align-text "^0.1.3"
     lazy-cache "^1.0.3"
 
-"chai@>=1.9.2 <4.0.0":
-  version "3.5.0"
-  resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247"
+chai@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c"
   dependencies:
     assertion-error "^1.0.1"
-    deep-eql "^0.1.3"
-    type-detect "^1.0.0"
+    check-error "^1.0.1"
+    deep-eql "^3.0.0"
+    get-func-name "^2.0.0"
+    pathval "^1.0.0"
+    type-detect "^4.0.0"
 
 chain-function@^1.0.0:
   version "1.0.0"
@@ -2200,13 +2147,13 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
     strip-ansi "^3.0.0"
     supports-color "^2.0.0"
 
-chalk@2.3.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
+chalk@2.3.1, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.1.tgz#523fe2678aec7b04e8041909292fe8b17059b796"
   dependencies:
-    ansi-styles "^3.1.0"
+    ansi-styles "^3.2.0"
     escape-string-regexp "^1.0.5"
-    supports-color "^4.0.0"
+    supports-color "^5.2.0"
 
 change-emitter@^0.1.2:
   version "0.1.6"
@@ -2232,6 +2179,10 @@ chardet@^0.4.0:
   version "0.4.2"
   resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
 
+check-error@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
+
 cheerio@^0.22.0:
   version "0.22.0"
   resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e"
@@ -2264,7 +2215,7 @@ cheerio@^1.0.0-rc.2:
     lodash "^4.15.0"
     parse5 "^3.0.1"
 
-chokidar@^1.0.1, chokidar@^1.6.1, chokidar@^1.7.0:
+chokidar@^1.0.1, chokidar@^1.6.1:
   version "1.7.0"
   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
   dependencies:
@@ -2279,9 +2230,9 @@ chokidar@^1.0.1, chokidar@^1.6.1, chokidar@^1.7.0:
   optionalDependencies:
     fsevents "^1.0.0"
 
-chokidar@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.0.tgz#6686313c541d3274b2a5c01233342037948c911b"
+chokidar@^2.0.0, chokidar@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.2.tgz#4dc65139eeb2714977735b6a35d06e97b494dfd7"
   dependencies:
     anymatch "^2.0.0"
     async-each "^1.0.0"
@@ -2293,6 +2244,7 @@ chokidar@^2.0.0:
     normalize-path "^2.1.1"
     path-is-absolute "^1.0.0"
     readdirp "^2.0.0"
+    upath "^1.0.0"
   optionalDependencies:
     fsevents "^1.0.0"
 
@@ -2330,7 +2282,7 @@ class-utils@^0.3.5:
     isobject "^3.0.0"
     static-extend "^0.1.1"
 
-classnames@^2.2.4, classnames@^2.2.5:
+classnames@^2.2.5:
   version "2.2.5"
   resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
 
@@ -2362,7 +2314,7 @@ cli-spinners@^0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c"
 
-cli-spinners@^1.0.0:
+cli-spinners@^1.0.1:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.1.0.tgz#f1847b168844d917a671eb9d147e3df497c90d06"
 
@@ -2396,8 +2348,8 @@ cliff@0.1.9:
     winston "0.8.x"
 
 clipboard-copy@^1.2.0:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/clipboard-copy/-/clipboard-copy-1.2.1.tgz#d9a816f1ba0577a22fb36640b14b0e403756f334"
+  version "1.4.2"
+  resolved "https://registry.yarnpkg.com/clipboard-copy/-/clipboard-copy-1.4.2.tgz#620cb6a9347d4f92447649db5a9b00edfcbb2cae"
 
 cliui@^2.1.0:
   version "2.1.0"
@@ -2469,8 +2421,8 @@ code-point-at@^1.0.0:
   resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
 
 codemirror@^5.32.0:
-  version "5.34.0"
-  resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.34.0.tgz#e345dcc09a6149db65cc70dff9d389c1c4b0cd06"
+  version "5.35.0"
+  resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.35.0.tgz#280653d495455bc66aa87e6284292b02775ba878"
 
 "cokourier-prime-sans@git+https://gitlab.coko.foundation/julientaq/cokourier-sans-prime.git":
   version "0.0.1"
@@ -2544,9 +2496,9 @@ columnify@^1.5.4:
     strip-ansi "^3.0.0"
     wcwidth "^1.0.0"
 
-combined-stream@^1.0.5, combined-stream@~1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
   dependencies:
     delayed-stream "~1.0.0"
 
@@ -2554,18 +2506,18 @@ command-join@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/command-join/-/command-join-2.0.0.tgz#52e8b984f4872d952ff1bdc8b98397d27c7144cf"
 
-commander@2.12.x, commander@^2.11.0, commander@~2.12.1:
-  version "2.12.2"
-  resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555"
-
-commander@^2.9.0, commander@~2.13.0:
-  version "2.13.0"
-  resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
+commander@2.14.x, commander@^2.11.0, commander@^2.5.0, commander@^2.9.0, commander@~2.14.1:
+  version "2.14.1"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa"
 
 commander@~2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781"
 
+commander@~2.12.1:
+  version "2.12.2"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555"
+
 commitizen@^2.9.6:
   version "2.9.6"
   resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-2.9.6.tgz#c0d00535ef264da7f63737edfda4228983fa2291"
@@ -2600,6 +2552,20 @@ commondir@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
 
+commoner@^0.10.1:
+  version "0.10.8"
+  resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5"
+  dependencies:
+    commander "^2.5.0"
+    detective "^4.3.1"
+    glob "^5.0.15"
+    graceful-fs "^4.1.2"
+    iconv-lite "^0.4.5"
+    mkdirp "^0.5.0"
+    private "^0.1.6"
+    q "^1.1.2"
+    recast "^0.11.17"
+
 compare-func@^1.3.1:
   version "1.3.2"
   resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648"
@@ -2620,19 +2586,19 @@ compress-commons@^1.2.0:
     normalize-path "^2.0.0"
     readable-stream "^2.0.0"
 
-compressible@~2.0.11:
-  version "2.0.12"
-  resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66"
+compressible@~2.0.13:
+  version "2.0.13"
+  resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9"
   dependencies:
-    mime-db ">= 1.30.0 < 2"
+    mime-db ">= 1.33.0 < 2"
 
 compression@^1.5.2:
-  version "1.7.1"
-  resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.1.tgz#eff2603efc2e22cf86f35d2eb93589f9875373db"
+  version "1.7.2"
+  resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69"
   dependencies:
     accepts "~1.3.4"
     bytes "3.0.0"
-    compressible "~2.0.11"
+    compressible "~2.0.13"
     debug "2.6.9"
     on-headers "~1.0.1"
     safe-buffer "5.1.1"
@@ -2643,16 +2609,16 @@ concat-map@0.0.1:
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
 
 concat-stream@^1.4.10, concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@^1.6.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.1.tgz#261b8f518301f1d834e36342b9fea095d2620a26"
   dependencies:
     inherits "^2.0.3"
     readable-stream "^2.2.2"
     typedarray "^0.0.6"
 
 config@^1.21.0, config@^1.26.1, config@^1.26.2, config@^1.28.1:
-  version "1.28.1"
-  resolved "https://registry.yarnpkg.com/config/-/config-1.28.1.tgz#7625d2a1e4c90f131d8a73347982d93c3873282d"
+  version "1.30.0"
+  resolved "https://registry.yarnpkg.com/config/-/config-1.30.0.tgz#1d60a9f35348a13c175798d384e81a5a16c3ba6e"
   dependencies:
     json5 "0.4.0"
     os-homedir "1.0.2"
@@ -2683,11 +2649,9 @@ content-disposition@0.5.2:
   version "0.5.2"
   resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
 
-content-security-policy-builder@1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-1.1.0.tgz#d91f1b076236c119850c7dee9924bf55e05772b3"
-  dependencies:
-    dashify "^0.2.0"
+content-security-policy-builder@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz#8749a1d542fcbe82237281ea9f716ce68b394dd2"
 
 content-type-parser@^1.0.2:
   version "1.0.2"
@@ -2697,77 +2661,70 @@ content-type@~1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
 
-conventional-changelog-angular@^1.3.3:
-  version "1.6.1"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.1.tgz#e1434d017c854032b272f690424a8c0ca16dc318"
+conventional-changelog-angular@^1.3.3, conventional-changelog-angular@^1.6.6:
+  version "1.6.6"
+  resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f"
   dependencies:
     compare-func "^1.3.1"
-    q "^1.4.1"
+    q "^1.5.1"
 
-conventional-changelog-angular@^1.5.2:
-  version "1.5.3"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.5.3.tgz#ff0dd01d740e35bfdbc3f02dfea13cf0d96f0b82"
+conventional-changelog-atom@^0.2.4:
+  version "0.2.4"
+  resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-0.2.4.tgz#4917759947f4db86073f9d3838a2d54302d5843d"
   dependencies:
-    compare-func "^1.3.1"
-    q "^1.4.1"
-
-conventional-changelog-atom@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-0.1.2.tgz#12595ad5267a6937c34cf900281b1c65198a4c63"
-  dependencies:
-    q "^1.4.1"
+    q "^1.5.1"
 
-conventional-changelog-cli@^1.3.2:
-  version "1.3.5"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-cli/-/conventional-changelog-cli-1.3.5.tgz#46c51496216b7406588883defa6fac589e9bb31e"
+conventional-changelog-cli@^1.3.13:
+  version "1.3.15"
+  resolved "https://registry.yarnpkg.com/conventional-changelog-cli/-/conventional-changelog-cli-1.3.15.tgz#cd7f0e64473f1cecee902ee5ee00548ea91bcc9e"
   dependencies:
     add-stream "^1.0.0"
-    conventional-changelog "^1.1.7"
-    lodash "^4.1.0"
-    meow "^3.7.0"
+    conventional-changelog "^1.1.17"
+    lodash "^4.2.1"
+    meow "^4.0.0"
     tempfile "^1.1.1"
 
-conventional-changelog-codemirror@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.2.1.tgz#299a4f7147baf350e6c8158fc54954a291c5cc09"
+conventional-changelog-codemirror@^0.3.4:
+  version "0.3.4"
+  resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.4.tgz#debc43991d487d7964e65087fbbe034044bd51fb"
   dependencies:
-    q "^1.4.1"
+    q "^1.5.1"
 
-conventional-changelog-core@^1.9.3:
-  version "1.9.4"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-1.9.4.tgz#a541e5354f91072f8583b19e34abb9f6e461c367"
+conventional-changelog-core@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-2.0.5.tgz#45b6347c4c6512e1f163f7ff55c9f5bcb88fd990"
   dependencies:
-    conventional-changelog-writer "^2.0.3"
-    conventional-commits-parser "^2.1.0"
-    dateformat "^1.0.12"
+    conventional-changelog-writer "^3.0.4"
+    conventional-commits-parser "^2.1.5"
+    dateformat "^3.0.0"
     get-pkg-repo "^1.0.0"
-    git-raw-commits "^1.3.0"
+    git-raw-commits "^1.3.4"
     git-remote-origin-url "^2.0.0"
-    git-semver-tags "^1.2.3"
-    lodash "^4.0.0"
+    git-semver-tags "^1.3.4"
+    lodash "^4.2.1"
     normalize-package-data "^2.3.5"
-    q "^1.4.1"
+    q "^1.5.1"
     read-pkg "^1.1.0"
     read-pkg-up "^1.0.1"
     through2 "^2.0.0"
 
-conventional-changelog-ember@^0.2.9:
-  version "0.2.10"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-0.2.10.tgz#dcd6e4cdc2e6c2b58653cf4d2cb1656a60421929"
+conventional-changelog-ember@^0.3.6:
+  version "0.3.6"
+  resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-0.3.6.tgz#f3825d7434168f3d9211b5532dc1d5769532b668"
   dependencies:
-    q "^1.4.1"
+    q "^1.5.1"
 
-conventional-changelog-eslint@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-0.2.1.tgz#2c2a11beb216f80649ba72834180293b687c0662"
+conventional-changelog-eslint@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.4.tgz#333456d1884d96f3a49cc0984a745095e9d56288"
   dependencies:
-    q "^1.4.1"
+    q "^1.5.1"
 
-conventional-changelog-express@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-0.2.1.tgz#838d9e1e6c9099703b150b9c19aa2d781742bd6c"
+conventional-changelog-express@^0.3.4:
+  version "0.3.4"
+  resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-0.3.4.tgz#812a9cf778677e12f978ac9c40d85297c0bfcca9"
   dependencies:
-    q "^1.4.1"
+    q "^1.5.1"
 
 conventional-changelog-jquery@^0.1.0:
   version "0.1.0"
@@ -2781,75 +2738,80 @@ conventional-changelog-jscs@^0.1.0:
   dependencies:
     q "^1.4.1"
 
-conventional-changelog-jshint@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-0.2.1.tgz#86139bb3ac99899f2b177e9617e09b37d99bcf3a"
+conventional-changelog-jshint@^0.3.4:
+  version "0.3.4"
+  resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.4.tgz#b2de33cd0870d9af804ac6a4fded0ee25b69c9bb"
   dependencies:
     compare-func "^1.3.1"
-    q "^1.4.1"
+    q "^1.5.1"
 
-conventional-changelog-writer@^2.0.3:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-2.0.3.tgz#073b0c39f1cc8fc0fd9b1566e93833f51489c81c"
+conventional-changelog-preset-loader@^1.1.6:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.6.tgz#b29af6332f9313857be36427623c9016bfeeaf33"
+
+conventional-changelog-writer@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-3.0.4.tgz#705b46a8b8277bd7fd79cad8032095b5d803864c"
   dependencies:
     compare-func "^1.3.1"
-    conventional-commits-filter "^1.1.1"
-    dateformat "^1.0.11"
+    conventional-commits-filter "^1.1.5"
+    dateformat "^3.0.0"
     handlebars "^4.0.2"
     json-stringify-safe "^5.0.1"
-    lodash "^4.0.0"
-    meow "^3.3.0"
-    semver "^5.0.1"
+    lodash "^4.2.1"
+    meow "^4.0.0"
+    semver "^5.5.0"
     split "^1.0.0"
     through2 "^2.0.0"
 
-conventional-changelog@^1.1.7:
-  version "1.1.7"
-  resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-1.1.7.tgz#9151a62b1d8edb2d82711dabf5b7cf71041f82b1"
-  dependencies:
-    conventional-changelog-angular "^1.5.2"
-    conventional-changelog-atom "^0.1.2"
-    conventional-changelog-codemirror "^0.2.1"
-    conventional-changelog-core "^1.9.3"
-    conventional-changelog-ember "^0.2.9"
-    conventional-changelog-eslint "^0.2.1"
-    conventional-changelog-express "^0.2.1"
+conventional-changelog@^1.1.17:
+  version "1.1.17"
+  resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-1.1.17.tgz#9019503d51328d8b33b0be6d425ab7f065918332"
+  dependencies:
+    conventional-changelog-angular "^1.6.6"
+    conventional-changelog-atom "^0.2.4"
+    conventional-changelog-codemirror "^0.3.4"
+    conventional-changelog-core "^2.0.5"
+    conventional-changelog-ember "^0.3.6"
+    conventional-changelog-eslint "^1.0.4"
+    conventional-changelog-express "^0.3.4"
     conventional-changelog-jquery "^0.1.0"
     conventional-changelog-jscs "^0.1.0"
-    conventional-changelog-jshint "^0.2.1"
+    conventional-changelog-jshint "^0.3.4"
+    conventional-changelog-preset-loader "^1.1.6"
 
 conventional-commit-types@^2.0.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-2.2.0.tgz#5db95739d6c212acbe7b6f656a11b940baa68946"
 
-conventional-commits-filter@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.1.1.tgz#72172319c0c88328a015b30686b55527b3a5e54a"
+conventional-commits-filter@^1.1.1, conventional-commits-filter@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.1.5.tgz#77aac065e3de9c1a74b801e8e25c9affb3184f65"
   dependencies:
     is-subset "^0.1.1"
     modify-values "^1.0.0"
 
-conventional-commits-parser@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.0.tgz#9b4b7c91124bf2a1a9a2cc1c72760d382cbbb229"
+conventional-commits-parser@^2.1.0, conventional-commits-parser@^2.1.1, conventional-commits-parser@^2.1.5:
+  version "2.1.5"
+  resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.5.tgz#9ac3a4ab221c0c3c9e9dd2c09ae01e6d1e1dabe0"
   dependencies:
     JSONStream "^1.0.4"
     is-text-path "^1.0.0"
     lodash "^4.2.1"
-    meow "^3.3.0"
+    meow "^4.0.0"
     split2 "^2.0.0"
     through2 "^2.0.0"
     trim-off-newlines "^1.0.0"
 
-conventional-recommended-bump@^1.0.1:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-1.1.0.tgz#964d4fcc70fb5259d41fa9b39d3df6afdb87d253"
+conventional-recommended-bump@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz#1b7137efb5091f99fe009e2fe9ddb7cc490e9375"
   dependencies:
     concat-stream "^1.4.10"
     conventional-commits-filter "^1.1.1"
-    conventional-commits-parser "^2.1.0"
+    conventional-commits-parser "^2.1.1"
     git-raw-commits "^1.3.0"
-    git-semver-tags "^1.2.3"
+    git-semver-tags "^1.3.0"
     meow "^3.3.0"
     object-assign "^4.0.1"
 
@@ -2892,18 +2854,16 @@ copy-descriptor@^0.1.0:
   resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
 
 copy-webpack-plugin@^4.3.0:
-  version "4.3.1"
-  resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.3.1.tgz#19ba6370bf6f8e263cbd66185a2b79f2321a9302"
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.5.0.tgz#9cb012163317666ea47479d2a8c57daca3557da5"
   dependencies:
     cacache "^10.0.1"
     find-cache-dir "^1.0.0"
     globby "^7.1.1"
     is-glob "^4.0.0"
-    loader-utils "^0.2.15"
-    lodash "^4.3.0"
+    loader-utils "^1.1.0"
     minimatch "^3.0.4"
     p-limit "^1.0.0"
-    pify "^3.0.0"
     serialize-javascript "^1.4.0"
 
 core-js@^1.0.0:
@@ -2980,14 +2940,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
     safe-buffer "^5.0.1"
     sha.js "^2.4.8"
 
-create-react-class@^15.6.0:
-  version "15.6.3"
-  resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
-  dependencies:
-    fbjs "^0.8.9"
-    loose-envify "^1.3.1"
-    object-assign "^4.1.1"
-
 cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
@@ -3047,28 +2999,9 @@ css-initials@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/css-initials/-/css-initials-0.2.0.tgz#14c225bd8656255a6baee07231ef82fa55aacaa3"
 
-css-loader@^0.28.4:
-  version "0.28.7"
-  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b"
-  dependencies:
-    babel-code-frame "^6.11.0"
-    css-selector-tokenizer "^0.7.0"
-    cssnano ">=2.6.1 <4"
-    icss-utils "^2.1.0"
-    loader-utils "^1.0.2"
-    lodash.camelcase "^4.3.0"
-    object-assign "^4.0.1"
-    postcss "^5.0.6"
-    postcss-modules-extract-imports "^1.0.0"
-    postcss-modules-local-by-default "^1.0.1"
-    postcss-modules-scope "^1.0.0"
-    postcss-modules-values "^1.1.0"
-    postcss-value-parser "^3.3.0"
-    source-list-map "^2.0.0"
-
-css-loader@^0.28.7:
-  version "0.28.9"
-  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.9.tgz#68064b85f4e271d7ce4c48a58300928e535d1c95"
+css-loader@^0.28.4, css-loader@^0.28.7:
+  version "0.28.10"
+  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.10.tgz#40282e79230f7bcb4e483efa631d670b735ebf42"
   dependencies:
     babel-code-frame "^6.26.0"
     css-selector-tokenizer "^0.7.0"
@@ -3103,8 +3036,8 @@ css-selector-tokenizer@^0.7.0:
     regexpu-core "^1.0.0"
 
 css-to-react-native@^2.0.3:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.0.4.tgz#cf4cc407558b3474d4ba8be1a2cd3b6ce713101b"
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.1.2.tgz#c06d628467ef961c85ec358a90f3c87469fb0095"
   dependencies:
     css-color-keywords "^1.0.0"
     fbjs "^0.8.5"
@@ -3127,7 +3060,7 @@ cssesc@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
 
-"cssnano@>=2.6.1 <4", cssnano@^3.10.0:
+cssnano@^3.10.0:
   version "3.10.0"
   resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
   dependencies:
@@ -3246,10 +3179,6 @@ dasherize@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/dasherize/-/dasherize-2.0.0.tgz#6d809c9cd0cf7bb8952d80fc84fa13d47ddb1308"
 
-dashify@^0.2.0:
-  version "0.2.2"
-  resolved "https://registry.yarnpkg.com/dashify/-/dashify-0.2.2.tgz#6a07415a01c91faf4a32e38d9dfba71f61cb20fe"
-
 date-fns@^1.27.2:
   version "1.29.0"
   resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6"
@@ -3258,36 +3187,34 @@ date-now@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
 
-dateformat@^1.0.11, dateformat@^1.0.12:
-  version "1.0.12"
-  resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
-  dependencies:
-    get-stdin "^4.0.1"
-    meow "^3.3.0"
+dateformat@^3.0.0:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
 
 debug-log@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f"
 
-debug@2, debug@2.6.9, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8:
+debug@2, debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
   dependencies:
     ms "2.0.0"
 
-debug@2.6.4:
-  version "2.6.4"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0"
-  dependencies:
-    ms "0.7.3"
-
-debug@^3.0.0, debug@^3.0.1, debug@^3.1.0:
+debug@3.1.0, debug@^3.0.0, debug@^3.0.1, debug@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
   dependencies:
     ms "2.0.0"
 
-decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
+decamelize-keys@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
+  dependencies:
+    decamelize "^1.1.0"
+    map-obj "^1.0.0"
+
+decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
 
@@ -3295,6 +3222,12 @@ decode-uri-component@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
 
+decompress-response@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
+  dependencies:
+    mimic-response "^1.0.0"
+
 dedent@0.6.0:
   version "0.6.0"
   resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.6.0.tgz#0e6da8f0ce52838ef5cec5c8f9396b0c1b64a3cb"
@@ -3307,11 +3240,11 @@ deep-diff@^0.3.5:
   version "0.3.8"
   resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84"
 
-deep-eql@^0.1.3:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
+deep-eql@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
   dependencies:
-    type-detect "0.1.1"
+    type-detect "^4.0.0"
 
 deep-equal@*, deep-equal@^1.0.0, deep-equal@^1.0.1:
   version "1.0.1"
@@ -3341,11 +3274,17 @@ defaults@^1.0.3:
   dependencies:
     clone "^1.0.2"
 
-deferred-leveldown@~1.2.1:
-  version "1.2.2"
-  resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb"
+deferred-leveldown@~2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-2.0.3.tgz#91fbc7699ac85f3920df035792d96d97cbf50c0f"
+  dependencies:
+    abstract-leveldown "~3.0.0"
+
+deferred-leveldown@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-3.0.0.tgz#bff7241bf156aa3635f520bedf34330c408d3307"
   dependencies:
-    abstract-leveldown "~2.6.0"
+    abstract-leveldown "~4.0.0"
 
 define-properties@^1.1.2:
   version "1.1.2"
@@ -3366,6 +3305,13 @@ define-property@^1.0.0:
   dependencies:
     is-descriptor "^1.0.0"
 
+define-property@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+  dependencies:
+    is-descriptor "^1.0.2"
+    isobject "^3.0.1"
+
 defined@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
@@ -3451,7 +3397,7 @@ detect-indent@^5.0.0:
   version "5.0.0"
   resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d"
 
-detect-libc@^1.0.2:
+detect-libc@^1.0.2, detect-libc@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
 
@@ -3470,6 +3416,13 @@ detect-port-alt@1.1.3:
     address "^1.0.1"
     debug "^2.6.0"
 
+detective@^4.3.1:
+  version "4.7.1"
+  resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e"
+  dependencies:
+    acorn "^5.2.1"
+    defined "^1.0.0"
+
 dicer@0.2.5:
   version "0.2.5"
   resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f"
@@ -3545,18 +3498,12 @@ doctrine@1.5.0, doctrine@^1.2.2:
     esutils "^2.0.2"
     isarray "^1.0.0"
 
-doctrine@^2.0.0:
+doctrine@^2.0.0, doctrine@^2.0.2, doctrine@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
   dependencies:
     esutils "^2.0.2"
 
-doctrine@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075"
-  dependencies:
-    esutils "^2.0.2"
-
 dom-converter@~0.1:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b"
@@ -3564,8 +3511,8 @@ dom-converter@~0.1:
     utila "~0.3"
 
 dom-helpers@^3.2.0, dom-helpers@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.2.1.tgz#3203e07fed217bd1f424b019735582fc37b2825a"
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6"
 
 dom-serializer@0, dom-serializer@~0.1.0:
   version "0.1.0"
@@ -3579,8 +3526,8 @@ dom-walk@^0.1.0:
   resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
 
 domain-browser@^1.1.1:
-  version "1.1.7"
-  resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
 
 domelementtype@1, domelementtype@^1.3.0:
   version "1.3.0"
@@ -3622,8 +3569,8 @@ domutils@1.5.1:
     domelementtype "1"
 
 domutils@^1.5.1:
-  version "1.6.2"
-  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff"
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
   dependencies:
     dom-serializer "0"
     domelementtype "1"
@@ -3660,19 +3607,13 @@ draft-convert@^1.4.8:
     invariant "^2.2.1"
 
 draft-js@^0.10.0:
-  version "0.10.4"
-  resolved "https://registry.yarnpkg.com/draft-js/-/draft-js-0.10.4.tgz#147741642097c8120d8edc232e9503e8b7fb8d35"
+  version "0.10.5"
+  resolved "https://registry.yarnpkg.com/draft-js/-/draft-js-0.10.5.tgz#bfa9beb018fe0533dbb08d6675c371a6b08fa742"
   dependencies:
     fbjs "^0.8.15"
     immutable "~3.7.4"
     object-assign "^4.1.0"
 
-duplexer2@~0.0.2:
-  version "0.0.2"
-  resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
-  dependencies:
-    readable-stream "~1.1.9"
-
 duplexer2@~0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
@@ -3713,13 +3654,9 @@ ee-first@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
 
-electron-to-chromium@^1.2.7:
-  version "1.3.31"
-  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.31.tgz#00d832cba9fe2358652b0c48a8816c8e3a037e9f"
-
-electron-to-chromium@^1.3.28:
-  version "1.3.28"
-  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz#8dd4e6458086644e9f9f0a1cf32e2a1f9dffd9ee"
+electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30:
+  version "1.3.34"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz#d93498f40391bb0c16a603d8241b9951404157ed"
 
 elegant-spinner@^1.0.1:
   version "1.0.1"
@@ -3753,6 +3690,14 @@ encodeurl@~1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
 
+encoding-down@~4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-4.0.0.tgz#f71c8addc51f0ed186784e79b8ac75cfaa44119f"
+  dependencies:
+    abstract-leveldown "^4.0.0"
+    level-codec "^8.0.0"
+    level-errors "^1.0.4"
+
 encoding@^0.1.11:
   version "0.1.12"
   resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
@@ -3806,15 +3751,7 @@ enzyme-adapter-react-16@^1.1.1:
     react-reconciler "^0.7.0"
     react-test-renderer "^16.0.0-0"
 
-enzyme-adapter-utils@^1.1.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.2.0.tgz#7f4471ee0a70b91169ec8860d2bf0a6b551664b2"
-  dependencies:
-    lodash "^4.17.4"
-    object.assign "^4.0.4"
-    prop-types "^15.5.10"
-
-enzyme-adapter-utils@^1.3.0:
+enzyme-adapter-utils@^1.1.0, enzyme-adapter-utils@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz#d6c85756826c257a8544d362cc7a67e97ea698c7"
   dependencies:
@@ -3843,15 +3780,9 @@ enzyme@^3.2.0, enzyme@^3.3.0:
     raf "^3.4.0"
     rst-selector-parser "^2.2.3"
 
-errno@^0.1.3, errno@^0.1.4:
-  version "0.1.6"
-  resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026"
-  dependencies:
-    prr "~1.0.1"
-
-errno@~0.1.1:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.5.tgz#a563781a6052bc2c9ccd89e8cef0eb9506e0c321"
+errno@^0.1.3, errno@~0.1.1, errno@~0.1.7:
+  version "0.1.7"
+  resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
   dependencies:
     prr "~1.0.1"
 
@@ -3879,18 +3810,26 @@ es-to-primitive@^1.1.1:
     is-date-object "^1.0.1"
     is-symbol "^1.0.1"
 
+es3ify@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/es3ify/-/es3ify-0.2.2.tgz#5dae3e650e5be3684b88066513d528d092629862"
+  dependencies:
+    esprima "^2.7.1"
+    jstransform "~11.0.0"
+    through "~2.3.4"
+
 es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
-  version "0.10.37"
-  resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.37.tgz#0ee741d148b80069ba27d020393756af257defc3"
+  version "0.10.39"
+  resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.39.tgz#fca21b67559277ca4ac1a1ed7048b107b6f76d87"
   dependencies:
-    es6-iterator "~2.0.1"
+    es6-iterator "~2.0.3"
     es6-symbol "~3.1.1"
 
-es6-error@^4.0.0:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.0.2.tgz#eec5c726eacef51b7f6b73c20db6e1b13b069c98"
+es6-error@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
 
-es6-iterator@^2.0.1, es6-iterator@~2.0.1:
+es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
   dependencies:
@@ -3927,7 +3866,7 @@ es6-set@~0.1.5:
     es6-symbol "3.1.1"
     event-emitter "~0.3.5"
 
-es6-symbol@3.1.1, es6-symbol@^3.0.2, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
+es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
   dependencies:
@@ -3952,15 +3891,15 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1
   resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
 
 escodegen@^1.9.0:
-  version "1.9.0"
-  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852"
+  version "1.9.1"
+  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2"
   dependencies:
     esprima "^3.1.3"
     estraverse "^4.2.0"
     esutils "^2.0.2"
     optionator "^0.8.1"
   optionalDependencies:
-    source-map "~0.5.6"
+    source-map "~0.6.1"
 
 escope@^3.6.0:
   version "3.6.0"
@@ -4021,11 +3960,11 @@ eslint-import-resolver-node@^0.2.0:
     resolve "^1.1.6"
 
 eslint-import-resolver-node@^0.3.1:
-  version "0.3.1"
-  resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc"
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
   dependencies:
-    debug "^2.6.8"
-    resolve "^1.2.0"
+    debug "^2.6.9"
+    resolve "^1.5.0"
 
 eslint-module-utils@^2.0.0, eslint-module-utils@^2.1.1:
   version "2.1.1"
@@ -4035,8 +3974,8 @@ eslint-module-utils@^2.0.0, eslint-module-utils@^2.1.1:
     pkg-dir "^1.0.0"
 
 eslint-plugin-import@^2.8.0:
-  version "2.8.0"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894"
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz#26002efbfca5989b7288ac047508bd24f217b169"
   dependencies:
     builtin-modules "^1.1.1"
     contains-path "^0.1.0"
@@ -4045,7 +3984,7 @@ eslint-plugin-import@^2.8.0:
     eslint-import-resolver-node "^0.3.1"
     eslint-module-utils "^2.1.1"
     has "^1.0.1"
-    lodash.cond "^4.3.0"
+    lodash "^4.17.4"
     minimatch "^3.0.3"
     read-pkg-up "^2.0.0"
 
@@ -4065,12 +4004,12 @@ eslint-plugin-import@~2.2.0:
     pkg-up "^1.0.0"
 
 eslint-plugin-jest@^21.4.2:
-  version "21.4.2"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-21.4.2.tgz#0e8ec03687259169cef46656827a0a0715e8a8d4"
+  version "21.12.2"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-21.12.2.tgz#325f7c6a5078aed51ea087c33c26792337b5ba37"
 
 eslint-plugin-jsx-a11y@^6.0.2:
-  version "6.0.2"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.2.tgz#659277a758b036c305a7e4a13057c301cd3be73f"
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz#54583d1ae442483162e040e13cc31865465100e5"
   dependencies:
     aria-query "^0.7.0"
     array-includes "^3.0.3"
@@ -4078,7 +4017,7 @@ eslint-plugin-jsx-a11y@^6.0.2:
     axobject-query "^0.1.0"
     damerau-levenshtein "^1.0.0"
     emoji-regex "^6.1.0"
-    jsx-ast-utils "^1.4.0"
+    jsx-ast-utils "^2.0.0"
 
 eslint-plugin-node@^5.2.1:
   version "5.2.1"
@@ -4100,8 +4039,8 @@ eslint-plugin-node@~4.2.2:
     semver "5.3.0"
 
 eslint-plugin-prettier@^2.3.1:
-  version "2.3.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.3.1.tgz#e7a746c67e716f335274b88295a9ead9f544e44d"
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz#33e4e228bdb06142d03c560ce04ec23f6c767dd7"
   dependencies:
     fast-diff "^1.1.1"
     jest-docblock "^21.0.0"
@@ -4115,12 +4054,12 @@ eslint-plugin-promise@~3.5.0:
   resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca"
 
 eslint-plugin-react@^7.4.0:
-  version "7.5.1"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz#52e56e8d80c810de158859ef07b880d2f56ee30b"
+  version "7.7.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz#f606c719dbd8a1a2b3d25c16299813878cca0160"
   dependencies:
-    doctrine "^2.0.0"
+    doctrine "^2.0.2"
     has "^1.0.1"
-    jsx-ast-utils "^2.0.0"
+    jsx-ast-utils "^2.0.1"
     prop-types "^15.6.0"
 
 eslint-plugin-react@~6.10.0:
@@ -4141,28 +4080,32 @@ eslint-restricted-globals@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7"
 
-eslint-scope@^3.7.1:
+eslint-scope@^3.7.1, eslint-scope@~3.7.1:
   version "3.7.1"
   resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
   dependencies:
     esrecurse "^4.1.0"
     estraverse "^4.1.1"
 
+eslint-visitor-keys@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
+
 eslint@^4.13.1:
-  version "4.13.1"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.13.1.tgz#0055e0014464c7eb7878caf549ef2941992b444f"
+  version "4.18.1"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.1.tgz#b9138440cb1e98b2f44a0d578c6ecf8eae6150b0"
   dependencies:
     ajv "^5.3.0"
     babel-code-frame "^6.22.0"
     chalk "^2.1.0"
     concat-stream "^1.6.0"
     cross-spawn "^5.1.0"
-    debug "^3.0.1"
-    doctrine "^2.0.2"
+    debug "^3.1.0"
+    doctrine "^2.1.0"
     eslint-scope "^3.7.1"
+    eslint-visitor-keys "^1.0.0"
     espree "^3.5.2"
     esquery "^1.0.0"
-    estraverse "^4.2.0"
     esutils "^2.0.2"
     file-entry-cache "^2.0.0"
     functional-red-black-tree "^1.0.1"
@@ -4230,18 +4173,30 @@ eslint@~3.19.0:
     text-table "~0.2.0"
     user-home "^2.0.0"
 
+esmangle-evaluator@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz#620d866ef4861b3311f75766d52a8572bb3c6336"
+
 espree@^3.4.0, espree@^3.5.2:
-  version "3.5.2"
-  resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca"
+  version "3.5.3"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6"
   dependencies:
-    acorn "^5.2.1"
+    acorn "^5.4.0"
     acorn-jsx "^3.0.0"
 
-esprima@^2.1.0, esprima@^2.6.0:
+esprima-fb@^15001.1.0-dev-harmony-fb:
+  version "15001.1.0-dev-harmony-fb"
+  resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901"
+
+esprima-fb@~15001.1001.0-dev-harmony-fb:
+  version "15001.1001.0-dev-harmony-fb"
+  resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659"
+
+esprima@^2.1.0, esprima@^2.6.0, esprima@^2.7.1:
   version "2.7.3"
   resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
 
-esprima@^3.1.3:
+esprima@^3.1.3, esprima@~3.1.0:
   version "3.1.3"
   resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
 
@@ -4256,11 +4211,10 @@ esquery@^1.0.0:
     estraverse "^4.0.0"
 
 esrecurse@^4.1.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
   dependencies:
     estraverse "^4.1.0"
-    object-assign "^4.0.1"
 
 estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
   version "4.2.0"
@@ -4362,12 +4316,6 @@ execall@^1.0.0:
   dependencies:
     clone-regexp "^1.0.0"
 
-execspawn@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/execspawn/-/execspawn-1.0.1.tgz#8286f9dde7cecde7905fbdc04e24f368f23f8da6"
-  dependencies:
-    util-extend "^1.0.1"
-
 exit-hook@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
@@ -4400,7 +4348,7 @@ expand-range@^1.8.1:
   dependencies:
     fill-range "^2.1.0"
 
-expand-template@^1.0.0:
+expand-template@^1.0.2:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.0.tgz#e09efba977bf98f9ee0ed25abd0c692e02aec3fc"
 
@@ -4420,26 +4368,15 @@ expect-ct@0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/expect-ct/-/expect-ct-0.1.0.tgz#52735678de18530890d8d7b95f0ac63640958094"
 
-expect@^22.1.0:
-  version "22.1.0"
-  resolved "https://registry.yarnpkg.com/expect/-/expect-22.1.0.tgz#f8f9b019ab275d859cbefed531fbaefe8972431d"
-  dependencies:
-    ansi-styles "^3.2.0"
-    jest-diff "^22.1.0"
-    jest-get-type "^22.1.0"
-    jest-matcher-utils "^22.1.0"
-    jest-message-util "^22.1.0"
-    jest-regex-util "^22.1.0"
-
-expect@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/expect/-/expect-22.2.0.tgz#dddcaab2e22ccc9f51e7c1732e0aa723f2f1f2b8"
+expect@^22.4.0:
+  version "22.4.0"
+  resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.0.tgz#371edf1ae15b83b5bf5ec34b42f1584660a36c16"
   dependencies:
     ansi-styles "^3.2.0"
-    jest-diff "^22.1.0"
+    jest-diff "^22.4.0"
     jest-get-type "^22.1.0"
-    jest-matcher-utils "^22.2.0"
-    jest-message-util "^22.2.0"
+    jest-matcher-utils "^22.4.0"
+    jest-message-util "^22.4.0"
     jest-regex-util "^22.1.0"
 
 express@^4.15.3, express@^4.15.4, express@^4.16.1, express@^4.16.2:
@@ -4483,7 +4420,7 @@ extend-shallow@^2.0.1:
   dependencies:
     is-extendable "^0.1.0"
 
-extend-shallow@^3.0.0:
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
   dependencies:
@@ -4516,7 +4453,7 @@ extglob@^0.3.1:
   dependencies:
     is-extglob "^1.0.0"
 
-extglob@^2.0.2:
+extglob@^2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
   dependencies:
@@ -4529,12 +4466,6 @@ extglob@^2.0.2:
     snapdragon "^0.8.1"
     to-regex "^3.0.1"
 
-extract-files@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-3.1.0.tgz#b70424c9d4a1a4208efe22069388f428e4ae00f1"
-  dependencies:
-    "@babel/runtime" "^7.0.0-beta.38"
-
 extsprintf@1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
@@ -4551,15 +4482,24 @@ faker@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/faker/-/faker-4.1.0.tgz#1e45bbbecc6774b3c195fad2835109c6d748cc3f"
 
+falafel@^1.0.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/falafel/-/falafel-1.2.0.tgz#c18d24ef5091174a497f318cd24b026a25cddab4"
+  dependencies:
+    acorn "^1.0.3"
+    foreach "^2.0.5"
+    isarray "0.0.1"
+    object-keys "^1.0.6"
+
 fast-deep-equal@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
 
 fast-diff@^1.1.1:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154"
 
-fast-future@~1.0.0:
+fast-future@~1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/fast-future/-/fast-future-1.0.2.tgz#8435a9aaa02d79248d17d704e76259301d99280a"
 
@@ -4638,11 +4578,11 @@ file-loader@^0.11.2:
     loader-utils "^1.0.2"
 
 file-loader@^1.1.5:
-  version "1.1.5"
-  resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa"
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8"
   dependencies:
     loader-utils "^1.0.2"
-    schema-utils "^0.3.0"
+    schema-utils "^0.4.5"
 
 file-type@^3.3.0:
   version "3.9.0"
@@ -4829,11 +4769,11 @@ form-data@^1.0.0-rc3:
     mime-types "^2.1.11"
 
 form-data@^2.3.1, form-data@~2.3.1:
-  version "2.3.1"
-  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
   dependencies:
     asynckit "^0.4.0"
-    combined-stream "^1.0.5"
+    combined-stream "1.0.6"
     mime-types "^2.1.12"
 
 form-data@~2.1.1:
@@ -4954,16 +4894,6 @@ functional-red-black-tree@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
 
-gauge@~1.2.5:
-  version "1.2.7"
-  resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93"
-  dependencies:
-    ansi "^0.3.0"
-    has-unicode "^2.0.0"
-    lodash.pad "^4.1.0"
-    lodash.padend "^4.1.0"
-    lodash.padstart "^4.1.0"
-
 gauge@~2.7.3:
   version "2.7.4"
   resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
@@ -4997,6 +4927,10 @@ get-caller-file@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
 
+get-func-name@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
+
 get-own-enumerable-property-symbols@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b"
@@ -5037,37 +4971,13 @@ getpass@^0.1.1:
   dependencies:
     assert-plus "^1.0.0"
 
-ghreleases@^1.0.2:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/ghreleases/-/ghreleases-1.0.6.tgz#b1b9b773a9d4090a524497806be0dedd7882219d"
-  dependencies:
-    after "~0.8.1"
-    ghrepos "~2.0.0"
-    ghutils "~3.2.0"
-    simple-mime "~0.1.0"
-    url-template "~2.0.6"
-    xtend "~4.0.0"
-
-ghrepos@~2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/ghrepos/-/ghrepos-2.0.0.tgz#d66eae9d98a3b5398e460d6db7e10a742692e81b"
-  dependencies:
-    ghutils "~3.2.0"
-
-ghutils@~3.2.0:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/ghutils/-/ghutils-3.2.1.tgz#4fcedffac935fcace06e12a17c6174e2c29ffe4f"
-  dependencies:
-    jsonist "~1.3.0"
-    xtend "~4.0.1"
-
-git-raw-commits@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.0.tgz#0bc8596e90d5ffe736f7f5546bd2d12f73abaac6"
+git-raw-commits@^1.3.0, git-raw-commits@^1.3.4:
+  version "1.3.4"
+  resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.4.tgz#442c3df5985b4f5689e9e43597f5194736aac001"
   dependencies:
     dargs "^4.0.1"
     lodash.template "^4.0.2"
-    meow "^3.3.0"
+    meow "^4.0.0"
     split2 "^2.0.0"
     through2 "^2.0.0"
 
@@ -5078,12 +4988,12 @@ git-remote-origin-url@^2.0.0:
     gitconfiglocal "^1.0.0"
     pify "^2.3.0"
 
-git-semver-tags@^1.2.3:
-  version "1.2.3"
-  resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.2.3.tgz#188b453882bf9d7a23afd31baba537dab7388d5d"
+git-semver-tags@^1.3.0, git-semver-tags@^1.3.4:
+  version "1.3.4"
+  resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.3.4.tgz#2ceb2a355c6d7514c123c35e297067d08caf3a92"
   dependencies:
-    meow "^3.3.0"
-    semver "^5.0.1"
+    meow "^4.0.0"
+    semver "^5.5.0"
 
 gitconfiglocal@^1.0.0:
   version "1.0.0"
@@ -5121,25 +5031,24 @@ glob-parent@^3.1.0:
     is-glob "^3.1.0"
     path-dirname "^1.0.0"
 
-"glob@3 || 4 || 5 || 6 || 7", glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1:
-  version "7.1.2"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+glob@7.1.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
   dependencies:
     fs.realpath "^1.0.0"
     inflight "^1.0.4"
     inherits "2"
-    minimatch "^3.0.4"
+    minimatch "^3.0.2"
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-glob@7.1.1:
-  version "7.1.1"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+glob@^5.0.15:
+  version "5.0.15"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
   dependencies:
-    fs.realpath "^1.0.0"
     inflight "^1.0.4"
     inherits "2"
-    minimatch "^3.0.2"
+    minimatch "2 || 3"
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
@@ -5153,6 +5062,17 @@ glob@^6.0.4:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1:
+  version "7.1.2"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.4"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
 global-dirs@^0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
@@ -5200,13 +5120,9 @@ global@^4.3.1:
     min-document "^2.19.0"
     process "~0.5.1"
 
-globals@^10.0.0:
-  version "10.4.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7"
-
-globals@^11.0.1:
-  version "11.1.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4"
+globals@^11.0.1, globals@^11.1.0:
+  version "11.3.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0"
 
 globals@^9.14.0, globals@^9.18.0:
   version "9.18.0"
@@ -5262,6 +5178,12 @@ glogg@^1.0.0:
   dependencies:
     sparkles "^1.0.0"
 
+gonzales-pe@^4.0.3:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2"
+  dependencies:
+    minimist "1.1.x"
+
 got@^6.7.1:
   version "6.7.1"
   resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
@@ -5282,38 +5204,21 @@ graceful-fs@^4.1.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3,
   version "4.1.11"
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
 
-graphql-anywhere@^4.1.5:
-  version "4.1.5"
-  resolved "https://registry.yarnpkg.com/graphql-anywhere/-/graphql-anywhere-4.1.5.tgz#552ccd27b79a13a899022e20f658a2c2cb75e251"
-  dependencies:
-    apollo-utilities "^1.0.8"
-
 graphql-extensions@^0.0.x:
-  version "0.0.7"
-  resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.0.7.tgz#807e7c3493da45e8f8fd02c0da771a9b3f1f2d1a"
+  version "0.0.8"
+  resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.0.8.tgz#d14d6e06db466a7f90fb97d75b657ae730278b09"
   dependencies:
     core-js "^2.5.3"
     source-map-support "^0.5.1"
 
-graphql-subscriptions@^0.5.6:
-  version "0.5.6"
-  resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-0.5.6.tgz#0d8e960fbaaf9ecbe7900366e86da2fc143fc5b2"
-  dependencies:
-    es6-promise "^4.1.1"
-    iterall "^1.1.3"
-
-graphql-tag@^2.4.2, graphql-tag@^2.7.3:
-  version "2.8.0"
-  resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.8.0.tgz#52cdea07a842154ec11a2e840c11b977f9b835ce"
-
 graphql-tools@^2.18.0:
-  version "2.18.0"
-  resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-2.18.0.tgz#8e2d6436f9adba1d579c1a1710ae95e7f5e7248b"
+  version "2.21.0"
+  resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-2.21.0.tgz#c0d0fbda6f40a87c8d267a2989ade2ae8b9a288e"
   dependencies:
-    apollo-link "^1.0.0"
+    apollo-link "^1.1.0"
     apollo-utilities "^1.0.1"
     deprecated-decorator "^0.1.6"
-    graphql-subscriptions "^0.5.6"
+    iterall "^1.1.3"
     uuid "^3.1.0"
 
 graphql@^0.12.3:
@@ -5322,12 +5227,6 @@ graphql@^0.12.3:
   dependencies:
     iterall "1.1.3"
 
-graphql@^0.13.0:
-  version "0.13.1"
-  resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.13.1.tgz#9b3db3d8e40d1827e4172404bfdd2e4e17a58b55"
-  dependencies:
-    iterall "^1.2.0"
-
 growly@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
@@ -5369,7 +5268,7 @@ har-validator@~2.0.6:
     is-my-json-valid "^2.12.4"
     pinkie-promise "^2.0.0"
 
-har-validator@~4.2.0, har-validator@~4.2.1:
+har-validator@~4.2.1:
   version "4.2.1"
   resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
   dependencies:
@@ -5384,8 +5283,8 @@ har-validator@~5.0.3:
     har-schema "^2.0.0"
 
 harmony-reflect@^1.4.6:
-  version "1.5.1"
-  resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.5.1.tgz#b54ca617b00cc8aef559bbb17b3d85431dc7e329"
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.0.tgz#9c28a77386ec225f7b5d370f9861ba09c4eea58f"
 
 has-ansi@^2.0.0:
   version "2.0.0"
@@ -5401,6 +5300,10 @@ has-flag@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
 
+has-flag@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+
 has-own-property-x@^3.1.1:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/has-own-property-x/-/has-own-property-x-3.2.0.tgz#1c4b112a577c8cb5805469556e54b6e959e4ded9"
@@ -5409,9 +5312,9 @@ has-own-property-x@^3.1.1:
     to-object-x "^1.5.0"
     to-property-key-x "^2.0.2"
 
-has-symbol-support-x@^1.4.1:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz#66ec2e377e0c7d7ccedb07a3a84d77510ff1bc4c"
+has-symbol-support-x@^1.4.1, has-symbol-support-x@^1.4.2:
+  version "1.4.2"
+  resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455"
 
 has-symbols@^1.0.0:
   version "1.0.0"
@@ -5502,25 +5405,25 @@ he@1.1.x:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
 
-helmet-csp@2.6.0:
-  version "2.6.0"
-  resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.6.0.tgz#c1f5595afbc5f83e5f1e6c15f842f07a10f6ea04"
+helmet-csp@2.7.0:
+  version "2.7.0"
+  resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.7.0.tgz#7934094617d1feb7bb2dc43bb7d9e8830f774716"
   dependencies:
     camelize "1.0.0"
-    content-security-policy-builder "1.1.0"
+    content-security-policy-builder "2.0.0"
     dasherize "2.0.0"
     lodash.reduce "4.6.0"
-    platform "1.3.4"
+    platform "1.3.5"
 
 helmet@^3.8.1:
-  version "3.9.0"
-  resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.9.0.tgz#7b2cf015a2d109bca83ede7924420799c0e67dee"
+  version "3.11.0"
+  resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.11.0.tgz#5eacccc0b5b61d786e29aa3fc5650abf73e1824f"
   dependencies:
     dns-prefetch-control "0.1.0"
     dont-sniff-mimetype "1.0.0"
     expect-ct "0.1.0"
     frameguard "3.0.0"
-    helmet-csp "2.6.0"
+    helmet-csp "2.7.0"
     hide-powered-by "1.0.0"
     hpkp "2.0.0"
     hsts "2.1.0"
@@ -5560,22 +5463,18 @@ hoek@2.x.x:
   resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
 
 hoek@4.x.x:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
 
 hoek@5.x.x:
-  version "5.0.2"
-  resolved "https://registry.yarnpkg.com/hoek/-/hoek-5.0.2.tgz#d2f2c95d36fe7189cf8aa8c237abc1950eca1378"
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/hoek/-/hoek-5.0.3.tgz#b71d40d943d0a95da01956b547f83c4a5b4a34ac"
 
 hoist-non-react-statics@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb"
 
-hoist-non-react-statics@^2.1.0, hoist-non-react-statics@^2.2.1, hoist-non-react-statics@^2.3.0, hoist-non-react-statics@^2.3.1:
-  version "2.3.1"
-  resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0"
-
-hoist-non-react-statics@^2.2.0:
+hoist-non-react-statics@^2.1.0, hoist-non-react-statics@^2.3.0, hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0:
   version "2.5.0"
   resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40"
 
@@ -5639,12 +5538,12 @@ html-epub@^0.5.2:
     xmlbuilder "^9.0.4"
 
 html-minifier@^3.2.3:
-  version "3.5.8"
-  resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.8.tgz#5ccdb1f73a0d654e6090147511f6e6b2ee312700"
+  version "3.5.9"
+  resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.9.tgz#74424014b872598d4bb0e20ac420926ec61024b6"
   dependencies:
     camel-case "3.0.x"
     clean-css "4.1.x"
-    commander "2.12.x"
+    commander "2.14.x"
     he "1.1.x"
     ncname "1.0.x"
     param-case "2.1.x"
@@ -5700,8 +5599,8 @@ http-errors@1.6.2, http-errors@~1.6.2:
     statuses ">= 1.3.1 < 2"
 
 http-parser-js@>=0.4.0:
-  version "0.4.9"
-  resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.9.tgz#ea1a04fb64adff0242e9974f297dd4c3cad271e1"
+  version "0.4.10"
+  resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4"
 
 http-proxy-middleware@~0.17.4:
   version "0.17.4"
@@ -5763,18 +5662,15 @@ husky@^0.14.3:
     normalize-path "^1.0.0"
     strip-indent "^2.0.0"
 
-hyperquest@~1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/hyperquest/-/hyperquest-1.2.0.tgz#39e1fef66888dc7ce0dec6c0dd814f6fc8944ad5"
-  dependencies:
-    duplexer2 "~0.0.2"
-    through2 "~0.6.3"
+hyphenate-style-name@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b"
 
 i@0.3.x:
   version "0.3.6"
   resolved "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz#d96c92732076f072711b6b10fd7d4f65ad8ee23d"
 
-iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13:
+iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@^0.4.5, iconv-lite@~0.4.13:
   version "0.4.19"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
 
@@ -5814,6 +5710,10 @@ immediate@3.0.6, immediate@~3.0.5:
   version "3.0.6"
   resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
 
+immediate@^3.2.3:
+  version "3.2.3"
+  resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c"
+
 immutable@^3.7.6:
   version "3.8.2"
   resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3"
@@ -5855,9 +5755,9 @@ indexof@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
 
-infinity-x@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/infinity-x/-/infinity-x-1.0.0.tgz#cea2d75181d820961b0f72d78e7c4e06fdd55a07"
+infinity-x@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/infinity-x/-/infinity-x-1.0.2.tgz#374a4d5c8a9b98d2f61b782fc63892598de2f14c"
 
 inflection@^1.12.0:
   version "1.12.0"
@@ -5882,6 +5782,13 @@ ini@1.x.x, ini@^1.3.2, ini@^1.3.4, ini@~1.3.0:
   version "1.3.5"
   resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
 
+inline-process-browser@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/inline-process-browser/-/inline-process-browser-1.0.0.tgz#46a61b153dd3c9b1624b1a00626edb4f7f414f22"
+  dependencies:
+    falafel "^1.0.1"
+    through2 "^0.6.5"
+
 inquirer@1.2.3:
   version "1.2.3"
   resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-1.2.3.tgz#4dec6f32f37ef7bb0b2ed3f1d1a5c3f545074918"
@@ -5949,8 +5856,8 @@ interpret@^1.0.0:
   resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
 
 invariant@^2.0.0, invariant@^2.1.0, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2:
-  version "2.2.2"
-  resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.3.tgz#1a827dfde7dcbd7c323f0ca826be8fa7c5e9d688"
   dependencies:
     loose-envify "^1.0.0"
 
@@ -5962,9 +5869,9 @@ ip@^1.1.0, ip@^1.1.5:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
 
-ipaddr.js@1.5.2:
-  version "1.5.2"
-  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0"
+ipaddr.js@1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b"
 
 is-absolute-url@^2.0.0:
   version "2.1.0"
@@ -6007,6 +5914,10 @@ is-array-buffer-x@^1.0.13:
     object-get-own-property-descriptor-x "^3.2.0"
     to-string-tag-x "^1.4.1"
 
+is-array@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-array/-/is-array-1.0.1.tgz#e9850cc2cc860c3bc0977e84ccf0dd464584279a"
+
 is-arrayish@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
@@ -6036,8 +5947,8 @@ is-callable@^1.1.1, is-callable@^1.1.3:
   resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
 
 is-ci@^1.0.10:
-  version "1.0.10"
-  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e"
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5"
   dependencies:
     ci-info "^1.0.0"
 
@@ -6069,7 +5980,7 @@ is-descriptor@^0.1.0:
     is-data-descriptor "^0.1.4"
     kind-of "^5.0.0"
 
-is-descriptor@^1.0.0:
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
   dependencies:
@@ -6110,17 +6021,17 @@ is-extglob@^2.1.0, is-extglob@^2.1.1:
   resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
 
 is-falsey-x@^1.0.0, is-falsey-x@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-falsey-x/-/is-falsey-x-1.0.1.tgz#c469951adc95b8b3fdbf90929b335a7de937d17f"
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-falsey-x/-/is-falsey-x-1.0.3.tgz#d8bb6d77c15fb2b99d81d10a7351641495fb36e2"
   dependencies:
-    to-boolean-x "^1.0.1"
+    to-boolean-x "^1.0.2"
 
 is-finite-x@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/is-finite-x/-/is-finite-x-3.0.2.tgz#a6ec683cfb2bc1a918a1ff59d178edbcea54f7a6"
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/is-finite-x/-/is-finite-x-3.0.4.tgz#320c97bab8aacc7e3cfa34aa58c432762c491b4e"
   dependencies:
-    infinity-x "^1.0.0"
-    is-nan-x "^1.0.1"
+    infinity-x "^1.0.1"
+    is-nan-x "^1.0.2"
 
 is-finite@^1.0.0:
   version "1.0.2"
@@ -6191,22 +6102,27 @@ is-index-x@^1.0.0:
     to-number-x "^2.0.0"
     to-string-symbols-supported-x "^1.0.0"
 
+is-my-ip-valid@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824"
+
 is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4:
-  version "2.16.1"
-  resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11"
+  version "2.17.2"
+  resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c"
   dependencies:
     generate-function "^2.0.0"
     generate-object-property "^1.1.0"
+    is-my-ip-valid "^1.0.0"
     jsonpointer "^4.0.0"
     xtend "^4.0.0"
 
-is-nan-x@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-nan-x/-/is-nan-x-1.0.1.tgz#de747ebcc8bddeb66f367c17caca7eba843855c0"
+is-nan-x@^1.0.1, is-nan-x@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-nan-x/-/is-nan-x-1.0.3.tgz#1c7fca40fc1b830a36e8800b37513a81f91fcc58"
 
-is-nil-x@^1.4.1:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/is-nil-x/-/is-nil-x-1.4.1.tgz#bd9e7b08b4cd732f9dcbde13d93291bb2ec2e248"
+is-nil-x@^1.4.1, is-nil-x@^1.4.2:
+  version "1.4.2"
+  resolved "https://registry.yarnpkg.com/is-nil-x/-/is-nil-x-1.4.2.tgz#a45e798d1e490d38db4570f2457245da21493e97"
   dependencies:
     lodash.isnull "^3.0.0"
     validate.io-undefined "^1.0.3"
@@ -6227,16 +6143,20 @@ is-number@^3.0.0:
   dependencies:
     kind-of "^3.0.2"
 
+is-number@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+
 is-obj@^1.0.0, is-obj@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
 
 is-object-like-x@^1.5.1:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/is-object-like-x/-/is-object-like-x-1.6.0.tgz#a8c4a95bd6b95db174e0e4730171a160ec73be82"
+  version "1.7.1"
+  resolved "https://registry.yarnpkg.com/is-object-like-x/-/is-object-like-x-1.7.1.tgz#f440ce811fb31278e4ed0b34f2d5a277d87b4481"
   dependencies:
     is-function-x "^3.3.0"
-    is-primitive "^2.0.0"
+    is-primitive "^3.0.0"
 
 is-observable@^0.2.0:
   version "0.2.0"
@@ -6244,11 +6164,11 @@ is-observable@^0.2.0:
   dependencies:
     symbol-observable "^0.2.2"
 
-is-odd@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-1.0.0.tgz#3b8a932eb028b3775c39bb09e91767accdb69088"
+is-odd@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24"
   dependencies:
-    is-number "^3.0.0"
+    is-number "^4.0.0"
 
 is-path-cwd@^1.0.0:
   version "1.0.0"
@@ -6284,6 +6204,10 @@ is-primitive@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
 
+is-primitive@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-3.0.0.tgz#ddc27a9f9ebe7bed4b4f308acc9abb1c7a025757"
+
 is-promise@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
@@ -6307,10 +6231,8 @@ is-regexp@^1.0.0:
   resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
 
 is-resolvable@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
-  dependencies:
-    tryit "^1.0.1"
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
 
 is-retry-allowed@^1.0.0:
   version "1.1.0"
@@ -6368,9 +6290,9 @@ is-windows@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c"
 
-is-windows@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9"
+is-windows@^1.0.1, is-windows@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
 
 is-word-character@^1.0.0:
   version "1.0.1"
@@ -6393,8 +6315,8 @@ isemail@1.x.x:
   resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a"
 
 isemail@3.x.x:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.0.0.tgz#c89a46bb7a3361e1759f8028f9082488ecce3dff"
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.1.1.tgz#e8450fe78ff1b48347db599122adcd0668bd92b5"
   dependencies:
     punycode "2.x.x"
 
@@ -6430,24 +6352,24 @@ isstream@0.1.x, isstream@~0.1.2:
   resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
 
 istanbul-api@^1.1.14:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620"
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.2.tgz#e17cd519dd5ec4141197f246fdf380b75487f3b1"
   dependencies:
     async "^2.1.4"
     fileset "^2.0.2"
-    istanbul-lib-coverage "^1.1.1"
+    istanbul-lib-coverage "^1.1.2"
     istanbul-lib-hook "^1.1.0"
-    istanbul-lib-instrument "^1.9.1"
-    istanbul-lib-report "^1.1.2"
-    istanbul-lib-source-maps "^1.2.2"
-    istanbul-reports "^1.1.3"
+    istanbul-lib-instrument "^1.9.2"
+    istanbul-lib-report "^1.1.3"
+    istanbul-lib-source-maps "^1.2.3"
+    istanbul-reports "^1.1.4"
     js-yaml "^3.7.0"
     mkdirp "^0.5.1"
     once "^1.4.0"
 
-istanbul-lib-coverage@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
+istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz#4113c8ff6b7a40a1ef7350b01016331f63afde14"
 
 istanbul-lib-hook@^1.1.0:
   version "1.1.0"
@@ -6455,108 +6377,64 @@ istanbul-lib-hook@^1.1.0:
   dependencies:
     append-transform "^0.4.0"
 
-istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.1:
-  version "1.9.1"
-  resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e"
+istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.2:
+  version "1.9.2"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.2.tgz#84905bf47f7e0b401d6b840da7bad67086b4aab6"
   dependencies:
     babel-generator "^6.18.0"
     babel-template "^6.16.0"
     babel-traverse "^6.18.0"
     babel-types "^6.18.0"
     babylon "^6.18.0"
-    istanbul-lib-coverage "^1.1.1"
+    istanbul-lib-coverage "^1.1.2"
     semver "^5.3.0"
 
-istanbul-lib-report@^1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425"
+istanbul-lib-report@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz#2df12188c0fa77990c0d2176d2d0ba3394188259"
   dependencies:
-    istanbul-lib-coverage "^1.1.1"
+    istanbul-lib-coverage "^1.1.2"
     mkdirp "^0.5.1"
     path-parse "^1.0.5"
     supports-color "^3.1.2"
 
-istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.2:
-  version "1.2.2"
-  resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c"
+istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.3:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6"
   dependencies:
     debug "^3.1.0"
-    istanbul-lib-coverage "^1.1.1"
+    istanbul-lib-coverage "^1.1.2"
     mkdirp "^0.5.1"
     rimraf "^2.6.1"
     source-map "^0.5.3"
 
-istanbul-reports@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10"
+istanbul-reports@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.4.tgz#5ccba5e22b7b5a5d91d5e0a830f89be334bf97bd"
   dependencies:
     handlebars "^4.0.3"
 
-iterall@1.1.3, iterall@^1.1.3:
+iterall@1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.1.3.tgz#1cbbff96204056dde6656e2ed2e2226d0e6d72c9"
 
-iterall@^1.2.0:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.1.tgz#59a347ae8001d2d4bc546b8487ca755d61849965"
+iterall@^1.1.3:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7"
 
 javascript-stringify@^1.6.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3"
 
-jest-changed-files@^22.1.4:
-  version "22.1.4"
-  resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.1.4.tgz#1f7844bcb739dec07e5899a633c0cb6d5069834e"
-  dependencies:
-    throat "^4.0.0"
-
 jest-changed-files@^22.2.0:
   version "22.2.0"
   resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.2.0.tgz#517610c4a8ca0925bdc88b0ca53bd678aa8d019e"
   dependencies:
     throat "^4.0.0"
 
-jest-cli@^22.1.4:
-  version "22.1.4"
-  resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.1.4.tgz#0fe9f3ac881b0cdc00227114c58583a2ebefcc04"
-  dependencies:
-    ansi-escapes "^3.0.0"
-    chalk "^2.0.1"
-    exit "^0.1.2"
-    glob "^7.1.2"
-    graceful-fs "^4.1.11"
-    import-local "^1.0.0"
-    is-ci "^1.0.10"
-    istanbul-api "^1.1.14"
-    istanbul-lib-coverage "^1.1.1"
-    istanbul-lib-instrument "^1.8.0"
-    istanbul-lib-source-maps "^1.2.1"
-    jest-changed-files "^22.1.4"
-    jest-config "^22.1.4"
-    jest-environment-jsdom "^22.1.4"
-    jest-get-type "^22.1.0"
-    jest-haste-map "^22.1.0"
-    jest-message-util "^22.1.0"
-    jest-regex-util "^22.1.0"
-    jest-resolve-dependencies "^22.1.0"
-    jest-runner "^22.1.4"
-    jest-runtime "^22.1.4"
-    jest-snapshot "^22.1.2"
-    jest-util "^22.1.4"
-    jest-worker "^22.1.0"
-    micromatch "^2.3.11"
-    node-notifier "^5.1.2"
-    realpath-native "^1.0.0"
-    rimraf "^2.5.4"
-    slash "^1.0.0"
-    string-length "^2.0.0"
-    strip-ansi "^4.0.0"
-    which "^1.2.12"
-    yargs "^10.0.3"
-
-jest-cli@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.2.0.tgz#061acb5f995180b7f7bbc6cc8b8302f0804cfb74"
+jest-cli@^22.1.4, jest-cli@^22.4.2:
+  version "22.4.2"
+  resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.2.tgz#e6546dc651e13d164481aa3e76e53ac4f4edab06"
   dependencies:
     ansi-escapes "^3.0.0"
     chalk "^2.0.1"
@@ -6570,18 +6448,19 @@ jest-cli@^22.2.0:
     istanbul-lib-instrument "^1.8.0"
     istanbul-lib-source-maps "^1.2.1"
     jest-changed-files "^22.2.0"
-    jest-config "^22.2.0"
-    jest-environment-jsdom "^22.2.0"
+    jest-config "^22.4.2"
+    jest-environment-jsdom "^22.4.1"
     jest-get-type "^22.1.0"
-    jest-haste-map "^22.2.0"
-    jest-message-util "^22.2.0"
+    jest-haste-map "^22.4.2"
+    jest-message-util "^22.4.0"
     jest-regex-util "^22.1.0"
     jest-resolve-dependencies "^22.1.0"
-    jest-runner "^22.2.0"
-    jest-runtime "^22.2.0"
-    jest-snapshot "^22.2.0"
-    jest-util "^22.2.0"
-    jest-worker "^22.2.0"
+    jest-runner "^22.4.2"
+    jest-runtime "^22.4.2"
+    jest-snapshot "^22.4.0"
+    jest-util "^22.4.1"
+    jest-validate "^22.4.2"
+    jest-worker "^22.2.2"
     micromatch "^2.3.11"
     node-notifier "^5.2.1"
     realpath-native "^1.0.0"
@@ -6592,92 +6471,55 @@ jest-cli@^22.2.0:
     which "^1.2.12"
     yargs "^10.0.3"
 
-jest-config@^22.1.4:
-  version "22.1.4"
-  resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.1.4.tgz#075ffacce83c3e38cf85b1b9ba0d21bd3ee27ad0"
-  dependencies:
-    chalk "^2.0.1"
-    glob "^7.1.1"
-    jest-environment-jsdom "^22.1.4"
-    jest-environment-node "^22.1.4"
-    jest-get-type "^22.1.0"
-    jest-jasmine2 "^22.1.4"
-    jest-regex-util "^22.1.0"
-    jest-resolve "^22.1.4"
-    jest-util "^22.1.4"
-    jest-validate "^22.1.2"
-    pretty-format "^22.1.0"
-
-jest-config@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.2.0.tgz#762725cdd2552b7e2353df89e18876c320cd7d74"
+jest-config@^22.4.2:
+  version "22.4.2"
+  resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.2.tgz#580ba5819bf81a5e48f4fd470e8b81834f45c855"
   dependencies:
     chalk "^2.0.1"
     glob "^7.1.1"
-    jest-environment-jsdom "^22.2.0"
-    jest-environment-node "^22.2.0"
+    jest-environment-jsdom "^22.4.1"
+    jest-environment-node "^22.4.1"
     jest-get-type "^22.1.0"
-    jest-jasmine2 "^22.2.0"
+    jest-jasmine2 "^22.4.2"
     jest-regex-util "^22.1.0"
-    jest-resolve "^22.2.0"
-    jest-util "^22.2.0"
-    jest-validate "^22.2.0"
-    pretty-format "^22.1.0"
+    jest-resolve "^22.4.2"
+    jest-util "^22.4.1"
+    jest-validate "^22.4.2"
+    pretty-format "^22.4.0"
 
-jest-diff@^22.1.0:
-  version "22.1.0"
-  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.1.0.tgz#0fad9d96c87b453896bf939df3dc8aac6919ac38"
+jest-diff@^22.4.0:
+  version "22.4.0"
+  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.0.tgz#384c2b78519ca44ca126382df53f134289232525"
   dependencies:
     chalk "^2.0.1"
     diff "^3.2.0"
     jest-get-type "^22.1.0"
-    pretty-format "^22.1.0"
+    pretty-format "^22.4.0"
 
 jest-docblock@^21.0.0:
   version "21.2.0"
   resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414"
 
-jest-docblock@^22.1.0:
-  version "22.1.0"
-  resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.1.0.tgz#3fe5986d5444cbcb149746eb4b07c57c5a464dfd"
-  dependencies:
-    detect-newline "^2.1.0"
-
-jest-docblock@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.2.0.tgz#4d054eac354751e94a43a0ea2e2fe5c04cc61bbb"
+jest-docblock@^22.4.0:
+  version "22.4.0"
+  resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.0.tgz#dbf1877e2550070cfc4d9b07a55775a0483159b8"
   dependencies:
     detect-newline "^2.1.0"
 
-jest-environment-jsdom@^22.1.4:
-  version "22.1.4"
-  resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.1.4.tgz#704518ce8375f7ec5de048d1e9c4268b08a03e00"
-  dependencies:
-    jest-mock "^22.1.0"
-    jest-util "^22.1.4"
-    jsdom "^11.5.1"
-
-jest-environment-jsdom@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.2.0.tgz#e9537400cbdef2d1e61d7196f8afa40e826fe9d8"
+jest-environment-jsdom@^22.4.1:
+  version "22.4.1"
+  resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.1.tgz#754f408872441740100d3917e5ec40c74de6447f"
   dependencies:
     jest-mock "^22.2.0"
-    jest-util "^22.2.0"
+    jest-util "^22.4.1"
     jsdom "^11.5.1"
 
-jest-environment-node@^22.1.4:
-  version "22.1.4"
-  resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.1.4.tgz#0f2946e8f8686ce6c5d8fa280ce1cd8d58e869eb"
-  dependencies:
-    jest-mock "^22.1.0"
-    jest-util "^22.1.4"
-
-jest-environment-node@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.2.0.tgz#ba7d0183fac076d34867367a4ac53ced69e3d3a9"
+jest-environment-node@^22.1.4, jest-environment-node@^22.4.1:
+  version "22.4.1"
+  resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.1.tgz#418850eb654596b8d6e36c2021cbedbc23df8e16"
   dependencies:
     jest-mock "^22.2.0"
-    jest-util "^22.2.0"
+    jest-util "^22.4.1"
 
 jest-get-type@^21.2.0:
   version "21.2.0"
@@ -6687,95 +6529,51 @@ jest-get-type@^22.1.0:
   version "22.1.0"
   resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9"
 
-jest-haste-map@^22.1.0:
-  version "22.1.0"
-  resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.1.0.tgz#1174c6ff393f9818ebf1163710d8868b5370da2a"
-  dependencies:
-    fb-watchman "^2.0.0"
-    graceful-fs "^4.1.11"
-    jest-docblock "^22.1.0"
-    jest-worker "^22.1.0"
-    micromatch "^2.3.11"
-    sane "^2.0.0"
-
-jest-haste-map@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.2.0.tgz#c9f508b8f63322490339ba02343dd688474d9ad5"
+jest-haste-map@^22.4.2:
+  version "22.4.2"
+  resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.2.tgz#a90178e66146d4378bb076345a949071f3b015b4"
   dependencies:
     fb-watchman "^2.0.0"
     graceful-fs "^4.1.11"
-    jest-docblock "^22.2.0"
-    jest-worker "^22.2.0"
+    jest-docblock "^22.4.0"
+    jest-serializer "^22.4.0"
+    jest-worker "^22.2.2"
     micromatch "^2.3.11"
     sane "^2.0.0"
 
-jest-jasmine2@^22.1.4:
-  version "22.1.4"
-  resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.1.4.tgz#cada0baf50a220c616a9575728b80d4ddedebe8b"
-  dependencies:
-    callsites "^2.0.0"
-    chalk "^2.0.1"
-    co "^4.6.0"
-    expect "^22.1.0"
-    graceful-fs "^4.1.11"
-    is-generator-fn "^1.0.0"
-    jest-diff "^22.1.0"
-    jest-matcher-utils "^22.1.0"
-    jest-message-util "^22.1.0"
-    jest-snapshot "^22.1.2"
-    source-map-support "^0.5.0"
-
-jest-jasmine2@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.2.0.tgz#c5f6a9a44f3a48b31bfa50f9fb2710c19cab21da"
+jest-jasmine2@^22.4.2:
+  version "22.4.2"
+  resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.2.tgz#dfd3d259579ed6f52510d8f1ab692808f0d40691"
   dependencies:
-    callsites "^2.0.0"
     chalk "^2.0.1"
     co "^4.6.0"
-    expect "^22.2.0"
+    expect "^22.4.0"
     graceful-fs "^4.1.11"
     is-generator-fn "^1.0.0"
-    jest-diff "^22.1.0"
-    jest-matcher-utils "^22.2.0"
-    jest-message-util "^22.2.0"
-    jest-snapshot "^22.2.0"
+    jest-diff "^22.4.0"
+    jest-matcher-utils "^22.4.0"
+    jest-message-util "^22.4.0"
+    jest-snapshot "^22.4.0"
+    jest-util "^22.4.1"
     source-map-support "^0.5.0"
 
-jest-leak-detector@^22.1.0:
-  version "22.1.0"
-  resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.1.0.tgz#08376644cee07103da069baac19adb0299b772c2"
-  dependencies:
-    pretty-format "^22.1.0"
-
-jest-matcher-utils@^22.1.0:
-  version "22.1.0"
-  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.1.0.tgz#e164665b5d313636ac29f7f6fe9ef0a6ce04febc"
+jest-leak-detector@^22.4.0:
+  version "22.4.0"
+  resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.0.tgz#64da77f05b001c96d2062226e079f89989c4aa2f"
   dependencies:
-    chalk "^2.0.1"
-    jest-get-type "^22.1.0"
-    pretty-format "^22.1.0"
+    pretty-format "^22.4.0"
 
-jest-matcher-utils@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.2.0.tgz#5390f823c18c748543d463825aa8e4df0db253ca"
+jest-matcher-utils@^22.4.0:
+  version "22.4.0"
+  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.0.tgz#d55f5faf2270462736bdf7c7485ee931c9d4b6a1"
   dependencies:
     chalk "^2.0.1"
     jest-get-type "^22.1.0"
-    pretty-format "^22.1.0"
-
-jest-message-util@^22.1.0:
-  version "22.1.0"
-  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.1.0.tgz#51ba0794cb6e579bfc4e9adfac452f9f1a0293fc"
-  dependencies:
-    "@babel/code-frame" "^7.0.0-beta.35"
-    chalk "^2.0.1"
-    micromatch "^2.3.11"
-    slash "^1.0.0"
-    stack-utils "^1.0.1"
+    pretty-format "^22.4.0"
 
-jest-message-util@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.2.0.tgz#84a6bb34186d8b9af7e0732fabbef63f7355f7b2"
+jest-message-util@^22.4.0:
+  version "22.4.0"
+  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.0.tgz#e3d861df16d2fee60cb2bc8feac2188a42579642"
   dependencies:
     "@babel/code-frame" "^7.0.0-beta.35"
     chalk "^2.0.1"
@@ -6783,10 +6581,6 @@ jest-message-util@^22.2.0:
     slash "^1.0.0"
     stack-utils "^1.0.1"
 
-jest-mock@^22.1.0:
-  version "22.1.0"
-  resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.1.0.tgz#87ec21c0599325671c9a23ad0e05c86fb5879b61"
-
 jest-mock@^22.2.0:
   version "22.2.0"
   resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.2.0.tgz#444b3f9488a7473adae09bc8a77294afded397a7"
@@ -6801,92 +6595,46 @@ jest-resolve-dependencies@^22.1.0:
   dependencies:
     jest-regex-util "^22.1.0"
 
-jest-resolve@^22.1.4:
-  version "22.1.4"
-  resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.1.4.tgz#72b9b371eaac48f84aad4ad732222ffe37692602"
-  dependencies:
-    browser-resolve "^1.11.2"
-    chalk "^2.0.1"
-
-jest-resolve@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.2.0.tgz#25aa8b887b31ab8c79763503e209d7c136f74ab1"
+jest-resolve@^22.4.2:
+  version "22.4.2"
+  resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.2.tgz#25d88aa4147462c9c1c6a1ba16250d3794c24d00"
   dependencies:
     browser-resolve "^1.11.2"
     chalk "^2.0.1"
 
-jest-runner@^22.1.4:
-  version "22.1.4"
-  resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.1.4.tgz#e039039110cb1b31febc0f99e349bf7c94304a2f"
-  dependencies:
-    exit "^0.1.2"
-    jest-config "^22.1.4"
-    jest-docblock "^22.1.0"
-    jest-haste-map "^22.1.0"
-    jest-jasmine2 "^22.1.4"
-    jest-leak-detector "^22.1.0"
-    jest-message-util "^22.1.0"
-    jest-runtime "^22.1.4"
-    jest-util "^22.1.4"
-    jest-worker "^22.1.0"
-    throat "^4.0.0"
-
-jest-runner@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.2.0.tgz#173249cff9f58d65c2bb3a47a03ee4806996c927"
+jest-runner@^22.4.2:
+  version "22.4.2"
+  resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.2.tgz#19390ea9d99f768973e16f95a1efa351c0017e87"
   dependencies:
     exit "^0.1.2"
-    jest-config "^22.2.0"
-    jest-docblock "^22.2.0"
-    jest-haste-map "^22.2.0"
-    jest-jasmine2 "^22.2.0"
-    jest-leak-detector "^22.1.0"
-    jest-message-util "^22.2.0"
-    jest-runtime "^22.2.0"
-    jest-util "^22.2.0"
-    jest-worker "^22.2.0"
+    jest-config "^22.4.2"
+    jest-docblock "^22.4.0"
+    jest-haste-map "^22.4.2"
+    jest-jasmine2 "^22.4.2"
+    jest-leak-detector "^22.4.0"
+    jest-message-util "^22.4.0"
+    jest-runtime "^22.4.2"
+    jest-util "^22.4.1"
+    jest-worker "^22.2.2"
     throat "^4.0.0"
 
-jest-runtime@^22.1.4:
-  version "22.1.4"
-  resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.1.4.tgz#1474d9f5cda518b702e0b25a17d4ef3fc563a20c"
-  dependencies:
-    babel-core "^6.0.0"
-    babel-jest "^22.1.0"
-    babel-plugin-istanbul "^4.1.5"
-    chalk "^2.0.1"
-    convert-source-map "^1.4.0"
-    exit "^0.1.2"
-    graceful-fs "^4.1.11"
-    jest-config "^22.1.4"
-    jest-haste-map "^22.1.0"
-    jest-regex-util "^22.1.0"
-    jest-resolve "^22.1.4"
-    jest-util "^22.1.4"
-    json-stable-stringify "^1.0.1"
-    micromatch "^2.3.11"
-    realpath-native "^1.0.0"
-    slash "^1.0.0"
-    strip-bom "3.0.0"
-    write-file-atomic "^2.1.0"
-    yargs "^10.0.3"
-
-jest-runtime@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.2.0.tgz#f2ff307eae5ed10fbca8501534aba0922c7da693"
+jest-runtime@^22.4.2:
+  version "22.4.2"
+  resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.2.tgz#0de0444f65ce15ee4f2e0055133fc7c17b9168f3"
   dependencies:
     babel-core "^6.0.0"
-    babel-jest "^22.2.0"
+    babel-jest "^22.4.1"
     babel-plugin-istanbul "^4.1.5"
     chalk "^2.0.1"
     convert-source-map "^1.4.0"
     exit "^0.1.2"
     graceful-fs "^4.1.11"
-    jest-config "^22.2.0"
-    jest-haste-map "^22.2.0"
+    jest-config "^22.4.2"
+    jest-haste-map "^22.4.2"
     jest-regex-util "^22.1.0"
-    jest-resolve "^22.2.0"
-    jest-util "^22.2.0"
+    jest-resolve "^22.4.2"
+    jest-util "^22.4.1"
+    jest-validate "^22.4.2"
     json-stable-stringify "^1.0.1"
     micromatch "^2.3.11"
     realpath-native "^1.0.0"
@@ -6895,27 +6643,20 @@ jest-runtime@^22.2.0:
     write-file-atomic "^2.1.0"
     yargs "^10.0.3"
 
-jest-snapshot@^22.1.2:
-  version "22.1.2"
-  resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.1.2.tgz#b270cf6e3098f33aceeafda02b13eb0933dc6139"
-  dependencies:
-    chalk "^2.0.1"
-    jest-diff "^22.1.0"
-    jest-matcher-utils "^22.1.0"
-    mkdirp "^0.5.1"
-    natural-compare "^1.4.0"
-    pretty-format "^22.1.0"
+jest-serializer@^22.4.0:
+  version "22.4.0"
+  resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.0.tgz#b5d145b98c4b0d2c20ab686609adbb81fe23b566"
 
-jest-snapshot@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.2.0.tgz#0c0ba152d296ef70fa198cc84977a2cc269ee4cf"
+jest-snapshot@^22.4.0:
+  version "22.4.0"
+  resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.0.tgz#03d3ce63f8fa7352388afc6a3c8b5ccc3a180ed7"
   dependencies:
     chalk "^2.0.1"
-    jest-diff "^22.1.0"
-    jest-matcher-utils "^22.2.0"
+    jest-diff "^22.4.0"
+    jest-matcher-utils "^22.4.0"
     mkdirp "^0.5.1"
     natural-compare "^1.4.0"
-    pretty-format "^22.1.0"
+    pretty-format "^22.4.0"
 
 jest-styled-components@^4.10.0:
   version "4.10.0"
@@ -6923,29 +6664,17 @@ jest-styled-components@^4.10.0:
   dependencies:
     css "^2.2.1"
 
-jest-util@^22.1.4:
-  version "22.1.4"
-  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.1.4.tgz#ac8cbd43ee654102f1941f3f0e9d1d789a8b6a9b"
-  dependencies:
-    callsites "^2.0.0"
-    chalk "^2.0.1"
-    graceful-fs "^4.1.11"
-    is-ci "^1.0.10"
-    jest-message-util "^22.1.0"
-    jest-validate "^22.1.2"
-    mkdirp "^0.5.1"
-
-jest-util@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.2.0.tgz#afad693641447858bec7b37f32952516bf887262"
+jest-util@^22.4.1:
+  version "22.4.1"
+  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.1.tgz#dd17c3bdb067f8e90591563ec0c42bf847dc249f"
   dependencies:
     callsites "^2.0.0"
     chalk "^2.0.1"
     graceful-fs "^4.1.11"
     is-ci "^1.0.10"
-    jest-message-util "^22.2.0"
-    jest-validate "^22.2.0"
+    jest-message-util "^22.4.0"
     mkdirp "^0.5.1"
+    source-map "^0.6.0"
 
 jest-validate@^21.1.0:
   version "21.2.1"
@@ -6956,48 +6685,28 @@ jest-validate@^21.1.0:
     leven "^2.1.0"
     pretty-format "^21.2.1"
 
-jest-validate@^22.1.2:
-  version "22.1.2"
-  resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.1.2.tgz#c3b06bcba7bd9a850919fe336b5f2a8c3a239404"
-  dependencies:
-    chalk "^2.0.1"
-    jest-get-type "^22.1.0"
-    leven "^2.1.0"
-    pretty-format "^22.1.0"
-
-jest-validate@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.2.0.tgz#f7ce459105a8210825e5e57279f868ab080063fa"
+jest-validate@^22.4.2:
+  version "22.4.2"
+  resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.2.tgz#e789a4e056173bf97fe797a2df2d52105c57d4f4"
   dependencies:
     chalk "^2.0.1"
+    jest-config "^22.4.2"
     jest-get-type "^22.1.0"
     leven "^2.1.0"
-    pretty-format "^22.1.0"
-
-jest-worker@^22.1.0:
-  version "22.1.0"
-  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.1.0.tgz#0987832fe58fbdc205357f4c19b992446368cafb"
-  dependencies:
-    merge-stream "^1.0.1"
+    pretty-format "^22.4.0"
 
-jest-worker@^22.2.0:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.0.tgz#d88d6ee176d6409f206cbbf7b485250793264262"
+jest-worker@^22.2.2:
+  version "22.2.2"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.2.tgz#c1f5dc39976884b81f68ec50cb8532b2cbab3390"
   dependencies:
     merge-stream "^1.0.1"
 
-jest@^22.1.1:
-  version "22.2.0"
-  resolved "https://registry.yarnpkg.com/jest/-/jest-22.2.0.tgz#024040afa1e83faf212f35dfb8941e7ece2d8b25"
+jest@^22.1.1, jest@^22.1.4:
+  version "22.4.2"
+  resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.2.tgz#34012834a49bf1bdd3bc783850ab44e4499afc20"
   dependencies:
     import-local "^1.0.0"
-    jest-cli "^22.2.0"
-
-jest@^22.1.4:
-  version "22.1.4"
-  resolved "https://registry.yarnpkg.com/jest/-/jest-22.1.4.tgz#9ec71373a38f40ff92a3e5e96ae85687c181bb72"
-  dependencies:
-    jest-cli "^22.1.4"
+    jest-cli "^22.4.2"
 
 jmespath@0.15.0:
   version "0.15.0"
@@ -7008,8 +6717,8 @@ joi-browser@^13.0.1:
   resolved "https://registry.yarnpkg.com/joi-browser/-/joi-browser-13.0.1.tgz#06a7b782d94bca6fa0f107138846ea16588b2e7b"
 
 joi@^13.1.0:
-  version "13.1.0"
-  resolved "https://registry.yarnpkg.com/joi/-/joi-13.1.0.tgz#59e7b8714b932a1e342c3583d5841d7169ff1822"
+  version "13.1.2"
+  resolved "https://registry.yarnpkg.com/joi/-/joi-13.1.2.tgz#b2db260323cc7f919fafa51e09e2275bd089a97e"
   dependencies:
     hoek "5.x.x"
     isemail "3.x.x"
@@ -7024,11 +6733,7 @@ joi@^6.10.1, joi@^6.9.1:
     moment "2.x.x"
     topo "1.x.x"
 
-js-base64@^2.1.8:
-  version "2.4.0"
-  resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.0.tgz#9e566fee624751a1d720c966cd6226d29d4025aa"
-
-js-base64@^2.1.9:
+js-base64@^2.1.8, js-base64@^2.1.9:
   version "2.4.3"
   resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582"
 
@@ -7059,8 +6764,8 @@ jsbn@~0.1.0:
   resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
 
 jsdom@^11.5.1:
-  version "11.6.1"
-  resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.1.tgz#43fffc10072597a8ee9680cba46900d9e4dbeba2"
+  version "11.6.2"
+  resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.2.tgz#25d1ef332d48adf77fc5221fe2619967923f16bb"
   dependencies:
     abab "^1.0.4"
     acorn "^5.3.0"
@@ -7075,7 +6780,7 @@ jsdom@^11.5.1:
     html-encoding-sniffer "^1.0.2"
     left-pad "^1.2.0"
     nwmatcher "^1.4.3"
-    parse5 "^4.0.0"
+    parse5 "4.0.0"
     pn "^1.1.0"
     request "^2.83.0"
     request-promise-native "^1.0.5"
@@ -7093,6 +6798,10 @@ jsesc@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
 
+jsesc@^2.5.1:
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe"
+
 jsesc@~0.5.0:
   version "0.5.0"
   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
@@ -7123,7 +6832,7 @@ json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
   dependencies:
     jsonify "~0.0.0"
 
-json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1:
+json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
 
@@ -7155,15 +6864,6 @@ jsonify@~0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
 
-jsonist@~1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/jsonist/-/jsonist-1.3.0.tgz#c0c74b95ef1c952038619b29efa520b1cc987556"
-  dependencies:
-    bl "~1.0.0"
-    hyperquest "~1.2.0"
-    json-stringify-safe "~5.0.0"
-    xtend "~4.0.0"
-
 jsonparse@^1.2.0:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
@@ -7192,8 +6892,10 @@ jsprim@^1.2.2:
     verror "1.10.0"
 
 jss-camel-case@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.yarnpkg.com/jss-camel-case/-/jss-camel-case-6.0.0.tgz#7cf8453e395c31fed931d11efbc885edcd61132e"
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/jss-camel-case/-/jss-camel-case-6.1.0.tgz#ccb1ff8d6c701c02a1fed6fb6fb6b7896e11ce44"
+  dependencies:
+    hyphenate-style-name "^1.0.2"
 
 jss-compose@^5.0.0:
   version "5.0.0"
@@ -7222,18 +6924,28 @@ jss-nested@^6.0.1:
     warning "^3.0.0"
 
 jss@^9.3.3:
-  version "9.6.0"
-  resolved "https://registry.yarnpkg.com/jss/-/jss-9.6.0.tgz#a4f256263608b39a37f2d3c10b9ab08d9ab841f3"
+  version "9.8.0"
+  resolved "https://registry.yarnpkg.com/jss/-/jss-9.8.0.tgz#77830def563870103f8671ed31ce3a3d2f32aa2b"
   dependencies:
     is-in-browser "^1.1.3"
     symbol-observable "^1.1.0"
     warning "^3.0.0"
 
-jsx-ast-utils@^1.3.4, jsx-ast-utils@^1.4.0:
+jstransform@~11.0.0:
+  version "11.0.3"
+  resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223"
+  dependencies:
+    base62 "^1.1.0"
+    commoner "^0.10.1"
+    esprima-fb "^15001.1.0-dev-harmony-fb"
+    object-assign "^2.0.0"
+    source-map "^0.4.2"
+
+jsx-ast-utils@^1.3.4:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"
 
-jsx-ast-utils@^2.0.0:
+jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f"
   dependencies:
@@ -7282,7 +6994,7 @@ kind-of@^4.0.0:
   dependencies:
     is-buffer "^1.1.5"
 
-kind-of@^5.0.0, kind-of@^5.0.2:
+kind-of@^5.0.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
 
@@ -7296,9 +7008,9 @@ klaw@^1.0.0:
   optionalDependencies:
     graceful-fs "^4.1.9"
 
-known-css-properties@^0.4.0:
-  version "0.4.1"
-  resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.4.1.tgz#baaaf704e5f8a5f10e0e221212aae3ea738ea372"
+known-css-properties@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.5.0.tgz#6ff66943ed4a5b55657ee095779a91f4536f8084"
 
 lazy-cache@^0.2.3:
   version "0.2.7"
@@ -7331,16 +7043,16 @@ left-pad@^1.2.0:
   resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee"
 
 lerna@^2.5.1:
-  version "2.5.1"
-  resolved "https://registry.yarnpkg.com/lerna/-/lerna-2.5.1.tgz#d07099bd3051ee799f98c753328bd69e96c6fab8"
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/lerna/-/lerna-2.9.0.tgz#303f70bc50b1c4541bdcf54eda13c36fe54401f3"
   dependencies:
     async "^1.5.0"
     chalk "^2.1.0"
     cmd-shim "^2.0.2"
     columnify "^1.5.4"
     command-join "^2.0.0"
-    conventional-changelog-cli "^1.3.2"
-    conventional-recommended-bump "^1.0.1"
+    conventional-changelog-cli "^1.3.13"
+    conventional-recommended-bump "^1.2.1"
     dedent "^0.7.0"
     execa "^0.8.0"
     find-up "^2.1.0"
@@ -7353,7 +7065,7 @@ lerna@^2.5.1:
     hosted-git-info "^2.5.0"
     inquirer "^3.2.2"
     is-ci "^1.0.10"
-    load-json-file "^3.0.0"
+    load-json-file "^4.0.0"
     lodash "^4.17.4"
     minimatch "^3.0.4"
     npmlog "^4.1.2"
@@ -7361,11 +7073,12 @@ lerna@^2.5.1:
     package-json "^4.0.1"
     path-exists "^3.0.0"
     read-cmd-shim "^1.0.1"
-    read-pkg "^2.0.0"
+    read-pkg "^3.0.0"
     rimraf "^2.6.1"
     safe-buffer "^5.1.1"
     semver "^5.4.1"
     signal-exit "^3.0.2"
+    slash "^1.0.0"
     strong-log-transformer "^1.0.6"
     temp-write "^3.3.0"
     write-file-atomic "^2.3.0"
@@ -7373,62 +7086,75 @@ lerna@^2.5.1:
     write-pkg "^3.1.0"
     yargs "^8.0.2"
 
-level-codec@7.0.0:
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.0.tgz#c755b68d0d44ffa0b1cba044b8f81a55a14ad39b"
-
-level-codec@~6.1.0:
-  version "6.1.0"
-  resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-6.1.0.tgz#f5df0a99582f76dac43855151ab6f4e4d0d60045"
+level-codec@7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7"
 
-level-errors@^1.0.3:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.1.tgz#52fdc2dbbaf395cf767db843929a38b7015678d2"
-  dependencies:
-    errno "~0.1.1"
+level-codec@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-8.0.0.tgz#3a4a0de06dae20c2f5a57b3372c7651e67083e03"
 
-level-errors@~1.0.3:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859"
+level-errors@^1.0.4, level-errors@~1.1.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d"
   dependencies:
     errno "~0.1.1"
 
-level-iterator-stream@~1.3.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed"
+level-iterator-stream@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-2.0.0.tgz#e0fe4273a0322177c81bb87684016bb5b90a98b4"
   dependencies:
     inherits "^2.0.1"
-    level-errors "^1.0.3"
-    readable-stream "^1.0.33"
+    readable-stream "^2.0.5"
     xtend "^4.0.0"
 
+level-packager@^2.0.2:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-2.1.1.tgz#10b653decb67b0a09c4e961ae84f196edaad205a"
+  dependencies:
+    encoding-down "~4.0.0"
+    levelup "^2.0.0"
+
 level-write-stream@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/level-write-stream/-/level-write-stream-1.0.0.tgz#3f7fbb679a55137c0feb303dee766e12ee13c1dc"
   dependencies:
     end-stream "~0.1.0"
 
-leveldown@1.5.0:
-  version "1.5.0"
-  resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-1.5.0.tgz#6b8d3cbea7a4a89aa47444607d7358213e6fcb81"
-  dependencies:
-    abstract-leveldown "~2.6.1"
-    bindings "~1.2.1"
-    fast-future "~1.0.0"
-    nan "~2.4.0"
-    prebuild "^4.1.1"
-
-levelup@1.3.8:
-  version "1.3.8"
-  resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.8.tgz#fb442c488efbea1043f7eb9929a792a74fbd1da6"
-  dependencies:
-    deferred-leveldown "~1.2.1"
-    level-codec "~6.1.0"
-    level-errors "~1.0.3"
-    level-iterator-stream "~1.3.0"
-    prr "~1.0.1"
-    semver "~5.1.0"
-    xtend "~4.0.0"
+level@2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/level/-/level-2.1.1.tgz#6c9d459dc6a417ef1f53c58e3cb23180b0734926"
+  dependencies:
+    level-packager "^2.0.2"
+    leveldown "^2.1.1"
+
+leveldown@2.1.1, leveldown@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-2.1.1.tgz#2f4d786dfe6ba3ecc63409784ce29eca110413bf"
+  dependencies:
+    abstract-leveldown "~3.0.0"
+    bindings "~1.3.0"
+    fast-future "~1.0.2"
+    nan "~2.8.0"
+    prebuild-install "^2.1.0"
+
+levelup@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/levelup/-/levelup-2.0.1.tgz#3dc91b3e632d37c9e546239c864118b004c9f860"
+  dependencies:
+    deferred-leveldown "~2.0.2"
+    level-errors "~1.1.0"
+    level-iterator-stream "~2.0.0"
+    xtend "~4.0.0"
+
+levelup@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/levelup/-/levelup-2.0.2.tgz#83dd22ffd5ee14482143c37cddfb8457854d3727"
+  dependencies:
+    deferred-leveldown "~3.0.0"
+    level-errors "~1.1.0"
+    level-iterator-stream "~2.0.0"
+    xtend "~4.0.0"
 
 leven@^2.1.0:
   version "2.1.0"
@@ -7442,26 +7168,41 @@ levn@^0.3.0, levn@~0.3.0:
     type-check "~0.3.2"
 
 libtidy@^0.3.2:
-  version "0.3.6"
-  resolved "https://registry.yarnpkg.com/libtidy/-/libtidy-0.3.6.tgz#d07e0e00764631b2d13e8f3848fa975151099092"
+  version "0.3.7"
+  resolved "https://registry.yarnpkg.com/libtidy/-/libtidy-0.3.7.tgz#a51c4c8bb7abf4d4fd4d9537467d969bac1fe0bd"
   dependencies:
     nan "^2.1.0"
     node-pre-gyp "^0.6.36"
 
+lie@3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/lie/-/lie-3.0.4.tgz#bc7ae1ebe7f1c8de39afdcd4f789076b47b0f634"
+  dependencies:
+    es3ify "^0.2.2"
+    immediate "~3.0.5"
+    inline-process-browser "^1.0.0"
+    unreachable-branch-transform "^0.3.0"
+
 lie@3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
   dependencies:
     immediate "~3.0.5"
 
+lie@^3.1.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/lie/-/lie-3.2.0.tgz#4f13f2f8bbb027d383db338c43043545791aa8dc"
+  dependencies:
+    immediate "~3.0.5"
+
 lint-staged@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-6.0.0.tgz#7ab7d345f2fe302ff196f1de6a005594ace03210"
+  version "6.1.1"
+  resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-6.1.1.tgz#cd08c4d9b8ccc2d37198d1c47ce77d22be6cf324"
   dependencies:
     app-root-path "^2.0.0"
     chalk "^2.1.0"
     commander "^2.11.0"
-    cosmiconfig "^3.1.0"
+    cosmiconfig "^4.0.0"
     debug "^3.1.0"
     dedent "^0.7.0"
     execa "^0.8.0"
@@ -7476,7 +7217,7 @@ lint-staged@^6.0.0:
     p-map "^1.1.1"
     path-is-inside "^1.0.2"
     pify "^3.0.0"
-    staged-git-files "0.0.4"
+    staged-git-files "1.0.0"
     stringify-object "^3.2.0"
 
 listenercount@~1.0.1:
@@ -7554,20 +7295,20 @@ load-json-file@^2.0.0:
     pify "^2.0.0"
     strip-bom "^3.0.0"
 
-load-json-file@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-3.0.0.tgz#7eb3735d983a7ed2262ade4ff769af5369c5c440"
+load-json-file@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
   dependencies:
     graceful-fs "^4.1.2"
-    parse-json "^3.0.0"
-    pify "^2.0.0"
+    parse-json "^4.0.0"
+    pify "^3.0.0"
     strip-bom "^3.0.0"
 
 loader-runner@^2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
 
-loader-utils@^0.2.15, loader-utils@^0.2.16:
+loader-utils@^0.2.16:
   version "0.2.17"
   resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
   dependencies:
@@ -7591,9 +7332,9 @@ locate-path@^2.0.0:
     p-locate "^2.0.0"
     path-exists "^3.0.0"
 
-lodash-es@^4.17.3, lodash-es@^4.2.0, lodash-es@^4.2.1:
-  version "4.17.4"
-  resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7"
+lodash-es@^4.17.3, lodash-es@^4.17.5, lodash-es@^4.2.1:
+  version "4.17.5"
+  resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.5.tgz#9fc6e737b1c4d151d8f9cae2247305d552ce748f"
 
 lodash._reinterpolate@~3.0.0:
   version "3.0.0"
@@ -7639,10 +7380,6 @@ lodash.flattendeep@^4.4.0:
   version "4.4.0"
   resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
 
-lodash.flowright@^3.5.0:
-  version "3.5.0"
-  resolved "https://registry.yarnpkg.com/lodash.flowright/-/lodash.flowright-3.5.0.tgz#2b5fff399716d7e7dc5724fe9349f67065184d67"
-
 lodash.foreach@^4.3.0:
   version "4.5.0"
   resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
@@ -7651,6 +7388,10 @@ lodash.isnull@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/lodash.isnull/-/lodash.isnull-3.0.0.tgz#fafbe59ea1dca27eed786534039dd84c2e07c56e"
 
+lodash.isplainobject@^4.0.6:
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+
 lodash.kebabcase@4.1.1:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
@@ -7663,13 +7404,13 @@ lodash.memoize@^4.1.2:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
 
-lodash.merge@4.6.0, lodash.merge@^4.4.0:
-  version "4.6.0"
-  resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5"
+lodash.merge@4.6.1, lodash.merge@^4.4.0:
+  version "4.6.1"
+  resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54"
 
-lodash.mergewith@4.6.0, lodash.mergewith@^4.6.0:
-  version "4.6.0"
-  resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55"
+lodash.mergewith@4.6.1, lodash.mergewith@^4.6.0:
+  version "4.6.1"
+  resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
 
 lodash.omit@4.5.0:
   version "4.5.0"
@@ -7679,19 +7420,7 @@ lodash.once@^4.0.0:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
 
-lodash.pad@^4.1.0:
-  version "4.5.1"
-  resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70"
-
-lodash.padend@^4.1.0:
-  version "4.6.1"
-  resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e"
-
-lodash.padstart@^4.1.0:
-  version "4.6.1"
-  resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b"
-
-lodash.pick@4.4.0, lodash.pick@^4.2.1, lodash.pick@^4.4.0:
+lodash.pick@4.4.0, lodash.pick@^4.2.1:
   version "4.4.0"
   resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
 
@@ -7752,9 +7481,9 @@ lodash@4.17.2:
   version "4.17.2"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42"
 
-lodash@^4.0.0, lodash@^4.1.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.8.0, lodash@~4.17.2, lodash@~4.17.4:
-  version "4.17.4"
-  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.8.0, lodash@~4.17.4:
+  version "4.17.5"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
 
 log-symbols@^1.0.2:
   version "1.0.2"
@@ -7762,9 +7491,9 @@ log-symbols@^1.0.2:
   dependencies:
     chalk "^1.0.0"
 
-log-symbols@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.1.0.tgz#f35fa60e278832b538dc4dddcbb478a45d3e3be6"
+log-symbols@^2.0.0, log-symbols@^2.1.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
   dependencies:
     chalk "^2.0.1"
 
@@ -7819,6 +7548,10 @@ ltgt@2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.0.tgz#b65ba5fcb349a29924c8e333f7c6a5562f2e4842"
 
+ltgt@~2.1.3:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34"
+
 macaddress@^0.2.8:
   version "0.2.8"
   resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
@@ -7830,8 +7563,8 @@ magic-string@^0.22.4:
     vlq "^0.2.1"
 
 make-dir@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51"
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b"
   dependencies:
     pify "^3.0.0"
 
@@ -7849,6 +7582,10 @@ map-obj@^1.0.0, map-obj@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
 
+map-obj@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9"
+
 map-visit@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
@@ -7928,6 +7665,16 @@ mem@^1.1.0:
   dependencies:
     mimic-fn "^1.0.0"
 
+memdown@1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.2.4.tgz#cd9a34aaf074d53445a271108eb4b8dd4ec0f27f"
+  dependencies:
+    abstract-leveldown "2.4.1"
+    functional-red-black-tree "^1.0.1"
+    immediate "^3.2.3"
+    inherits "~2.0.1"
+    ltgt "~2.1.3"
+
 memory-fs@^0.4.0, memory-fs@~0.4.1:
   version "0.4.1"
   resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
@@ -7950,6 +7697,20 @@ meow@3.7.0, meow@^3.3.0, meow@^3.7.0:
     redent "^1.0.0"
     trim-newlines "^1.0.0"
 
+meow@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.0.tgz#fd5855dd008db5b92c552082db1c307cba20b29d"
+  dependencies:
+    camelcase-keys "^4.0.0"
+    decamelize-keys "^1.0.0"
+    loud-rejection "^1.0.0"
+    minimist "^1.1.3"
+    minimist-options "^3.0.1"
+    normalize-package-data "^2.3.4"
+    read-pkg-up "^3.0.0"
+    redent "^2.0.0"
+    trim-newlines "^2.0.0"
+
 merge-descriptors@1.0.1, merge-descriptors@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
@@ -7987,18 +7748,18 @@ micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7:
     regex-cache "^0.4.2"
 
 micromatch@^3.1.4:
-  version "3.1.5"
-  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.5.tgz#d05e168c206472dfbca985bfef4f57797b4cd4ba"
+  version "3.1.9"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89"
   dependencies:
     arr-diff "^4.0.0"
     array-unique "^0.3.2"
-    braces "^2.3.0"
-    define-property "^1.0.0"
-    extend-shallow "^2.0.1"
-    extglob "^2.0.2"
+    braces "^2.3.1"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    extglob "^2.0.4"
     fragment-cache "^0.2.1"
-    kind-of "^6.0.0"
-    nanomatch "^1.2.5"
+    kind-of "^6.0.2"
+    nanomatch "^1.2.9"
     object.pick "^1.3.0"
     regex-not "^1.0.0"
     snapdragon "^0.8.1"
@@ -8011,19 +7772,15 @@ miller-rabin@^4.0.0:
     bn.js "^4.0.0"
     brorand "^1.0.1"
 
-"mime-db@>= 1.30.0 < 2":
-  version "1.32.0"
-  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.32.0.tgz#485b3848b01a3cda5f968b4882c0771e58e09414"
-
-mime-db@~1.30.0:
-  version "1.30.0"
-  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
+"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0:
+  version "1.33.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
 
-mime-types@^2.1.10, mime-types@^2.1.11, mime-types@^2.1.12, mime-types@^2.1.15, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7:
-  version "2.1.17"
-  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
+mime-types@^2.1.10, mime-types@^2.1.11, mime-types@^2.1.12, mime-types@^2.1.15, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7:
+  version "2.1.18"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
   dependencies:
-    mime-db "~1.30.0"
+    mime-db "~1.33.0"
 
 mime@1.3.x:
   version "1.3.6"
@@ -8038,8 +7795,12 @@ mime@^1.3.4, mime@^1.4.1, mime@^1.5.0:
   resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
 
 mimic-fn@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+
+mimic-response@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e"
 
 min-document@^2.19.0:
   version "2.19.0"
@@ -8055,7 +7816,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
 
-"minimatch@2 || 3", minimatch@3, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2:
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
   dependencies:
@@ -8067,11 +7828,22 @@ minimatch@3.0.3:
   dependencies:
     brace-expansion "^1.0.0"
 
+minimist-options@^3.0.1:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954"
+  dependencies:
+    arrify "^1.0.1"
+    is-plain-obj "^1.1.0"
+
 minimist@0.0.8:
   version "0.0.8"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
 
-minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.2, minimist@^1.1.3, minimist@^1.2.0:
+minimist@1.1.x:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8"
+
+minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
 
@@ -8083,9 +7855,9 @@ minimist@~0.0.1:
   version "0.0.10"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
 
-mississippi@^1.3.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-1.3.1.tgz#2a8bb465e86550ac8b36a7b6f45599171d78671e"
+mississippi@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f"
   dependencies:
     concat-stream "^1.5.0"
     duplexify "^3.4.2"
@@ -8093,14 +7865,14 @@ mississippi@^1.3.0:
     flush-write-stream "^1.0.0"
     from2 "^2.1.0"
     parallel-transform "^1.1.0"
-    pump "^1.0.0"
+    pump "^2.0.1"
     pumpify "^1.3.3"
     stream-each "^1.1.0"
     through2 "^2.0.0"
 
 mixin-deep@^1.2.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.0.tgz#47a8732ba97799457c8c1eca28f95132d7e8150a"
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
   dependencies:
     for-in "^1.0.2"
     is-extendable "^1.0.1"
@@ -8123,8 +7895,8 @@ modify-values@^1.0.0:
   resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.0.tgz#e2b6cdeb9ce19f99317a53722f3dbf5df5eaaab2"
 
 moment@2.x.x, moment@^2.18.1, moment@^2.6.0:
-  version "2.19.4"
-  resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.4.tgz#17e5e2c6ead8819c8ecfad83a0acccb312e94682"
+  version "2.20.1"
+  resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd"
 
 morgan@^1.8.2:
   version "1.9.0"
@@ -8147,10 +7919,6 @@ move-concurrently@^1.0.1:
     rimraf "^2.5.4"
     run-queue "^1.0.3"
 
-ms@0.7.3:
-  version "0.7.3"
-  resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff"
-
 ms@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -8203,32 +7971,33 @@ mute-stream@0.0.7, mute-stream@~0.0.4:
   resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
 
 nan-x@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/nan-x/-/nan-x-1.0.0.tgz#0ee78e8d1cd0592d5b4260a5940154545c61c121"
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/nan-x/-/nan-x-1.0.2.tgz#5f34e9d3115242486219eee3c8bc49fd2425b19a"
 
 nan@2.6.2:
   version "2.6.2"
   resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
 
 nan@^2.1.0, nan@^2.3.0, nan@^2.3.2:
+  version "2.9.2"
+  resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866"
+
+nan@~2.8.0:
   version "2.8.0"
   resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
 
-nan@~2.4.0:
-  version "2.4.0"
-  resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232"
-
-nanomatch@^1.2.5:
-  version "1.2.7"
-  resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.7.tgz#53cd4aa109ff68b7f869591fdc9d10daeeea3e79"
+nanomatch@^1.2.9:
+  version "1.2.9"
+  resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2"
   dependencies:
     arr-diff "^4.0.0"
     array-unique "^0.3.2"
-    define-property "^1.0.0"
-    extend-shallow "^2.0.1"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
     fragment-cache "^0.2.1"
-    is-odd "^1.0.0"
-    kind-of "^5.0.2"
+    is-odd "^2.0.0"
+    is-windows "^1.0.2"
+    kind-of "^6.0.2"
     object.pick "^1.3.0"
     regex-not "^1.0.0"
     snapdragon "^0.8.1"
@@ -8261,17 +8030,22 @@ ncp@1.0.x:
   resolved "https://registry.yarnpkg.com/ncp/-/ncp-1.0.1.tgz#d15367e5cb87432ba117d2bf80fdf45aecfb4246"
 
 nearley@^2.7.10:
-  version "2.11.0"
-  resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.11.0.tgz#5e626c79a6cd2f6ab9e7e5d5805e7668967757ae"
+  version "2.11.1"
+  resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.11.1.tgz#a9c0a5fa942998db5ad18b14fbc8e9fc49672f16"
   dependencies:
     nomnom "~1.6.2"
     railroad-diagrams "^1.0.0"
-    randexp "^0.4.2"
+    randexp "0.4.6"
+    semver "^5.4.1"
 
 negotiator@0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
 
+neo-async@^2.5.0:
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f"
+
 net@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/net/-/net-1.0.2.tgz#d1757ec9a7fb2371d83cf4755ce3e27e10829388"
@@ -8287,18 +8061,24 @@ nocache@2.0.0:
   resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.0.0.tgz#202b48021a0c4cbde2df80de15a17443c8b43980"
 
 nock@^9.0.14:
-  version "9.1.4"
-  resolved "https://registry.yarnpkg.com/nock/-/nock-9.1.4.tgz#5cdda89c5effaed0f448486f0135bf7b1e7bf1dc"
+  version "9.2.3"
+  resolved "https://registry.yarnpkg.com/nock/-/nock-9.2.3.tgz#39738087d6a0497d3a165fb352612b38a2f9b92f"
   dependencies:
-    chai ">=1.9.2 <4.0.0"
-    debug "^2.2.0"
+    chai "^4.1.2"
+    debug "^3.1.0"
     deep-equal "^1.0.0"
     json-stringify-safe "^5.0.1"
-    lodash "~4.17.2"
+    lodash "^4.17.5"
     mkdirp "^0.5.0"
-    propagate "0.4.0"
+    propagate "^1.0.0"
     qs "^6.5.1"
-    semver "^5.3.0"
+    semver "^5.5.0"
+
+node-abi@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.3.0.tgz#f3d554d6ac72a9ee16f0f4dc9548db7c08de4986"
+  dependencies:
+    semver "^5.4.1"
 
 node-dir@^0.1.10:
   version "0.1.17"
@@ -8317,7 +8097,7 @@ node-forge@0.7.1:
   version "0.7.1"
   resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300"
 
-node-gyp@^3.0.3, node-gyp@^3.3.1:
+node-gyp@^3.3.1:
   version "3.6.2"
   resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60"
   dependencies:
@@ -8368,8 +8148,8 @@ node-libs-browser@^2.0.0:
     vm-browserify "0.0.4"
 
 node-mocks-http@^1.6.6:
-  version "1.6.6"
-  resolved "https://registry.yarnpkg.com/node-mocks-http/-/node-mocks-http-1.6.6.tgz#0fdeef866cc122a80051bbd89a876d3c4cd21e13"
+  version "1.6.7"
+  resolved "https://registry.yarnpkg.com/node-mocks-http/-/node-mocks-http-1.6.7.tgz#89f31c12586585c3812e6bd725d417710d7632e3"
   dependencies:
     accepts "^1.3.3"
     depd "^1.1.0"
@@ -8382,26 +8162,7 @@ node-mocks-http@^1.6.6:
     range-parser "^1.2.0"
     type-is "^1.6.14"
 
-node-ninja@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/node-ninja/-/node-ninja-1.0.2.tgz#20a09e57b92e2df591993d4bf098ac3e727062b6"
-  dependencies:
-    fstream "^1.0.0"
-    glob "3 || 4 || 5 || 6 || 7"
-    graceful-fs "^4.1.2"
-    minimatch "3"
-    mkdirp "^0.5.0"
-    nopt "2 || 3"
-    npmlog "0 || 1 || 2"
-    osenv "0"
-    path-array "^1.0.0"
-    request "2"
-    rimraf "2"
-    semver "2.x || 3.x || 4 || 5"
-    tar "^2.0.0"
-    which "1"
-
-node-notifier@^5.1.2, node-notifier@^5.2.1:
+node-notifier@^5.2.1:
   version "5.2.1"
   resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea"
   dependencies:
@@ -8464,13 +8225,9 @@ node-sass@^4.5.3:
     stdout-stream "^1.4.0"
     "true-case-path" "^1.0.2"
 
-nodemailer@^4.0.1:
-  version "4.4.1"
-  resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-4.4.1.tgz#ce480eb3db7b949b3366e301b8f0af1c1248025e"
-
-nodemailer@^4.4.2:
-  version "4.4.2"
-  resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-4.4.2.tgz#f215fb88e8a1052f9f93083909e116d2b79fc8de"
+nodemailer@^4.0.1, nodemailer@^4.4.2:
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-4.6.0.tgz#b99391435aabbd34b74a1283112fbdfd34f7eb8f"
 
 nodesecurity-npm-utils@^5.0.0:
   version "5.0.0"
@@ -8483,7 +8240,7 @@ nomnom@~1.6.2:
     colors "0.5.x"
     underscore "~1.4.4"
 
-noop-logger@^0.1.0:
+noop-logger@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
 
@@ -8545,8 +8302,8 @@ normalize-url@^1.4.0:
     sort-keys "^1.0.0"
 
 npm-path@^2.0.2:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe"
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64"
   dependencies:
     which "^1.2.10"
 
@@ -8564,15 +8321,7 @@ npm-which@^3.0.1:
     npm-path "^2.0.2"
     which "^1.2.10"
 
-"npmlog@0 || 1 || 2", npmlog@^2.0.0:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692"
-  dependencies:
-    ansi "~0.3.1"
-    are-we-there-yet "~1.1.2"
-    gauge "~1.2.5"
-
-"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2, npmlog@^4.1.2:
+"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
   dependencies:
@@ -8619,6 +8368,10 @@ oauth-sign@~0.8.1, oauth-sign@~0.8.2:
   version "0.8.2"
   resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
 
+object-assign@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
+
 object-assign@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
@@ -8658,7 +8411,7 @@ object-is@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6"
 
-object-keys@^1.0.10, object-keys@^1.0.11, object-keys@^1.0.8:
+object-keys@^1.0.11, object-keys@^1.0.6, object-keys@^1.0.8:
   version "1.0.11"
   resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
 
@@ -8672,15 +8425,7 @@ object-visit@^1.0.0:
   dependencies:
     isobject "^3.0.0"
 
-object.assign@^4.0.4:
-  version "4.0.4"
-  resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc"
-  dependencies:
-    define-properties "^1.1.2"
-    function-bind "^1.1.0"
-    object-keys "^1.0.10"
-
-object.assign@^4.1.0:
+object.assign@^4.0.4, object.assign@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
   dependencies:
@@ -8810,13 +8555,13 @@ ora@^0.2.3:
     object-assign "^4.0.1"
 
 ora@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/ora/-/ora-1.3.0.tgz#80078dd2b92a934af66a3ad72a5b910694ede51a"
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/ora/-/ora-1.4.0.tgz#884458215b3a5d4097592285f93321bb7a79e2e5"
   dependencies:
-    chalk "^1.1.1"
+    chalk "^2.1.0"
     cli-cursor "^2.1.0"
-    cli-spinners "^1.0.0"
-    log-symbols "^1.0.2"
+    cli-spinners "^1.0.1"
+    log-symbols "^2.1.0"
 
 original@>=0.0.5, original@^1.0.0:
   version "1.0.0"
@@ -8855,8 +8600,8 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2:
   resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
 
 osenv@0, osenv@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
   dependencies:
     os-homedir "^1.0.0"
     os-tmpdir "^1.0.0"
@@ -8996,16 +8741,16 @@ parse-passwd@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
 
+parse5@4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
+
 parse5@^3.0.1:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
   dependencies:
     "@types/node" "*"
 
-parse5@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
-
 parseurl@^1.3.1, parseurl@~1.3.2:
   version "1.3.2"
   resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
@@ -9043,12 +8788,6 @@ passport@^0.3.2:
     passport-strategy "1.x.x"
     pause "0.0.1"
 
-path-array@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/path-array/-/path-array-1.0.1.tgz#7e2f0f35f07a2015122b868b7eac0eb2c4fec271"
-  dependencies:
-    array-index "^1.0.0"
-
 path-browserify@0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
@@ -9113,6 +8852,10 @@ path-type@^3.0.0:
   dependencies:
     pify "^3.0.0"
 
+pathval@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
+
 pause@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d"
@@ -9171,7 +8914,7 @@ pgpass@1.x:
   dependencies:
     split "^1.0.0"
 
-pify@^2.0.0, pify@^2.2.0, pify@^2.3.0:
+pify@^2.0.0, pify@^2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
 
@@ -9190,11 +8933,11 @@ pinkie@^2.0.0:
   resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
 
 pkg-conf@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.0.0.tgz#071c87650403bccfb9c627f58751bfe47c067279"
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058"
   dependencies:
     find-up "^2.0.0"
-    load-json-file "^2.0.0"
+    load-json-file "^4.0.0"
 
 pkg-config@^1.1.0:
   version "1.1.1"
@@ -9226,9 +8969,13 @@ pkginfo@0.3.x:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21"
 
-platform@1.3.4:
-  version "1.3.4"
-  resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.4.tgz#6f0fb17edaaa48f21442b3a975c063130f1c3ebd"
+pkginfo@0.x.x:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff"
+
+platform@1.3.5:
+  version "1.3.5"
+  resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444"
 
 pluralize@^1.2.1:
   version "1.2.1"
@@ -9315,9 +9062,9 @@ postcss-filter-plugins@^2.0.0:
     postcss "^5.0.4"
     uniqid "^4.0.0"
 
-postcss-html@^0.11.0:
-  version "0.11.0"
-  resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.11.0.tgz#03a3ff3116f8a0fe0d46316ea21893d4db4b63af"
+postcss-html@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.12.0.tgz#39b6adb4005dfc5464df7999c0f81c95bced7e50"
   dependencies:
     htmlparser2 "^3.9.2"
     remark "^8.0.0"
@@ -9394,33 +9141,27 @@ postcss-minify-selectors@^2.0.4:
     postcss "^5.0.14"
     postcss-selector-parser "^2.0.0"
 
-postcss-modules-extract-imports@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb"
-  dependencies:
-    postcss "^6.0.1"
-
 postcss-modules-extract-imports@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85"
   dependencies:
     postcss "^6.0.1"
 
-postcss-modules-local-by-default@^1.0.1, postcss-modules-local-by-default@^1.2.0:
+postcss-modules-local-by-default@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
   dependencies:
     css-selector-tokenizer "^0.7.0"
     postcss "^6.0.1"
 
-postcss-modules-scope@^1.0.0, postcss-modules-scope@^1.1.0:
+postcss-modules-scope@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
   dependencies:
     css-selector-tokenizer "^0.7.0"
     postcss "^6.0.1"
 
-postcss-modules-values@^1.1.0, postcss-modules-values@^1.3.0:
+postcss-modules-values@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
   dependencies:
@@ -9489,11 +9230,18 @@ postcss-safe-parser@^3.0.1:
   dependencies:
     postcss "^6.0.6"
 
+postcss-sass@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.2.0.tgz#e55516441e9526ba4b380a730d3a02e9eaa78c7a"
+  dependencies:
+    gonzales-pe "^4.0.3"
+    postcss "^6.0.6"
+
 postcss-scss@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.2.tgz#ff45cf3354b879ee89a4eb68680f46ac9bb14f94"
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.4.tgz#6310fe1a15be418707a2cfd77f21dd4a06d1e09d"
   dependencies:
-    postcss "^6.0.3"
+    postcss "^6.0.19"
 
 postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
   version "2.2.3"
@@ -9556,21 +9304,13 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0
     source-map "^0.5.6"
     supports-color "^3.2.3"
 
-postcss@^6.0.1:
-  version "6.0.16"
-  resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.16.tgz#112e2fe2a6d2109be0957687243170ea5589e146"
+postcss@^6.0.1, postcss@^6.0.11, postcss@^6.0.13, postcss@^6.0.14, postcss@^6.0.17, postcss@^6.0.19, postcss@^6.0.6, postcss@^6.0.8:
+  version "6.0.19"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.19.tgz#76a78386f670b9d9494a655bf23ac012effd1555"
   dependencies:
-    chalk "^2.3.0"
+    chalk "^2.3.1"
     source-map "^0.6.1"
-    supports-color "^5.1.0"
-
-postcss@^6.0.11, postcss@^6.0.13, postcss@^6.0.14, postcss@^6.0.3, postcss@^6.0.6, postcss@^6.0.8:
-  version "6.0.14"
-  resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.14.tgz#5534c72114739e75d0afcf017db853099f562885"
-  dependencies:
-    chalk "^2.3.0"
-    source-map "^0.6.1"
-    supports-color "^4.4.0"
+    supports-color "^5.2.0"
 
 postgres-array@~1.0.0:
   version "1.0.2"
@@ -9590,52 +9330,293 @@ postgres-interval@^1.1.0:
   dependencies:
     xtend "^4.0.0"
 
+pouchdb-abstract-mapreduce@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-6.4.3.tgz#0310053812d16ff9545a3db43f5e38a67a0133d7"
+  dependencies:
+    pouchdb-binary-utils "6.4.3"
+    pouchdb-collate "6.4.3"
+    pouchdb-collections "6.4.3"
+    pouchdb-mapreduce-utils "6.4.3"
+    pouchdb-md5 "6.4.3"
+    pouchdb-promise "6.4.3"
+    pouchdb-utils "6.4.3"
+
+pouchdb-adapter-http@^6.2.0:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-adapter-http/-/pouchdb-adapter-http-6.4.3.tgz#0bc713e4d5f5b7bbaa4dc509d417d38b7733a71f"
+  dependencies:
+    argsarray "0.0.1"
+    pouchdb-ajax "6.4.3"
+    pouchdb-binary-utils "6.4.3"
+    pouchdb-errors "6.4.3"
+    pouchdb-promise "6.4.3"
+    pouchdb-utils "6.4.3"
+
+pouchdb-adapter-leveldb-core@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-adapter-leveldb-core/-/pouchdb-adapter-leveldb-core-6.4.3.tgz#0b623fc12e63acbf5606508ba2008e501803076a"
+  dependencies:
+    argsarray "0.0.1"
+    buffer-from "0.1.1"
+    double-ended-queue "2.1.0-0"
+    levelup "2.0.1"
+    pouchdb-adapter-utils "6.4.3"
+    pouchdb-binary-utils "6.4.3"
+    pouchdb-collections "6.4.3"
+    pouchdb-errors "6.4.3"
+    pouchdb-json "6.4.3"
+    pouchdb-md5 "6.4.3"
+    pouchdb-merge "6.4.3"
+    pouchdb-promise "6.4.3"
+    pouchdb-utils "6.4.3"
+    sublevel-pouchdb "6.4.3"
+    through2 "2.0.3"
+
+pouchdb-adapter-leveldb@^6.1.1:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-adapter-leveldb/-/pouchdb-adapter-leveldb-6.4.3.tgz#0fe0f69b090df849c15b54e09a0e20db13cfa581"
+  dependencies:
+    level "2.1.1"
+    level-write-stream "1.0.0"
+    leveldown "2.1.1"
+    pouchdb-adapter-leveldb-core "6.4.3"
+    pouchdb-merge "6.4.3"
+    pouchdb-utils "6.4.3"
+    through2 "2.0.3"
+
+pouchdb-adapter-memory@^6.1.1:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-adapter-memory/-/pouchdb-adapter-memory-6.4.3.tgz#06edb687be9d063b27e9b58ca30ea1a08a9b94f4"
+  dependencies:
+    memdown "1.2.4"
+    pouchdb-adapter-leveldb-core "6.4.3"
+    pouchdb-utils "6.4.3"
+
+pouchdb-adapter-utils@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-adapter-utils/-/pouchdb-adapter-utils-6.4.3.tgz#384bb1bcd37dc7d473016eb450cec53d665bcae4"
+  dependencies:
+    pouchdb-binary-utils "6.4.3"
+    pouchdb-collections "6.4.3"
+    pouchdb-errors "6.4.3"
+    pouchdb-md5 "6.4.3"
+    pouchdb-merge "6.4.3"
+    pouchdb-promise "6.4.3"
+    pouchdb-utils "6.4.3"
+
+pouchdb-ajax@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-ajax/-/pouchdb-ajax-6.4.3.tgz#642aea957925cb9fcd6493d2f39820c34bca3e88"
+  dependencies:
+    buffer-from "0.1.1"
+    pouchdb-binary-utils "6.4.3"
+    pouchdb-errors "6.4.3"
+    pouchdb-promise "6.4.3"
+    pouchdb-utils "6.4.3"
+    request "2.83.0"
+
+pouchdb-binary-utils@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-binary-utils/-/pouchdb-binary-utils-6.4.3.tgz#ba6d9b9d289a359d47b53c1ec017fd9715a777a9"
+  dependencies:
+    buffer-from "0.1.1"
+
+pouchdb-changes-filter@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-changes-filter/-/pouchdb-changes-filter-6.4.3.tgz#01fcf9dbc9d742fe5060624bb39bc459a3d11a1a"
+  dependencies:
+    pouchdb-errors "6.4.3"
+    pouchdb-selector-core "6.4.3"
+    pouchdb-utils "6.4.3"
+
+pouchdb-collate@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-collate/-/pouchdb-collate-6.4.3.tgz#55a77a1a3e1c2cf86fe4d02aea171e10c2a3f944"
+
+pouchdb-collate@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/pouchdb-collate/-/pouchdb-collate-1.2.0.tgz#cae3b830fca124b7f97d23046e4faa311ec3828c"
+
+pouchdb-collections@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-6.4.3.tgz#2b70ca3143134c361dba6e466518b4f4d8e92ff4"
+
+pouchdb-core@^6.1.1:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-core/-/pouchdb-core-6.4.3.tgz#8a25d60f95b6861191228327e56c04a661389426"
+  dependencies:
+    argsarray "0.0.1"
+    inherits "2.0.3"
+    pouchdb-changes-filter "6.4.3"
+    pouchdb-collections "6.4.3"
+    pouchdb-debug "6.4.3"
+    pouchdb-errors "6.4.3"
+    pouchdb-merge "6.4.3"
+    pouchdb-promise "6.4.3"
+    pouchdb-utils "6.4.3"
+
+pouchdb-debug@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-debug/-/pouchdb-debug-6.4.3.tgz#d5ee0d0f638c455ef947fe6658030db1480c72c0"
+  dependencies:
+    debug "3.1.0"
+
+pouchdb-errors@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-errors/-/pouchdb-errors-6.4.3.tgz#9fa4a13f64ee50c8d593e3235b18b1458977f8d1"
+  dependencies:
+    inherits "2.0.3"
+
+pouchdb-extend@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/pouchdb-extend/-/pouchdb-extend-0.1.2.tgz#d1ce511bf704ed2e29f7bf428a416acfffa124b8"
+
+pouchdb-find@^0.10.3:
+  version "0.10.5"
+  resolved "https://registry.yarnpkg.com/pouchdb-find/-/pouchdb-find-0.10.5.tgz#34f285b8a56496a98f9cef2e1a1f6a0aac4eae8b"
+  dependencies:
+    argsarray "0.0.1"
+    debug "^2.1.0"
+    inherits "^2.0.1"
+    is-array "^1.0.1"
+    pouchdb-collate "^1.2.0"
+    pouchdb-extend "^0.1.2"
+    pouchdb-promise "5.4.0"
+    pouchdb-upsert "~2.0.1"
+    spark-md5 "2.0.2"
+
+pouchdb-find@^6.3.4:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-find/-/pouchdb-find-6.4.3.tgz#1d0128306071434a5e397bb14ce69c831356c95e"
+  dependencies:
+    pouchdb-abstract-mapreduce "6.4.3"
+    pouchdb-collate "6.4.3"
+    pouchdb-md5 "6.4.3"
+    pouchdb-promise "6.4.3"
+    pouchdb-selector-core "6.4.3"
+    pouchdb-utils "6.4.3"
+
+pouchdb-json@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-json/-/pouchdb-json-6.4.3.tgz#a1702c8eb9d656f6566920aaec9fb3e7e1265132"
+  dependencies:
+    vuvuzela "1.0.3"
+
+pouchdb-mapreduce-utils@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-6.4.3.tgz#1245e1ca4d3f216d336030c669dd97d6597442e4"
+  dependencies:
+    argsarray "0.0.1"
+    inherits "2.0.3"
+    pouchdb-collections "6.4.3"
+    pouchdb-utils "6.4.3"
+
+pouchdb-md5@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-md5/-/pouchdb-md5-6.4.3.tgz#d414315366e4bb428fb6048a25655b1eca591797"
+  dependencies:
+    pouchdb-binary-utils "6.4.3"
+    spark-md5 "3.0.0"
+
+pouchdb-merge@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-merge/-/pouchdb-merge-6.4.3.tgz#4ef901f4aaa27be6aec0108998a127fe55bb0628"
+
+pouchdb-promise@5.4.0:
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/pouchdb-promise/-/pouchdb-promise-5.4.0.tgz#e277ac6bda1ac8504597abb5c43a7c3a9e56866f"
+  dependencies:
+    lie "3.0.4"
+
+pouchdb-promise@6.4.3, pouchdb-promise@^6.1.2, pouchdb-promise@^6.3.4:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-promise/-/pouchdb-promise-6.4.3.tgz#74516f4acf74957b54debd0fb2c0e5b5a68ca7b3"
+  dependencies:
+    lie "3.1.1"
+
+pouchdb-promise@^5.4.3:
+  version "5.4.5"
+  resolved "https://registry.yarnpkg.com/pouchdb-promise/-/pouchdb-promise-5.4.5.tgz#5c2a69759141eb73be1e172e522fd84da2e0752e"
+  dependencies:
+    lie "3.0.4"
+
+pouchdb-selector-core@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-selector-core/-/pouchdb-selector-core-6.4.3.tgz#03a9cfd9284589baf836f3005ff15cf5e0eaf705"
+  dependencies:
+    pouchdb-collate "6.4.3"
+    pouchdb-utils "6.4.3"
+
+pouchdb-upsert@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/pouchdb-upsert/-/pouchdb-upsert-2.2.0.tgz#42b15e420848f3b294c35060589fdb51cf7f7f5f"
+  dependencies:
+    pouchdb-promise "^6.1.2"
+
+pouchdb-upsert@~2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/pouchdb-upsert/-/pouchdb-upsert-2.0.2.tgz#c746cc9945e52d8c78e42f63ade0666777996712"
+  dependencies:
+    pouchdb-promise "^5.4.3"
+
+pouchdb-utils@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb-utils/-/pouchdb-utils-6.4.3.tgz#aeb6bb8cbd8cf2d9f04e499bc3b70d1ce2a6c78a"
+  dependencies:
+    argsarray "0.0.1"
+    clone-buffer "1.0.0"
+    immediate "3.0.6"
+    inherits "2.0.3"
+    pouchdb-collections "6.4.3"
+    pouchdb-errors "6.4.3"
+    pouchdb-promise "6.4.3"
+    uuid "3.2.1"
+
 pouchdb@^6.3.4:
-  version "6.3.4"
-  resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-6.3.4.tgz#e3c8596d19cc12f7474ca48d5d3800affaf701b1"
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-6.4.3.tgz#077e812a054ac44e13622a64e0c802325d1d44ad"
   dependencies:
     argsarray "0.0.1"
     buffer-from "0.1.1"
     clone-buffer "1.0.0"
-    debug "2.6.4"
+    debug "3.1.0"
     double-ended-queue "2.1.0-0"
     immediate "3.0.6"
     inherits "2.0.3"
-    level-codec "7.0.0"
+    level "2.1.1"
+    level-codec "7.0.1"
     level-write-stream "1.0.0"
-    leveldown "1.5.0"
-    levelup "1.3.8"
+    leveldown "2.1.1"
+    levelup "2.0.1"
     lie "3.1.1"
     ltgt "2.2.0"
     readable-stream "1.0.33"
-    request "2.80.0"
+    request "2.83.0"
     spark-md5 "3.0.0"
     through2 "2.0.3"
-    uuid "^3.1.0"
+    uuid "3.2.1"
     vuvuzela "1.0.3"
 
-prebuild@^4.1.1:
-  version "4.5.0"
-  resolved "https://registry.yarnpkg.com/prebuild/-/prebuild-4.5.0.tgz#2aaa0df2063bff814a803bd4dc94ff9b64e5df00"
+prebuild-install@^2.1.0:
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.1.tgz#0f234140a73760813657c413cdccdda58296b1da"
   dependencies:
-    async "^1.4.0"
-    execspawn "^1.0.1"
-    expand-template "^1.0.0"
-    ghreleases "^1.0.2"
+    detect-libc "^1.0.3"
+    expand-template "^1.0.2"
     github-from-package "0.0.0"
-    minimist "^1.1.2"
+    minimist "^1.2.0"
     mkdirp "^0.5.1"
-    node-gyp "^3.0.3"
-    node-ninja "^1.0.1"
-    noop-logger "^0.1.0"
-    npmlog "^2.0.0"
+    node-abi "^2.2.0"
+    noop-logger "^0.1.1"
+    npmlog "^4.0.1"
     os-homedir "^1.0.1"
-    pump "^1.0.0"
-    rc "^1.0.3"
-    simple-get "^1.4.2"
-    tar-fs "^1.7.0"
-    tar-stream "^1.2.1"
-    xtend "^4.0.1"
+    pump "^2.0.1"
+    rc "^1.1.6"
+    simple-get "^2.7.0"
+    tar-fs "^1.13.0"
+    tunnel-agent "^0.6.0"
+    which-pm-runs "^1.0.0"
 
 prelude-ls@~1.1.2:
   version "1.1.2"
@@ -9650,8 +9631,8 @@ preserve@^0.2.0:
   resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
 
 prettier@^1.8.2:
-  version "1.9.1"
-  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.9.1.tgz#41638a0d47c1efbd1b7d5a742aaa5548eab86d70"
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.11.1.tgz#61e43fc4cd44e68f2b0dfc2c38cd4bb0fccdcc75"
 
 pretty-error@^2.0.2:
   version "2.1.1"
@@ -9667,9 +9648,9 @@ pretty-format@^21.2.1:
     ansi-regex "^3.0.0"
     ansi-styles "^3.2.0"
 
-pretty-format@^22.1.0:
-  version "22.1.0"
-  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.1.0.tgz#2277605b40ed4529ae4db51ff62f4be817647914"
+pretty-format@^22.4.0:
+  version "22.4.0"
+  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.0.tgz#237b1f7e1c50ed03bc65c03ccc29d7c8bb7beb94"
   dependencies:
     ansi-regex "^3.0.0"
     ansi-styles "^3.2.0"
@@ -9682,6 +9663,10 @@ process-nextick-args@~1.0.6:
   version "1.0.7"
   resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
 
+process-nextick-args@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+
 process@^0.11.10:
   version "0.11.10"
   resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
@@ -9703,8 +9688,8 @@ promise-inflight@^1.0.1:
   resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
 
 promise-queue@^2.2.3:
-  version "2.2.3"
-  resolved "https://registry.yarnpkg.com/promise-queue/-/promise-queue-2.2.3.tgz#8534d76bf4673c3baa3a82bba01bd295cc30f14f"
+  version "2.2.5"
+  resolved "https://registry.yarnpkg.com/promise-queue/-/promise-queue-2.2.5.tgz#2f6f5f7c0f6d08109e967659c79b88a9ed5e93b4"
 
 promise@^7.1.1:
   version "7.3.1"
@@ -9712,7 +9697,18 @@ promise@^7.1.1:
   dependencies:
     asap "~2.0.3"
 
-prompt@^1.0.0, prompt@flatiron/prompt#1c95d1d8d333b5fbc13fa5f0619f3dcf0d514f87:
+prompt@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/prompt/-/prompt-1.0.0.tgz#8e57123c396ab988897fb327fd3aedc3e735e4fe"
+  dependencies:
+    colors "^1.1.2"
+    pkginfo "0.x.x"
+    read "1.0.x"
+    revalidator "0.1.x"
+    utile "0.3.x"
+    winston "2.1.x"
+
+prompt@flatiron/prompt#1c95d1d8d333b5fbc13fa5f0619f3dcf0d514f87, "prompt@github:flatiron/prompt#1c95d1d8d333b5fbc13fa5f0619f3dcf0d514f87":
   version "1.0.0"
   resolved "https://codeload.github.com/flatiron/prompt/tar.gz/1c95d1d8d333b5fbc13fa5f0619f3dcf0d514f87"
   dependencies:
@@ -9729,16 +9725,16 @@ prop-types-extra@^1.0.1:
     warning "^3.0.0"
 
 prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0:
-  version "15.6.0"
-  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
+  version "15.6.1"
+  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca"
   dependencies:
     fbjs "^0.8.16"
     loose-envify "^1.3.1"
     object-assign "^4.1.1"
 
-propagate@0.4.0:
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/propagate/-/propagate-0.4.0.tgz#f3fcca0a6fe06736a7ba572966069617c130b481"
+propagate@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/propagate/-/propagate-1.0.0.tgz#00c2daeedda20e87e3782b344adba1cddd6ad709"
 
 property-is-enumerable-x@^1.1.0:
   version "1.1.0"
@@ -9748,11 +9744,11 @@ property-is-enumerable-x@^1.1.0:
     to-property-key-x "^2.0.1"
 
 proxy-addr@~2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec"
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341"
   dependencies:
     forwarded "~0.1.2"
-    ipaddr.js "1.5.2"
+    ipaddr.js "1.6.0"
 
 prr@~1.0.1:
   version "1.0.1"
@@ -9778,91 +9774,14 @@ public-encrypt@^4.0.0:
     parse-asn1 "^5.0.0"
     randombytes "^2.0.1"
 
-pubsweet-client@^1.1.2:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/pubsweet-client/-/pubsweet-client-1.1.4.tgz#9b4ea16bd25d305d7e3392aa45c0db8865471611"
-  dependencies:
-    authsome "0.0.9"
-    config "^1.21.0"
-    event-source-polyfill "^0.0.10"
-    global "^4.3.1"
-    isomorphic-fetch "^2.1.1"
-    lint-staged "^6.0.0"
-    lodash "^4.0.0"
-    prop-types "^15.5.8"
-    pubsweet-component-login "^0.6.0"
-    react "^15.4.4"
-    react-css-themr "^2.1.2"
-    react-redux "^5.0.2"
-    react-router-dom "^4.2.2"
-    react-router-redux next
-    redux "^3.6.0"
-    redux-form "^7.0.3"
-    redux-logger "^3.0.1"
-    redux-thunk "^2.2.0"
-    reselect "^3.0.1"
-
-pubsweet-component-blog@^0.3.1:
-  version "0.3.5"
-  resolved "https://registry.yarnpkg.com/pubsweet-component-blog/-/pubsweet-component-blog-0.3.5.tgz#3af228868a9bf255414711e0f18e6dd12d455d0e"
-  dependencies:
-    prop-types "^15.5.10"
-    pubsweet-component-manage "^0.2.2"
-    react-bootstrap "^0.31.3"
-    react-redux "^5.0.6"
-    react-router-bootstrap "^0.24.4"
-    react-router-dom "^4.2.2"
-    redux "^3.7.2"
-
-pubsweet-component-form-group@0.1.6:
-  version "0.1.6"
-  resolved "https://registry.yarnpkg.com/pubsweet-component-form-group/-/pubsweet-component-form-group-0.1.6.tgz#020fcb45967abafeb113bed3deefc39cb34e7f60"
-  dependencies:
-    joi-browser "^13.0.1"
-    prop-types "^15.5.10"
-    pubsweet-server "^1.0.4"
-    react-bootstrap "^0.31.3"
-
-pubsweet-component-form-group@^0.1.5:
-  version "0.1.10"
-  resolved "https://registry.yarnpkg.com/pubsweet-component-form-group/-/pubsweet-component-form-group-0.1.10.tgz#5639d1c427b51da0c34772f202f2090ad38eedac"
+pubsweet-component-form-group@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/pubsweet-component-form-group/-/pubsweet-component-form-group-1.0.0.tgz#40d9daaf2c27d2dfa4b9663d15ad9eaad077cca0"
   dependencies:
     joi-browser "^13.0.1"
     prop-types "^15.5.10"
     pubsweet-server "^1.1.0"
-    react-bootstrap "^0.31.3"
-
-pubsweet-component-login@^0.5.2:
-  version "0.5.7"
-  resolved "https://registry.yarnpkg.com/pubsweet-component-login/-/pubsweet-component-login-0.5.7.tgz#10cac6a2d907bc9eda5be355d29b38499c87422f"
-  dependencies:
-    prop-types "^15.5.10"
-    react-bootstrap "^0.31.3"
-    react-redux "^5.0.6"
-    react-router-dom "^4.2.2"
-    react-router-redux "^4.0.8"
-    redux "^3.7.2"
-
-pubsweet-component-login@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.yarnpkg.com/pubsweet-component-login/-/pubsweet-component-login-0.6.0.tgz#4f5ee6ca096b8b8651d50c9798957a694e42c6d2"
-  dependencies:
-    prop-types "^15.5.10"
-    react-bootstrap "^0.31.3"
-    react-redux "^5.0.6"
-    react-router-dom "^4.2.2"
-    react-router-redux "^4.0.8"
-    redux "^3.7.2"
-    redux-form "^7.0.3"
-
-pubsweet-component-navigation@^0.3.2:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/pubsweet-component-navigation/-/pubsweet-component-navigation-0.3.2.tgz#c4f3d2d61ce61ce116215c4fc700afa665285a72"
-  dependencies:
-    prop-types "^15.5.10"
-    react-bootstrap "^0.31.3"
-    react-router-bootstrap "^0.24.4"
-    react-router-dom "^4.2.2"
+    react-bootstrap "^0.32.0"
 
 pubsweet-component-password-reset-backend@^0.2.0:
   version "0.2.2"
@@ -9873,57 +9792,82 @@ pubsweet-component-password-reset-backend@^0.2.0:
     moment "^2.18.1"
     nodemailer "^4.0.1"
 
-pubsweet-component-password-reset-frontend@^0.2.0:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/pubsweet-component-password-reset-frontend/-/pubsweet-component-password-reset-frontend-0.2.3.tgz#801e0a49a45fb04890ef993d3f372009f5c472e6"
-  dependencies:
-    prop-types "^15.5.10"
-    query-string "^5.0.0"
-    react-bootstrap "^0.31.3"
-    react-router "^4.2.0"
-
-pubsweet-component-posts-manager@0.6.5:
-  version "0.6.5"
-  resolved "https://registry.yarnpkg.com/pubsweet-component-posts-manager/-/pubsweet-component-posts-manager-0.6.5.tgz#d35ac7f74bf198d652ff81e9a790ea006ec3719c"
+pubsweet-component-posts-manager@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/pubsweet-component-posts-manager/-/pubsweet-component-posts-manager-1.0.0.tgz#ba24ad6def50f835d786ea0947b6cbbd38c4ce9b"
   dependencies:
     prop-types "^15.5.10"
-    pubsweet-component-form-group "^0.1.5"
-    react-bootstrap "^0.31.3"
-    react-dom "^15.6.1"
+    pubsweet-component-form-group "^1.0.0"
+    react-bootstrap "^0.32.0"
+    react-dom "^16.2.0"
     react-redux "^5.0.6"
     react-router-bootstrap "^0.24.4"
     react-router-dom "^4.2.2"
     redux "^3.7.2"
 
-pubsweet-component-signup@^0.4.0:
-  version "0.4.3"
-  resolved "https://registry.yarnpkg.com/pubsweet-component-signup/-/pubsweet-component-signup-0.4.3.tgz#031748751c66c597b76b5b523ed8c707efda86f1"
-  dependencies:
-    prop-types "^15.5.10"
-    react-bootstrap "^0.31.3"
-    react-redux "^5.0.6"
-    react-router "^4.2.0"
-    redux "^3.7.2"
-
-pubsweet-component-teams-manager@^0.3.0:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/pubsweet-component-teams-manager/-/pubsweet-component-teams-manager-0.3.2.tgz#78d3b1d79c8daed31033361e06d0844d1f1abbe7"
+pubsweet-server@^1.1.0, pubsweet-server@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/pubsweet-server/-/pubsweet-server-1.1.1.tgz#89f16393bd947cec8cb5131b770101f21ef35911"
   dependencies:
-    prop-types "^15.5.10"
-    react-bootstrap "^0.31.3"
-    react-dom "^15.6.1"
-    react-redux "^5.0.6"
-    react-select "^1.0.0-rc.10"
-    redux "^3.7.2"
+    "@pubsweet/logger" "^0.2.2"
+    apollo-server-express "^1.3.2"
+    authsome "0.0.9"
+    bcrypt "^1.0.2"
+    bluebird "^3.5.1"
+    body-parser "^1.15.2"
+    colors "^1.1.2"
+    config "^1.26.2"
+    cookie-parser "^1.4.3"
+    dotenv "^4.0.0"
+    express "^4.16.1"
+    graphql "^0.12.3"
+    graphql-tools "^2.18.0"
+    helmet "^3.8.1"
+    http-status-codes "^1.0.6"
+    joi "^13.1.0"
+    jsonwebtoken "^7.1.7"
+    lodash "^4.0.0"
+    minimist "^1.2.0"
+    morgan "^1.8.2"
+    multer "^1.1.0"
+    passport "^0.3.2"
+    passport-anonymous "^1.0.1"
+    passport-http-bearer "^1.0.1"
+    passport-local "^1.0.0"
+    pouchdb-adapter-http "^6.2.0"
+    pouchdb-adapter-leveldb "^6.1.1"
+    pouchdb-adapter-memory "^6.1.1"
+    pouchdb-core "^6.1.1"
+    pouchdb-find "^0.10.3"
+    pouchdb-upsert "^2.0.0"
+    promise-queue "^2.2.3"
+    prompt "^1.0.0"
+    pubsweet-sse "^0.1.4"
+    relational-pouch "^1.4.5"
+    require-relative "^0.8.7"
+    uuid "^3.0.1"
+    winston "^2.2.0"
 
-pubsweet-component-users-manager@^0.2.1:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/pubsweet-component-users-manager/-/pubsweet-component-users-manager-0.2.3.tgz#8cad081f405f5428a3e4d27a4d0ad77763ce0a2f"
+pubsweet@^1.1.8:
+  version "1.1.9"
+  resolved "https://registry.yarnpkg.com/pubsweet/-/pubsweet-1.1.9.tgz#645def7c850b7443ade106c862e04c0ced8b51d5"
   dependencies:
-    prop-types "^15.5.10"
-    react-bootstrap "^0.31.3"
-    react-redux "^5.0.6"
-    redux "^3.7.2"
+    "@pubsweet/db-manager" "^0.0.17"
+    "@pubsweet/logger" "^0.2.2"
+    bluebird "^3.5.0"
+    colors "^1.1.2"
+    commander "^2.9.0"
+    express "^4.15.3"
+    forever-monitor "^1.7.0"
+    fs-extra "^4.0.2"
+    inflection "^1.12.0"
+    prompt flatiron/prompt#1c95d1d8d333b5fbc13fa5f0619f3dcf0d514f87
+    pubsweet-server "^1.1.1"
+    require-relative "^0.8.7"
+    uuid "^3.0.1"
+    webpack "^3.8.1"
+    webpack-dev-middleware "^1.12.0"
+    webpack-hot-middleware "^2.20.0"
 
 pump@^1.0.0:
   version "1.0.3"
@@ -9932,7 +9876,7 @@ pump@^1.0.0:
     end-of-stream "^1.1.0"
     once "^1.3.1"
 
-pump@^2.0.0:
+pump@^2.0.0, pump@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
   dependencies:
@@ -9960,8 +9904,8 @@ punycode@^1.2.4, punycode@^1.4.1:
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
 
 pusher-js@^4.2.1:
-  version "4.2.1"
-  resolved "https://registry.yarnpkg.com/pusher-js/-/pusher-js-4.2.1.tgz#7c10e2f981b8ed4390c1cbed448eb5c0967aaa22"
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/pusher-js/-/pusher-js-4.2.2.tgz#de391bfb14d221ef96f462304f8a73b95ce9acc5"
   dependencies:
     faye-websocket "0.9.4"
     xmlhttprequest "^1.8.0"
@@ -9975,7 +9919,7 @@ q-i@^1.2.0:
     is-plain-object "^2.0.4"
     stringify-object "^3.2.0"
 
-q@^1.1.2, q@^1.4.1:
+q@^1.1.2, q@^1.4.1, q@^1.5.1:
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
 
@@ -9999,8 +9943,8 @@ query-string@^4.1.0:
     strict-uri-encode "^1.0.0"
 
 query-string@^5.0.0, query-string@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.0.1.tgz#6e2b86fe0e08aef682ecbe86e85834765402bd88"
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.0.tgz#9583b15fd1307f899e973ed418886426a9976469"
   dependencies:
     decode-uri-component "^0.2.0"
     object-assign "^4.1.0"
@@ -10022,6 +9966,10 @@ querystringify@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb"
 
+quick-lru@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
+
 raf@^3.4.0:
   version "3.4.0"
   resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575"
@@ -10032,7 +9980,7 @@ railroad-diagrams@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e"
 
-randexp@^0.4.2:
+randexp@0.4.6:
   version "0.4.6"
   resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3"
   dependencies:
@@ -10047,14 +9995,14 @@ randomatic@^1.1.3:
     kind-of "^4.0.0"
 
 randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79"
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
   dependencies:
     safe-buffer "^5.1.0"
 
 randomfill@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62"
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
   dependencies:
     randombytes "^2.0.5"
     safe-buffer "^5.1.0"
@@ -10072,16 +10020,7 @@ raw-body@2.3.2:
     iconv-lite "0.4.19"
     unpipe "1.0.0"
 
-rc@^1.0.1, rc@^1.0.3, rc@^1.1.2, rc@^1.1.6:
-  version "1.2.2"
-  resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077"
-  dependencies:
-    deep-extend "~0.4.0"
-    ini "~1.3.0"
-    minimist "^1.2.0"
-    strip-json-comments "~2.0.1"
-
-rc@^1.1.7:
+rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7:
   version "1.2.5"
   resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd"
   dependencies:
@@ -10090,35 +10029,9 @@ rc@^1.1.7:
     minimist "^1.2.0"
     strip-json-comments "~2.0.1"
 
-react-apollo@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/react-apollo/-/react-apollo-2.0.4.tgz#01dd32a8e388672f5d7385b21cdd0b94009ee9ee"
-  dependencies:
-    apollo-link "^1.0.0"
-    hoist-non-react-statics "^2.2.0"
-    invariant "^2.2.1"
-    lodash.flowright "^3.5.0"
-    lodash.pick "^4.4.0"
-    prop-types "^15.5.8"
-
-react-bootstrap@^0.31.3:
-  version "0.31.5"
-  resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-0.31.5.tgz#57040fa8b1274e1e074803c21a1b895fdabea05a"
-  dependencies:
-    babel-runtime "^6.11.6"
-    classnames "^2.2.5"
-    dom-helpers "^3.2.0"
-    invariant "^2.2.1"
-    keycode "^2.1.2"
-    prop-types "^15.5.10"
-    prop-types-extra "^1.0.1"
-    react-overlays "^0.7.4"
-    uncontrollable "^4.1.0"
-    warning "^3.0.0"
-
 react-bootstrap@^0.32.0:
-  version "0.32.0"
-  resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-0.32.0.tgz#7f656be7b0f88e4bdda819135956bad10d3f167e"
+  version "0.32.1"
+  resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-0.32.1.tgz#60624c1b48a39d773ef6cce6421a4f33ecc166bb"
   dependencies:
     babel-runtime "^6.11.6"
     classnames "^2.2.5"
@@ -10206,15 +10119,6 @@ react-docgen@^3.0.0-beta9:
     node-dir "^0.1.10"
     recast "^0.12.6"
 
-react-dom@^15.6.1:
-  version "15.6.2"
-  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730"
-  dependencies:
-    fbjs "^0.8.9"
-    loose-envify "^1.1.0"
-    object-assign "^4.1.0"
-    prop-types "^15.5.10"
-
 react-dom@^16.2.0:
   version "16.2.0"
   resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"
@@ -10225,8 +10129,8 @@ react-dom@^16.2.0:
     prop-types "^15.6.0"
 
 react-dropzone@^4.2.7:
-  version "4.2.7"
-  resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-4.2.7.tgz#a4963b1f725d5a91e63cd1c2b55ddce537953d46"
+  version "4.2.8"
+  resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-4.2.8.tgz#27ce163544d92c75734b0e1e54c471979587e737"
   dependencies:
     attr-accept "^1.0.3"
     prop-types "^15.5.7"
@@ -10235,9 +10139,9 @@ react-error-overlay@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-3.0.0.tgz#c2bc8f4d91f1375b3dad6d75265d51cd5eeaf655"
 
-react-feather@^1.0.7:
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/react-feather/-/react-feather-1.0.7.tgz#f2118f1d2402b0c1e6f23c732f9e7f9fd4ca61e2"
+react-feather@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/react-feather/-/react-feather-1.0.8.tgz#69b13d5c729949f194d33201dee91bab67fa31a2"
 
 react-group@^1.0.5:
   version "1.0.5"
@@ -10255,22 +10159,6 @@ react-icons@^2.2.7:
   dependencies:
     react-icon-base "2.1.0"
 
-react-input-autosize@^2.1.0:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.1.2.tgz#a3dc11a5517c434db25229925541309de3f7a8f5"
-  dependencies:
-    prop-types "^15.5.8"
-
-react-overlays@^0.7.4:
-  version "0.7.4"
-  resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.7.4.tgz#ef2ec652c3444ab8aa014262b18f662068e56d5c"
-  dependencies:
-    classnames "^2.2.5"
-    dom-helpers "^3.2.1"
-    prop-types "^15.5.10"
-    prop-types-extra "^1.0.1"
-    warning "^3.0.0"
-
 react-overlays@^0.8.0:
   version "0.8.3"
   resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.8.3.tgz#fad65eea5b24301cca192a169f5dddb0b20d3ac5"
@@ -10298,15 +10186,15 @@ react-reconciler@^0.7.0:
     prop-types "^15.6.0"
 
 react-redux@^5.0.2, react-redux@^5.0.6:
-  version "5.0.6"
-  resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946"
+  version "5.0.7"
+  resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.7.tgz#0dc1076d9afb4670f993ffaef44b8f8c1155a4c8"
   dependencies:
-    hoist-non-react-statics "^2.2.1"
+    hoist-non-react-statics "^2.5.0"
     invariant "^2.0.0"
-    lodash "^4.2.0"
-    lodash-es "^4.2.0"
+    lodash "^4.17.5"
+    lodash-es "^4.17.5"
     loose-envify "^1.1.0"
-    prop-types "^15.5.10"
+    prop-types "^15.6.0"
 
 react-router-bootstrap@^0.24.4:
   version "0.24.4"
@@ -10323,23 +10211,11 @@ react-router-dom@^4.2.2:
     loose-envify "^1.3.1"
     prop-types "^15.5.4"
     react-router "^4.2.0"
-    warning "^3.0.0"
-
-react-router-redux@^4.0.8:
-  version "4.0.8"
-  resolved "https://registry.yarnpkg.com/react-router-redux/-/react-router-redux-4.0.8.tgz#227403596b5151e182377dab835b5d45f0f8054e"
-
-react-router-redux@^5.0.0-alpha.9:
-  version "5.0.0-alpha.9"
-  resolved "https://registry.yarnpkg.com/react-router-redux/-/react-router-redux-5.0.0-alpha.9.tgz#825431516e0e6f1fd93b8807f6bd595e23ec3d10"
-  dependencies:
-    history "^4.7.2"
-    prop-types "^15.6.0"
-    react-router "^4.2.0"
+    warning "^3.0.0"
 
-react-router-redux@next:
-  version "5.0.0-alpha.8"
-  resolved "https://registry.yarnpkg.com/react-router-redux/-/react-router-redux-5.0.0-alpha.8.tgz#5242c705730b2ac862aff7a8e90f870d0cf45e12"
+react-router-redux@^5.0.0-alpha.9, react-router-redux@next:
+  version "5.0.0-alpha.9"
+  resolved "https://registry.yarnpkg.com/react-router-redux/-/react-router-redux-5.0.0-alpha.9.tgz#825431516e0e6f1fd93b8807f6bd595e23ec3d10"
   dependencies:
     history "^4.7.2"
     prop-types "^15.6.0"
@@ -10357,20 +10233,12 @@ react-router@^4.2.0:
     prop-types "^15.5.4"
     warning "^3.0.0"
 
-react-select@^1.0.0-rc.10:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/react-select/-/react-select-1.1.0.tgz#626a2de839fdea2ade74dd1b143a9bde34be6c82"
-  dependencies:
-    classnames "^2.2.4"
-    prop-types "^15.5.8"
-    react-input-autosize "^2.1.0"
-
 react-styleguidist@^6.0.24, react-styleguidist@^6.0.8:
-  version "6.2.1"
-  resolved "https://registry.yarnpkg.com/react-styleguidist/-/react-styleguidist-6.2.1.tgz#67ceac9df3aaf1c4350633a9baed7271f20a354e"
+  version "6.2.5"
+  resolved "https://registry.yarnpkg.com/react-styleguidist/-/react-styleguidist-6.2.5.tgz#fe4da35d999220425012c8b0350f06608d734d6d"
   dependencies:
     ast-types "^0.10.1"
-    buble "^0.18.0"
+    buble "^0.19.2"
     chalk "^2.3.0"
     classnames "^2.2.5"
     clean-webpack-plugin "^0.1.17"
@@ -10459,16 +10327,6 @@ react-transition-group@^2.0.0, react-transition-group@^2.2.0:
     prop-types "^15.5.8"
     warning "^3.0.0"
 
-react@^15.4.4:
-  version "15.6.2"
-  resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72"
-  dependencies:
-    create-react-class "^15.6.0"
-    fbjs "^0.8.9"
-    loose-envify "^1.1.0"
-    object-assign "^4.1.0"
-    prop-types "^15.5.10"
-
 react@^16.2.0:
   version "16.2.0"
   resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba"
@@ -10498,6 +10356,13 @@ read-pkg-up@^2.0.0:
     find-up "^2.0.0"
     read-pkg "^2.0.0"
 
+read-pkg-up@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
+  dependencies:
+    find-up "^2.0.0"
+    read-pkg "^3.0.0"
+
 read-pkg@^1.0.0, read-pkg@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
@@ -10514,20 +10379,28 @@ read-pkg@^2.0.0:
     normalize-package-data "^2.3.2"
     path-type "^2.0.0"
 
+read-pkg@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+  dependencies:
+    load-json-file "^4.0.0"
+    normalize-package-data "^2.3.2"
+    path-type "^3.0.0"
+
 read@1.0.x:
   version "1.0.7"
   resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
   dependencies:
     mute-stream "~0.0.4"
 
-"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.2.9, readable-stream@^2.3.3:
-  version "2.3.3"
-  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3:
+  version "2.3.4"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071"
   dependencies:
     core-util-is "~1.0.0"
     inherits "~2.0.3"
     isarray "~1.0.0"
-    process-nextick-args "~1.0.6"
+    process-nextick-args "~2.0.0"
     safe-buffer "~5.1.1"
     string_decoder "~1.0.3"
     util-deprecate "~1.0.1"
@@ -10550,7 +10423,7 @@ readable-stream@1.0.33:
     isarray "0.0.1"
     string_decoder "~0.10.x"
 
-readable-stream@1.1.x, readable-stream@^1.0.33, readable-stream@~1.1.9:
+readable-stream@1.1.x:
   version "1.1.14"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
   dependencies:
@@ -10563,17 +10436,6 @@ readable-stream@~0.0.2:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-0.0.4.tgz#f32d76e3fb863344a548d79923007173665b3b8d"
 
-readable-stream@~2.0.5:
-  version "2.0.6"
-  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
-  dependencies:
-    core-util-is "~1.0.0"
-    inherits "~2.0.1"
-    isarray "~1.0.0"
-    process-nextick-args "~1.0.6"
-    string_decoder "~0.10.x"
-    util-deprecate "~1.0.1"
-
 readable-stream@~2.1.5:
   version "2.1.5"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
@@ -10619,6 +10481,24 @@ recast@0.12.6:
     private "~0.1.5"
     source-map "~0.5.0"
 
+recast@^0.10.1:
+  version "0.10.43"
+  resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f"
+  dependencies:
+    ast-types "0.8.15"
+    esprima-fb "~15001.1001.0-dev-harmony-fb"
+    private "~0.1.5"
+    source-map "~0.5.0"
+
+recast@^0.11.17:
+  version "0.11.23"
+  resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3"
+  dependencies:
+    ast-types "0.9.6"
+    esprima "~3.1.0"
+    private "~0.1.5"
+    source-map "~0.5.0"
+
 recast@^0.12.6:
   version "0.12.9"
   resolved "https://registry.yarnpkg.com/recast/-/recast-0.12.9.tgz#e8e52bdb9691af462ccbd7c15d5a5113647a15f1"
@@ -10657,6 +10537,13 @@ redent@^1.0.0:
     indent-string "^2.1.0"
     strip-indent "^1.0.1"
 
+redent@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa"
+  dependencies:
+    indent-string "^3.0.0"
+    strip-indent "^2.0.0"
+
 reduce-css-calc@^1.2.6:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
@@ -10672,11 +10559,11 @@ reduce-function-call@^1.0.1:
     balanced-match "^0.4.2"
 
 redux-form@^7.0.3:
-  version "7.2.0"
-  resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-7.2.0.tgz#4465d9bc863e40b1704695d672bea75fcf81db04"
+  version "7.2.3"
+  resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-7.2.3.tgz#a01111116f386f3d88451b5528dfbb180561a8b4"
   dependencies:
     deep-equal "^1.0.1"
-    es6-error "^4.0.0"
+    es6-error "^4.1.1"
     hoist-non-react-statics "^2.3.1"
     invariant "^2.2.2"
     is-promise "^2.1.0"
@@ -10691,8 +10578,10 @@ redux-logger@^3.0.1:
     deep-diff "^0.3.5"
 
 redux-mock-store@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.3.0.tgz#6edfef0d2332f20576381069d6d889a6d0a4451c"
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.5.1.tgz#fca4335392e66605420b5559fe02fc5b8bb6d63c"
+  dependencies:
+    lodash.isplainobject "^4.0.6"
 
 redux-thunk@^2.2.0:
   version "2.2.0"
@@ -10737,11 +10626,12 @@ regex-cache@^0.4.2:
   dependencies:
     is-equal-shallow "^0.1.3"
 
-regex-not@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.0.tgz#42f83e39771622df826b02af176525d6a5f157f9"
+regex-not@^1.0.0, regex-not@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
   dependencies:
-    extend-shallow "^2.0.1"
+    extend-shallow "^3.0.2"
+    safe-regex "^1.1.0"
 
 regexpu-core@^1.0.0:
   version "1.0.0"
@@ -10760,8 +10650,8 @@ regexpu-core@^2.0.0:
     regjsparser "^0.1.4"
 
 registry-auth-token@^3.0.1:
-  version "3.3.1"
-  resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006"
+  version "3.3.2"
+  resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20"
   dependencies:
     rc "^1.1.6"
     safe-buffer "^5.0.1"
@@ -10786,6 +10676,19 @@ relateurl@0.2.x:
   version "0.2.7"
   resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
 
+relational-pouch@^1.4.5:
+  version "1.4.6"
+  resolved "https://registry.yarnpkg.com/relational-pouch/-/relational-pouch-1.4.6.tgz#d2772ee1a36992bd8b28d4aaff2ef1a4a0410857"
+  dependencies:
+    argsarray "0.0.1"
+    es3ify "^0.2.2"
+    inherits "~2.0.1"
+    lie "^3.1.0"
+    pouchdb-extend "^0.1.2"
+    pouchdb-find "^6.3.4"
+    pouchdb-promise "^6.3.4"
+    uniq "^1.0.1"
+
 remark-parse@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-4.0.0.tgz#99f1f049afac80382366e2e0d0bd55429dd45d8b"
@@ -10886,7 +10789,7 @@ request-promise-native@^1.0.5:
     stealthy-require "^1.1.0"
     tough-cookie ">=2.3.3"
 
-request@2, request@^2.81.0, request@^2.83.0:
+request@2, request@2.83.0, request@^2.81.0, request@^2.83.0:
   version "2.83.0"
   resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
   dependencies:
@@ -10913,32 +10816,6 @@ request@2, request@^2.81.0, request@^2.83.0:
     tunnel-agent "^0.6.0"
     uuid "^3.1.0"
 
-request@2.80.0:
-  version "2.80.0"
-  resolved "https://registry.yarnpkg.com/request/-/request-2.80.0.tgz#8cc162d76d79381cdefdd3505d76b80b60589bd0"
-  dependencies:
-    aws-sign2 "~0.6.0"
-    aws4 "^1.2.1"
-    caseless "~0.12.0"
-    combined-stream "~1.0.5"
-    extend "~3.0.0"
-    forever-agent "~0.6.1"
-    form-data "~2.1.1"
-    har-validator "~4.2.0"
-    hawk "~3.1.3"
-    http-signature "~1.1.0"
-    is-typedarray "~1.0.0"
-    isstream "~0.1.2"
-    json-stringify-safe "~5.0.1"
-    mime-types "~2.1.7"
-    oauth-sign "~0.8.1"
-    performance-now "^0.2.0"
-    qs "~6.3.0"
-    stringstream "~0.0.4"
-    tough-cookie "~2.3.0"
-    tunnel-agent "~0.4.1"
-    uuid "^3.0.0"
-
 request@2.81.0:
   version "2.81.0"
   resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
@@ -10992,11 +10869,11 @@ request@~2.79.0:
     uuid "^3.0.0"
 
 require-coercible-to-string-x@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/require-coercible-to-string-x/-/require-coercible-to-string-x-1.0.0.tgz#367b3e9ca67e00324c411b0b498453a74cd5569e"
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/require-coercible-to-string-x/-/require-coercible-to-string-x-1.0.2.tgz#b8c96ab42962ab7b28f3311fc6b198124c56f9f6"
   dependencies:
-    require-object-coercible-x "^1.4.1"
-    to-string-x "^1.4.2"
+    require-object-coercible-x "^1.4.3"
+    to-string-x "^1.4.5"
 
 require-directory@^2.1.1:
   version "2.1.1"
@@ -11010,11 +10887,11 @@ require-main-filename@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
 
-require-object-coercible-x@^1.4.1:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/require-object-coercible-x/-/require-object-coercible-x-1.4.1.tgz#75b9fb5bda2d15cf705a5714f108e8b40ca3eb2e"
+require-object-coercible-x@^1.4.1, require-object-coercible-x@^1.4.3:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/require-object-coercible-x/-/require-object-coercible-x-1.4.3.tgz#783719a23a5c0ce24e845fcc50cd55b6421ea4bb"
   dependencies:
-    is-nil-x "^1.4.1"
+    is-nil-x "^1.4.2"
 
 require-relative@^0.8.7:
   version "0.8.7"
@@ -11085,7 +10962,7 @@ resolve@1.1.7:
   version "1.1.7"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
 
-resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0, resolve@^1.3.3:
+resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.3, resolve@^1.5.0:
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
   dependencies:
@@ -11123,7 +11000,7 @@ right-pad@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0"
 
-rimraf@2, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1:
+rimraf@2, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
   version "2.6.2"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
   dependencies:
@@ -11160,8 +11037,8 @@ run-async@^2.2.0:
     is-promise "^2.1.0"
 
 run-parallel@^1.1.2, run-parallel@^1.1.6:
-  version "1.1.6"
-  resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.6.tgz#29003c9a2163e01e2d2dfc90575f2c6c1d61a039"
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.7.tgz#d8f40854b9e19d18c2e0e70180cc05cfc86b650f"
 
 run-queue@^1.0.0, run-queue@^1.0.3:
   version "1.0.3"
@@ -11188,8 +11065,8 @@ rx@^4.1.0:
   resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
 
 rxjs@^5.4.2:
-  version "5.5.5"
-  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.5.tgz#e164f11d38eaf29f56f08c3447f74ff02dd84e97"
+  version "5.5.6"
+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.6.tgz#e31fb96d6fd2ff1fd84bcea8ae9c02d007179c02"
   dependencies:
     symbol-observable "1.0.1"
 
@@ -11197,9 +11074,15 @@ safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, s
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
 
+safe-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+  dependencies:
+    ret "~0.1.10"
+
 sane@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/sane/-/sane-2.2.0.tgz#d6d2e2fcab00e3d283c93b912b7c3a20846f1d56"
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/sane/-/sane-2.4.1.tgz#29f991208cf28636720efdc584293e7fd66663a5"
   dependencies:
     anymatch "^1.3.0"
     exec-sh "^0.2.0"
@@ -11244,6 +11127,13 @@ schema-utils@^0.3.0:
   dependencies:
     ajv "^5.0.0"
 
+schema-utils@^0.4.5:
+  version "0.4.5"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e"
+  dependencies:
+    ajv "^6.1.0"
+    ajv-keywords "^3.1.0"
+
 scss-tokenizer@^0.2.3:
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
@@ -11265,14 +11155,10 @@ semver-utils@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/semver-utils/-/semver-utils-1.1.1.tgz#27d92fec34d27cfa42707d3b40d025ae9855f2df"
 
-"semver@2 || 3 || 4 || 5", semver@5.5.0, semver@^5.3.0:
+"semver@2 || 3 || 4 || 5", semver@5.5.0, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0:
   version "5.5.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
 
-"semver@2.x || 3.x || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.4.1:
-  version "5.4.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
-
 semver@4.3.2:
   version "4.3.2"
   resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7"
@@ -11285,10 +11171,6 @@ semver@~5.0.1:
   version "5.0.3"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
 
-semver@~5.1.0:
-  version "5.1.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19"
-
 send@0.16.1:
   version "0.16.1"
   resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3"
@@ -11377,8 +11259,8 @@ setprototypeof@1.1.0:
   resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
 
 sha.js@^2.4.0, sha.js@^2.4.8:
-  version "2.4.9"
-  resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d"
+  version "2.4.10"
+  resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b"
   dependencies:
     inherits "^2.0.1"
     safe-buffer "^5.0.1"
@@ -11435,17 +11317,17 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
 
-simple-get@^1.4.2:
-  version "1.4.3"
-  resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-1.4.3.tgz#e9755eda407e96da40c5e5158c9ea37b33becbeb"
+simple-concat@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6"
+
+simple-get@^2.7.0:
+  version "2.7.0"
+  resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.7.0.tgz#ad37f926d08129237ff08c4f2edfd6f10e0380b5"
   dependencies:
+    decompress-response "^3.3.0"
     once "^1.3.1"
-    unzip-response "^1.0.0"
-    xtend "^4.0.0"
-
-simple-mime@~0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/simple-mime/-/simple-mime-0.1.0.tgz#95f517c4f466d7cff561a71fc9dab2596ea9ef2e"
+    simple-concat "^1.0.0"
 
 slash@^1.0.0:
   version "1.0.0"
@@ -11559,18 +11441,12 @@ source-map-support@^0.4.15:
   dependencies:
     source-map "^0.5.6"
 
-source-map-support@^0.5.0:
+source-map-support@^0.5.0, source-map-support@^0.5.1:
   version "0.5.3"
   resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76"
   dependencies:
     source-map "^0.6.0"
 
-source-map-support@^0.5.1:
-  version "0.5.2"
-  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.2.tgz#1a6297fd5b2e762b39688c7fc91233b60984f0a5"
-  dependencies:
-    source-map "^0.6.0"
-
 source-map-url@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
@@ -11579,7 +11455,7 @@ source-map-url@~0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9"
 
-source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.6:
+source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0, source-map@~0.5.1:
   version "0.5.7"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
 
@@ -11599,6 +11475,10 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
 
+spark-md5@2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-2.0.2.tgz#37b763847763ae7e7acef2ca5233d01e649a78b7"
+
 spark-md5@3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.0.tgz#3722227c54e2faf24b1dc6d933cc144e6f71bfef"
@@ -11614,19 +11494,27 @@ spawn-sync@^1.0.15:
     concat-stream "^1.4.7"
     os-shim "^0.1.2"
 
-spdx-correct@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+spdx-correct@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"
   dependencies:
-    spdx-license-ids "^1.0.2"
+    spdx-expression-parse "^3.0.0"
+    spdx-license-ids "^3.0.0"
 
-spdx-expression-parse@~1.0.0:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+spdx-exceptions@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9"
 
-spdx-license-ids@^1.0.2:
-  version "1.2.2"
-  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+spdx-expression-parse@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+  dependencies:
+    spdx-exceptions "^2.1.0"
+    spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87"
 
 spdy-transport@^2.0.18:
   version "2.0.20"
@@ -11691,11 +11579,11 @@ sshpk@^1.7.0:
     jsbn "~0.1.0"
     tweetnacl "~0.14.0"
 
-ssri@^5.0.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.1.0.tgz#2cbf1df36b74d0fc91fcf89640a4b3e1d10b1899"
+ssri@^5.2.4:
+  version "5.2.4"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.2.4.tgz#9985e14041e65fc397af96542be35724ac11da52"
   dependencies:
-    safe-buffer "^5.1.0"
+    safe-buffer "^5.1.1"
 
 stack-trace@0.0.x:
   version "0.0.10"
@@ -11705,9 +11593,9 @@ stack-utils@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620"
 
-staged-git-files@0.0.4:
-  version "0.0.4"
-  resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35"
+staged-git-files@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.0.0.tgz#cdb847837c1fcc52c08a872d4883cc0877668a80"
 
 standard-engine@~7.0.0:
   version "7.0.0"
@@ -11776,12 +11664,12 @@ stream-each@^1.1.0:
     stream-shift "^1.0.0"
 
 stream-http@^2.7.2:
-  version "2.7.2"
-  resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad"
+  version "2.8.0"
+  resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10"
   dependencies:
     builtin-status-codes "^3.0.0"
     inherits "^2.0.1"
-    readable-stream "^2.2.6"
+    readable-stream "^2.3.3"
     to-arraybuffer "^1.0.0"
     xtend "^4.0.0"
 
@@ -11845,8 +11733,8 @@ stringify-entities@^1.0.1:
     is-hexadecimal "^1.0.0"
 
 stringify-object@^3.2.0:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.1.tgz#2720c2eff940854c819f6ee252aaeb581f30624d"
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd"
   dependencies:
     get-own-enumerable-property-symbols "^2.0.1"
     is-obj "^1.0.1"
@@ -11913,14 +11801,7 @@ style-loader@^0.18.2:
     loader-utils "^1.0.2"
     schema-utils "^0.3.0"
 
-style-loader@^0.19.0:
-  version "0.19.0"
-  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.0.tgz#7258e788f0fee6a42d710eaf7d6c2412a4c50759"
-  dependencies:
-    loader-utils "^1.0.2"
-    schema-utils "^0.3.0"
-
-style-loader@^0.19.1:
+style-loader@^0.19.0, style-loader@^0.19.1:
   version "0.19.1"
   resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.1.tgz#591ffc80bcefe268b77c5d9ebc0505d772619f85"
   dependencies:
@@ -11944,23 +11825,13 @@ styled-components@^2.4.0:
     stylis "^3.4.0"
     supports-color "^3.2.3"
 
-styled-components@^3.1.4:
-  version "3.1.4"
-  resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-3.1.4.tgz#1bdc1409c9bacafee3510c573d23b73039b0d875"
-  dependencies:
-    buffer "^5.0.3"
-    css-to-react-native "^2.0.3"
-    fbjs "^0.8.9"
-    hoist-non-react-statics "^1.2.0"
-    is-plain-object "^2.0.1"
-    prop-types "^15.5.4"
-    stylis "^3.4.0"
-    stylis-rule-sheet "^0.0.7"
-    supports-color "^3.2.3"
+styled-normalize@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/styled-normalize/-/styled-normalize-3.0.1.tgz#217efb96598690addd04699ca71af0db3473fea2"
 
 stylelint-config-prettier@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/stylelint-config-prettier/-/stylelint-config-prettier-2.0.0.tgz#0f671435294ebe4a215971855e1e576f5f227a21"
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/stylelint-config-prettier/-/stylelint-config-prettier-2.1.0.tgz#395874225ceef02ea8e31c2f4073098f4505b054"
 
 stylelint-config-pubsweet@^0.0.3:
   version "0.0.3"
@@ -11970,15 +11841,15 @@ stylelint-config-pubsweet@^0.0.3:
     stylelint-config-standard "^18.0.0"
     stylelint-order "^0.7.0"
 
-stylelint-config-recommended@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.0.0.tgz#560a028e81ea3ca8894b9a8eef4c0e05ac60e090"
+stylelint-config-recommended@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz#f526d5c771c6811186d9eaedbed02195fee30858"
 
 stylelint-config-standard@^18.0.0:
-  version "18.0.0"
-  resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.0.0.tgz#0d872b40fafdcddcf4188fb5b64ddb3887e8aefc"
+  version "18.2.0"
+  resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.2.0.tgz#6283149aba7f64f18731aef8f0abfb35cf619e06"
   dependencies:
-    stylelint-config-recommended "^2.0.0"
+    stylelint-config-recommended "^2.1.0"
 
 stylelint-order@^0.7.0:
   version "0.7.0"
@@ -11989,8 +11860,8 @@ stylelint-order@^0.7.0:
     postcss-sorting "^3.0.2"
 
 stylelint@^8.2.0:
-  version "8.3.1"
-  resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-8.3.1.tgz#424c822f32c88e85025b55d72c7b98355e3fa6de"
+  version "8.4.0"
+  resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-8.4.0.tgz#c2dbaeb17236917819f9206e1c0df5fddf6f83c3"
   dependencies:
     autoprefixer "^7.1.2"
     balanced-match "^1.0.0"
@@ -12005,21 +11876,22 @@ stylelint@^8.2.0:
     html-tags "^2.0.0"
     ignore "^3.3.3"
     imurmurhash "^0.1.4"
-    known-css-properties "^0.4.0"
+    known-css-properties "^0.5.0"
     lodash "^4.17.4"
     log-symbols "^2.0.0"
     mathml-tag-names "^2.0.1"
-    meow "^3.7.0"
+    meow "^4.0.0"
     micromatch "^2.3.11"
     normalize-selector "^0.2.0"
     pify "^3.0.0"
     postcss "^6.0.6"
-    postcss-html "^0.11.0"
+    postcss-html "^0.12.0"
     postcss-less "^1.1.0"
     postcss-media-query-parser "^0.2.3"
     postcss-reporter "^5.0.0"
     postcss-resolve-nested-selector "^0.1.1"
     postcss-safe-parser "^3.0.1"
+    postcss-sass "^0.2.0"
     postcss-scss "^1.0.2"
     postcss-selector-parser "^3.1.0"
     postcss-value-parser "^3.3.0"
@@ -12031,13 +11903,9 @@ stylelint@^8.2.0:
     svg-tags "^1.0.0"
     table "^4.0.1"
 
-stylis-rule-sheet@^0.0.7:
-  version "0.0.7"
-  resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.7.tgz#5c51dc879141a61821c2094ba91d2cbcf2469c6c"
-
 stylis@^3.4.0:
-  version "3.4.8"
-  resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.8.tgz#94380babbcd4c75726215794ca985b38ec96d1a3"
+  version "3.4.10"
+  resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.10.tgz#a135cab4b9ff208e327fbb5a6fde3fa991c638ee"
 
 subcommand@^2.0.3:
   version "2.1.0"
@@ -12048,6 +11916,15 @@ subcommand@^2.0.3:
     minimist "^1.2.0"
     xtend "^4.0.0"
 
+sublevel-pouchdb@6.4.3:
+  version "6.4.3"
+  resolved "https://registry.yarnpkg.com/sublevel-pouchdb/-/sublevel-pouchdb-6.4.3.tgz#e4eca52d8ac7ba17ff6c18fcdc51f5ecbbb15597"
+  dependencies:
+    inherits "2.0.3"
+    level-codec "7.0.1"
+    ltgt "2.2.0"
+    readable-stream "1.0.33"
+
 sugarss@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-1.0.1.tgz#be826d9003e0f247735f92365dc3fd7f1bae9e44"
@@ -12108,17 +11985,17 @@ supports-color@^3.1.2, supports-color@^3.2.3:
   dependencies:
     has-flag "^1.0.0"
 
-supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0:
+supports-color@^4.2.1:
   version "4.5.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
   dependencies:
     has-flag "^2.0.0"
 
-supports-color@^5.1.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.1.0.tgz#058a021d1b619f7ddf3980d712ea3590ce7de3d5"
+supports-color@^5.1.0, supports-color@^5.2.0:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0"
   dependencies:
-    has-flag "^2.0.0"
+    has-flag "^3.0.0"
 
 svg-tags@^1.0.0:
   version "1.0.0"
@@ -12144,14 +12021,10 @@ symbol-observable@^0.2.2:
   version "0.2.4"
   resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40"
 
-symbol-observable@^1.0.2, symbol-observable@^1.1.0:
+symbol-observable@^1.0.3, symbol-observable@^1.0.4, symbol-observable@^1.1.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
 
-symbol-observable@^1.0.3, symbol-observable@^1.0.4:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.1.0.tgz#5c68fd8d54115d9dfb72a84720549222e8db9b32"
-
 symbol-tree@^3.2.2:
   version "3.2.2"
   resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
@@ -12168,11 +12041,11 @@ table@^3.7.8:
     string-width "^2.0.0"
 
 table@^4.0.1:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc"
   dependencies:
-    ajv "^5.2.3"
-    ajv-keywords "^2.1.0"
+    ajv "^6.0.1"
+    ajv-keywords "^3.0.0"
     chalk "^2.1.0"
     lodash "^4.17.4"
     slice-ansi "1.0.0"
@@ -12182,7 +12055,7 @@ tapable@^0.2.7:
   version "0.2.8"
   resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
 
-tar-fs@^1.7.0:
+tar-fs@^1.13.0:
   version "1.16.0"
   resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.0.tgz#e877a25acbcc51d8c790da1c57c9cf439817b896"
   dependencies:
@@ -12204,7 +12077,7 @@ tar-pack@^3.4.0:
     tar "^2.2.1"
     uid-number "^0.0.6"
 
-tar-stream@^1.1.2, tar-stream@^1.2.1, tar-stream@^1.5.0:
+tar-stream@^1.1.2, tar-stream@^1.5.0:
   version "1.5.5"
   resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.5.tgz#5cad84779f45c83b1f2508d96b09d88c7218af55"
   dependencies:
@@ -12226,13 +12099,13 @@ temp-dir@^1.0.0:
   resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
 
 temp-write@^3.3.0:
-  version "3.3.0"
-  resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.3.0.tgz#c1a96de2b36061342eae81f44ff001aec8f615a9"
+  version "3.4.0"
+  resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492"
   dependencies:
     graceful-fs "^4.1.2"
     is-stream "^1.1.0"
     make-dir "^1.0.0"
-    pify "^2.2.0"
+    pify "^3.0.0"
     temp-dir "^1.0.0"
     uuid "^3.0.1"
 
@@ -12251,8 +12124,8 @@ tempfile@^1.1.1:
     uuid "^2.0.1"
 
 test-exclude@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26"
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.0.tgz#07e3613609a362c74516a717515e13322ab45b3c"
   dependencies:
     arrify "^1.0.1"
     micromatch "^2.3.11"
@@ -12279,14 +12152,14 @@ through2@2.0.3, through2@^2.0.0, through2@^2.0.2:
     readable-stream "^2.1.5"
     xtend "~4.0.1"
 
-through2@~0.6.3:
+through2@^0.6.2, through2@^0.6.5:
   version "0.6.5"
   resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
   dependencies:
     readable-stream ">=1.0.33-1 <1.1.0-0"
     xtend ">=4.0.0 <4.1.0-0"
 
-through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6:
+through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@~2.3.4:
   version "2.3.8"
   resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
 
@@ -12303,8 +12176,8 @@ timed-out@^4.0.0:
   resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
 
 timers-browserify@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6"
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae"
   dependencies:
     setimmediate "^1.0.4"
 
@@ -12335,9 +12208,9 @@ to-ast@^1.0.0:
     ast-types "^0.7.2"
     esprima "^2.1.0"
 
-to-boolean-x@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/to-boolean-x/-/to-boolean-x-1.0.1.tgz#724128dacc5bea75a93ad471be7ee9277561b2c1"
+to-boolean-x@^1.0.1, to-boolean-x@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/to-boolean-x/-/to-boolean-x-1.0.3.tgz#cbe15e38a85d09553f29869a9b3e3b54ceef5af0"
 
 to-fast-properties@^1.0.3:
   version "1.0.3"
@@ -12408,32 +12281,34 @@ to-regex-range@^2.1.0:
     repeat-string "^1.6.1"
 
 to-regex@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.1.tgz#15358bee4a2c83bd76377ba1dc049d0f18837aae"
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
   dependencies:
-    define-property "^0.2.5"
-    extend-shallow "^2.0.1"
-    regex-not "^1.0.0"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    regex-not "^1.0.2"
+    safe-regex "^1.1.0"
 
 to-string-symbols-supported-x@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/to-string-symbols-supported-x/-/to-string-symbols-supported-x-1.0.0.tgz#d435eb72312fe885b18047a96d59c75641476872"
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/to-string-symbols-supported-x/-/to-string-symbols-supported-x-1.0.2.tgz#73f5e17963520b2b365559f05e3864addaab7f1e"
   dependencies:
-    cached-constructors-x "^1.0.0"
-    has-symbol-support-x "^1.4.1"
+    cached-constructors-x "^1.0.2"
+    has-symbol-support-x "^1.4.2"
     is-symbol "^1.0.1"
 
 to-string-tag-x@^1.4.1, to-string-tag-x@^1.4.2:
-  version "1.4.2"
-  resolved "https://registry.yarnpkg.com/to-string-tag-x/-/to-string-tag-x-1.4.2.tgz#916a0c72d2f93dc27fccfe0ea0ce26cd78be21de"
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/to-string-tag-x/-/to-string-tag-x-1.4.3.tgz#3aed2edec9343be3c76e338161f85d6864c692b1"
   dependencies:
     lodash.isnull "^3.0.0"
     validate.io-undefined "^1.0.3"
 
-to-string-x@^1.4.2:
-  version "1.4.2"
-  resolved "https://registry.yarnpkg.com/to-string-x/-/to-string-x-1.4.2.tgz#7d9a2528e159a9214e668137c1e10a045abe6279"
+to-string-x@^1.4.2, to-string-x@^1.4.5:
+  version "1.4.5"
+  resolved "https://registry.yarnpkg.com/to-string-x/-/to-string-x-1.4.5.tgz#b86dad14df68ca4df52ca4cb011a25e0bf5d9ca1"
   dependencies:
+    cached-constructors-x "^1.0.0"
     is-symbol "^1.0.1"
 
 topo@1.x.x:
@@ -12453,8 +12328,8 @@ toposort@^1.0.0:
   resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec"
 
 tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3:
-  version "2.3.3"
-  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
+  version "2.3.4"
+  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
   dependencies:
     punycode "^1.4.1"
 
@@ -12480,6 +12355,10 @@ trim-newlines@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
 
+trim-newlines@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20"
+
 trim-off-newlines@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
@@ -12521,10 +12400,6 @@ trough@^1.0.0:
   dependencies:
     glob "^6.0.4"
 
-tryit@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
-
 tty-browserify@0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@@ -12549,24 +12424,16 @@ type-check@~0.3.2:
   dependencies:
     prelude-ls "~1.1.2"
 
-type-detect@0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
-
-type-detect@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2"
-
-type-detect@^4.0.5:
-  version "4.0.7"
-  resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.7.tgz#862bd2cf6058ad92799ff5a5b8cf7b6cec726198"
+type-detect@^4.0.0, type-detect@^4.0.5:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
 
 type-is@^1.6.14, type-is@^1.6.4, type-is@~1.6.15:
-  version "1.6.15"
-  resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
+  version "1.6.16"
+  resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194"
   dependencies:
     media-typer "0.3.0"
-    mime-types "~2.1.15"
+    mime-types "~2.1.18"
 
 typedarray@^0.0.6:
   version "0.0.6"
@@ -12584,10 +12451,22 @@ typeface-fira-sans@^0.0.43:
   version "0.0.43"
   resolved "https://registry.yarnpkg.com/typeface-fira-sans/-/typeface-fira-sans-0.0.43.tgz#f9c026ae5b7ad5f1fb727f9947bd1e10e13702e6"
 
+typeface-noto-sans@^0.0.54:
+  version "0.0.54"
+  resolved "https://registry.yarnpkg.com/typeface-noto-sans/-/typeface-noto-sans-0.0.54.tgz#16989ef56a5220b0503495ab8c1036f66b517b55"
+
+typeface-noto-serif@^0.0.54:
+  version "0.0.54"
+  resolved "https://registry.yarnpkg.com/typeface-noto-serif/-/typeface-noto-serif-0.0.54.tgz#26a552df3557c54f2f0c7f9bdbd28a95c9aab06b"
+
 typeface-open-sans@0.0.35:
   version "0.0.35"
   resolved "https://registry.yarnpkg.com/typeface-open-sans/-/typeface-open-sans-0.0.35.tgz#170dc36bbbd63829c9ea64b991c2b0fd65017708"
 
+typeface-ubuntu-mono@^0.0.54:
+  version "0.0.54"
+  resolved "https://registry.yarnpkg.com/typeface-ubuntu-mono/-/typeface-ubuntu-mono-0.0.54.tgz#773582617ff60dc252acbaaeb22880ba7f559fe6"
+
 typeface-vollkorn@^0.0.43:
   version "0.0.43"
   resolved "https://registry.yarnpkg.com/typeface-vollkorn/-/typeface-vollkorn-0.0.43.tgz#4ee1a03f90000b0be3ebd8cac360ee777456465b"
@@ -12604,10 +12483,10 @@ uglify-es@3.2.2:
     source-map "~0.6.1"
 
 uglify-js@3.3.x:
-  version "3.3.9"
-  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.9.tgz#33869666c8ab7f7658ce3d22f0f1ced40097d33a"
+  version "3.3.12"
+  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.12.tgz#efd87c16a1f4c674a8a5ede571001ef634dcc883"
   dependencies:
-    commander "~2.13.0"
+    commander "~2.14.1"
     source-map "~0.6.1"
 
 uglify-js@^2.6, uglify-js@^2.8.29:
@@ -12648,10 +12527,6 @@ uid-number@^0.0.6:
   version "0.0.6"
   resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
 
-ultron@~1.1.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
-
 uncontrollable@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-4.1.0.tgz#e0358291252e1865222d90939b19f2f49f81c1a9"
@@ -12760,6 +12635,14 @@ unquote@^1.1.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
 
+unreachable-branch-transform@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz#d99cc4c6e746d264928845b611db54b0f3474caa"
+  dependencies:
+    esmangle-evaluator "^1.0.0"
+    recast "^0.10.1"
+    through2 "^0.6.2"
+
 unset-value@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
@@ -12767,10 +12650,6 @@ unset-value@^1.0.0:
     has-value "^0.3.1"
     isobject "^3.0.0"
 
-unzip-response@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
-
 unzip-response@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
@@ -12789,6 +12668,10 @@ unzipper@^0.8.9:
     readable-stream "~2.1.5"
     setimmediate "~1.0.4"
 
+upath@^1.0.0:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d"
+
 upper-case@^1.1.1:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
@@ -12824,10 +12707,6 @@ url-parse@^1.1.8:
     querystringify "~1.0.0"
     requires-port "~1.0.0"
 
-url-template@~2.0.6:
-  version "2.0.8"
-  resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21"
-
 url@0.10.3:
   version "0.10.3"
   resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64"
@@ -12864,10 +12743,6 @@ util-deprecate@~1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
 
-util-extend@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f"
-
 util.promisify@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
@@ -12915,18 +12790,18 @@ utils-merge@1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
 
-uuid@3.1.0, uuid@^3.0.1, uuid@^3.1.0:
+uuid@3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
 
+uuid@3.2.1, uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
+
 uuid@^2.0.1:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
 
-uuid@^3.0.0:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
-
 v8flags@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4"
@@ -12934,11 +12809,11 @@ v8flags@^2.1.1:
     user-home "^1.1.1"
 
 validate-npm-package-license@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338"
   dependencies:
-    spdx-correct "~1.0.0"
-    spdx-expression-parse "~1.0.0"
+    spdx-correct "^3.0.0"
+    spdx-expression-parse "^3.0.0"
 
 validate.io-undefined@^1.0.3:
   version "1.0.3"
@@ -12983,10 +12858,14 @@ vfile@^2.0.0:
     unist-util-stringify-position "^1.0.0"
     vfile-message "^1.0.0"
 
-vlq@^0.2.1, vlq@^0.2.2:
+vlq@^0.2.1:
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26"
 
+vlq@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.0.tgz#8101be90843422954c2b13eb27f2f3122bdcc806"
+
 vm-browserify@0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
@@ -13023,12 +12902,12 @@ watch@~0.18.0:
     minimist "^1.2.0"
 
 watchpack@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac"
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed"
   dependencies:
-    async "^2.1.2"
-    chokidar "^1.7.0"
+    chokidar "^2.0.2"
     graceful-fs "^4.1.2"
+    neo-async "^2.5.0"
 
 wbuf@^1.1.0, wbuf@^1.7.2:
   version "1.7.2"
@@ -13057,8 +12936,8 @@ webpack-dev-middleware@1.12.2, webpack-dev-middleware@^1.12.0:
     time-stamp "^2.0.0"
 
 webpack-dev-server@^2.9.7:
-  version "2.11.1"
-  resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.1.tgz#6f9358a002db8403f016e336816f4485384e5ec0"
+  version "2.11.2"
+  resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz#1f4f4c78bf1895378f376815910812daf79a216f"
   dependencies:
     ansi-html "0.0.7"
     array-includes "^3.0.3"
@@ -13089,8 +12968,8 @@ webpack-dev-server@^2.9.7:
     yargs "6.6.0"
 
 webpack-hot-middleware@^2.20.0:
-  version "2.21.0"
-  resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.21.0.tgz#7b3c113a7a4b301c91e0749573c7aab28b414b52"
+  version "2.21.1"
+  resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.21.1.tgz#1b03b20a1a65a2e2ea0ea987476a5d23370ff176"
   dependencies:
     ansi-html "0.0.7"
     html-entities "^1.2.0"
@@ -13098,10 +12977,10 @@ webpack-hot-middleware@^2.20.0:
     strip-ansi "^3.0.0"
 
 webpack-merge@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.1.tgz#f1197a0a973e69c6fbeeb6d658219aa8c0c13555"
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.2.tgz#5d372dddd3e1e5f8874f5bf5a8e929db09feb216"
   dependencies:
-    lodash "^4.17.4"
+    lodash "^4.17.5"
 
 webpack-node-externals@^1.6.0:
   version "1.6.0"
@@ -13115,13 +12994,13 @@ webpack-sources@^1.0.1:
     source-map "~0.6.1"
 
 webpack@^3.5.6, webpack@^3.8.1:
-  version "3.10.0"
-  resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.10.0.tgz#5291b875078cf2abf42bdd23afe3f8f96c17d725"
+  version "3.11.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.11.0.tgz#77da451b1d7b4b117adaf41a1a93b5742f24d894"
   dependencies:
     acorn "^5.0.0"
     acorn-dynamic-import "^2.0.0"
-    ajv "^5.1.5"
-    ajv-keywords "^2.0.0"
+    ajv "^6.1.0"
+    ajv-keywords "^3.1.0"
     async "^2.1.2"
     enhanced-resolve "^3.4.0"
     escope "^3.6.0"
@@ -13182,6 +13061,10 @@ which-module@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
 
+which-pm-runs@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
+
 which@1, which@^1.2.10, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
@@ -13189,8 +13072,8 @@ which@1, which@^1.2.10, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0
     isexe "^2.0.0"
 
 white-space-x@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/white-space-x/-/white-space-x-3.0.0.tgz#c8e31ed4fecf4f3feebe6532e6046008a666a3e1"
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/white-space-x/-/white-space-x-3.0.1.tgz#81a82d5432da725aba5ca671624bb579c9e66d4f"
 
 wide-align@^1.1.0:
   version "1.1.2"
@@ -13225,6 +13108,18 @@ winston@0.8.x:
     pkginfo "0.3.x"
     stack-trace "0.0.x"
 
+winston@2.1.x:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/winston/-/winston-2.1.1.tgz#3c9349d196207fd1bdff9d4bc43ef72510e3a12e"
+  dependencies:
+    async "~1.0.0"
+    colors "1.0.x"
+    cycle "1.0.x"
+    eyes "0.1.x"
+    isstream "0.1.x"
+    pkginfo "0.3.x"
+    stack-trace "0.0.x"
+
 winston@2.x, winston@^2.2.0, winston@^2.3.1:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.0.tgz#808050b93d52661ed9fb6c26b3f0c826708b0aee"
@@ -13253,11 +13148,11 @@ wordwrap@~1.0.0:
   resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
 
 worker-farm@^1.4.1:
-  version "1.5.2"
-  resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae"
+  version "1.5.4"
+  resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.4.tgz#4debbe46b40edefcc717ebde74a90b1ae1e909a1"
   dependencies:
-    errno "^0.1.4"
-    xtend "^4.0.1"
+    errno "~0.1.7"
+    xtend "~4.0.1"
 
 wrap-ansi@^2.0.0:
   version "2.1.0"
@@ -13316,12 +13211,11 @@ write@^0.2.1:
     mkdirp "^0.5.1"
 
 ws@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/ws/-/ws-4.0.0.tgz#bfe1da4c08eeb9780b986e0e4d10eccd7345999f"
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289"
   dependencies:
     async-limiter "~1.0.0"
     safe-buffer "~5.1.0"
-    ultron "~1.1.0"
 
 x-is-function@^1.0.4:
   version "1.0.4"
@@ -13357,8 +13251,8 @@ xmlbuilder@4.2.1, xmlbuilder@^4.1.0:
     lodash "^4.0.0"
 
 xmlbuilder@^9.0.4:
-  version "9.0.4"
-  resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.4.tgz#519cb4ca686d005a8420d3496f3f0caeecca580f"
+  version "9.0.7"
+  resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
 
 xmlhttprequest@^1.8.0:
   version "1.8.0"
@@ -13372,6 +13266,10 @@ y18n@^3.2.1:
   version "3.2.1"
   resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
 
+y18n@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+
 yallist@^2.1.2:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
@@ -13480,18 +13378,16 @@ yargs@~3.10.0:
     decamelize "^1.0.0"
     window-size "0.1.0"
 
-zen-observable@^0.6.0:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.6.1.tgz#01dbed3bc8d02cbe9ee1112c83e04c807f647244"
+zen-observable-ts@^0.8.6:
+  version "0.8.8"
+  resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.8.tgz#1a586dc204fa5632a88057f879500e0d2ba06869"
+  dependencies:
+    zen-observable "^0.7.0"
 
 zen-observable@^0.7.0:
   version "0.7.1"
   resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.7.1.tgz#f84075c0ee085594d3566e1d6454207f126411b3"
 
-zen-observable@^0.8.0:
-  version "0.8.6"
-  resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.6.tgz#e2419311497019419d7bb56d8f6a56356a607272"
-
 zip-stream@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-1.2.0.tgz#a8bc45f4c1b49699c6b90198baacaacdbcd4ba04"