diff --git a/.babelrc b/.babelrc
new file mode 100644
index 0000000000000000000000000000000000000000..fc9770d2b343bfb43f9b957f14e065dfd564ea61
--- /dev/null
+++ b/.babelrc
@@ -0,0 +1,3 @@
+{
+  "presets": ["env", "react", "stage-2"]
+}
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index 8fa68a4175d79cb2f23c89be33b7da2faa5fa7f6..de2d2216f76a138be61ea166db16cb2594b19b68 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,7 @@
 FROM xpub/xpub:base
 
 COPY package.json yarn.lock ./
-COPY lerna.json .eslintignore .eslintrc .prettierrc .stylelintignore .stylelintrc ./
+COPY lerna.json .babelrc .eslintignore .eslintrc .prettierrc .stylelintignore .stylelintrc ./
 COPY packages packages
 
 RUN [ "yarn", "config", "set", "workspaces-experimental", "true" ]
diff --git a/README.md b/README.md
index abe79d39f62c196676dc0ae9e0d320f3f54be493..a99626638452059daec1f4a4ed1f161cf4fda033 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,6 @@ You can follow more fine-grained lists of things that we're working on
 ### PubSweet components
 
 * `component-app`: a PubSweet component that provides an app container with nav bar and journal provider.
-* `component-authentication`: a PubSweet component that provides authentication-related client pages.
 * `component-dashboard`: a PubSweet component that provides a Dashboard page.
 * `component-manuscript`: a PubSweet component that provides a Manuscript page.
 * `component-review`: a PubSweet component that provides a Review page.
diff --git a/package.json b/package.json
index 8e40b1c8e24846d59a16974c71402e6e72fbeeae..079e1d213d174a5d15d3b0943eded9c29c5e2881 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,7 @@
     "lerna": "^2.5.1",
     "lint-staged": "^4.1.3",
     "prettier": "^1.8.2",
+    "react-router-redux": "^5.0.0-alpha.9",
     "stylelint": "^8.2.0",
     "stylelint-config-pubsweet": "^0.0.3"
   },
diff --git a/packages/component-app/package.json b/packages/component-app/package.json
index 3307ac7ce63e18a4f85d26b47689b9a4a78aca29..607186ae5fa118ff2f85732536c7140c144f6d29 100644
--- a/packages/component-app/package.json
+++ b/packages/component-app/package.json
@@ -9,22 +9,22 @@
     "dist"
   ],
   "dependencies": {
+    "@pubsweet/ui": "^2.0.0",
     "classnames": "^2.2.5",
     "prop-types": "^15.5.10",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "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",
     "xpub-bootstrap": "^0.0.2",
-    "xpub-journal": "^0.0.2",
-    "@pubsweet/ui": "^0.1.1"
+    "xpub-journal": "^0.0.2"
   },
   "peerDependencies": {
     "prop-types": "^15.5.10",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "react": "^16.2.0",
+    "react-dom": "^16.2.0",
     "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2"
   }
diff --git a/packages/component-app/src/components/App.js b/packages/component-app/src/components/App.js
index 9e3fc314f9a8ac9efa6551e0a2f256cbf7279607..be2dd011c9c044a6f39a280c2a8c714478d4ad39 100644
--- a/packages/component-app/src/components/App.js
+++ b/packages/component-app/src/components/App.js
@@ -6,18 +6,16 @@ import { connect } from 'react-redux'
 import { AppBar } from '@pubsweet/ui'
 import { withJournal } from 'xpub-journal'
 import 'xpub-bootstrap'
+import actions from 'pubsweet-client/src/actions'
 
 import classes from './App.local.scss'
 
-const App = ({ children, currentUser, journal }) => (
+const App = ({ children, currentUser, journal, logoutUser }) => (
   <div className={classes.root}>
     <AppBar
-      brandLink="/"
-      brandName={journal.metadata.name}
-      loginLink="/login"
-      logo={journal.metadata.logo}
-      logoutLink="/logout"
-      userName={currentUser ? currentUser.username : null}
+      brand={journal.metadata.name}
+      onLogoutClick={logoutUser}
+      user={currentUser}
     />
 
     <div className={classes.main}>{children}</div>
@@ -25,8 +23,11 @@ const App = ({ children, currentUser, journal }) => (
 )
 
 export default compose(
-  connect(state => ({
-    currentUser: state.currentUser.user,
-  })),
+  connect(
+    state => ({
+      currentUser: state.currentUser.user,
+    }),
+    { logoutUser: actions.logoutUser },
+  ),
   withJournal,
 )(App)
diff --git a/packages/component-authentication/README.md b/packages/component-authentication/README.md
deleted file mode 100644
index 779ea8cce0b65d325f62b47818c6450a36602eee..0000000000000000000000000000000000000000
--- a/packages/component-authentication/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## pubsweet-component-authentication  
-
-A module containing all the PubSweet components needed for authentication. This module uses UI elements from `pubsweet-ui` and brings in the currentUser reducer from `pubsweet-client` so that all the authentication-related redux code is in the same place. A `PrivateRoute` component is used to ensure that the current user is authenticated and loaded before a page is rendered.  
-
-*Note:  
-This should be merged with the default authentication components provided by pubsweet.*
diff --git a/packages/component-authentication/package.json b/packages/component-authentication/package.json
deleted file mode 100644
index b62bb98b25953bc1c8e08c19deaec1515cd5760a..0000000000000000000000000000000000000000
--- a/packages/component-authentication/package.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
-  "name": "pubsweet-component-xpub-authentication",
-  "version": "0.0.2",
-  "main": "src",
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "files": [
-    "src",
-    "dist"
-  ],
-  "dependencies": {
-    "classnames": "^2.2.5",
-    "lodash": "^4.17.4",
-    "prop-types": "^15.5.10",
-    "pubsweet-client": "^1.0.0-beta.8",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
-    "react-redux": "^5.0.2",
-    "react-router-dom": "^4.2.2",
-    "recompose": "^0.26.0",
-    "redux": "^3.6.0",
-    "redux-form": "^7.0.3",
-    "@pubsweet/ui": "^0.1.1"
-  },
-  "devDependencies": {
-    "babel-core": "^6.26.0",
-    "babel-loader": "^7.1.2",
-    "babel-preset-env": "^1.6.0",
-    "babel-preset-react": "^6.24.1",
-    "babel-preset-stage-2": "^6.24.1",
-    "css-loader": "^0.28.4",
-    "faker": "^4.1.0",
-    "file-loader": "^1.1.5",
-    "node-sass": "^4.5.3",
-    "react-styleguidist": "^6.0.8",
-    "sass-loader": "^6.0.6",
-    "style-loader": "^0.19.0",
-    "webpack": "^3.8.1",
-    "webpack-node-externals": "^1.6.0",
-    "xpub-styleguide": "^0.0.2"
-  },
-  "peerDependencies": {
-    "prop-types": "^15.5.10",
-    "pubsweet-client": "^1.0.0-beta.8",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
-    "react-redux": "^5.0.2",
-    "react-router-dom": "^4.2.2"
-  },
-  "scripts": {
-    "styleguide": "styleguidist server",
-    "styleguide:build": "styleguidist build"
-  }
-}
diff --git a/packages/component-authentication/src/components/Form.local.scss b/packages/component-authentication/src/components/Form.local.scss
deleted file mode 100644
index 8332e321e5586ddfd10128cb71f2ab0378c69df8..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/components/Form.local.scss
+++ /dev/null
@@ -1,86 +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%;
-
-  // &:hover,
-  // &:focus {
-  //   border-bottom: 1px dashed var(--color-primary);
-  //   border-color: transparent;
-  //   box-shadow: none;
-  //   outline-style: none;
-  // }
-}
-
-.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/component-authentication/src/components/Login.js b/packages/component-authentication/src/components/Login.js
deleted file mode 100644
index 289d5f7642646b605867500b08f78c61309abf4a..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/components/Login.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import React from 'react'
-import { Field } from 'redux-form'
-import { Link } from 'react-router-dom'
-import { Button, TextField } from '@pubsweet/ui'
-import classes from './Form.local.scss'
-
-const UsernameInput = props => <TextField label="Username" {...props.input} />
-const PasswordInput = props => (
-  <TextField label="Password" {...props.input} type="password" />
-)
-
-const Login = ({ errorMessage, handleSubmit }) => (
-  <div className={classes.root}>
-    <div className={classes.title}>Login</div>
-
-    {errorMessage && <div className={classes.error}>{errorMessage}</div>}
-
-    <form className={classes.form} onSubmit={handleSubmit}>
-      <Field component={UsernameInput} name="username" />
-      <Field component={PasswordInput} name="password" />
-      <Button className={classes.button} primary type="submit">
-        Login
-      </Button>
-    </form>
-
-    <div className={classes.alternate}>
-      <span className={classes.message}>You don&apos;t have an account?</span>
-      <Link className={classes.link} to="/signup">
-        Sign up
-      </Link>
-    </div>
-  </div>
-)
-
-export default Login
diff --git a/packages/component-authentication/src/components/Login.md b/packages/component-authentication/src/components/Login.md
deleted file mode 100644
index a6e46436111060ee42936ea346a7fa806468c838..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/components/Login.md
+++ /dev/null
@@ -1,23 +0,0 @@
-A login form.
-
-```js
-const { reduxForm } = require('redux-form');
-
-const LoginForm = reduxForm({ form: 'login' })(Login);
-
-<LoginForm 
-  onSubmit={values => console.log(values)}/>
-```
-
-An error is displayed at the top of the form.
-
-```js
-const { reduxForm } = require('redux-form');
-
-const LoginForm = reduxForm({ form: 'login-error' })(Login);
-
-<LoginForm 
-      errorMessage="There was an error"
-      onSubmit={values => console.log(values)}/>
-```
-
diff --git a/packages/component-authentication/src/components/LoginPage.js b/packages/component-authentication/src/components/LoginPage.js
deleted file mode 100644
index 21ec2c0767493c0079f790574037fad84e96de3c..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/components/LoginPage.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import { reduxForm, SubmissionError } from 'redux-form'
-import { compose } from 'recompose'
-import { connect } from 'react-redux'
-import { login } from '../redux/login'
-import Login from './Login'
-import redirectPath from '../redirect'
-
-const onSubmit = (values, dispatch, { history, location }) => {
-  dispatch(login(values))
-    .then(() => {
-      history.push(redirectPath({ location }))
-    })
-    .catch(error => {
-      if (error.validationErrors) {
-        throw new SubmissionError(error.validationErrors)
-      } else {
-        console.error(error)
-        // TODO: display error
-      }
-    })
-}
-
-export default compose(
-  reduxForm({
-    form: 'login',
-    onSubmit,
-  }),
-  connect(state => ({
-    error: state.login.error,
-  })),
-)(Login)
diff --git a/packages/component-authentication/src/components/LogoutPage.js b/packages/component-authentication/src/components/LogoutPage.js
deleted file mode 100644
index cc3378af337233a55d76c48dcb9c973170d88765..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/components/LogoutPage.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import React from 'react'
-import { compose } from 'recompose'
-import { connect } from 'react-redux'
-import { Redirect } from 'react-router-dom'
-import { logout } from '../redux/logout'
-
-class Logout extends React.Component {
-  componentDidMount() {
-    const { isAuthenticated, logout } = this.props
-
-    if (isAuthenticated) {
-      logout()
-    }
-  }
-
-  componentWillReceiveProps(nextProps) {
-    const { isAuthenticated, logout } = nextProps
-
-    if (isAuthenticated) {
-      logout()
-    }
-  }
-
-  render() {
-    const { isAuthenticated } = this.props
-
-    return isAuthenticated ? <div>Signing out…</div> : <Redirect to="/" />
-  }
-}
-
-export default compose(
-  connect(
-    state => ({
-      isAuthenticated: state.currentUser.isAuthenticated,
-    }),
-    {
-      logout,
-    },
-  ),
-)(Logout)
diff --git a/packages/component-authentication/src/components/PrivateRoute.js b/packages/component-authentication/src/components/PrivateRoute.js
deleted file mode 100644
index 7ef65bd770709795a55d0c704e691ef50280d266..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/components/PrivateRoute.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import React from 'react'
-import { compose } from 'recompose'
-import { connect } from 'react-redux'
-import { Route, Redirect, withRouter } from 'react-router-dom'
-import { getCurrentUser } from '../redux/currentUser'
-
-const PrivateRoute = ({
-  currentUser,
-  getCurrentUser,
-  component: Component,
-  ...rest
-}) => (
-  <Route
-    {...rest}
-    render={props => {
-      if (!currentUser.isFetched) {
-        if (!currentUser.isFetching) {
-          getCurrentUser()
-        }
-
-        return <div>loading…</div>
-      }
-
-      if (!currentUser.isAuthenticated) {
-        return (
-          <Redirect
-            to={{
-              pathname: '/login',
-              state: { from: props.location },
-            }}
-          />
-        )
-      }
-
-      return <Component {...props} />
-    }}
-  />
-)
-
-export default compose(
-  withRouter,
-  connect(
-    state => ({
-      currentUser: state.currentUser,
-    }),
-    {
-      getCurrentUser,
-    },
-  ),
-)(PrivateRoute)
diff --git a/packages/component-authentication/src/components/Signup.js b/packages/component-authentication/src/components/Signup.js
deleted file mode 100644
index e7497177509b9b81c9cbd324a6092f16a18f2e10..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/components/Signup.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from 'react'
-import { Field } from 'redux-form'
-import { Link } from 'react-router-dom'
-import { Button, TextField } from '@pubsweet/ui'
-import classes from './Form.local.scss'
-
-const UsernameInput = props => <TextField label="Username" {...props.input} />
-const EmailInput = props => (
-  <TextField label="Email" {...props.input} type="email" />
-)
-const PasswordInput = props => (
-  <TextField label="Password" {...props.input} type="password" />
-)
-
-const Signup = ({ errorMessage, handleSubmit }) => (
-  <div className={classes.root}>
-    <div className={classes.title}>Sign up</div>
-
-    {errorMessage && <div className={classes.error}>{errorMessage}</div>}
-
-    <form className={classes.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">
-        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>
-  </div>
-)
-
-export default Signup
diff --git a/packages/component-authentication/src/components/Signup.md b/packages/component-authentication/src/components/Signup.md
deleted file mode 100644
index ca2e125e5f1e91e663b61d1c138422ecc4e1a91b..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/components/Signup.md
+++ /dev/null
@@ -1,24 +0,0 @@
-A signup form.
-
-```js
-const { reduxForm } = require('redux-form');
-
-const SignupForm = reduxForm({ form: 'signup' })(Signup);
-
-<SignupForm 
-      onSubmit={values => console.log(values)}/>
-```
-
-An error is displayed at the top of the form.
-
-```js
-
-const { reduxForm } = require('redux-form');
-
-const SignupForm = reduxForm({ form: 'signup-error' })(Signup);
-
-<SignupForm 
-      errorMessage="There was an error"
-      onSubmit={values => console.log(values)}/>
-```
-
diff --git a/packages/component-authentication/src/components/SignupPage.js b/packages/component-authentication/src/components/SignupPage.js
deleted file mode 100644
index 74443dcb6a4d04ee32f69eb8696cfb79cc3ff77a..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/components/SignupPage.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import { connect } from 'react-redux'
-import { compose } from 'recompose'
-import { reduxForm, SubmissionError } from 'redux-form'
-import { signup } from '../redux/signup'
-import Signup from './Signup'
-import redirectPath from '../redirect'
-
-const onSubmit = (values, dispatch, { history, location }) => {
-  dispatch(signup(values))
-    .then(() => {
-      history.push(redirectPath({ location }))
-    })
-    .catch(error => {
-      if (error.validationErrors) {
-        throw new SubmissionError(error.validationErrors)
-      } else {
-        console.error(error)
-        // TODO: display error
-      }
-    })
-}
-
-export default compose(
-  reduxForm({
-    form: 'signup',
-    onSubmit,
-  }),
-  connect(state => ({
-    error: state.signup.error,
-  })),
-)(Signup)
diff --git a/packages/component-authentication/src/components/index.js b/packages/component-authentication/src/components/index.js
deleted file mode 100644
index 09e29ab7e68f3f486663c7aea776432680211d4c..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/components/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-export { default as PrivateRoute } from './PrivateRoute'
-export { default as LoginPage } from './LoginPage'
-export { default as LogoutPage } from './LogoutPage'
-export { default as SignupPage } from './SignupPage'
diff --git a/packages/component-authentication/src/index.js b/packages/component-authentication/src/index.js
deleted file mode 100644
index 44c18796cbf37e9b2319ab74efbbcdcff5a1a5a8..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-module.exports = {
-  frontend: {
-    components: [() => require('./components')],
-    reducers: {
-      currentUser: () => require('./redux/currentUser').default,
-      login: () => require('./redux/login').default,
-      signup: () => require('./redux/signup').default,
-    },
-  },
-}
diff --git a/packages/component-authentication/src/redirect.js b/packages/component-authentication/src/redirect.js
deleted file mode 100644
index fad202d048b96a1692c4c069044c7022c1b20164..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/redirect.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { get } from 'lodash'
-import config from 'config'
-
-const allowedRedirect = pathname =>
-  ['/logout', '/login', '/signup'].indexOf(pathname) === -1
-
-export default ({ location: { state } }) =>
-  state && state.from && allowedRedirect(state.from.pathname)
-    ? state.from.pathname
-    : get(config, ['pubsweet-client', 'login-redirect'], '/')
diff --git a/packages/component-authentication/src/redux/currentUser.js b/packages/component-authentication/src/redux/currentUser.js
deleted file mode 100644
index 93b4c12a858104bcd8a7db7fce1774f277902cab..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/redux/currentUser.js
+++ /dev/null
@@ -1,90 +0,0 @@
-import * as api from 'pubsweet-client/src/helpers/api'
-
-import { LOGOUT_SUCCESS } from './logout'
-
-/* constants */
-
-export const GET_CURRENT_USER_REQUEST = 'GET_CURRENT_USER_REQUEST'
-export const GET_CURRENT_USER_SUCCESS = 'GET_CURRENT_USER_SUCCESS'
-export const GET_CURRENT_USER_FAILURE = 'GET_CURRENT_USER_FAILURE'
-
-/* actions */
-
-export const getCurrentUserRequest = () => ({
-  type: GET_CURRENT_USER_REQUEST,
-})
-
-export const getCurrentUserSuccess = user => ({
-  type: GET_CURRENT_USER_SUCCESS,
-  user,
-})
-
-export const getCurrentUserFailure = error => ({
-  error,
-  type: GET_CURRENT_USER_FAILURE,
-})
-
-export const getCurrentUser = () => dispatch => {
-  dispatch(getCurrentUserRequest())
-  return api.get('/users/authenticate').then(
-    user => dispatch(getCurrentUserSuccess(user)),
-    error => {
-      dispatch(getCurrentUserFailure(error))
-      throw error
-    },
-  )
-}
-
-/* reducer */
-
-const initialState = {
-  error: null,
-  isAuthenticated: false,
-  isFetched: false,
-  isFetching: false,
-  user: null,
-}
-
-export default (state = initialState, action) => {
-  switch (action.type) {
-    case GET_CURRENT_USER_REQUEST:
-      return {
-        error: null,
-        isAuthenticated: false,
-        isFetched: false,
-        isFetching: true,
-        user: null,
-      }
-
-    case GET_CURRENT_USER_FAILURE:
-      return {
-        error: action.error,
-        isAuthenticated: false,
-        isFetched: true,
-        isFetching: false,
-        user: null,
-      }
-
-    case GET_CURRENT_USER_SUCCESS:
-      return {
-        error: null,
-        isAuthenticated: true,
-        isFetched: true,
-        isFetching: false,
-        user: action.user,
-      }
-
-    // clear the current user on logout
-    case LOGOUT_SUCCESS:
-      return {
-        error: null,
-        isAuthenticated: false,
-        isFetched: false,
-        isFetching: false,
-        user: null,
-      }
-
-    default:
-      return state
-  }
-}
diff --git a/packages/component-authentication/src/redux/index.js b/packages/component-authentication/src/redux/index.js
deleted file mode 100644
index 4434d36dfce249f7b9e605285cbe3322a8107f1e..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/redux/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export * as currentUser from './currentUser'
-export * as login from './login'
-export * as signup from './signup'
diff --git a/packages/component-authentication/src/redux/login.js b/packages/component-authentication/src/redux/login.js
deleted file mode 100644
index 706cb02549612e2b681d90706e927acc1416a3b5..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/redux/login.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import * as api from 'pubsweet-client/src/helpers/api'
-import { getCurrentUser } from './currentUser'
-
-// TODO: This will break when rendered on a server
-const localStorage = window.localStorage || undefined
-
-/* constants */
-
-export const LOGIN_REQUEST = 'LOGIN_REQUEST'
-export const LOGIN_SUCCESS = 'LOGIN_SUCCESS'
-export const LOGIN_FAILURE = 'LOGIN_FAILURE'
-
-/* actions */
-
-export const loginRequest = credentials => ({
-  type: LOGIN_REQUEST,
-})
-
-export const loginSuccess = user => ({
-  type: LOGIN_SUCCESS,
-})
-
-export const loginFailure = error => ({
-  error,
-  type: LOGIN_FAILURE,
-})
-
-export const login = credentials => dispatch => {
-  dispatch(loginRequest())
-  return api.create('/users/authenticate', credentials).then(
-    user => {
-      localStorage.setItem('token', user.token)
-      dispatch(loginSuccess())
-      return dispatch(getCurrentUser())
-    },
-    error => {
-      dispatch(loginFailure(error))
-      throw error
-    },
-  )
-}
-
-/* reducer */
-
-const initialState = {
-  error: null,
-  isFetching: false,
-}
-
-export default (state = initialState, action) => {
-  switch (action.type) {
-    case LOGIN_REQUEST:
-      return {
-        error: null,
-        isFetching: true,
-      }
-
-    case LOGIN_SUCCESS:
-      return {
-        error: null,
-        isFetching: false,
-      }
-
-    case LOGIN_FAILURE:
-      return {
-        error: action.error,
-        isFetching: false,
-      }
-
-    default:
-      return state
-  }
-}
diff --git a/packages/component-authentication/src/redux/logout.js b/packages/component-authentication/src/redux/logout.js
deleted file mode 100644
index 63871ebb2a48ad1080d2dfee9f3b15772dc6e60e..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/redux/logout.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/* constants */
-
-export const LOGOUT_SUCCESS = 'LOGOUT_SUCCESS'
-
-/* actions */
-
-export const logoutSuccess = () => ({
-  type: LOGOUT_SUCCESS,
-})
-
-export const logout = () => dispatch => {
-  localStorage.removeItem('token')
-  return dispatch(logoutSuccess())
-}
diff --git a/packages/component-authentication/src/redux/signup.js b/packages/component-authentication/src/redux/signup.js
deleted file mode 100644
index daa23590f8d875ad7355547dc629f4ba1be515b9..0000000000000000000000000000000000000000
--- a/packages/component-authentication/src/redux/signup.js
+++ /dev/null
@@ -1,70 +0,0 @@
-import * as api from 'pubsweet-client/src/helpers/api'
-import { login } from './login'
-
-/* constants */
-
-export const SIGNUP_REQUEST = 'SIGNUP_REQUEST'
-export const SIGNUP_SUCCESS = 'SIGNUP_SUCCESS'
-export const SIGNUP_FAILURE = 'SIGNUP_FAILURE'
-
-/* actions */
-
-export const signupRequest = () => ({
-  type: SIGNUP_REQUEST,
-})
-
-export const signupSuccess = user => ({
-  type: SIGNUP_SUCCESS,
-  user,
-})
-
-export const signupFailure = error => ({
-  error,
-  type: SIGNUP_FAILURE,
-})
-
-export const signup = credentials => dispatch => {
-  dispatch(signupRequest())
-  return api.create('/users', credentials).then(
-    user => {
-      dispatch(signupSuccess(user))
-      dispatch(login(credentials))
-    },
-    error => {
-      dispatch(signupFailure(error))
-      throw error
-    },
-  )
-}
-
-/* reducer */
-
-const initialState = {
-  error: null,
-  isFetching: false,
-}
-
-export default (state = initialState, action) => {
-  switch (action.type) {
-    case SIGNUP_REQUEST:
-      return {
-        error: null,
-        isFetching: true,
-      }
-
-    case SIGNUP_SUCCESS:
-      return {
-        error: null,
-        isFetching: false,
-      }
-
-    case SIGNUP_FAILURE:
-      return {
-        error: action.error,
-        isFetching: false,
-      }
-
-    default:
-      return state
-  }
-}
diff --git a/packages/component-authentication/styleguide.config.js b/packages/component-authentication/styleguide.config.js
deleted file mode 100644
index 2c8697088f1d9f28b22dcae5474b05479c6aa9dd..0000000000000000000000000000000000000000
--- a/packages/component-authentication/styleguide.config.js
+++ /dev/null
@@ -1,19 +0,0 @@
-module.exports = {
-  title: 'xpub authentication style guide',
-  styleguideComponents: {
-    StyleGuideRenderer: require.resolve(
-      'xpub-styleguide/src/components/StyleGuideRenderer',
-    ),
-    Wrapper: require.resolve('xpub-styleguide/src/components/Wrapper'),
-  },
-  skipComponentsWithoutExample: true,
-  serverPort: 6061,
-  theme: {
-    fontFamily: {
-      base: '"Fira Sans", sans-serif',
-    },
-    color: {
-      link: 'cornflowerblue',
-    },
-  },
-}
diff --git a/packages/component-authentication/webpack.config.js b/packages/component-authentication/webpack.config.js
deleted file mode 100644
index 4aa149ad2cbf750326137fc79ccd7e7685271ad3..0000000000000000000000000000000000000000
--- a/packages/component-authentication/webpack.config.js
+++ /dev/null
@@ -1,3 +0,0 @@
-const webpackConfig = require('xpub-styleguide/src/webpack-config')
-
-module.exports = webpackConfig(__dirname)
diff --git a/packages/component-dashboard/package.json b/packages/component-dashboard/package.json
index b03081dd2a2138adda2001d7d325ad8ea37fd28a..f87fe37030b93ff2eeeec63455903a923aa849fd 100644
--- a/packages/component-dashboard/package.json
+++ b/packages/component-dashboard/package.json
@@ -9,23 +9,23 @@
     "dist"
   ],
   "dependencies": {
+    "@pubsweet/ui": "^2.0.0",
     "classnames": "^2.2.5",
     "lodash": "^4.17.4",
     "prop-types": "^15.5.10",
-    "pubsweet-client": "^1.0.0-beta.8",
-    "pubsweet-component-ink-frontend": "^0.2.3",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
-    "react-redux": "^5.0.2",
-    "react-router-dom": "^4.2.2",
+    "pubsweet-client": "^2.1.0",
+    "pubsweet-component-ink-frontend": "^1.0.0",
+    "react": "^16.2.0",
+    "react-dom": "^16.2.0",
     "react-dropzone": "^4.1.2",
     "react-moment": "^0.6.1",
+    "react-redux": "^5.0.2",
+    "react-router-dom": "^4.2.2",
     "recompose": "^0.26.0",
     "redux": "^3.6.0",
     "xpub-connect": "^0.0.2",
     "xpub-journal": "^0.0.2",
     "xpub-selectors": "^0.0.2",
-    "@pubsweet/ui": "^0.1.1",
     "xpub-upload": "^0.0.2"
   },
   "devDependencies": {
@@ -35,21 +35,39 @@
     "babel-preset-react": "^6.24.1",
     "babel-preset-stage-2": "^6.24.1",
     "css-loader": "^0.28.4",
+    "enzyme": "^3.3.0",
+    "enzyme-adapter-react-16": "^1.1.1",
     "faker": "^4.1.0",
     "file-loader": "^1.1.5",
+    "identity-obj-proxy": "^3.0.0",
+    "jest": "^22.1.1",
     "node-sass": "^4.5.3",
-    "react-styleguidist": "^6.0.8",
+    "react-styleguidist": "^6.2.5",
+    "react-test-renderer": "^16.2.0",
+    "redux-mock-store": "^1.4.0",
     "sass-loader": "^6.0.6",
     "style-loader": "^0.19.0",
     "webpack": "^3.8.1",
     "webpack-node-externals": "^1.6.0",
     "xpub-styleguide": "^0.0.2"
   },
+  "jest": {
+    "moduleNameMapper": {
+      "\\.s?css$": "identity-obj-proxy"
+    },
+    "transformIgnorePatterns": [
+      "/node_modules/(?!@?pubsweet)"
+    ],
+    "globals": {
+      "PUBSWEET_COMPONENTS": []
+    }
+  },
   "scripts": {
     "styleguide": "styleguidist server",
     "styleguide:build": "styleguidist build",
     "clean": "rimraf dist",
     "prebuild": "npm run clean && npm run lint",
-    "build": "webpack --progress --profile"
+    "build": "webpack --progress --profile",
+    "test": "jest"
   }
 }
diff --git a/packages/component-dashboard/src/components/Dashboard.test.js b/packages/component-dashboard/src/components/Dashboard.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..7cf3e04a51d3f7e1aba0fab0f206a9cf8668fb0b
--- /dev/null
+++ b/packages/component-dashboard/src/components/Dashboard.test.js
@@ -0,0 +1,81 @@
+import React from 'react'
+import Enzyme, { shallow } from 'enzyme'
+import Adapter from 'enzyme-adapter-react-16'
+
+import Dashboard from './Dashboard'
+
+// this should be elsewhere
+Enzyme.configure({ adapter: new Adapter() })
+
+jest.mock('config', () => ({ 'pubsweet-client': {} }))
+
+const getProjects = section =>
+  section
+    .children()
+    .not('.heading')
+    .map(c => c.props().project)
+
+describe('Dashboard', () => {
+  const makeWrapper = (props = {}) => {
+    props = Object.assign(
+      {
+        dashboard: {},
+        conversion: {},
+      },
+      props,
+    )
+
+    props.dashboard = Object.assign(
+      {
+        owner: [],
+        reviewer: [],
+        editor: [],
+      },
+      props.dashboard,
+    )
+
+    return shallow(<Dashboard {...props} />)
+  }
+
+  it('shows a message when there are no projects', () => {
+    const dashboard = makeWrapper()
+    expect(dashboard.find('.empty')).toHaveLength(1)
+    expect(dashboard.find('.heading')).toHaveLength(0)
+  })
+
+  it('shows a list of projects submitted by the current user', () => {
+    const project = { id: 1 }
+    const dashboard = makeWrapper({
+      dashboard: { owner: [project] },
+    })
+
+    expect(dashboard.find('.empty')).toHaveLength(0)
+    const section = dashboard.find('.section')
+    expect(section).toHaveLength(1)
+    expect(getProjects(section)).toEqual([project])
+  })
+
+  it('shows a list of projects to be reviewed', () => {
+    const project = { id: 1 }
+    const dashboard = makeWrapper({
+      dashboard: { reviewer: [project] },
+    })
+
+    expect(dashboard.find('.empty')).toHaveLength(0)
+    const section = dashboard.find('.section')
+    expect(section).toHaveLength(1)
+    expect(getProjects(section)).toEqual([project])
+  })
+
+  it('shows a list of projects of which the current user is the editor', () => {
+    const project = { id: 1 }
+    const dashboard = makeWrapper({
+      dashboard: { editor: [project] },
+    })
+
+    expect(dashboard.find('.empty')).toHaveLength(0)
+    const section = dashboard.find('.section')
+    expect(section).toHaveLength(1)
+    expect(getProjects(section)).toEqual([project])
+  })
+})
diff --git a/packages/component-dashboard/src/components/DashboardPage.integration.test.js b/packages/component-dashboard/src/components/DashboardPage.integration.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..139306dea81beea69cb3c768963622295021ad6b
--- /dev/null
+++ b/packages/component-dashboard/src/components/DashboardPage.integration.test.js
@@ -0,0 +1,62 @@
+import React from 'react'
+import { MemoryRouter } from 'react-router-dom'
+import { Provider } from 'react-redux'
+import { combineReducers } from 'redux'
+import configureMockStore from 'redux-mock-store'
+import thunk from 'redux-thunk'
+import Enzyme, { mount } from 'enzyme'
+import Adapter from 'enzyme-adapter-react-16'
+
+import { reducers } from 'pubsweet-client'
+import conversion from '../redux/conversion'
+
+import DashboardPage from './DashboardPage'
+
+// this should be elsewhere
+Enzyme.configure({ adapter: new Adapter() })
+
+jest.mock('config', () => ({ 'pubsweet-client': {} }))
+
+// Mock out the API
+jest.mock('pubsweet-client/src/helpers/api', () => ({
+  get: jest.fn(url => {
+    // Whatever the request is, return an empty array
+    const response = []
+    return new Promise(resolve => resolve(response))
+  }),
+}))
+
+global.window.localStorage = {
+  getItem: jest.fn(() => 'tok123'),
+}
+
+reducers.conversion = conversion
+const reducer = combineReducers(reducers)
+
+const middlewares = [thunk]
+const mockStore = () =>
+  configureMockStore(middlewares)(actions =>
+    actions.reduce(reducer, {
+      currentUser: { isAuthenticated: true },
+      conversion: { converting: false },
+    }),
+  )
+
+describe('DashboardPage', () => {
+  it('runs', done => {
+    const store = mockStore()
+    const page = mount(
+      <MemoryRouter>
+        <Provider store={store}>
+          <DashboardPage />
+        </Provider>
+      </MemoryRouter>,
+    )
+
+    setImmediate(() => {
+      page.update()
+      expect(page.find('.empty')).toHaveLength(1)
+      done()
+    })
+  })
+})
diff --git a/packages/component-dashboard/src/components/Reviews.js b/packages/component-dashboard/src/components/Reviews.js
index 7ab111cfd159a362136776ca51ec2e3d8c38a233..a671e4f0fc0d4ee45d904c2a903c1b82eb2f76b4 100644
--- a/packages/component-dashboard/src/components/Reviews.js
+++ b/packages/component-dashboard/src/components/Reviews.js
@@ -1,20 +1,25 @@
 import React from 'react'
 import { compose, withProps } from 'recompose'
 import { groupBy } from 'lodash'
+import { withJournal } from 'xpub-journal'
 import { Badge } from '@pubsweet/ui'
 import classes from './Reviews.local.scss'
 
-const Reviews = ({ reviews }) => (
+const Reviews = ({ reviews, journal }) => (
   <div className={classes.root}>
-    {Object.keys(reviews).map(status => (
+    {journal.reviewStatus.map(status => (
       <span className={classes.badge} key={status}>
-        <Badge count={reviews[status].length} label={status} />
+        <Badge
+          count={reviews[status] ? reviews[status].length : 0}
+          label={status}
+        />
       </span>
     ))}
   </div>
 )
 
 export default compose(
+  withJournal,
   withProps(props => ({
     reviews: groupBy(props.version.reviewers, 'status'),
   })),
diff --git a/packages/component-dashboard/src/components/sections/EditorItem.js b/packages/component-dashboard/src/components/sections/EditorItem.js
index 6983c73df954d0e805b8354391e0aabf4163a4e8..5efbbfc62dd1e234ade700782760ecbfcc27b49c 100644
--- a/packages/component-dashboard/src/components/sections/EditorItem.js
+++ b/packages/component-dashboard/src/components/sections/EditorItem.js
@@ -54,7 +54,9 @@ const EditorItem = ({ AssignEditor, project, version, addUserToTeam }) => (
         <Divider separator="–" />
         <MetadataSections sections={version.metadata.articleSection} />
         <Divider separator="–" />
-        <MetadataReviewType openReview={version.declarations.openReview} />
+        <MetadataReviewType
+          openPeerReview={version.declarations.openPeerReview}
+        />
       </div>
     </div>
 
diff --git a/packages/component-dashboard/src/components/sections/ReviewerItem.js b/packages/component-dashboard/src/components/sections/ReviewerItem.js
index 8ec3b786910cfb0641f85e48464051725b047224..9b68a4617b75578bebe94ea92a5ed07e552d7cac 100644
--- a/packages/component-dashboard/src/components/sections/ReviewerItem.js
+++ b/packages/component-dashboard/src/components/sections/ReviewerItem.js
@@ -7,7 +7,7 @@ import Divider from './Divider'
 import VersionTitle from './VersionTitle'
 
 // TODO: only return links if version id is in reviewer.accepted array
-// TODO: only return actions if not accepted or declined
+// TODO: only return actions if not accepted or rejected
 // TODO: review id in link
 
 const ReviewerItem = ({ project, version, currentUser, reviewerResponse }) => {
@@ -19,8 +19,9 @@ const ReviewerItem = ({ project, version, currentUser, reviewerResponse }) => {
         <VersionTitle className={classes.versionTitle} version={version} />
 
         {reviewer && (
-          <div>
-            {reviewer.status === 'accepted' && (
+          <div className={classes.links}>
+            {(reviewer.status === 'accepted' ||
+              reviewer.status === 'completed') && (
               <div className={classes.links}>
                 <div className={classes.link}>
                   <ProjectLink
@@ -29,7 +30,7 @@ const ReviewerItem = ({ project, version, currentUser, reviewerResponse }) => {
                     project={project}
                     version={version}
                   >
-                    {reviewer.submitted ? 'Reviewed' : 'Do Review'}
+                    {reviewer.submitted ? 'Completed' : 'Do Review'}
                   </ProjectLink>
                 </div>
               </div>
@@ -52,7 +53,7 @@ const ReviewerItem = ({ project, version, currentUser, reviewerResponse }) => {
                 <div className={classes.action}>
                   <Button
                     onClick={() =>
-                      reviewerResponse(project, version, reviewer, 'declined')
+                      reviewerResponse(project, version, reviewer, 'rejected')
                     }
                   >
                     reject
@@ -60,8 +61,7 @@ const ReviewerItem = ({ project, version, currentUser, reviewerResponse }) => {
                 </div>
               </div>
             )}
-
-            {reviewer.status === 'declined' && <div>declined</div>}
+            {reviewer.status === 'rejected' && 'rejected'}
           </div>
         )}
       </div>
diff --git a/packages/component-dashboard/src/redux/conversion.test.js b/packages/component-dashboard/src/redux/conversion.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..f46be1fa68d06952fdd0579e396e3c195bcf30cb
--- /dev/null
+++ b/packages/component-dashboard/src/redux/conversion.test.js
@@ -0,0 +1,15 @@
+import * as reducers from './conversion'
+
+jest.mock('config', () => ({ 'pubsweet-client': {} }))
+
+describe('default reducer', () => {
+  it('updates state', () => {
+    const initialState = { converting: false, error: undefined }
+
+    const newState = reducers.default(initialState, {
+      type: reducers.UPLOAD_MANUSCRIPT_REQUEST,
+    })
+
+    expect(newState).toEqual({ converting: true, error: undefined })
+  })
+})
diff --git a/packages/component-manuscript/package.json b/packages/component-manuscript/package.json
index f5c91201e2d0761259d92cc1706d9acd74500b11..f95c91142302c953dc9d31fed300ecabcb746692 100644
--- a/packages/component-manuscript/package.json
+++ b/packages/component-manuscript/package.json
@@ -7,15 +7,15 @@
   ],
   "main": "src",
   "dependencies": {
-    "wax-editor-react": "^0.0.10",
+    "wax-editor-react": "^0.1.10",
     "xpub-connect": "^0.0.2",
     "xpub-selectors": "^0.0.2"
   },
   "peerDependencies": {
     "prop-types": "^15.5.10",
-    "pubsweet-client": "^1.0.0-beta.8",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "pubsweet-client": "^2.1.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"
@@ -30,19 +30,19 @@
     "faker": "^4.1.0",
     "file-loader": "^1.1.5",
     "node-sass": "^4.5.3",
+    "prop-types": "^15.5.10",
+    "pubsweet-client": "^2.1.0",
+    "react": "^16.2.0",
+    "react-dom": "^16.2.0",
+    "react-redux": "^5.0.2",
+    "react-router-dom": "^4.2.2",
+    "react-styleguidist": "^6.2.5",
     "recompose": "^0.26.0",
     "rimraf": "^2.6.1",
-    "react-styleguidist": "^6.0.8",
     "sass-loader": "^6.0.6",
     "style-loader": "^0.19.0",
     "webpack": "^3.8.1",
     "webpack-node-externals": "^1.6.0",
-    "prop-types": "^15.5.10",
-    "pubsweet-client": "^1.0.0-beta.8",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
-    "react-redux": "^5.0.2",
-    "react-router-dom": "^4.2.2",
     "xpub-styleguide": "^0.0.2"
   },
   "scripts": {
diff --git a/packages/component-review/package.json b/packages/component-review/package.json
index abc7d527bb05ee8f82501d4446bf1de4e75e2875..c4d070059ee02664bff4e30905cc6d64ce181be8 100644
--- a/packages/component-review/package.json
+++ b/packages/component-review/package.json
@@ -9,13 +9,14 @@
     "dist"
   ],
   "dependencies": {
+    "@pubsweet/ui": "^2.0.0",
     "classnames": "^2.2.5",
     "lodash": "^4.17.4",
     "moment": "^2.18.1",
     "prop-types": "^15.5.10",
-    "pubsweet-client": "^1.0.0-beta.8",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "pubsweet-client": "^2.1.0",
+    "react": "^16.2.0",
+    "react-dom": "^16.2.0",
     "react-moment": "^0.6.1",
     "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2",
@@ -25,12 +26,11 @@
     "redux-form": "^7.0.3",
     "striptags": "^3.1.0",
     "uuid": "^3.1.0",
-    "wax-editor-react": "^0.0.10",
+    "wax-editor-react": "^0.1.8",
     "xpub-connect": "^0.0.2",
     "xpub-edit": "^0.0.2",
     "xpub-journal": "^0.0.2",
     "xpub-selectors": "^0.0.2",
-    "@pubsweet/ui": "^0.1.1",
     "xpub-upload": "^0.0.2",
     "xpub-validators": "^0.0.2"
   },
@@ -44,7 +44,7 @@
     "faker": "^4.1.0",
     "file-loader": "^1.1.5",
     "node-sass": "^4.5.3",
-    "react-styleguidist": "^6.0.8",
+    "react-styleguidist": "^6.2.5",
     "sass-loader": "^6.0.6",
     "style-loader": "^0.19.0",
     "webpack": "^3.8.1",
@@ -53,9 +53,9 @@
   },
   "peerDependencies": {
     "prop-types": "^15.5.10",
-    "pubsweet-client": "^1.0.0-beta.8",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "pubsweet-client": "^2.1.0",
+    "react": "^16.2.0",
+    "react-dom": "^16.2.0",
     "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2"
   },
diff --git a/packages/component-review/src/components/ReviewPage.js b/packages/component-review/src/components/ReviewPage.js
index 3b42c80703c07784bbcb2089be8ce82417fbfef8..337231247252a7e011bc6d5f354b69e98b31b588 100644
--- a/packages/component-review/src/components/ReviewPage.js
+++ b/packages/component-review/src/components/ReviewPage.js
@@ -23,9 +23,9 @@ const onSubmit = (
   { history, project, version, reviewer },
 ) => {
   Object.assign(reviewer, {
-    status: 'reviewed',
-    submitted: new Date(),
     ...values,
+    status: 'completed',
+    submitted: new Date(),
   })
 
   return dispatch(
@@ -48,7 +48,7 @@ const onSubmit = (
 
 const onChange = (values, dispatch, { project, version, reviewer }) => {
   Object.assign(reviewer, {
-    submitted: new Date(),
+    // submitted: new Date(),
     ...values,
   })
 
diff --git a/packages/component-review/src/components/decision/DecisionLayout.js b/packages/component-review/src/components/decision/DecisionLayout.js
index 5fb2cf4dc1f7b4d4f500c3dc56ee01b633c3f814..ef571250d18d3dd37ed78a96f3b1150f5748e4f0 100644
--- a/packages/component-review/src/components/decision/DecisionLayout.js
+++ b/packages/component-review/src/components/decision/DecisionLayout.js
@@ -52,6 +52,7 @@ const DecisionLayout = ({
         content: (
           <SimpleEditor
             content={version.source}
+            editing="selection"
             key={key}
             layout="bare"
             readOnly
@@ -97,6 +98,7 @@ const DecisionLayout = ({
       content: (
         <SimpleEditor
           content={currentVersion.source}
+          editing="selection"
           key={key}
           layout="bare"
           readOnly
diff --git a/packages/component-review/src/components/metadata/ReviewMetadata.js b/packages/component-review/src/components/metadata/ReviewMetadata.js
index 8c3912c5e7f68df90dead525c77dd1be7b7c24d3..2d7c8023d1fef2cb90bedc9e5a230141479cdf96 100644
--- a/packages/component-review/src/components/metadata/ReviewMetadata.js
+++ b/packages/component-review/src/components/metadata/ReviewMetadata.js
@@ -10,7 +10,9 @@ const ReviewMetadata = ({ version, handlingEditors }) => (
       <tbody>
         <tr>
           <th className={classes.heading}>peer review:</th>
-          <td>{version.declarations.openReview ? 'open' : 'closed'}</td>
+          <td>
+            {version.declarations.openPeerReview === 'yes' ? 'open' : 'closed'}
+          </td>
         </tr>
 
         {!!handlingEditors && (
diff --git a/packages/component-review/src/components/review/ReviewLayout.js b/packages/component-review/src/components/review/ReviewLayout.js
index 6eae08e98de8120165c453f45ad419a495f425fd..1dae14203276643e81565598057fadfb1945ddc2 100644
--- a/packages/component-review/src/components/review/ReviewLayout.js
+++ b/packages/component-review/src/components/review/ReviewLayout.js
@@ -53,6 +53,7 @@ const ReviewLayout = ({
         content: (
           <SimpleEditor
             content={version.source}
+            editing="selection"
             key={key}
             layout="bare"
             readOnly
@@ -65,7 +66,7 @@ const ReviewLayout = ({
   }, [])
 
   const review = currentVersion.reviewers.find(
-    review => review.reviewer === reviewer.id,
+    review => review.id === reviewer.id,
   )
 
   if (currentVersion.submitted && (!review || !review.submitted)) {
@@ -96,6 +97,7 @@ const ReviewLayout = ({
       content: (
         <SimpleEditor
           content={currentVersion.source}
+          editing="selection"
           key={key}
           layout="bare"
           readOnly
diff --git a/packages/component-submit/package.json b/packages/component-submit/package.json
index f5a2d81758cd0e1d88e54d9813301f9b777c59fa..117743ba81e7f5d8683f55318a2c4445d396e6b1 100644
--- a/packages/component-submit/package.json
+++ b/packages/component-submit/package.json
@@ -9,12 +9,13 @@
     "dist"
   ],
   "dependencies": {
+    "@pubsweet/ui": "^2.0.0",
     "classnames": "^2.2.5",
     "lodash": "^4.17.4",
     "prop-types": "^15.5.10",
-    "pubsweet-client": "^1.0.0-beta.8",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "pubsweet-client": "^2.1.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",
@@ -25,7 +26,6 @@
     "xpub-edit": "^0.0.2",
     "xpub-journal": "^0.0.2",
     "xpub-selectors": "^0.0.2",
-    "@pubsweet/ui": "^0.1.1",
     "xpub-upload": "^0.0.2",
     "xpub-validators": "^0.0.2"
   },
@@ -39,7 +39,7 @@
     "faker": "^4.1.0",
     "file-loader": "^1.1.5",
     "node-sass": "^4.5.3",
-    "react-styleguidist": "^6.0.8",
+    "react-styleguidist": "^6.2.5",
     "sass-loader": "^6.0.6",
     "style-loader": "^0.19.0",
     "webpack": "^3.8.1",
@@ -48,9 +48,9 @@
   },
   "peerDependencies": {
     "prop-types": "^15.5.10",
-    "pubsweet-client": "^1.0.0-beta.8",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "pubsweet-client": "^2.1.0",
+    "react": "^16.2.0",
+    "react-dom": "^16.2.0",
     "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2"
   },
diff --git a/packages/component-submit/src/components/Declarations.js b/packages/component-submit/src/components/Declarations.js
index d7d3e967ff9a1d719fffb1c713941250d53383c1..21b9585a7ed7b1a4105cbc0a648d84a664c2085b 100644
--- a/packages/component-submit/src/components/Declarations.js
+++ b/packages/component-submit/src/components/Declarations.js
@@ -1,12 +1,14 @@
 import React from 'react'
 import classnames from 'classnames'
 import { FormSection } from 'redux-form'
-import { ValidatedField, YesOrNo } from '@pubsweet/ui'
+import { ValidatedField, RadioGroup } from '@pubsweet/ui'
 import { withJournal } from 'xpub-journal'
 import { required } from 'xpub-validators'
 import classes from './Declarations.local.scss'
 
-const DeclarationInput = input => <YesOrNo inline {...input} />
+const DeclarationInput = options => input => (
+  <RadioGroup inline options={options} {...input} />
+)
 
 const Declarations = ({ journal, readonly }) => (
   <FormSection name="declarations">
@@ -22,7 +24,7 @@ const Declarations = ({ journal, readonly }) => (
       >
         <div className={classes.legend}>{question.legend}</div>
         <ValidatedField
-          component={DeclarationInput}
+          component={DeclarationInput(question.options)}
           name={question.id}
           readonly={readonly}
           required
diff --git a/packages/component-submit/src/components/Notes.js b/packages/component-submit/src/components/Notes.js
index 431aab2667d00156c9f98cff5416b44a878e11ec..5a19bd621074973db9946028fb6b9f0b509a51a1 100644
--- a/packages/component-submit/src/components/Notes.js
+++ b/packages/component-submit/src/components/Notes.js
@@ -16,7 +16,7 @@ const FundingInput = input => (
 const InstructionsInput = input => (
   <NoteEditor
     placeholder="Enter instructions for the editor…"
-    title="Special instructions (confidential)"
+    title="Special instructions (confidential, to Editors only)"
     {...input}
   />
 )
diff --git a/packages/component-submit/src/components/SubmitPage.js b/packages/component-submit/src/components/SubmitPage.js
index e4083b42399cfee3396360d0f31c689ac5ae583f..9b75840b64bbef630ac9b773896454b17f32b25b 100644
--- a/packages/component-submit/src/components/SubmitPage.js
+++ b/packages/component-submit/src/components/SubmitPage.js
@@ -1,4 +1,4 @@
-import { pick, debounce } from 'lodash'
+import { pick, throttle } from 'lodash'
 import { compose, withProps, withState, withHandlers } from 'recompose'
 import { connect } from 'react-redux'
 import { reduxForm, SubmissionError } from 'redux-form'
@@ -92,7 +92,7 @@ export default compose(
   reduxForm({
     // enableReinitialize: true,
     form: 'submit',
-    onChange: debounce(onChange, 1000, { maxWait: 5000 }),
+    onChange: throttle(onChange, 3000, { trailing: false }),
     onSubmit,
   }),
   withState('confirming', 'setConfirming', false),
diff --git a/packages/components-faraday/src/components/Admin/AdminRoute.js b/packages/components-faraday/src/components/Admin/AdminRoute.js
index e23544f0dc607ff82714ec64026e1b7fd7a83a53..919265c5abc488311fa0805adad2ab9e1901e7c3 100644
--- a/packages/components-faraday/src/components/Admin/AdminRoute.js
+++ b/packages/components-faraday/src/components/Admin/AdminRoute.js
@@ -3,7 +3,7 @@ import { get } from 'lodash'
 import { compose } from 'recompose'
 import { connect } from 'react-redux'
 import { Route, Redirect, withRouter } from 'react-router-dom'
-import { getCurrentUser } from 'pubsweet-component-xpub-authentication/src/redux/currentUser'
+import { actions } from 'pubsweet-client'
 
 const PrivateRoute = ({
   currentUser,
@@ -45,7 +45,7 @@ export default compose(
       currentUser: state.currentUser,
     }),
     {
-      getCurrentUser,
+      getCurrentUser: actions.getCurrentUser,
     },
   ),
 )(PrivateRoute)
diff --git a/packages/components-faraday/src/components/AppBar/AppBar.js b/packages/components-faraday/src/components/AppBar/AppBar.js
index ca81c1ec1dec77a654095cbf0c93a6d51515390a..0a414d5fb7cd8dc7867e2efd35dc4b371754109c 100644
--- a/packages/components-faraday/src/components/AppBar/AppBar.js
+++ b/packages/components-faraday/src/components/AppBar/AppBar.js
@@ -6,7 +6,15 @@ import styled from 'styled-components'
 import { withRouter } from 'react-router-dom'
 import { withState, withHandlers, compose } from 'recompose'
 
-const AppBar = ({ expanded, toggleMenu, brand, user, goTo, currentUser }) => (
+const AppBar = ({
+  expanded,
+  toggleMenu,
+  brand,
+  user,
+  goTo,
+  currentUser,
+  onLogoutClick,
+}) => (
   <Root>
     {React.cloneElement(brand, {
       onClick: goTo('/'),
@@ -28,7 +36,7 @@ const AppBar = ({ expanded, toggleMenu, brand, user, goTo, currentUser }) => (
                 Admin dashboard
               </DropdownOption>
             )}
-            <DropdownOption onClick={goTo('/logout')}>Logout</DropdownOption>
+            <DropdownOption onClick={onLogoutClick}>Logout</DropdownOption>
           </Dropdown>
         )}
       </User>
diff --git a/packages/components-faraday/src/components/AuthorList/AuthorAdder.js b/packages/components-faraday/src/components/AuthorList/AuthorAdder.js
index f6e389871336a681f58d0a36bdbe3ed30c80728c..2973fd02cc6cb0fa431febb534e80f3de78900cd 100644
--- a/packages/components-faraday/src/components/AuthorList/AuthorAdder.js
+++ b/packages/components-faraday/src/components/AuthorList/AuthorAdder.js
@@ -14,7 +14,7 @@ import { getAuthorFetching } from '../../redux/authors'
 import { MenuItem, ValidatedTextField } from './FormItems'
 
 const emailRegex = new RegExp(
-  /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i, //eslint-disable-lint
+  /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i, //eslint-disable-line
 )
 
 const emailValidator = value =>
diff --git a/packages/components-faraday/src/components/SignUp/SignUpInvitationPage.js b/packages/components-faraday/src/components/SignUp/SignUpInvitationPage.js
index e4e02cfe4b1e800e4d557fc091437102e6d95f2d..6dcd11f46d9ed9d331c718c5a52d37e22095102f 100644
--- a/packages/components-faraday/src/components/SignUp/SignUpInvitationPage.js
+++ b/packages/components-faraday/src/components/SignUp/SignUpInvitationPage.js
@@ -1,7 +1,7 @@
 import { get } from 'lodash'
 import request, { create } from 'pubsweet-client/src/helpers/api'
 import { withJournal } from 'xpub-journal'
-import { login } from 'pubsweet-component-xpub-authentication/src/redux/login'
+import { loginUser } from 'pubsweet-component-login/actions'
 import { SubmissionError } from 'redux-form'
 import {
   compose,
@@ -13,8 +13,8 @@ import {
 
 import SignUpInvitation from './SignUpInvitationForm'
 
-const loginUser = (dispatch, values, history) =>
-  dispatch(login(values))
+const login = (dispatch, values, history) =>
+  dispatch(loginUser(values))
     .then(() => {
       history.push('/')
     })
@@ -35,7 +35,7 @@ const confirmUser = (email, token, history) => (values, dispatch) => {
       .then(r => {
         const { username } = r
         const { password } = values
-        loginUser(dispatch, { username, password }, history)
+        login(dispatch, { username, password }, history)
       })
       .catch(error => {
         const err = get(error, 'response')
diff --git a/packages/xpub-collabra/app/config/journal/declarations.js b/packages/xpub-collabra/app/config/journal/declarations.js
index 012e4d46c2bfe3b20da969a9277a391d61c18094..d870cf6b67b87fba12c170af534ece0bf3793351 100644
--- a/packages/xpub-collabra/app/config/journal/declarations.js
+++ b/packages/xpub-collabra/app/config/journal/declarations.js
@@ -2,27 +2,87 @@ export default {
   questions: [
     {
       id: 'openData',
-      legend: 'Data is open',
+      legend: 'Data is open ?',
+      options: [
+        {
+          label: 'Yes',
+          value: 'yes',
+        },
+        {
+          label: 'No/Not Applicable',
+          value: 'no',
+        },
+      ],
     },
     {
       id: 'previouslySubmitted',
-      legend: 'Previously submitted',
+      legend: 'Previously submitted ?',
+      options: [
+        {
+          label: 'Yes',
+          value: 'yes',
+        },
+        {
+          label: 'No',
+          value: 'no',
+        },
+      ],
     },
     {
       id: 'openPeerReview',
-      legend: 'Open peer review',
+      legend: 'Open peer review ?',
+      options: [
+        {
+          label: 'Yes',
+          value: 'yes',
+        },
+        {
+          label: 'No',
+          value: 'no',
+        },
+      ],
     },
     {
       id: 'streamlinedReview',
-      legend: 'Streamlined review',
+      legend: 'Streamlined review ?',
+      options: [
+        {
+          label: 'Yes',
+          value: 'yes',
+        },
+        {
+          label: 'No',
+          value: 'no',
+        },
+      ],
     },
     {
       id: 'researchNexus',
-      legend: 'Submitted as part of the research nexus?',
+      legend: 'Submitted as part of the research nexus ?',
+      options: [
+        {
+          label: 'Yes',
+          value: 'yes',
+        },
+        {
+          label: 'No',
+          value: 'no',
+        },
+      ],
     },
     {
       id: 'preregistered',
-      legend: 'Pre-registered?',
+      legend: 'Pre-registered ?',
+      options: [
+        {
+          label: 'Yes',
+          value: 'yes',
+        },
+        {
+          label: 'No',
+          value: 'no',
+        },
+      ],
     },
   ],
 }
diff --git a/packages/xpub-collabra/app/config/journal/index.js b/packages/xpub-collabra/app/config/journal/index.js
index 30bc3a405632a2e2ff3972ac0c490a26666ce330..0c6ad26b9490fd2fbfc5c1536954b068c51c1071 100644
--- a/packages/xpub-collabra/app/config/journal/index.js
+++ b/packages/xpub-collabra/app/config/journal/index.js
@@ -7,3 +7,4 @@ export { default as articleSections } from './article-sections'
 export { default as articleTypes } from './article-types'
 export { default as editors } from './editors'
 export { default as roles } from './roles'
+export { default as reviewStatus } from './review-status'
diff --git a/packages/xpub-collabra/app/config/journal/review-status.js b/packages/xpub-collabra/app/config/journal/review-status.js
new file mode 100644
index 0000000000000000000000000000000000000000..fd8c98ac00f8dadbeaf93e619bc26499ab95c7b6
--- /dev/null
+++ b/packages/xpub-collabra/app/config/journal/review-status.js
@@ -0,0 +1 @@
+export default ['invited', 'accepted', 'rejected', 'completed']
diff --git a/packages/xpub-collabra/app/routes.js b/packages/xpub-collabra/app/routes.js
index d15a0637a088be488d1b25c3f2e9f68325df6073..9f8500902a92f5c021583649c30dd6c92a9c4afd 100644
--- a/packages/xpub-collabra/app/routes.js
+++ b/packages/xpub-collabra/app/routes.js
@@ -1,14 +1,11 @@
 import React from 'react'
-import { Route } from 'react-router-dom'
+import { withProps } from 'recompose'
+import { Route, Switch } from 'react-router-dom'
+import { AuthenticatedComponent } from 'pubsweet-client'
 
 import App from 'pubsweet-component-xpub-app/src/components'
-
-import {
-  PrivateRoute,
-  SignupPage,
-  LoginPage,
-  LogoutPage,
-} from 'pubsweet-component-xpub-authentication/src/components'
+import Login from 'pubsweet-component-login/LoginContainer'
+import Signup from 'pubsweet-component-signup/SignupContainer'
 
 import DashboardPage from 'pubsweet-component-xpub-dashboard/src/components/DashboardPage'
 import SubmitPage from 'pubsweet-component-xpub-submit/src/components/SubmitPage'
@@ -17,42 +14,55 @@ import ReviewersPage from 'pubsweet-component-xpub-review/src/components/Reviewe
 import ReviewPage from 'pubsweet-component-xpub-review/src/components/ReviewPage'
 import DecisionPage from 'pubsweet-component-xpub-review/src/components/DecisionPage'
 
+const LoginPage = withProps({ passwordReset: false })(Login)
+
+const PrivateRoute = ({ component: Component, ...rest }) => (
+  <Route
+    {...rest}
+    render={props => (
+      <AuthenticatedComponent>
+        <Component {...props} />
+      </AuthenticatedComponent>
+    )}
+  />
+)
+
 // TODO: use componentDidMount to fetch the current user before rendering?
 
 const Routes = () => (
   <App>
-    <PrivateRoute component={DashboardPage} exact path="/" />
-    <PrivateRoute
-      component={SubmitPage}
-      exact
-      path="/projects/:project/versions/:version/submit"
-    />
-    <PrivateRoute
-      component={ManuscriptPage}
-      exact
-      path="/projects/:project/versions/:version/manuscript"
-    />
-    <PrivateRoute
-      component={ReviewersPage}
-      exact
-      path="/projects/:project/versions/:version/reviewers"
-    />
-    <PrivateRoute
-      component={ReviewPage}
-      exact
-      path="/projects/:project/versions/:version/reviews/:review"
-    />
-    <PrivateRoute
-      component={DecisionPage}
-      exact
-      path="/projects/:project/versions/:version/decisions/:decision"
-    />
-
-    <PrivateRoute component={LogoutPage} exact path="/logout" />
-
-    <Route component={SignupPage} exact path="/signup" />
-    <Route component={LoginPage} exact path="/login" />
+    <Switch>
+      <PrivateRoute component={DashboardPage} exact path="/" />
+      <PrivateRoute
+        component={SubmitPage}
+        exact
+        path="/projects/:project/versions/:version/submit"
+      />
+      <PrivateRoute
+        component={ManuscriptPage}
+        exact
+        path="/projects/:project/versions/:version/manuscript"
+      />
+      <PrivateRoute
+        component={ReviewersPage}
+        exact
+        path="/projects/:project/versions/:version/reviewers"
+      />
+      <PrivateRoute
+        component={ReviewPage}
+        exact
+        path="/projects/:project/versions/:version/reviews/:review"
+      />
+      <PrivateRoute
+        component={DecisionPage}
+        exact
+        path="/projects/:project/versions/:version/decisions/:decision"
+      />
 
+      <Route component={Signup} exact path="/signup" />
+      <Route component={LoginPage} exact path="/login" />
+      <PrivateRoute component={DashboardPage} path="*" />
+    </Switch>
     {/* <Redirect from="/" to="/dashboard"/> */}
   </App>
 )
diff --git a/packages/xpub-collabra/config/components.json b/packages/xpub-collabra/config/components.json
index 8c447f58070819ee76fa7ef806d94e547b5135ef..f286079017a647031c49ae05c77f37cb41d98d6e 100644
--- a/packages/xpub-collabra/config/components.json
+++ b/packages/xpub-collabra/config/components.json
@@ -1,9 +1,10 @@
 [
   "pubsweet-component-xpub-app",
-  "pubsweet-component-xpub-authentication",
   "pubsweet-component-xpub-dashboard",
   "pubsweet-component-xpub-manuscript",
   "pubsweet-component-xpub-review",
   "pubsweet-component-xpub-submit",
-  "pubsweet-component-ink-backend"
+  "pubsweet-component-ink-backend",
+  "pubsweet-component-login",
+  "pubsweet-component-signup"
 ]
diff --git a/packages/xpub-collabra/package.json b/packages/xpub-collabra/package.json
index 270bea33cbfb19df9b45dd045da2a13b29fc9349..ad48c435a23d21d2aeb799bfe554f2e86c8924f2 100644
--- a/packages/xpub-collabra/package.json
+++ b/packages/xpub-collabra/package.json
@@ -8,7 +8,7 @@
     "url": "https://gitlab.coko.foundation/xpub/xpub"
   },
   "dependencies": {
-    "@pubsweet/ui": "^0.1.1",
+    "@pubsweet/ui": "^2.0.0",
     "babel-core": "^6.26.0",
     "config": "^1.26.2",
     "font-awesome": "^4.7.0",
@@ -19,18 +19,19 @@
     "moment": "^2.18.1",
     "prop-types": "^15.5.10",
     "pubsweet": "^1.1.1",
-    "pubsweet-client": "^1.1.1",
+    "pubsweet-client": "^2.1.0",
     "pubsweet-component-ink-backend": "^0.1.1",
-    "pubsweet-component-ink-frontend": "^0.2.3",
+    "pubsweet-component-ink-frontend": "^1.0.0",
+    "pubsweet-component-login": "^1.0.1",
+    "pubsweet-component-signup": "^1.0.0",
     "pubsweet-component-xpub-app": "^0.0.2",
-    "pubsweet-component-xpub-authentication": "^0.0.2",
     "pubsweet-component-xpub-dashboard": "^0.0.2",
     "pubsweet-component-xpub-manuscript": "^0.0.2",
     "pubsweet-component-xpub-review": "^0.0.2",
     "pubsweet-component-xpub-submit": "^0.0.2",
     "pubsweet-server": "^1.0.1",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "react": "^16.2.0",
+    "react-dom": "^16.2.0",
     "react-router-dom": "^4.2.2",
     "recompose": "^0.26.0",
     "redux": "^3.6.0",
diff --git a/packages/xpub-collabra/webpack/babel-includes.js b/packages/xpub-collabra/webpack/babel-includes.js
index cf4c70690af26d8fec6abcbeb6b3ce54b5be6963..ba73256a5abfd47176e81ab3e739b785ac64457a 100644
--- a/packages/xpub-collabra/webpack/babel-includes.js
+++ b/packages/xpub-collabra/webpack/babel-includes.js
@@ -4,10 +4,14 @@ const path = require('path')
 // TODO: compile components to ES5 for distribution
 
 module.exports = [
+  // include app folder
   path.join(__dirname, '..', 'app'),
-  /pubsweet-[^/]+\/src/,
+  // include pubsweet and xpub packages which are published untranspiled
   /xpub-[^/]+\/src/,
   /component-[^/]+\/src/,
   /wax-[^/]+\/src/,
-  /@pubsweet\/[^/]+\/src/,
+  /pubsweet-[^/\\]+\/(?!node_modules)/,
+  /@pubsweet\/[^/\\]+\/(?!node_modules)/,
+  // include other packages when this repo is mounted in a workspace
+  /packages\/[^/\\]+\/(?!node_modules)/,
 ]
diff --git a/packages/xpub-connect/package.json b/packages/xpub-connect/package.json
index 775efbf3bdf0253ac69804f739e3df23d48c3eed..d51b7adf6eee0893b5367aa674adeace6cf9ac4b 100644
--- a/packages/xpub-connect/package.json
+++ b/packages/xpub-connect/package.json
@@ -9,16 +9,16 @@
     "dist"
   ],
   "dependencies": {
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "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"
   },
   "peerDependencies": {
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "react": "^16.2.0",
+    "react-dom": "^16.2.0",
     "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2",
     "redux": "^3.6.0"
diff --git a/packages/xpub-edit/package.json b/packages/xpub-edit/package.json
index 239d7cf5d06fca0fb88f595c36311a4e11d9abf9..4ac9753d9906a9589e3fe81d86bee6f9c3c785c7 100644
--- a/packages/xpub-edit/package.json
+++ b/packages/xpub-edit/package.json
@@ -16,8 +16,8 @@
     "prosemirror-model": "^1.0.0",
     "prosemirror-state": "^1.0.1",
     "prosemirror-view": "^1.0.0",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1"
+    "react": "^16.2.0",
+    "react-dom": "^16.2.0"
   },
   "devDependencies": {
     "babel-core": "^6.26.0",
@@ -29,7 +29,7 @@
     "faker": "^4.1.0",
     "file-loader": "^1.1.5",
     "node-sass": "^4.5.3",
-    "react-styleguidist": "^6.0.8",
+    "react-styleguidist": "^6.2.5",
     "sass-loader": "^6.0.6",
     "style-loader": "^0.19.0",
     "webpack": "^3.8.1",
diff --git a/packages/xpub-faraday/app/FaradayApp.js b/packages/xpub-faraday/app/FaradayApp.js
index 0ceec8097357dbede9310136caf0dd82869d2972..3df9a1e4de7dbc6b0d40bceb51eec23587c49721 100644
--- a/packages/xpub-faraday/app/FaradayApp.js
+++ b/packages/xpub-faraday/app/FaradayApp.js
@@ -3,12 +3,17 @@ import 'xpub-bootstrap'
 import { compose } from 'recompose'
 import { connect } from 'react-redux'
 import styled from 'styled-components'
+import { actions } from 'pubsweet-client'
 import { withJournal } from 'xpub-journal'
 import { AppBar } from 'pubsweet-components-faraday/src/components'
 
-const App = ({ children, currentUser, journal }) => (
+const App = ({ children, currentUser, journal, logoutUser }) => (
   <Root>
-    <AppBar brand={journal.metadata.name} user={currentUser} />
+    <AppBar
+      brand={journal.metadata.name}
+      onLogoutClick={logoutUser}
+      user={currentUser}
+    />
     <MainContainer>{children}</MainContainer>
   </Root>
 )
@@ -23,8 +28,11 @@ const MainContainer = styled.div`
 `
 
 export default compose(
-  connect(state => ({
-    currentUser: state.currentUser.user,
-  })),
+  connect(
+    state => ({
+      currentUser: state.currentUser.user,
+    }),
+    { logoutUser: actions.logoutUser },
+  ),
   withJournal,
 )(App)
diff --git a/packages/xpub-faraday/app/routes.js b/packages/xpub-faraday/app/routes.js
index 17ad28ba299d7b4f6da6b06cc5c0163e10845690..9d8ad3bcb3298fc2196c793e18fa6a33f9f85c58 100644
--- a/packages/xpub-faraday/app/routes.js
+++ b/packages/xpub-faraday/app/routes.js
@@ -1,14 +1,10 @@
 import React from 'react'
+// import { withProps } from 'recompose'
 import { Route, Switch } from 'react-router-dom'
+import { AuthenticatedComponent } from 'pubsweet-client'
+import Login from 'pubsweet-component-login/LoginContainer'
+import Signup from 'pubsweet-component-signup/SignupContainer'
 
-import {
-  PrivateRoute,
-  SignupPage,
-  LoginPage,
-  LogoutPage,
-} from 'pubsweet-component-xpub-authentication/src/components'
-
-// import DashboardPage from 'pubsweet-component-xpub-dashboard/src/components/DashboardPage'
 import DashboardPage from 'pubsweet-components-faraday/src/components/Dashboard'
 import { Wizard } from 'pubsweet-component-wizard/src/components'
 import ManuscriptPage from 'pubsweet-component-xpub-manuscript/src/components/ManuscriptPage'
@@ -24,11 +20,22 @@ import SignUpInvitationPage from 'pubsweet-components-faraday/src/components/Sig
 
 import FaradayApp from './FaradayApp'
 
+const PrivateRoute = ({ component: Component, ...rest }) => (
+  <Route
+    {...rest}
+    render={props => (
+      <AuthenticatedComponent>
+        <Component {...props} />
+      </AuthenticatedComponent>
+    )}
+  />
+)
+
 const Routes = () => (
   <FaradayApp>
     <Switch>
-      <Route component={LoginPage} exact path="/login" />
-      <Route component={SignupPage} exact path="/signup" />
+      <Route component={Login} exact path="/login" />
+      <Route component={Signup} exact path="/signup" />
       <PrivateRoute component={DashboardPage} exact path="/" />
       <PrivateRoute
         component={ConfirmationPage}
@@ -43,7 +50,6 @@ const Routes = () => (
         exact
         path="/admin/users/edit/:userId"
       />
-      <PrivateRoute component={LogoutPage} exact path="/logout" />
       <PrivateRoute
         component={Wizard}
         exact
diff --git a/packages/xpub-faraday/config/components.json b/packages/xpub-faraday/config/components.json
index 0219f3fda35effeebc20af6c48b484e5ed3ca2d4..a499849bfa8629886b87f5a7e1bb4e22aaa68ea3 100644
--- a/packages/xpub-faraday/config/components.json
+++ b/packages/xpub-faraday/config/components.json
@@ -1,6 +1,6 @@
 [
-  "pubsweet-component-xpub-app",
-  "pubsweet-component-xpub-authentication",
+  "pubsweet-component-login",
+  "pubsweet-component-signup",
   "pubsweet-component-xpub-dashboard",
   "xpub-faraday-server",
   "pubsweet-component-ink-backend",
diff --git a/packages/xpub-faraday/config/default.js b/packages/xpub-faraday/config/default.js
index 054318dba962df57aae30932e715b2f2bbae01f0..3fb21750085971bb004180f6b5ef357272253ab8 100644
--- a/packages/xpub-faraday/config/default.js
+++ b/packages/xpub-faraday/config/default.js
@@ -25,7 +25,7 @@ module.exports = {
   'pubsweet-client': {
     API_ENDPOINT: '/api',
     'login-redirect': '/',
-    'redux-log': false,
+    'redux-log': true,
     theme: process.env.PUBSWEET_THEME,
   },
   'mail-transport': {
diff --git a/packages/xpub-faraday/package.json b/packages/xpub-faraday/package.json
index d77e882622dce55df0caf84bd064b79c94fe289c..fea858d354b3a2939c9dafae599efc2785b657c1 100644
--- a/packages/xpub-faraday/package.json
+++ b/packages/xpub-faraday/package.json
@@ -8,7 +8,7 @@
     "url": "https://gitlab.coko.foundation/xpub/xpub"
   },
   "dependencies": {
-    "@pubsweet/ui": "^0.1.1",
+    "@pubsweet/ui": "^2.0.0",
     "babel-core": "^6.26.0",
     "config": "^1.26.2",
     "dotenv": "^5.0.0",
@@ -20,23 +20,23 @@
     "moment": "^2.18.1",
     "prop-types": "^15.5.10",
     "pubsweet": "^1.1.1",
-    "pubsweet-client": "^1.1.1",
+    "pubsweet-client": "^2.1.0",
     "pubsweet-component-ink-backend": "^0.1.1",
-    "pubsweet-component-ink-frontend": "^0.2.3",
-    "pubsweet-component-xpub-app": "^0.0.2",
-    "pubsweet-component-xpub-authentication": "^0.0.2",
+    "pubsweet-component-ink-frontend": "^1.0.0",
+    "pubsweet-component-login": "^1.0.1",
+    "pubsweet-component-signup": "^1.0.0",
     "pubsweet-component-xpub-dashboard": "^0.0.2",
     "pubsweet-component-xpub-manuscript": "^0.0.2",
     "pubsweet-component-xpub-review": "^0.0.2",
     "pubsweet-component-xpub-submit": "^0.0.2",
     "pubsweet-components-aws-s3": "^0.0.1",
     "pubsweet-component-invite": "^0.0.1",
-    "pubsweet-server": "1.0.5",
-    "react": "^15.6.1",
+    "pubsweet-server": "^1.0.1",
+    "react": "^16.2.0",
+    "react-dom": "^16.2.0",
+    "react-router-dom": "^4.2.2",
     "react-dnd": "^2.5.4",
     "react-dnd-html5-backend": "^2.5.4",
-    "react-dom": "^15.6.1",
-    "react-router-dom": "^4.2.2",
     "recompose": "^0.26.0",
     "redux": "^3.6.0",
     "redux-form": "^7.0.3",
diff --git a/packages/xpub-faraday/webpack/babel-includes.js b/packages/xpub-faraday/webpack/babel-includes.js
index 3a619ed559a51e70edc6d8501083bb4353fc7790..8cb33f2521758bcbbb9e661df5a0237147e895ec 100644
--- a/packages/xpub-faraday/webpack/babel-includes.js
+++ b/packages/xpub-faraday/webpack/babel-includes.js
@@ -5,10 +5,12 @@ const path = require('path')
 
 module.exports = [
   path.join(__dirname, '..', 'app'),
-  /pubsweet-[^/]+\/src/,
   /xpub-[^/]+\/src/,
   /component-[^/]+\/src/,
   /components-[^/]+\/src/,
   /wax-[^/]+\/src/,
-  /@pubsweet\/[^/]+\/src/,
+  /pubsweet-[^/\\]+\/(?!node_modules)/,
+  /@pubsweet\/[^/\\]+\/(?!node_modules)/,
+  // include other packages when this repo is mounted in a workspace
+  /packages\/[^/\\]+\/(?!node_modules)/,
 ]
diff --git a/packages/xpub-journal/package.json b/packages/xpub-journal/package.json
index 410ee4300a763ab2d9050190ed30752f8450b656..cb62a949501c49b47960323cb06d70695b950759 100644
--- a/packages/xpub-journal/package.json
+++ b/packages/xpub-journal/package.json
@@ -10,13 +10,13 @@
   ],
   "dependencies": {
     "prop-types": "^15.5.10",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "react": "^16.2.0",
+    "react-dom": "^16.2.0",
     "recompose": "^0.26.0"
   },
   "peerDependencies": {
     "prop-types": "^15.5.10",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1"
+    "react": "^16.2.0",
+    "react-dom": "^16.2.0"
   }
 }
diff --git a/packages/xpub-styleguide/package.json b/packages/xpub-styleguide/package.json
index 3b43464cf5ca3f2ab95d40ee5e4f1b6484a88296..eb79fc2ffa81fe7f5aff0f511a4b1bbf4bb8e8a8 100644
--- a/packages/xpub-styleguide/package.json
+++ b/packages/xpub-styleguide/package.json
@@ -7,9 +7,9 @@
   ],
   "main": "src",
   "dependencies": {
-    "@pubsweet/styleguide": "^0.1.1",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "@pubsweet/styleguide": "^1.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",
diff --git a/packages/xpub-theme/package.json b/packages/xpub-theme/package.json
index 24d756d06a76e85e5d3e1b53de487318276367e3..020ef8be49e83a59f9e6226274376dbf87bae138 100644
--- a/packages/xpub-theme/package.json
+++ b/packages/xpub-theme/package.json
@@ -5,7 +5,7 @@
   "main": "src",
   "license": "MIT",
   "dependencies": {
-    "@pubsweet/theme": "^0.1.1",
+    "@pubsweet/theme": "^0.1.3",
     "cokourier-prime-sans": "git+https://gitlab.coko.foundation/julientaq/cokourier-sans-prime.git",
     "typeface-fira-mono": "^0.0.43",
     "typeface-fira-sans": "^0.0.43",
diff --git a/packages/xpub-upload/package.json b/packages/xpub-upload/package.json
index e7d05c8e68ed5008ac0074851f89c3e4792c1c35..d127956c32c392eadb04d9575aba59be88007486 100644
--- a/packages/xpub-upload/package.json
+++ b/packages/xpub-upload/package.json
@@ -9,17 +9,17 @@
     "dist"
   ],
   "dependencies": {
-    "pubsweet-client": "^1.0.0-beta.8",
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "pubsweet-client": "^2.1.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"
   },
   "peerDependencies": {
-    "react": "^15.6.1",
-    "react-dom": "^15.6.1",
+    "react": "^16.2.0",
+    "react-dom": "^16.2.0",
     "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2",
     "redux": "^3.6.0"
diff --git a/yarn.lock b/yarn.lock
index e434fdc51875637af9236f6e59916aa23ffa2c46..9463ab4846cd7d62670179e7e6ff2170af88085b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -89,30 +89,22 @@
     joi "^10.6.0"
     lodash "^4.17.4"
 
-"@pubsweet/logger@^0.2.0":
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/@pubsweet/logger/-/logger-0.2.0.tgz#0f721f3921cae53ff50cf8699215122c05be36f1"
-  dependencies:
-    config "^1.26.2"
-    joi "^13.1.0"
-    lodash "^4.17.4"
-
-"@pubsweet/styleguide@^0.1.1":
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/@pubsweet/styleguide/-/styleguide-0.1.1.tgz#628566ec43a1decd27b8c3267de22fc9707c59ef"
+"@pubsweet/styleguide@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@pubsweet/styleguide/-/styleguide-1.0.0.tgz#4b810bbec75064d7471aaa2fa9f9021cda14c64c"
   dependencies:
-    "@pubsweet/theme" "^0.1.1"
-    react "^15.6.1"
-    react-dom "^15.6.1"
+    "@pubsweet/theme" "^0.1.3"
+    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"
 
-"@pubsweet/theme@^0.1.1":
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/@pubsweet/theme/-/theme-0.1.1.tgz#1acf6e07e2336f53494e57e8f90a604546872ca1"
+"@pubsweet/theme@^0.1.3":
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/@pubsweet/theme/-/theme-0.1.3.tgz#2c508abc284a33ce14f1fa0a08486477def259a4"
   dependencies:
     cokourier-prime-sans "git+https://gitlab.coko.foundation/julientaq/cokourier-sans-prime.git"
     typeface-fira-mono "^0.0.43"
@@ -121,8 +113,8 @@
     typeface-vollkorn "^0.0.43"
 
 "@pubsweet/ui@^0.1.1":
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/@pubsweet/ui/-/ui-0.1.1.tgz#fdd6aaf85ff79de62ef6933ac90105a2b7cd8863"
+  version "0.1.3"
+  resolved "https://registry.yarnpkg.com/@pubsweet/ui/-/ui-0.1.3.tgz#3a02eb0d679f36eaf38f87196032b46c371e5477"
   dependencies:
     babel-jest "^21.2.0"
     classnames "^2.2.5"
@@ -141,6 +133,28 @@
     redux "^3.6.0"
     redux-form "^7.0.3"
 
+"@pubsweet/ui@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@pubsweet/ui/-/ui-2.0.0.tgz#cce3bf036bf71b48f2f2808391fcbc2cb08d8e3e"
+  dependencies:
+    babel-jest "^21.2.0"
+    classnames "^2.2.5"
+    enzyme "^3.2.0"
+    enzyme-adapter-react-15 "^1.0.5"
+    humps "^2.0.1"
+    lodash "^4.17.4"
+    prop-types "^15.5.10"
+    react "^16.2.0"
+    react-dom "^16.2.0"
+    react-feather "^1.0.7"
+    react-redux "^5.0.2"
+    react-router-dom "^4.2.2"
+    react-tag-autocomplete "^5.4.1"
+    recompose "^0.26.0"
+    redux "^3.6.0"
+    redux-form "^7.0.3"
+    styled-components "^2.4.0"
+
 "@types/node@*":
   version "8.5.2"
   resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.2.tgz#83b8103fa9a2c2e83d78f701a9aa7c9539739aa5"
@@ -185,23 +199,29 @@ 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.0.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"
@@ -215,7 +235,11 @@ 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.1.2, acorn@^5.2.1:
+acorn@^5.0.0, acorn@^5.0.3, acorn@^5.4.1:
+  version "5.4.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102"
+
+acorn@^5.1.2, acorn@^5.2.1:
   version "5.2.1"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
 
@@ -304,6 +328,13 @@ anymatch@^1.3.0:
     micromatch "^2.1.5"
     normalize-path "^2.0.0"
 
+anymatch@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+  dependencies:
+    micromatch "^3.1.4"
+    normalize-path "^2.1.1"
+
 app-root-path@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46"
@@ -351,10 +382,18 @@ arr-diff@^2.0.0:
   dependencies:
     arr-flatten "^1.0.1"
 
-arr-flatten@^1.0.1:
+arr-diff@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
 
+arr-union@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+
 array-equal@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
@@ -412,6 +451,10 @@ array-unique@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
 
+array-unique@^0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+
 arrify@^1.0.0, arrify@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
@@ -446,11 +489,15 @@ assert@^1.1.1:
   dependencies:
     util "0.10.3"
 
+assign-symbols@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+
 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"
 
@@ -466,6 +513,10 @@ 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"
@@ -512,6 +563,10 @@ asynckit@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
 
+atob@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d"
+
 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"
@@ -547,8 +602,8 @@ autoprefixer@^7.1.2:
     postcss-value-parser "^3.2.3"
 
 aws-sdk@^2.185.0:
-  version "2.188.0"
-  resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.188.0.tgz#9062abc7dba6393459fa2f3423cf5d294f004611"
+  version "2.197.0"
+  resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.197.0.tgz#986e3749f4d1944c6253d7824aa8035efb1db0e4"
   dependencies:
     buffer "4.9.1"
     events "^1.1.1"
@@ -1312,6 +1367,18 @@ base64url@2.0.0, base64url@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb"
 
+base@^0.11.1:
+  version "0.11.2"
+  resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+  dependencies:
+    cache-base "^1.0.1"
+    class-utils "^0.3.5"
+    component-emitter "^1.2.1"
+    define-property "^1.0.0"
+    isobject "^3.0.1"
+    mixin-deep "^1.2.0"
+    pascalcase "^0.1.1"
+
 basic-auth@~2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.0.tgz#015db3f353e02e56377755f962742e8981e7bbba"
@@ -1420,8 +1487,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"
@@ -1434,6 +1501,22 @@ 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"
+  dependencies:
+    arr-flatten "^1.1.0"
+    array-unique "^0.3.2"
+    define-property "^1.0.0"
+    extend-shallow "^2.0.1"
+    fill-range "^4.0.0"
+    isobject "^3.0.1"
+    repeat-element "^1.1.2"
+    snapdragon "^0.8.1"
+    snapdragon-node "^2.0.1"
+    split-string "^3.0.2"
+    to-regex "^3.0.1"
+
 broadway@~0.3.6:
   version "0.3.6"
   resolved "https://registry.yarnpkg.com/broadway/-/broadway-0.3.6.tgz#7dbef068b954b7907925fd544963b578a902ba7a"
@@ -1530,18 +1613,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-equal-constant-time@1.0.1:
   version "1.0.1"
@@ -1600,8 +1683,8 @@ 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.1"
-  resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.1.tgz#3e05f6e616117d9b54665b1b20c8aeb93ea5d36f"
+  version "10.0.2"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.2.tgz#105a93a162bbedf3a25da42e1939ed99ffb145f8"
   dependencies:
     bluebird "^3.5.0"
     chownr "^1.0.1"
@@ -1617,6 +1700,20 @@ cacache@^10.0.0, cacache@^10.0.1:
     unique-filename "^1.1.0"
     y18n "^3.2.1"
 
+cache-base@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+  dependencies:
+    collection-visit "^1.0.0"
+    component-emitter "^1.2.1"
+    get-value "^2.0.6"
+    has-value "^1.0.0"
+    isobject "^3.0.1"
+    set-value "^2.0.0"
+    to-object-path "^0.3.0"
+    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"
@@ -1687,8 +1784,8 @@ 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.30000784"
-  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000784.tgz#1be95012d9489c7719074f81aee57dbdffe6361b"
+  version "1.0.30000808"
+  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000808.tgz#30dfd83009d5704f02dffb37725068ed12a366bb"
 
 caniuse-lite@^1.0.30000780, caniuse-lite@^1.0.30000783:
   version "1.0.30000784"
@@ -1717,6 +1814,10 @@ center-align@^0.1.1:
     align-text "^0.1.3"
     lazy-cache "^1.0.3"
 
+chain-function@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc"
+
 chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
@@ -1727,7 +1828,15 @@ 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.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0:
+chalk@^2.0.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.2.0"
+    escape-string-regexp "^1.0.5"
+    supports-color "^5.2.0"
+
+chalk@^2.0.1, chalk@^2.1.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
   dependencies:
@@ -1770,7 +1879,7 @@ cheerio@^1.0.0-rc.2:
     lodash "^4.15.0"
     parse5 "^3.0.1"
 
-chokidar@^1.0.1, chokidar@^1.6.0, chokidar@^1.7.0:
+chokidar@^1.0.1, chokidar@^1.7.0:
   version "1.7.0"
   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
   dependencies:
@@ -1785,6 +1894,24 @@ chokidar@^1.0.1, chokidar@^1.6.0, chokidar@^1.7.0:
   optionalDependencies:
     fsevents "^1.0.0"
 
+chokidar@^2.0.0:
+  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"
+    braces "^2.3.0"
+    glob-parent "^3.1.0"
+    inherits "^2.0.1"
+    is-binary-path "^1.0.0"
+    is-glob "^4.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"
+
 chownr@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
@@ -1810,6 +1937,15 @@ clap@^1.0.9:
   dependencies:
     chalk "^1.1.3"
 
+class-utils@^0.3.5:
+  version "0.3.6"
+  resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+  dependencies:
+    arr-union "^3.1.0"
+    define-property "^0.2.5"
+    isobject "^3.0.0"
+    static-extend "^0.1.1"
+
 classnames@^2.2.4, classnames@^2.2.5:
   version "2.2.5"
   resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
@@ -1821,8 +1957,8 @@ clean-css@4.1.x:
     source-map "0.5.x"
 
 clean-webpack-plugin@^0.1.17:
-  version "0.1.17"
-  resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.17.tgz#71c57242e6d47204d46f809413176e7bed28ec49"
+  version "0.1.18"
+  resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.18.tgz#2e2173897c76646031bff047c14b9c22c80d8c4a"
   dependencies:
     rimraf "^2.6.1"
 
@@ -1842,7 +1978,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"
 
@@ -1866,8 +2002,8 @@ cliff@0.1.9:
     winston "0.8.x"
 
 clipboard-copy@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/clipboard-copy/-/clipboard-copy-1.2.0.tgz#f6a3de65a8a252fa993fcb2a4e0cfe3aa4b8769e"
+  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"
@@ -1939,8 +2075,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.32.0"
-  resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.32.0.tgz#cb6ff5d8ef36d0b10f031130e2d9ebeee92c902e"
+  version "5.34.0"
+  resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.34.0.tgz#e345dcc09a6149db65cc70dff9d389c1c4b0cd06"
 
 "cokourier-prime-sans@git+https://gitlab.coko.foundation/julientaq/cokourier-sans-prime.git":
   version "0.0.1"
@@ -1952,6 +2088,13 @@ collapse-white-space@^1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c"
 
+collection-visit@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+  dependencies:
+    map-visit "^1.0.0"
+    object-visit "^1.0.0"
+
 color-convert@^1.3.0, color-convert@^1.9.0:
   version "1.9.1"
   resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
@@ -2007,9 +2150,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"
 
@@ -2017,7 +2160,11 @@ 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.5.0, commander@^2.9.0, commander@~2.12.1:
+commander@2.14.x, 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.11.0, commander@^2.5.0, commander@~2.12.1:
   version "2.12.2"
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555"
 
@@ -2060,7 +2207,7 @@ compare-func@^1.3.1:
     array-ify "^1.0.0"
     dot-prop "^3.0.0"
 
-component-emitter@^1.2.0:
+component-emitter@^1.2.0, component-emitter@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
 
@@ -2324,7 +2471,11 @@ copy-concurrently@^1.0.0:
     rimraf "^2.5.4"
     run-queue "^1.0.0"
 
-copy-webpack-plugin@^4.0.1, copy-webpack-plugin@^4.3.0:
+copy-descriptor@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+
+copy-webpack-plugin@^4.0.1:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.3.0.tgz#cfdf4d131c78d66917a1bb863f86630497aacf42"
   dependencies:
@@ -2339,6 +2490,19 @@ copy-webpack-plugin@^4.0.1, copy-webpack-plugin@^4.3.0:
     pify "^3.0.0"
     serialize-javascript "^1.4.0"
 
+copy-webpack-plugin@^4.3.0:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.4.1.tgz#1e8c366211db6dc2ddee40e5a3e4fc661dd149e8"
+  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"
+    minimatch "^3.0.4"
+    p-limit "^1.0.0"
+    serialize-javascript "^1.4.0"
+
 core-js@^1.0.0:
   version "1.2.7"
   resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
@@ -2407,8 +2571,8 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
     sha.js "^2.4.8"
 
 create-react-class@^15.6.0:
-  version "15.6.2"
-  resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a"
+  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"
@@ -2465,11 +2629,11 @@ css-color-names@0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
 
-css-initials@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/css-initials/-/css-initials-0.1.1.tgz#cc6dcdb70dc6038c6cf494dd4980f001b824a4ab"
+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, css-loader@^0.28.7:
+css-loader@^0.28.4:
   version "0.28.7"
   resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b"
   dependencies:
@@ -2488,6 +2652,25 @@ css-loader@^0.28.4, css-loader@^0.28.7:
     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"
+  dependencies:
+    babel-code-frame "^6.26.0"
+    css-selector-tokenizer "^0.7.0"
+    cssnano "^3.10.0"
+    icss-utils "^2.1.0"
+    loader-utils "^1.0.2"
+    lodash.camelcase "^4.3.0"
+    object-assign "^4.1.1"
+    postcss "^5.0.6"
+    postcss-modules-extract-imports "^1.2.0"
+    postcss-modules-local-by-default "^1.2.0"
+    postcss-modules-scope "^1.1.0"
+    postcss-modules-values "^1.3.0"
+    postcss-value-parser "^3.3.0"
+    source-list-map "^2.0.0"
+
 css-select@^1.1.0, css-select@~1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
@@ -2521,7 +2704,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@>=2.6.1 <4", cssnano@^3.10.0:
   version "3.10.0"
   resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
   dependencies:
@@ -2644,7 +2827,7 @@ dateformat@^1.0.11, dateformat@^1.0.12:
     get-stdin "^4.0.1"
     meow "^3.3.0"
 
-debug@2.6.9, debug@^2.1.0, debug@^2.2.0, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8:
+debug@2.6.9, debug@^2.1.0, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
   dependencies:
@@ -2726,6 +2909,18 @@ define-properties@^1.1.2:
     foreach "^2.0.5"
     object-keys "^1.0.8"
 
+define-property@^0.2.5:
+  version "0.2.5"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+  dependencies:
+    is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+  dependencies:
+    is-descriptor "^1.0.0"
+
 defined@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
@@ -2761,11 +2956,11 @@ delegates@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
 
-depd@1.1.1, depd@~1.1.1:
+depd@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
 
-depd@^1.1.0:
+depd@^1.1.0, depd@~1.1.1:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
 
@@ -2851,8 +3046,8 @@ disposables@^1.0.1:
   resolved "https://registry.yarnpkg.com/disposables/-/disposables-1.0.2.tgz#36c6a674475f55a2d6913567a601444e487b4b6e"
 
 dlv@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.0.tgz#fee1a7c43f63be75f3f679e85262da5f102764a7"
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.1.tgz#c79d96bfe659a5568001250ed2aaf653992bdd3f"
 
 dnd-core@^2.5.4:
   version "2.5.4"
@@ -2867,9 +3062,9 @@ dns-equal@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
 
-dns-packet@^1.0.1:
-  version "1.2.2"
-  resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.2.2.tgz#a8a26bec7646438963fc86e06f8f8b16d6c8bf7a"
+dns-packet@^1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
   dependencies:
     ip "^1.1.0"
     safe-buffer "^5.0.1"
@@ -2892,8 +3087,8 @@ doctrine@1.5.0:
     isarray "^1.0.0"
 
 doctrine@^2.0.0, doctrine@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075"
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
   dependencies:
     esutils "^2.0.2"
 
@@ -3002,9 +3197,9 @@ duplexer@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
 
-duplexify@^3.1.2, duplexify@^3.4.2:
-  version "3.5.1"
-  resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd"
+duplexify@^3.4.2, duplexify@^3.5.3:
+  version "3.5.3"
+  resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.3.tgz#8b5818800df92fd0125b27ab896491912858243e"
   dependencies:
     end-of-stream "^1.0.0"
     inherits "^2.0.1"
@@ -3029,10 +3224,14 @@ ee-first@1.1.1:
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
 
 electron-releases@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/electron-releases/-/electron-releases-2.1.0.tgz#c5614bf811f176ce3c836e368a0625782341fd4e"
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/electron-releases/-/electron-releases-2.10.0.tgz#723c8740b5bbd5e992a41cfd3ee38d69e95ba724"
+
+electron-to-chromium@^1.2.7:
+  version "1.3.33"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.33.tgz#bf00703d62a7c65238136578c352d6c5c042a545"
 
-electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.28:
+electron-to-chromium@^1.3.28:
   version "1.3.30"
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.30.tgz#9666f532a64586651fc56a72513692e820d06a80"
   dependencies:
@@ -3067,8 +3266,8 @@ emojis-list@^2.0.0:
   resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
 
 encodeurl@~1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
 
 encoding-down@~3.0.0:
   version "3.0.1"
@@ -3085,8 +3284,8 @@ encoding@^0.1.11:
     iconv-lite "~0.4.13"
 
 end-of-stream@^1.0.0, end-of-stream@^1.1.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206"
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
   dependencies:
     once "^1.4.0"
 
@@ -3119,7 +3318,19 @@ enzyme-adapter-react-15@^1.0.5:
     object.values "^1.0.4"
     prop-types "^15.5.10"
 
-enzyme-adapter-utils@^1.1.0:
+enzyme-adapter-react-16@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz#a8f4278b47e082fbca14f5bfb1ee50ee650717b4"
+  dependencies:
+    enzyme-adapter-utils "^1.3.0"
+    lodash "^4.17.4"
+    object.assign "^4.0.4"
+    object.values "^1.0.4"
+    prop-types "^15.6.0"
+    react-reconciler "^0.7.0"
+    react-test-renderer "^16.0.0-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:
@@ -3143,7 +3354,34 @@ enzyme@^3.2.0:
     raf "^3.4.0"
     rst-selector-parser "^2.2.3"
 
-errno@^0.1.3, errno@^0.1.4, errno@~0.1.1:
+enzyme@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.3.0.tgz#0971abd167f2d4bf3f5bd508229e1c4b6dc50479"
+  dependencies:
+    cheerio "^1.0.0-rc.2"
+    function.prototype.name "^1.0.3"
+    has "^1.0.1"
+    is-boolean-object "^1.0.0"
+    is-callable "^1.1.3"
+    is-number-object "^1.0.3"
+    is-string "^1.0.4"
+    is-subset "^0.1.1"
+    lodash "^4.17.4"
+    object-inspect "^1.5.0"
+    object-is "^1.0.1"
+    object.assign "^4.1.0"
+    object.entries "^1.0.4"
+    object.values "^1.0.4"
+    raf "^3.4.0"
+    rst-selector-parser "^2.2.3"
+
+errno@^0.1.3, errno@^0.1.4:
+  version "0.1.7"
+  resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+  dependencies:
+    prr "~1.0.1"
+
+errno@~0.1.1:
   version "0.1.6"
   resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026"
   dependencies:
@@ -3222,8 +3460,8 @@ es6-object-assign@~1.1.0:
   resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c"
 
 es6-promise@^4.1.1:
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a"
+  version "4.2.4"
+  resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29"
 
 es6-set@~0.1.5:
   version "0.1.5"
@@ -3291,7 +3529,7 @@ eslint-config-airbnb@^16.1.0:
   dependencies:
     eslint-config-airbnb-base "^12.1.0"
 
-eslint-config-prettier@^2.6.0, eslint-config-prettier@^2.7.0:
+eslint-config-prettier@^2.7.0:
   version "2.9.0"
   resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3"
   dependencies:
@@ -3603,6 +3841,18 @@ expand-brackets@^0.1.4:
   dependencies:
     is-posix-bracket "^0.1.0"
 
+expand-brackets@^2.1.4:
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+  dependencies:
+    debug "^2.3.3"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    posix-character-classes "^0.1.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
 expand-range@^1.8.1:
   version "1.8.2"
   resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
@@ -3669,6 +3919,19 @@ express@^4.15.3, express@^4.16.1, express@^4.16.2:
     utils-merge "1.0.1"
     vary "~1.1.2"
 
+extend-shallow@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+  dependencies:
+    is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+  dependencies:
+    assign-symbols "^1.0.0"
+    is-extendable "^1.0.1"
+
 extend@^3.0.0, extend@~3.0.0, extend@~3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
@@ -3687,6 +3950,19 @@ extglob@^0.3.1:
   dependencies:
     is-extglob "^1.0.0"
 
+extglob@^2.0.2:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+  dependencies:
+    array-unique "^0.3.2"
+    define-property "^1.0.0"
+    expand-brackets "^2.1.4"
+    extend-shallow "^2.0.1"
+    fragment-cache "^0.2.1"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
 extract-text-webpack-plugin@^3.0.0:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7"
@@ -3831,6 +4107,15 @@ fill-range@^2.1.0:
     repeat-element "^1.1.2"
     repeat-string "^1.5.2"
 
+fill-range@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-number "^3.0.0"
+    repeat-string "^1.6.1"
+    to-regex-range "^2.1.0"
+
 finalhandler@1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5"
@@ -3903,7 +4188,7 @@ for-in@^0.1.3:
   version "0.1.8"
   resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
 
-for-in@^1.0.1:
+for-in@^1.0.1, for-in@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
 
@@ -3937,12 +4222,12 @@ forever-monitor@^1.7.0:
     ps-tree "0.0.x"
     utile "~0.2.1"
 
-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"
+form-data@^2.3.1:
+  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:
@@ -3953,6 +4238,14 @@ form-data@~2.1.1:
     combined-stream "^1.0.5"
     mime-types "^2.1.12"
 
+form-data@~2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.5"
+    mime-types "^2.1.12"
+
 formidable@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9"
@@ -3961,6 +4254,12 @@ forwarded@~0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
 
+fragment-cache@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+  dependencies:
+    map-cache "^0.2.2"
+
 frameguard@3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/frameguard/-/frameguard-3.0.0.tgz#7bcad469ee7b96e91d12ceb3959c78235a9272e9"
@@ -4104,6 +4403,10 @@ get-stream@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
 
+get-value@^2.0.3, get-value@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+
 getpass@^0.1.1:
   version "0.1.7"
   resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
@@ -4283,8 +4586,8 @@ globule@^1.0.0:
     minimatch "~3.0.2"
 
 glogg@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5"
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810"
   dependencies:
     sparkles "^1.0.0"
 
@@ -4369,6 +4672,10 @@ har-validator@~5.0.3:
     ajv "^5.1.0"
     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"
+
 has-ansi@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
@@ -4383,6 +4690,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"
@@ -4395,6 +4706,10 @@ 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-symbols@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
+
 has-to-string-tag-x@^1.4.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d"
@@ -4405,6 +4720,33 @@ has-unicode@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
 
+has-value@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+  dependencies:
+    get-value "^2.0.3"
+    has-values "^0.1.4"
+    isobject "^2.0.0"
+
+has-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+  dependencies:
+    get-value "^2.0.6"
+    has-values "^1.0.0"
+    isobject "^3.0.0"
+
+has-values@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+
+has-values@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+  dependencies:
+    is-number "^3.0.0"
+    kind-of "^4.0.0"
+
 has@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
@@ -4514,15 +4856,15 @@ hoek@4.x.x:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
 
-hoek@5.x.x:
-  version "5.0.2"
-  resolved "https://registry.yarnpkg.com/hoek/-/hoek-5.0.2.tgz#d2f2c95d36fe7189cf8aa8c237abc1950eca1378"
-
 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:
+hoist-non-react-statics@^2.1.0:
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40"
+
+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"
 
@@ -4575,17 +4917,17 @@ html-entities@^1.2.0:
   resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
 
 html-minifier@^3.2.3:
-  version "3.5.7"
-  resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.7.tgz#511e69bb5a8e7677d1012ebe03819aa02ca06208"
+  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"
     relateurl "0.2.x"
-    uglify-js "3.2.x"
+    uglify-js "3.3.x"
 
 html-tags@^2.0.0:
   version "2.0.0"
@@ -4636,8 +4978,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"
@@ -4691,6 +5033,10 @@ husky@^0.14.3:
     normalize-path "^1.0.0"
     strip-indent "^2.0.0"
 
+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"
@@ -4709,6 +5055,12 @@ icss-utils@^2.1.0:
   dependencies:
     postcss "^6.0.1"
 
+identity-obj-proxy@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14"
+  dependencies:
+    harmony-reflect "^1.4.6"
+
 ieee754@^1.1.4:
   version "1.1.8"
   resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
@@ -4733,13 +5085,6 @@ immediate@^3.2.3:
   version "3.2.3"
   resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c"
 
-import-local@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/import-local/-/import-local-0.1.1.tgz#b1179572aacdc11c6a91009fb430dbcab5f668a8"
-  dependencies:
-    pkg-dir "^2.0.0"
-    resolve-cwd "^2.0.0"
-
 import-local@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"
@@ -4858,6 +5203,18 @@ is-absolute-url@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
 
+is-accessor-descriptor@^0.1.6:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+  dependencies:
+    kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+  dependencies:
+    kind-of "^6.0.0"
+
 is-alphabetical@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.1.tgz#c77079cc91d4efac775be1034bf2d243f95e6f08"
@@ -4897,6 +5254,10 @@ is-binary-path@^1.0.0:
   dependencies:
     binary-extensions "^1.0.0"
 
+is-boolean-object@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93"
+
 is-buffer@^1.0.2, is-buffer@^1.1.4, is-buffer@^1.1.5:
   version "1.1.6"
   resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
@@ -4917,14 +5278,42 @@ is-ci@^1.0.10:
   dependencies:
     ci-info "^1.0.0"
 
-is-date-object@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
-
+is-data-descriptor@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+  dependencies:
+    kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+  dependencies:
+    kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+
 is-decimal@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.1.tgz#f5fb6a94996ad9e8e3761fbfbd091f1fca8c4e82"
 
+is-descriptor@^0.1.0:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+  dependencies:
+    is-accessor-descriptor "^0.1.6"
+    is-data-descriptor "^0.1.4"
+    kind-of "^5.0.0"
+
+is-descriptor@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+  dependencies:
+    is-accessor-descriptor "^1.0.0"
+    is-data-descriptor "^1.0.0"
+    kind-of "^6.0.2"
+
 is-directory@^0.3.1:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
@@ -4939,10 +5328,16 @@ is-equal-shallow@^0.1.3:
   dependencies:
     is-primitive "^2.0.0"
 
-is-extendable@^0.1.1:
+is-extendable@^0.1.0, is-extendable@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
 
+is-extendable@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+  dependencies:
+    is-plain-object "^2.0.4"
+
 is-extglob@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
@@ -5053,6 +5448,10 @@ is-nil-x@^1.4.1:
     lodash.isnull "^3.0.0"
     validate.io-undefined "^1.0.3"
 
+is-number-object@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799"
+
 is-number@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
@@ -5082,6 +5481,12 @@ 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"
+  dependencies:
+    is-number "^3.0.0"
+
 is-path-cwd@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
@@ -5102,7 +5507,7 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
 
-is-plain-object@^2.0.1, is-plain-object@^2.0.4:
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
   dependencies:
@@ -5195,8 +5600,8 @@ is-whitespace-character@^1.0.0:
   resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz#9ae0176f3282b65457a1992cdb084f8a5f833e3b"
 
 is-windows@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9"
+  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"
@@ -5238,7 +5643,7 @@ isobject@^2.0.0:
   dependencies:
     isarray "1.0.0"
 
-isobject@^3.0.1:
+isobject@^3.0.0, isobject@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
 
@@ -5616,14 +6021,6 @@ joi@^11.0.2:
     isemail "3.x.x"
     topo "2.x.x"
 
-joi@^13.1.0:
-  version "13.1.0"
-  resolved "https://registry.yarnpkg.com/joi/-/joi-13.1.0.tgz#59e7b8714b932a1e342c3583d5841d7169ff1822"
-  dependencies:
-    hoek "5.x.x"
-    isemail "3.x.x"
-    topo "3.x.x"
-
 joi@^6.10.1:
   version "6.10.1"
   resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06"
@@ -5633,10 +6030,14 @@ joi@^6.10.1:
     moment "2.x.x"
     topo "1.x.x"
 
-js-base64@^2.1.8, js-base64@^2.1.9:
+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:
+  version "2.4.3"
+  resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582"
+
 js-tokens@^3.0.0, js-tokens@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
@@ -5776,8 +6177,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"
@@ -5793,11 +6196,11 @@ jss-global@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/jss-global/-/jss-global-3.0.0.tgz#e19e5c91ab2b96353c227e30aa2cbd938cdaafa2"
 
-jss-isolate@5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/jss-isolate/-/jss-isolate-5.0.0.tgz#89069d58af0b086b4f989d9aff718733f0f7a8f7"
+jss-isolate@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/jss-isolate/-/jss-isolate-5.1.0.tgz#8eff1294c3659f86535852f4aeb79370743d890e"
   dependencies:
-    css-initials "^0.1.0"
+    css-initials "^0.2.0"
 
 jss-nested@^6.0.1:
   version "6.0.1"
@@ -5806,8 +6209,8 @@ jss-nested@^6.0.1:
     warning "^3.0.0"
 
 jss@^9.3.3:
-  version "9.4.0"
-  resolved "https://registry.yarnpkg.com/jss/-/jss-9.4.0.tgz#fbfd1a63556c5afd5bfcffd98df3c50eb2614ed3"
+  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"
@@ -5860,7 +6263,7 @@ kind-of@^2.0.1:
   dependencies:
     is-buffer "^1.0.2"
 
-kind-of@^3.0.2, kind-of@^3.2.2:
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0, kind-of@^3.2.2:
   version "3.2.2"
   resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
   dependencies:
@@ -5872,6 +6275,14 @@ kind-of@^4.0.0:
   dependencies:
     is-buffer "^1.1.5"
 
+kind-of@^5.0.0, kind-of@^5.0.2:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+
 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"
@@ -5884,6 +6295,12 @@ lazy-cache@^1.0.3:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
 
+lazy-cache@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264"
+  dependencies:
+    set-getter "^0.1.0"
+
 lcid@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
@@ -6252,14 +6669,30 @@ lodash.cond@^4.3.0:
   version "4.5.2"
   resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
 
+lodash.endswith@^4.2.1:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/lodash.endswith/-/lodash.endswith-4.2.1.tgz#fed59ac1738ed3e236edd7064ec456448b37bc09"
+
 lodash.flattendeep@^4.4.0:
   version "4.4.0"
   resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
 
+lodash.isfunction@^3.0.8:
+  version "3.0.9"
+  resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051"
+
 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.isstring@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
+
 lodash.map@^4.5.1:
   version "4.6.0"
   resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
@@ -6284,6 +6717,10 @@ lodash.sortby@^4.7.0:
   version "4.7.0"
   resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
 
+lodash.startswith@^4.2.1:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/lodash.startswith/-/lodash.startswith-4.2.1.tgz#c598c4adce188a27e53145731cdc6c0e7177600c"
+
 lodash.tail@^4.1.1:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664"
@@ -6305,10 +6742,14 @@ lodash.uniq@^4.5.0:
   version "4.5.0"
   resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
 
-lodash@^4, 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.6.1, lodash@~4.17.4:
+lodash@^4, lodash@^4.0.0, lodash@^4.1.0, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.6.1, lodash@~4.17.4:
   version "4.17.4"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
 
+lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.3.0:
+  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"
   resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
@@ -6321,6 +6762,12 @@ log-symbols@^2.0.0:
   dependencies:
     chalk "^2.0.1"
 
+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"
+
 log-update@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1"
@@ -6329,8 +6776,8 @@ log-update@^1.0.2:
     cli-cursor "^1.0.2"
 
 loglevel@^1.4.1:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.0.tgz#ae0caa561111498c5ba13723d6fb631d24003934"
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
 
 longest-streak@^2.0.1:
   version "2.0.2"
@@ -6398,6 +6845,10 @@ makeerror@1.0.x:
   dependencies:
     tmpl "1.0.x"
 
+map-cache@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+
 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"
@@ -6406,6 +6857,12 @@ 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"
+  dependencies:
+    object-visit "^1.0.0"
+
 markdown-escapes@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.1.tgz#1994df2d3af4811de59a6714934c2b2292734518"
@@ -6414,9 +6871,9 @@ markdown-table@^1.1.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.1.tgz#4b3dd3a133d1518b8ef0dbc709bf2a1b4824bc8c"
 
-markdown-to-jsx@^6.2.2:
-  version "6.3.1"
-  resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.3.1.tgz#70064a28ec54e5b392721e443114cf2814b8eaf1"
+markdown-to-jsx@^6.3.1:
+  version "6.4.1"
+  resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.4.1.tgz#95fe617b5790fec6f4e0399a296e3a2f10fffaad"
   dependencies:
     prop-types "^15.5.10"
     unquote "^1.1.0"
@@ -6552,6 +7009,24 @@ micromatch@^2.1.5, micromatch@^2.3.11:
     parse-glob "^3.0.4"
     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"
+  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"
+    fragment-cache "^0.2.1"
+    kind-of "^6.0.0"
+    nanomatch "^1.2.5"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
 miller-rabin@^4.0.0:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
@@ -6567,12 +7042,22 @@ 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:
+  version "1.33.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
+
 mime-types@^2.1.12, 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"
   dependencies:
     mime-db "~1.30.0"
 
+mime-types@~2.1.18:
+  version "2.1.18"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
+  dependencies:
+    mime-db "~1.33.0"
+
 mime@1.4.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
@@ -6582,8 +7067,8 @@ 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"
 
 min-document@^2.19.0:
   version "2.19.0"
@@ -6639,8 +7124,8 @@ minimist@~0.0.1:
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
 
 mississippi@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-1.3.0.tgz#d201583eb12327e3c5c1642a404a9cacf94e34f5"
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-1.3.1.tgz#2a8bb465e86550ac8b36a7b6f45599171d78671e"
   dependencies:
     concat-stream "^1.5.0"
     duplexify "^3.4.2"
@@ -6653,6 +7138,13 @@ mississippi@^1.3.0:
     stream-each "^1.1.0"
     through2 "^2.0.0"
 
+mixin-deep@^1.2.0:
+  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"
+
 mixin-object@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
@@ -6728,11 +7220,11 @@ multicast-dns-service-types@^1.1.0:
   resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
 
 multicast-dns@^6.0.1:
-  version "6.2.1"
-  resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.1.tgz#c5035defa9219d30640558a49298067352098060"
+  version "6.2.3"
+  resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
   dependencies:
-    dns-packet "^1.0.1"
-    thunky "^0.1.0"
+    dns-packet "^1.3.1"
+    thunky "^1.0.2"
 
 mute-stream@0.0.7, mute-stream@~0.0.4:
   version "0.0.7"
@@ -6750,6 +7242,22 @@ nan@^2.3.0, nan@^2.3.2, nan@~2.8.0:
   version "2.8.0"
   resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
 
+nanomatch@^1.2.5:
+  version "1.2.7"
+  resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.7.tgz#53cd4aa109ff68b7f869591fdc9d10daeeea3e79"
+  dependencies:
+    arr-diff "^4.0.0"
+    array-unique "^0.3.2"
+    define-property "^1.0.0"
+    extend-shallow "^2.0.1"
+    fragment-cache "^0.2.1"
+    is-odd "^1.0.0"
+    kind-of "^5.0.2"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
 natural-compare@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -6821,9 +7329,9 @@ node-fetch@^1.0.1:
     encoding "^0.1.11"
     is-stream "^1.0.1"
 
-node-forge@0.6.33:
-  version "0.6.33"
-  resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc"
+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.3.1:
   version "3.6.2"
@@ -6876,8 +7384,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"
@@ -6953,11 +7461,7 @@ 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:
+nodemailer@^4.0.1, nodemailer@^4.4.2:
   version "4.4.2"
   resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-4.4.2.tgz#f215fb88e8a1052f9f93083909e116d2b79fc8de"
 
@@ -6998,7 +7502,7 @@ normalize-path@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379"
 
-normalize-path@^2.0.0, normalize-path@^2.0.1:
+normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
   dependencies:
@@ -7092,6 +7596,14 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
 
+object-copy@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+  dependencies:
+    copy-descriptor "^0.1.0"
+    define-property "^0.2.5"
+    kind-of "^3.0.3"
+
 object-get-own-property-descriptor-x@^3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/object-get-own-property-descriptor-x/-/object-get-own-property-descriptor-x-3.2.0.tgz#464585ad03e66108ed166c99325b8d2c5ba93712"
@@ -7107,14 +7619,24 @@ object-get-own-property-descriptor-x@^3.2.0:
     to-object-x "^1.4.1"
     to-property-key-x "^2.0.1"
 
+object-inspect@^1.5.0:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.5.0.tgz#9d876c11e40f485c79215670281b767488f9bfe3"
+
 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.6, object-keys@^1.0.8:
+object-keys@^1.0.10, 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"
 
+object-visit@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+  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"
@@ -7123,6 +7645,15 @@ object.assign@^4.0.4:
     function-bind "^1.1.0"
     object-keys "^1.0.10"
 
+object.assign@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+  dependencies:
+    define-properties "^1.1.2"
+    function-bind "^1.1.1"
+    has-symbols "^1.0.0"
+    object-keys "^1.0.11"
+
 object.entries@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f"
@@ -7146,6 +7677,12 @@ object.omit@^2.0.0:
     for-own "^0.1.4"
     is-extendable "^0.1.1"
 
+object.pick@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+  dependencies:
+    isobject "^3.0.1"
+
 object.values@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a"
@@ -7185,12 +7722,18 @@ onetime@^2.0.0:
   dependencies:
     mimic-fn "^1.0.0"
 
-opn@5.1.0, opn@^5.1.0:
+opn@5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519"
   dependencies:
     is-wsl "^1.1.0"
 
+opn@^5.1.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225"
+  dependencies:
+    is-wsl "^1.1.0"
+
 optimist@0.2:
   version "0.2.8"
   resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.2.8.tgz#e981ab7e268b457948593b55674c099a815cac31"
@@ -7232,13 +7775,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"
 
 orderedmap@^1.0.0:
   version "1.0.0"
@@ -7288,8 +7831,10 @@ p-finally@^1.0.0:
   resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
 
 p-limit@^1.0.0, p-limit@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
+  dependencies:
+    p-try "^1.0.0"
 
 p-locate@^2.0.0:
   version "2.0.0"
@@ -7301,6 +7846,10 @@ p-map@^1.1.1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
 
+p-try@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+
 package-json@^4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed"
@@ -7404,6 +7953,10 @@ parseurl@^1.3.1, parseurl@~1.3.2:
   version "1.3.2"
   resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
 
+pascalcase@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+
 passport-anonymous@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/passport-anonymous/-/passport-anonymous-1.0.1.tgz#241e37274ec44dfb7f6cad234b41c438386bc117"
@@ -7577,6 +8130,10 @@ portfinder@^1.0.9:
     debug "^2.2.0"
     mkdirp "0.5.x"
 
+posix-character-classes@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+
 postcss-calc@^5.2.0:
   version "5.3.1"
   resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
@@ -7723,21 +8280,27 @@ postcss-modules-extract-imports@^1.0.0:
   dependencies:
     postcss "^6.0.1"
 
-postcss-modules-local-by-default@^1.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:
   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.0.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.1.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:
@@ -7880,7 +8443,15 @@ 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, postcss@^6.0.11, postcss@^6.0.13, postcss@^6.0.14, postcss@^6.0.3, postcss@^6.0.6, postcss@^6.0.8:
+postcss@^6.0.1:
+  version "6.0.18"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.18.tgz#370f5f44d47f3a205f0eb2f6262bbf202df2a80e"
+  dependencies:
+    chalk "^2.3.1"
+    source-map "^0.6.1"
+    supports-color "^5.2.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:
@@ -8187,7 +8758,7 @@ preserve@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
 
-prettier@^1.7.4, prettier@^1.8.2:
+prettier@^1.8.2:
   version "1.9.2"
   resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.9.2.tgz#96bc2132f7a32338e6078aeb29727178c6335827"
 
@@ -8220,6 +8791,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"
@@ -8392,23 +8967,20 @@ public-encrypt@^4.0.0:
     parse-asn1 "^5.0.0"
     randombytes "^2.0.1"
 
-pubsweet-client@^1.0.0-beta.8, pubsweet-client@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/pubsweet-client/-/pubsweet-client-1.1.1.tgz#5865f87760cc762d6ee077db0ff5ca68592c1fb4"
+pubsweet-client@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/pubsweet-client/-/pubsweet-client-2.1.0.tgz#43867c48e4a22c4acda2a605827d5cda6bb7209c"
   dependencies:
     authsome "0.0.9"
     config "^1.21.0"
-    eslint-config-prettier "^2.6.0"
     event-source-polyfill "^0.0.10"
     global "^4.3.1"
-    husky "^0.14.3"
     isomorphic-fetch "^2.1.1"
     lint-staged "^6.0.0"
     lodash "^4.0.0"
-    prettier "^1.7.4"
     prop-types "^15.5.8"
-    pubsweet-component-login "^0.5.6"
-    react "^15.4.4"
+    pubsweet-component-login "^1.0.1"
+    react "^16.2.0"
     react-css-themr "^2.1.2"
     react-redux "^5.0.2"
     react-router-dom "^4.2.2"
@@ -8417,6 +8989,8 @@ pubsweet-client@^1.0.0-beta.8, pubsweet-client@^1.1.1:
     redux-form "^7.0.3"
     redux-logger "^3.0.1"
     redux-thunk "^2.2.0"
+    reselect "^3.0.1"
+    styled-components "^3.1.4"
 
 pubsweet-component-ink-backend@^0.1.1:
   version "0.1.1"
@@ -8429,66 +9003,38 @@ pubsweet-component-ink-backend@^0.1.1:
     request-promise-native "^1.0.5"
     temp "^0.8.3"
 
-pubsweet-component-ink-frontend@^0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/pubsweet-component-ink-frontend/-/pubsweet-component-ink-frontend-0.2.3.tgz#cdd62bb58a1cdc7356b34d9c14ffbec9c9aaea66"
+pubsweet-component-ink-frontend@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/pubsweet-component-ink-frontend/-/pubsweet-component-ink-frontend-1.0.0.tgz#5bc61c0d854df084cec12d45ada01bcbef157cb0"
   dependencies:
     prop-types "^15.5.10"
     query-string "^5.0.1"
-    react-bootstrap "^0.31.3"
-    react-dropzone "^3.7.3"
+    react-bootstrap "^0.32.0"
+    react-dropzone "^4.2.7"
     react-redux "^5.0.6"
     redux "^3.7.2"
 
-pubsweet-component-login@^0.5.6:
-  version "0.5.6"
-  resolved "https://registry.yarnpkg.com/pubsweet-component-login/-/pubsweet-component-login-0.5.6.tgz#fd637d1287254d2d08c56c51e209180ba4a6e585"
+pubsweet-component-login@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/pubsweet-component-login/-/pubsweet-component-login-1.0.1.tgz#49ca1dd02cd56e4169af875465a655ee88736989"
   dependencies:
     prop-types "^15.5.10"
-    react-bootstrap "^0.31.3"
+    react-bootstrap "^0.32.0"
     react-redux "^5.0.6"
     react-router-dom "^4.2.2"
-    react-router-redux "^4.0.8"
+    react-router-redux "^5.0.0-alpha.9"
     redux "^3.7.2"
+    redux-form "^7.0.3"
 
-pubsweet-server@1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/pubsweet-server/-/pubsweet-server-1.0.5.tgz#bf6e8967e9b0ce88c2f6bc2277038d51ad430cd7"
+pubsweet-component-signup@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/pubsweet-component-signup/-/pubsweet-component-signup-1.0.0.tgz#33e5c5e5c371dfc63667f1c7e689dafecc0e888c"
   dependencies:
-    "@pubsweet/logger" "^0.2.0"
-    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"
-    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"
-    uuid "^3.0.1"
-    winston "^2.2.0"
+    prop-types "^15.5.10"
+    react-bootstrap "^0.32.0"
+    react-redux "^5.0.6"
+    react-router "^4.2.0"
+    redux "^3.7.2"
 
 pubsweet-server@^1.0.0-beta.2, pubsweet-server@^1.0.1:
   version "1.0.1"
@@ -8533,10 +9079,6 @@ pubsweet-sse@^0.1.1:
   version "0.1.3"
   resolved "https://registry.yarnpkg.com/pubsweet-sse/-/pubsweet-sse-0.1.3.tgz#a185e81e270ef3b1132cae12959c1ac430a6ae03"
 
-pubsweet-sse@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/pubsweet-sse/-/pubsweet-sse-0.1.4.tgz#1ff38a230143cbd487a8d44afb28a6c4746ee464"
-
 pubsweet@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/pubsweet/-/pubsweet-1.1.1.tgz#9024f83be9b92d8b5b4e483fb2108212e8ce4115"
@@ -8566,13 +9108,20 @@ pump@^1.0.0, pump@^1.0.1:
     end-of-stream "^1.1.0"
     once "^1.3.1"
 
+pump@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
 pumpify@^1.3.3:
-  version "1.3.5"
-  resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b"
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb"
   dependencies:
-    duplexify "^3.1.2"
-    inherits "^2.0.1"
-    pump "^1.0.0"
+    duplexify "^3.5.3"
+    inherits "^2.0.3"
+    pump "^2.0.0"
 
 punycode@1.3.2:
   version "1.3.2"
@@ -8696,7 +9245,7 @@ raw-body@2.3.2:
     iconv-lite "0.4.19"
     unpipe "1.0.0"
 
-rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
+rc@^1.0.1, rc@^1.1.6:
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077"
   dependencies:
@@ -8705,9 +9254,18 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
     minimist "^1.2.0"
     strip-json-comments "~2.0.1"
 
-react-bootstrap@^0.31.3:
-  version "0.31.5"
-  resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-0.31.5.tgz#57040fa8b1274e1e074803c21a1b895fdabea05a"
+rc@^1.1.7:
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd"
+  dependencies:
+    deep-extend "~0.4.0"
+    ini "~1.3.0"
+    minimist "^1.2.0"
+    strip-json-comments "~2.0.1"
+
+react-bootstrap@^0.32.0:
+  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"
@@ -8716,7 +9274,9 @@ react-bootstrap@^0.31.3:
     keycode "^2.1.2"
     prop-types "^15.5.10"
     prop-types-extra "^1.0.1"
-    react-overlays "^0.7.4"
+    react-overlays "^0.8.0"
+    react-prop-types "^0.4.0"
+    react-transition-group "^2.0.0"
     uncontrollable "^4.1.0"
     warning "^3.0.0"
 
@@ -8797,6 +9357,15 @@ react-docgen@^3.0.0-beta9:
     node-dir "^0.1.10"
     recast "^0.12.6"
 
+"react-dom@>=15.0.0 <17.0.0", react-dom@^16.2.0:
+  version "16.2.0"
+  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"
+  dependencies:
+    fbjs "^0.8.16"
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+    prop-types "^15.6.0"
+
 react-dom@^15.6.1:
   version "15.6.2"
   resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730"
@@ -8806,16 +9375,16 @@ react-dom@^15.6.1:
     object-assign "^4.1.0"
     prop-types "^15.5.10"
 
-react-dropzone@^3.7.3:
-  version "3.13.4"
-  resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-3.13.4.tgz#84da26815c40339691c49b4544c2ef7a16912ccc"
+react-dropzone@^4.1.2:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-4.2.3.tgz#f7bc92aa5fe4253fdb1fd3792114d2d29b47119a"
   dependencies:
     attr-accept "^1.0.3"
     prop-types "^15.5.7"
 
-react-dropzone@^4.1.2:
-  version "4.2.3"
-  resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-4.2.3.tgz#f7bc92aa5fe4253fdb1fd3792114d2d29b47119a"
+react-dropzone@^4.2.7:
+  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"
@@ -8872,14 +9441,21 @@ react-moment@^0.6.1:
   version "0.6.8"
   resolved "https://registry.yarnpkg.com/react-moment/-/react-moment-0.6.8.tgz#8612a90f3c8afec26fef6844806d84b9d9e3b212"
 
-react-overlays@^0.7.4:
-  version "0.7.4"
-  resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.7.4.tgz#ef2ec652c3444ab8aa014262b18f662068e56d5c"
+react-overlays@^0.8.0:
+  version "0.8.3"
+  resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.8.3.tgz#fad65eea5b24301cca192a169f5dddb0b20d3ac5"
   dependencies:
     classnames "^2.2.5"
     dom-helpers "^3.2.1"
     prop-types "^15.5.10"
     prop-types-extra "^1.0.1"
+    react-transition-group "^2.2.0"
+    warning "^3.0.0"
+
+react-prop-types@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/react-prop-types/-/react-prop-types-0.4.0.tgz#f99b0bfb4006929c9af2051e7c1414a5c75b93d0"
+  dependencies:
     warning "^3.0.0"
 
 react-proxy@^3.0.0-alpha.0:
@@ -8888,6 +9464,15 @@ react-proxy@^3.0.0-alpha.0:
   dependencies:
     lodash "^4.6.1"
 
+react-reconciler@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.7.0.tgz#9614894103e5f138deeeb5eabaf3ee80eb1d026d"
+  dependencies:
+    fbjs "^0.8.16"
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+    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"
@@ -8910,11 +9495,7 @@ react-router-dom@^4.2.2:
     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@next:
+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:
@@ -8942,12 +9523,12 @@ react-select@^1.0.0-rc.10:
     prop-types "^15.5.8"
     react-input-autosize "^2.1.0"
 
-react-styleguidist@^6.0.8:
-  version "6.1.0"
-  resolved "https://registry.yarnpkg.com/react-styleguidist/-/react-styleguidist-6.1.0.tgz#08e097f75eae5f59c5bb93ee5301b9a507d729fd"
+react-styleguidist@^6.2.5:
+  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"
@@ -8974,14 +9555,14 @@ react-styleguidist@^6.0.8:
     jss-compose "^5.0.0"
     jss-default-unit "^8.0.0"
     jss-global "^3.0.0"
-    jss-isolate "5.0.0"
+    jss-isolate "^5.1.0"
     jss-nested "^6.0.1"
     leven "^2.1.0"
     listify "^1.0.0"
     loader-utils "^1.1.0"
     lodash "^4.17.4"
     lowercase-keys "^1.0.0"
-    markdown-to-jsx "^6.2.2"
+    markdown-to-jsx "^6.3.1"
     minimist "^1.2.0"
     ora "^1.3.0"
     prop-types "^15.6.0"
@@ -8998,7 +9579,7 @@ react-styleguidist@^6.0.8:
     style-loader "^0.19.1"
     to-ast "^1.0.0"
     type-detect "^4.0.5"
-    uglifyjs-webpack-plugin "1.1.4"
+    uglifyjs-webpack-plugin "1.1.5"
     unist-util-visit "^1.3.0"
     webpack-dev-server "^2.9.7"
     webpack-merge "^4.1.1"
@@ -9007,7 +9588,35 @@ react-tag-autocomplete@^5.4.1:
   version "5.5.0"
   resolved "https://registry.yarnpkg.com/react-tag-autocomplete/-/react-tag-autocomplete-5.5.0.tgz#49841388b88323f6bccb0c10039bd0252875b49f"
 
-react@^15.4.4, react@^15.6.1:
+react-test-renderer@^16.0.0-0, react-test-renderer@^16.2.0:
+  version "16.2.0"
+  resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211"
+  dependencies:
+    fbjs "^0.8.16"
+    object-assign "^4.1.1"
+    prop-types "^15.6.0"
+
+react-transition-group@^2.0.0, react-transition-group@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.2.1.tgz#e9fb677b79e6455fd391b03823afe84849df4a10"
+  dependencies:
+    chain-function "^1.0.0"
+    classnames "^2.2.5"
+    dom-helpers "^3.2.0"
+    loose-envify "^1.3.1"
+    prop-types "^15.5.8"
+    warning "^3.0.0"
+
+"react@>=15.0.0 <17.0.0", react@^16.2.0:
+  version "16.2.0"
+  resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba"
+  dependencies:
+    fbjs "^0.8.16"
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+    prop-types "^15.6.0"
+
+react@^15.6.1:
   version "15.6.2"
   resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72"
   dependencies:
@@ -9074,14 +9683,14 @@ read@1.0.x:
   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.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9:
+  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"
@@ -9113,6 +9722,18 @@ readable-stream@1.1.x:
     isarray "0.0.1"
     string_decoder "~0.10.x"
 
+readable-stream@^2.0.5, readable-stream@^2.2.6, readable-stream@^2.3.3:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.3"
+    isarray "~1.0.0"
+    process-nextick-args "~1.0.6"
+    safe-buffer "~5.1.1"
+    string_decoder "~1.0.3"
+    util-deprecate "~1.0.1"
+
 readable-stream@~0.0.2:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-0.0.4.tgz#f32d76e3fb863344a548d79923007173665b3b8d"
@@ -9241,6 +9862,12 @@ redux-logger@^3.0.1:
   dependencies:
     deep-diff "^0.3.5"
 
+redux-mock-store@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.4.0.tgz#cdc87650f5759f293588fecc9cac2b057d95190d"
+  dependencies:
+    lodash.isplainobject "^4.0.6"
+
 redux-thunk@^2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5"
@@ -9280,6 +9907,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"
+  dependencies:
+    extend-shallow "^2.0.1"
+
 regexpu-core@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
@@ -9401,7 +10034,7 @@ repeat-element@^1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
 
-repeat-string@^1.5.2, repeat-string@^1.5.4:
+repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1:
   version "1.6.1"
   resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
 
@@ -9585,6 +10218,10 @@ requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
 
+reselect@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147"
+
 resolve-cwd@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
@@ -9614,6 +10251,10 @@ resolve-pathname@^2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879"
 
+resolve-url@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+
 resolve@1.1.7:
   version "1.1.7"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
@@ -9691,8 +10332,8 @@ run-async@^2.2.0:
     is-promise "^2.1.0"
 
 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"
@@ -9779,23 +10420,27 @@ select-hose@^2.0.0:
   resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
 
 selfsigned@^1.9.1:
-  version "1.10.1"
-  resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.1.tgz#bf8cb7b83256c4551e31347c6311778db99eec52"
+  version "1.10.2"
+  resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.2.tgz#b4449580d99929b65b10a48389301a6592088758"
   dependencies:
-    node-forge "0.6.33"
+    node-forge "0.7.1"
 
 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.0.1, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1:
-  version "5.4.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
+"semver@2 || 3 || 4 || 5", semver@^5.3.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
 
 semver@5.3.0, semver@~5.3.0:
   version "5.3.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
 
+semver@^5.0.1, semver@^5.1.0, semver@^5.4.1:
+  version "5.4.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
+
 send@0.16.1:
   version "0.16.1"
   resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3"
@@ -9843,10 +10488,34 @@ set-blocking@^2.0.0, set-blocking@~2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
 
+set-getter@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376"
+  dependencies:
+    to-object-path "^0.3.0"
+
 set-immediate-shim@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
 
+set-value@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-extendable "^0.1.1"
+    is-plain-object "^2.0.1"
+    to-object-path "^0.3.0"
+
+set-value@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-extendable "^0.1.1"
+    is-plain-object "^2.0.3"
+    split-string "^3.0.1"
+
 setimmediate@^1.0.4, setimmediate@^1.0.5:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
@@ -9924,6 +10593,33 @@ slice-ansi@1.0.0:
   dependencies:
     is-fullwidth-code-point "^2.0.0"
 
+snapdragon-node@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+  dependencies:
+    define-property "^1.0.0"
+    isobject "^3.0.0"
+    snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+  dependencies:
+    kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+  version "0.8.1"
+  resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370"
+  dependencies:
+    base "^0.11.1"
+    debug "^2.2.0"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    map-cache "^0.2.2"
+    source-map "^0.5.6"
+    source-map-resolve "^0.5.0"
+    use "^2.0.0"
+
 sntp@1.x.x:
   version "1.0.9"
   resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
@@ -9947,12 +10643,12 @@ sockjs-client@1.1.4:
     json3 "^3.3.2"
     url-parse "^1.1.8"
 
-sockjs@0.3.18:
-  version "0.3.18"
-  resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207"
+sockjs@0.3.19:
+  version "0.3.19"
+  resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d"
   dependencies:
     faye-websocket "^0.10.0"
-    uuid "^2.0.2"
+    uuid "^3.0.1"
 
 sort-keys@^1.0.0:
   version "1.1.2"
@@ -9970,6 +10666,16 @@ source-list-map@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
 
+source-map-resolve@^0.5.0:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a"
+  dependencies:
+    atob "^2.0.0"
+    decode-uri-component "^0.2.0"
+    resolve-url "^0.2.1"
+    source-map-url "^0.4.0"
+    urix "^0.1.0"
+
 source-map-support@^0.4.15:
   version "0.4.18"
   resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
@@ -9977,11 +10683,15 @@ source-map-support@^0.4.15:
     source-map "^0.5.6"
 
 source-map-support@^0.5.0:
-  version "0.5.1"
-  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.1.tgz#72291517d1fd0cb9542cee6c27520884b5da1a07"
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.0.tgz#2018a7ad2bdf8faf2691e5fddab26bed5a2bacab"
   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"
+
 source-map@0.5.6:
   version "0.5.6"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
@@ -10059,6 +10769,12 @@ specificity@^0.3.1:
   version "0.3.2"
   resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.3.2.tgz#99e6511eceef0f8d9b57924937aac2cb13d13c42"
 
+split-string@^3.0.1, split-string@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+  dependencies:
+    extend-shallow "^3.0.0"
+
 split2@^2.0.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493"
@@ -10090,10 +10806,10 @@ sshpk@^1.7.0:
     tweetnacl "~0.14.0"
 
 ssri@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.0.0.tgz#13c19390b606c821f2a10d02b351c1729b94d8cf"
+  version "5.2.2"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.2.2.tgz#797be390aefe03996e4d961657a946121e2feacf"
   dependencies:
-    safe-buffer "^5.1.0"
+    safe-buffer "^5.1.1"
 
 stack-trace@0.0.x:
   version "0.0.10"
@@ -10115,6 +10831,13 @@ state-toggle@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.0.tgz#d20f9a616bb4f0c3b98b91922d25b640aa2bc425"
 
+static-extend@^0.1.1:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+  dependencies:
+    define-property "^0.2.5"
+    object-copy "^0.1.0"
+
 "statuses@>= 1.3.1 < 2":
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
@@ -10228,8 +10951,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"
@@ -10304,7 +11027,20 @@ style-search@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
 
-styled-components@^3.1.6:
+styled-components@^2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-2.4.0.tgz#086d0fd483d54638837fca3ea546a030b94adf75"
+  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"
+    supports-color "^3.2.3"
+
+styled-components@^3.1.4, styled-components@^3.1.6:
   version "3.1.6"
   resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-3.1.6.tgz#9c443146fa82c6659a9f64dd493bf2202480342e"
   dependencies:
@@ -10455,6 +11191,12 @@ supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0:
   dependencies:
     has-flag "^2.0.0"
 
+supports-color@^5.1.0, supports-color@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.2.0.tgz#b0d5333b1184dd3666cbe5aa0b45c5ac7ac17a4a"
+  dependencies:
+    has-flag "^3.0.0"
+
 svg-tags@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
@@ -10479,10 +11221,14 @@ 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.3, symbol-observable@^1.0.4, symbol-observable@^1.1.0:
+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-observable@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+
 symbol-tree@^3.2.1:
   version "3.2.2"
   resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
@@ -10610,9 +11356,9 @@ 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"
 
-thunky@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e"
+thunky@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371"
 
 time-stamp@^2.0.0:
   version "2.0.0"
@@ -10680,6 +11426,12 @@ to-number-x@^2.0.0:
     to-primitive-x "^1.1.0"
     trim-x "^3.0.0"
 
+to-object-path@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+  dependencies:
+    kind-of "^3.0.2"
+
 to-object-x@^1.4.1, to-object-x@^1.5.0:
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/to-object-x/-/to-object-x-1.5.0.tgz#bd69dd4e104d77acc0cc0d84f5ac48f630aebe3c"
@@ -10708,6 +11460,21 @@ to-property-key-x@^2.0.1, to-property-key-x@^2.0.2:
     to-primitive-x "^1.1.0"
     to-string-x "^1.4.2"
 
+to-regex-range@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+  dependencies:
+    is-number "^3.0.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"
+  dependencies:
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    regex-not "^1.0.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"
@@ -10741,12 +11508,6 @@ topo@2.x.x:
   dependencies:
     hoek "4.x.x"
 
-topo@3.x.x:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/topo/-/topo-3.0.0.tgz#37e48c330efeac784538e0acd3e62ca5e231fe7a"
-  dependencies:
-    hoek "5.x.x"
-
 toposort@^1.0.0:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec"
@@ -10845,10 +11606,17 @@ type-check@~0.3.2:
     prelude-ls "~1.1.2"
 
 type-detect@^4.0.5:
-  version "4.0.5"
-  resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.5.tgz#d70e5bc81db6de2a381bcaca0c6e0cbdc7635de2"
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+
+type-is@^1.6.14:
+  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.18"
 
-type-is@^1.6.14, type-is@^1.6.4, type-is@~1.6.15:
+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"
   dependencies:
@@ -10883,18 +11651,18 @@ ua-parser-js@^0.7.9:
   version "0.7.17"
   resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
 
-uglify-es@^3.2.1:
+uglify-es@3.2.2, uglify-es@^3.2.1:
   version "3.2.2"
   resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.2.2.tgz#15c62b7775002c81b7987a1c49ecd3f126cace73"
   dependencies:
     commander "~2.12.1"
     source-map "~0.6.1"
 
-uglify-js@3.2.x:
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.2.2.tgz#870e4b34ed733d179284f9998efd3293f7fd73f6"
+uglify-js@3.3.x:
+  version "3.3.10"
+  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.10.tgz#8e47821d4cf28e14c1826a0078ba0825ed094da8"
   dependencies:
-    commander "~2.12.1"
+    commander "~2.14.1"
     source-map "~0.6.1"
 
 uglify-js@^2.6, uglify-js@^2.8.29:
@@ -10910,16 +11678,16 @@ uglify-to-browserify@~1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
 
-uglifyjs-webpack-plugin@1.1.4, uglifyjs-webpack-plugin@^1.1.2:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.4.tgz#e43ad6e736c315024eb99481a7cc9362d6a066be"
+uglifyjs-webpack-plugin@1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.5.tgz#5ec4a16da0fd10c96538f715caed10dbdb180875"
   dependencies:
     cacache "^10.0.0"
     find-cache-dir "^1.0.0"
     schema-utils "^0.3.0"
     serialize-javascript "^1.4.0"
     source-map "^0.6.1"
-    uglify-es "^3.2.1"
+    uglify-es "3.2.2"
     webpack-sources "^1.0.1"
     worker-farm "^1.4.1"
 
@@ -10931,6 +11699,19 @@ uglifyjs-webpack-plugin@^0.4.6:
     uglify-js "^2.8.29"
     webpack-sources "^1.0.1"
 
+uglifyjs-webpack-plugin@^1.1.2:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.4.tgz#e43ad6e736c315024eb99481a7cc9362d6a066be"
+  dependencies:
+    cacache "^10.0.0"
+    find-cache-dir "^1.0.0"
+    schema-utils "^0.3.0"
+    serialize-javascript "^1.4.0"
+    source-map "^0.6.1"
+    uglify-es "^3.2.1"
+    webpack-sources "^1.0.1"
+    worker-farm "^1.4.1"
+
 uid-number@^0.0.6:
   version "0.0.6"
   resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
@@ -10964,6 +11745,15 @@ unified@^6.0.0:
     x-is-function "^1.0.4"
     x-is-string "^0.1.0"
 
+union-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
+  dependencies:
+    arr-union "^3.1.0"
+    get-value "^2.0.6"
+    is-extendable "^0.1.1"
+    set-value "^0.4.3"
+
 uniq@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
@@ -11042,6 +11832,13 @@ unreachable-branch-transform@^0.3.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"
+  dependencies:
+    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"
@@ -11050,10 +11847,23 @@ unzip-response@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
 
+upath@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.2.tgz#80aaae5395abc5fd402933ae2f58694f0860204c"
+  dependencies:
+    lodash.endswith "^4.2.1"
+    lodash.isfunction "^3.0.8"
+    lodash.isstring "^4.0.1"
+    lodash.startswith "^4.2.1"
+
 upper-case@^1.1.1:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
 
+urix@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+
 url-parse-lax@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
@@ -11088,6 +11898,14 @@ url@^0.11.0:
     punycode "1.3.2"
     querystring "0.2.0"
 
+use@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8"
+  dependencies:
+    define-property "^0.2.5"
+    isobject "^3.0.0"
+    lazy-cache "^2.0.2"
+
 util-deprecate@~1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -11139,15 +11957,15 @@ 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.0, uuid@^3.0.1, uuid@^3.1.0:
+uuid@3.1.0, uuid@^3.0.1, uuid@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
 
-uuid@^2.0.1, uuid@^2.0.2:
+uuid@^2.0.1:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
 
-uuid@^3.2.1:
+uuid@^3.0.0, uuid@^3.2.1:
   version "3.2.1"
   resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
 
@@ -11201,10 +12019,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"
@@ -11246,23 +12068,24 @@ watchpack@^1.4.0:
     chokidar "^1.7.0"
     graceful-fs "^4.1.2"
 
-wax-editor-core@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/wax-editor-core/-/wax-editor-core-0.2.1.tgz#850433da5919eefd66defbb388ba70641ae1f818"
+wax-editor-core@^0.3.9:
+  version "0.3.9"
+  resolved "https://registry.yarnpkg.com/wax-editor-core/-/wax-editor-core-0.3.9.tgz#6ef357db52288496815a28b804c13299f844f0ec"
   dependencies:
     font-awesome "^4.7.0"
     lodash "^4.17.4"
     substance "1.0.0-beta.6.5"
 
-wax-editor-react@^0.0.10:
-  version "0.0.10"
-  resolved "https://registry.yarnpkg.com/wax-editor-react/-/wax-editor-react-0.0.10.tgz#6cb19c05fed918490034d2a7b6ce3891428f6807"
+wax-editor-react@^0.1.10, wax-editor-react@^0.1.8:
+  version "0.1.10"
+  resolved "https://registry.yarnpkg.com/wax-editor-react/-/wax-editor-react-0.1.10.tgz#77b90f2876e8e62a5c0b9e1683def08afc66f648"
   dependencies:
     lodash "^4.17.4"
-    react "^15.6.1"
-    react-dom "^15.6.1"
+    prop-types "^15.6.0"
+    react ">=15.0.0 <17.0.0"
+    react-dom ">=15.0.0 <17.0.0"
     react-router-dom "^4.2.2"
-    wax-editor-core "^0.2.1"
+    wax-editor-core "^0.3.9"
 
 wbuf@^1.1.0, wbuf@^1.7.2:
   version "1.7.2"
@@ -11280,7 +12103,7 @@ webidl-conversions@^4.0.1, webidl-conversions@^4.0.2:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
 
-webpack-dev-middleware@^1.11.0, webpack-dev-middleware@^1.12.0:
+webpack-dev-middleware@1.12.2, webpack-dev-middleware@^1.12.0:
   version "1.12.2"
   resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e"
   dependencies:
@@ -11291,13 +12114,13 @@ webpack-dev-middleware@^1.11.0, webpack-dev-middleware@^1.12.0:
     time-stamp "^2.0.0"
 
 webpack-dev-server@^2.9.7:
-  version "2.9.7"
-  resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.7.tgz#100ad6a14775478924d417ca6dcfb9d52a98faed"
+  version "2.11.1"
+  resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.1.tgz#6f9358a002db8403f016e336816f4485384e5ec0"
   dependencies:
     ansi-html "0.0.7"
     array-includes "^3.0.3"
     bonjour "^3.5.0"
-    chokidar "^1.6.0"
+    chokidar "^2.0.0"
     compression "^1.5.2"
     connect-history-api-fallback "^1.3.0"
     debug "^3.1.0"
@@ -11305,7 +12128,7 @@ webpack-dev-server@^2.9.7:
     express "^4.16.2"
     html-entities "^1.2.0"
     http-proxy-middleware "~0.17.4"
-    import-local "^0.1.1"
+    import-local "^1.0.0"
     internal-ip "1.2.0"
     ip "^1.1.5"
     killable "^1.0.0"
@@ -11314,13 +12137,13 @@ webpack-dev-server@^2.9.7:
     portfinder "^1.0.9"
     selfsigned "^1.9.1"
     serve-index "^1.7.2"
-    sockjs "0.3.18"
+    sockjs "0.3.19"
     sockjs-client "1.1.4"
     spdy "^3.4.1"
-    strip-ansi "^3.0.1"
-    supports-color "^4.2.1"
-    webpack-dev-middleware "^1.11.0"
-    yargs "^6.6.0"
+    strip-ansi "^3.0.0"
+    supports-color "^5.1.0"
+    webpack-dev-middleware "1.12.2"
+    yargs "6.6.0"
 
 webpack-hot-middleware@^2.20.0:
   version "2.21.0"
@@ -11623,24 +12446,7 @@ yargs-parser@^8.1.0:
   dependencies:
     camelcase "^4.1.0"
 
-yargs@^10.0.3:
-  version "10.1.1"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.1.tgz#5fe1ea306985a099b33492001fa19a1e61efe285"
-  dependencies:
-    cliui "^4.0.0"
-    decamelize "^1.1.1"
-    find-up "^2.1.0"
-    get-caller-file "^1.0.1"
-    os-locale "^2.0.0"
-    require-directory "^2.1.1"
-    require-main-filename "^1.0.1"
-    set-blocking "^2.0.0"
-    string-width "^2.0.0"
-    which-module "^2.0.0"
-    y18n "^3.2.1"
-    yargs-parser "^8.1.0"
-
-yargs@^6.6.0:
+yargs@6.6.0:
   version "6.6.0"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
   dependencies:
@@ -11658,6 +12464,23 @@ yargs@^6.6.0:
     y18n "^3.2.1"
     yargs-parser "^4.2.0"
 
+yargs@^10.0.3:
+  version "10.1.1"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.1.tgz#5fe1ea306985a099b33492001fa19a1e61efe285"
+  dependencies:
+    cliui "^4.0.0"
+    decamelize "^1.1.1"
+    find-up "^2.1.0"
+    get-caller-file "^1.0.1"
+    os-locale "^2.0.0"
+    require-directory "^2.1.1"
+    require-main-filename "^1.0.1"
+    set-blocking "^2.0.0"
+    string-width "^2.0.0"
+    which-module "^2.0.0"
+    y18n "^3.2.1"
+    yargs-parser "^8.1.0"
+
 yargs@^7.0.0:
   version "7.1.0"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"