From caeb464bb2a7ec1bc14ca7d279d22135ecab6d56 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 15 Oct 2019 14:46:26 +0700
Subject: [PATCH 01/99] comments highlight

---
 src/components/media/AudioPlayer/styles.scss  |  5 ++
 src/components/node/Comment/index.tsx         | 72 +++++------------
 src/components/node/Comment/styles.scss       | 48 +----------
 src/components/node/CommentContent/index.tsx  | 79 +++++++++++++++++++
 .../node/CommentContent/styles.scss           | 65 +++++++++++++++
 src/components/node/NodeComments/index.tsx    | 29 ++++---
 src/containers/node/NodeLayout/index.tsx      |  4 +-
 src/redux/node/constants.ts                   |  1 +
 src/redux/node/sagas.ts                       |  2 +-
 src/redux/types.ts                            |  7 ++
 src/styles/global.scss                        |  4 +
 src/utils/dom.ts                              |  4 +
 src/utils/fn.ts                               | 34 ++++++++
 13 files changed, 239 insertions(+), 115 deletions(-)
 create mode 100644 src/components/node/CommentContent/index.tsx
 create mode 100644 src/components/node/CommentContent/styles.scss

diff --git a/src/components/media/AudioPlayer/styles.scss b/src/components/media/AudioPlayer/styles.scss
index e65bcc5f..f4cd63bf 100644
--- a/src/components/media/AudioPlayer/styles.scss
+++ b/src/components/media/AudioPlayer/styles.scss
@@ -1,6 +1,11 @@
 .wrap {
   display: flex;
   flex-direction: row;
+  height: $comment_height;
+  position: relative;
+  align-items: center;
+  justify-content: stretch;
+  flex: 1;
 
   &:global(.playing) {
     .progress {
diff --git a/src/components/node/Comment/index.tsx b/src/components/node/Comment/index.tsx
index c66dda99..5fd8b9f6 100644
--- a/src/components/node/Comment/index.tsx
+++ b/src/components/node/Comment/index.tsx
@@ -1,73 +1,39 @@
-import React, { FC, HTMLAttributes, useMemo } from 'react';
+import React, { FC, HTMLAttributes } from 'react';
 import { CommentWrapper } from '~/components/containers/CommentWrapper';
-import { IComment, IFile } from '~/redux/types';
+import { ICommentGroup } from '~/redux/types';
+import { getURL } from '~/utils/dom';
+import { CommentContent } from '~/components/node/CommentContent';
 import * as styles from './styles.scss';
-import { formatCommentText, getURL, getPrettyDate } from '~/utils/dom';
-import { Group } from '~/components/containers/Group';
-import assocPath from 'ramda/es/assocPath';
-import append from 'ramda/es/append';
-import reduce from 'ramda/es/reduce';
-import { UPLOAD_TYPES } from '~/redux/uploads/constants';
-import { AudioPlayer } from '~/components/media/AudioPlayer';
 
 type IProps = HTMLAttributes<HTMLDivElement> & {
   is_empty?: boolean;
   is_loading?: boolean;
-  comment?: IComment;
+  comment_group?: ICommentGroup;
   is_same?: boolean;
 };
 
-const Comment: FC<IProps> = ({ comment, is_empty, is_same, is_loading, className, ...props }) => {
-  const groupped = useMemo<Record<keyof typeof UPLOAD_TYPES, IFile[]>>(
-    () =>
-      reduce(
-        (group, file) => assocPath([file.type], append(file, group[file.type]), group),
-        {},
-        comment.files
-      ),
-    [comment]
-  );
-
+const Comment: FC<IProps> = ({
+  comment_group,
+  is_empty,
+  is_same,
+  is_loading,
+  className,
+  ...props
+}) => {
   return (
     <CommentWrapper
       className={className}
       is_empty={is_empty}
       is_loading={is_loading}
-      photo={getURL(comment.user.photo)}
+      photo={getURL(comment_group.user.photo)}
       is_same={is_same}
       {...props}
     >
-      {comment.text && (
-        <Group
-          className={styles.text}
-          dangerouslySetInnerHTML={{
-            __html: formatCommentText(
-              !is_same && comment.user && comment.user.username,
-              comment.text
-            ),
-          }}
-        />
-      )}
-
-      <div className={styles.date}>{getPrettyDate(comment.created_at)}</div>
-
-      {groupped.image && (
-        <div className={styles.images}>
-          {groupped.image.map(file => (
-            <div key={file.id}>
-              <img src={getURL(file)} alt={file.name} />
-            </div>
-          ))}
-        </div>
-      )}
-
-      {groupped.audio && (
-        <div className={styles.audios}>
-          {groupped.audio.map(file => (
-            <AudioPlayer key={file.id} file={file} />
-          ))}
-        </div>
-      )}
+      <div className={styles.wrap}>
+        {comment_group.comments.map(comment => (
+          <CommentContent comment={comment} key={comment.id} />
+        ))}
+      </div>
     </CommentWrapper>
   );
 };
diff --git a/src/components/node/Comment/styles.scss b/src/components/node/Comment/styles.scss
index 723535b9..1afb844d 100644
--- a/src/components/node/Comment/styles.scss
+++ b/src/components/node/Comment/styles.scss
@@ -1,48 +1,2 @@
-@import 'flexbin/flexbin.scss';
-
-.text {
-  // @include outer_shadow();
-
-  padding: $gap;
-  font-weight: 300;
-  font: $font_16_medium;
-  min-height: $comment_height;
-  box-sizing: border-box;
-  position: relative;
-  color: #cccccc;
-
-  b {
-    font-weight: 600;
-  }
-}
-
-.date {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  font: $font_12_regular;
-  color: transparentize($color: white, $amount: 0.8);
-  padding: 2px 4px;
-  border-radius: 0 0 $radius 0;
-}
-
-.images {
-  @include flexbin(240px, 5px);
-
-  img {
-    border-radius: $radius;
-  }
-}
-
-.audios {
-  & > div {
-    @include outer_shadow();
-
-    height: $comment_height;
-    border-radius: $radius;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    text-align: center;
-  }
+.wrap {
 }
diff --git a/src/components/node/CommentContent/index.tsx b/src/components/node/CommentContent/index.tsx
new file mode 100644
index 00000000..916e1113
--- /dev/null
+++ b/src/components/node/CommentContent/index.tsx
@@ -0,0 +1,79 @@
+import React, { FC, useMemo } from 'react';
+import { IComment, IFile } from '~/redux/types';
+import path from 'ramda/es/path';
+import { formatCommentText, getURL } from '~/utils/dom';
+import { Group } from '~/components/containers/Group';
+import * as styles from './styles.scss';
+import { UPLOAD_TYPES } from '~/redux/uploads/constants';
+import assocPath from 'ramda/es/assocPath';
+import append from 'ramda/es/append';
+import reduce from 'ramda/es/reduce';
+import { AudioPlayer } from '~/components/media/AudioPlayer';
+import classnames from 'classnames';
+
+interface IProps {
+  comment: IComment;
+}
+
+const CommentContent: FC<IProps> = ({ comment }) => {
+  const groupped = useMemo<Record<keyof typeof UPLOAD_TYPES, IFile[]>>(
+    () =>
+      reduce(
+        (group, file) => assocPath([file.type], append(file, group[file.type]), group),
+        {},
+        comment.files
+      ),
+    [comment]
+  );
+
+  return (
+    <>
+      {comment.text && (
+        <div className={styles.block}>
+          <Group
+            className={styles.text}
+            dangerouslySetInnerHTML={{
+              __html: formatCommentText(path(['user', 'username'], comment), comment.text),
+            }}
+          />
+        </div>
+      )}
+
+      {groupped.image && groupped.image.length > 0 && (
+        <div className={styles.block}>
+          <div className={styles.images}>
+            {groupped.image.map(file => (
+              <div key={file.id}>
+                <img src={getURL(file)} alt={file.name} />
+              </div>
+            ))}
+          </div>
+        </div>
+      )}
+
+      {groupped.audio && groupped.audio.length > 0 && (
+        <>
+          {groupped.audio.map(file => (
+            <div className={classnames(styles.block, styles.audio_block)} key={file.id}>
+              <AudioPlayer file={file} />
+            </div>
+          ))}
+        </>
+      )}
+    </>
+  );
+};
+
+export { CommentContent };
+
+/*
+{comment.text && (
+        
+      )}
+
+      <div className={styles.date}>{getPrettyDate(comment.created_at)}</div>
+
+
+
+
+      */
diff --git a/src/components/node/CommentContent/styles.scss b/src/components/node/CommentContent/styles.scss
new file mode 100644
index 00000000..ccfb4e3d
--- /dev/null
+++ b/src/components/node/CommentContent/styles.scss
@@ -0,0 +1,65 @@
+@import 'flexbin/flexbin.scss';
+
+.block {
+  min-height: $comment_height;
+  box-shadow: inset rgba(255, 255, 255, 0.05) 1px 1px, inset rgba(0, 0, 0, 0.1) -1px -1px;
+  display: flex;
+  align-items: flex-start;
+  justify-content: flex-start;
+
+  &:first-child {
+    border-top-right-radius: $radius;
+  }
+
+  &:last-child {
+    border-bottom-right-radius: $radius;
+  }
+}
+
+.block_audio {
+  align-items: center;
+  justify-content: center;
+}
+
+.text {
+  padding: $gap;
+  font-weight: 300;
+  font: $font_16_medium;
+  line-height: 20px;
+  box-sizing: border-box;
+  position: relative;
+  color: #cccccc;
+
+  b {
+    font-weight: 600;
+  }
+}
+
+.date {
+  position: absolute;
+  bottom: 0;
+  right: 0;
+  font: $font_12_regular;
+  color: transparentize($color: white, $amount: 0.8);
+  padding: 2px 4px;
+  border-radius: 0 0 $radius 0;
+}
+
+.images {
+  @include flexbin(240px, 5px);
+
+  img {
+    border-radius: $radius;
+  }
+}
+
+.audios {
+  & > div {
+    height: $comment_height;
+    border-radius: $radius;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    text-align: center;
+  }
+}
diff --git a/src/components/node/NodeComments/index.tsx b/src/components/node/NodeComments/index.tsx
index 339a4a67..ab9982ba 100644
--- a/src/components/node/NodeComments/index.tsx
+++ b/src/components/node/NodeComments/index.tsx
@@ -1,24 +1,29 @@
-import React, { FC } from 'react';
+import React, { FC, useMemo } from 'react';
 import { Comment } from '../Comment';
 import { Filler } from '~/components/containers/Filler';
 
 import * as styles from './styles.scss';
+import { ICommentGroup, IComment } from '~/redux/types';
+import { groupCommentsByUser } from '~/utils/fn';
 
 interface IProps {
-  comments?: any;
+  comments?: IComment[];
 }
 
-const isSameComment = (comments, index) =>
-  comments[index - 1] && comments[index - 1].user.id === comments[index].user.id;
+const NodeComments: FC<IProps> = ({ comments }) => {
+  const groupped: ICommentGroup[] = useMemo(() => comments.reduce(groupCommentsByUser, []), [
+    comments,
+  ]);
 
-const NodeComments: FC<IProps> = ({ comments }) => (
-  <div className={styles.wrap}>
-    {comments.map((comment, index) => (
-      <Comment key={comment.id} comment={comment} is_same={isSameComment(comments, index)} />
-    ))}
+  return (
+    <div className={styles.wrap}>
+      {groupped.map(group => (
+        <Comment key={group.ids.join()} comment_group={group} />
+      ))}
 
-    <Filler />
-  </div>
-);
+      <Filler />
+    </div>
+  );
+};
 
 export { NodeComments };
diff --git a/src/containers/node/NodeLayout/index.tsx b/src/containers/node/NodeLayout/index.tsx
index cd629d04..02d7b10b 100644
--- a/src/containers/node/NodeLayout/index.tsx
+++ b/src/containers/node/NodeLayout/index.tsx
@@ -68,13 +68,13 @@ const NodeLayoutUnconnected: FC<IProps> = ({
         <Padder>
           <Group horizontal className={styles.content}>
             <Group className={styles.comments}>
-              {is_user && <CommentForm id={0} />}
-
               {is_loading_comments || !comments.length ? (
                 <NodeNoComments is_loading={is_loading_comments} />
               ) : (
                 <NodeComments comments={comments} />
               )}
+
+              {is_user && <CommentForm id={0} />}
             </Group>
 
             <div className={styles.panel}>
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index cd13c326..f61dad63 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -67,6 +67,7 @@ export const NODE_COMPONENTS: INodeComponents = {
 };
 
 export const EMPTY_COMMENT: IComment = {
+  id: null,
   text: '',
   files: [],
   temp_ids: [],
diff --git a/src/redux/node/sagas.ts b/src/redux/node/sagas.ts
index 98fe0693..927b7e87 100644
--- a/src/redux/node/sagas.ts
+++ b/src/redux/node/sagas.ts
@@ -100,7 +100,7 @@ function* onPostComment({ id }: ReturnType<typeof nodePostComment>) {
   if (current_node && current_node.id === current.id) {
     // if user still browsing that node
     const { comments } = yield select(selectNode);
-    yield put(nodeSetComments([comment, ...comments]));
+    yield put(nodeSetComments([...comments, comment]));
     yield put(nodeSetCommentData(0, { ...EMPTY_COMMENT }));
   }
 }
diff --git a/src/redux/types.ts b/src/redux/types.ts
index ea6e9a70..a8523790 100644
--- a/src/redux/types.ts
+++ b/src/redux/types.ts
@@ -133,6 +133,7 @@ export interface INode {
 }
 
 export interface IComment {
+  id: number;
   text: string;
   temp_ids?: string[];
   files: IFile[];
@@ -143,6 +144,12 @@ export interface IComment {
   update_at?: string;
 }
 
+export interface ICommentGroup {
+  user: IUser;
+  comments: IComment[];
+  ids: IComment['id'][];
+}
+
 export type IUploadProgressHandler = (progress: ProgressEvent) => void;
 export type IError = ValueOf<typeof ERRORS>;
 export type IValidationErrors = Record<string, IError>;
diff --git a/src/styles/global.scss b/src/styles/global.scss
index 3ab58dc1..76ede1f3 100644
--- a/src/styles/global.scss
+++ b/src/styles/global.scss
@@ -76,6 +76,10 @@ body {
   height: 40px;
 }
 
+:global(.grey) {
+  color: #555555;
+}
+
 :global(h2) {
   font: $font_24_bold;
 }
diff --git a/src/utils/dom.ts b/src/utils/dom.ts
index b1bb0baa..62649a81 100644
--- a/src/utils/dom.ts
+++ b/src/utils/dom.ts
@@ -72,11 +72,15 @@ export const formatCommentText = (author, text: string) =>
     .replace(/(\n{2,})/gi, '\n')
     .replace(/</g, '&lt;')
     .replace(/>/g, '&gt;')
+    .replace(/:\/\//gim, ':|--|')
+    .replace(/(\/\/[^\n]+)/gim, '<span class="grey">$1</span>')
+    .replace(/:\|--\|/gim, '://')
     .split('\n')
     .map((el, index) =>
       index === 0 ? `${author ? `<p><b>${author}</b>: ` : ''}${el}</p>` : `<p>${el}</p>`
     )
     .join('');
+// .replace(/\/\*(\*(?!\/)|[^*])*\*\//igm, '');
 
 export const getPrettyDate = (date: string): string =>
   formatDistanceToNow(new Date(date), { locale: ru, includeSeconds: true, addSuffix: true });
diff --git a/src/utils/fn.ts b/src/utils/fn.ts
index dd239fae..d05c8786 100644
--- a/src/utils/fn.ts
+++ b/src/utils/fn.ts
@@ -2,7 +2,41 @@ import curry from 'ramda/es/curry';
 import insert from 'ramda/es/insert';
 import nth from 'ramda/es/nth';
 import remove from 'ramda/es/remove';
+import { ICommentGroup, IComment } from '~/redux/types';
+import path from 'ramda/es/path';
 
 export const moveArrItem = curry((at, to, list) => insert(to, nth(at, list), remove(at, 1, list)));
 export const objFromArray = (array: any[], key: string) =>
   array.reduce((obj, el) => (key && el[key] ? { ...obj, [el[key]]: el } : obj), {});
+
+export const groupCommentsByUser = (
+  result: ICommentGroup[],
+  comment: IComment
+): ICommentGroup[] => {
+  const last: ICommentGroup = path([result.length - 1], result) || null;
+
+  return [
+    ...(!last || path(['user', 'id'], last) !== path(['user', 'id'], comment)
+      ? [
+          // add new group
+          ...result,
+          {
+            user: comment.user,
+            comments: [comment],
+            ids: [comment.id],
+          },
+        ]
+      : [
+          // append to last group
+          ...result.slice(0, result.length - 1),
+          {
+            ...last,
+            comments: [...last.comments, comment],
+            ids: [...last.ids, comment.id],
+          },
+        ]),
+  ];
+};
+
+// const isSameComment = (comments, index) =>
+//   comments[index - 1] && comments[index - 1].user.id === comments[index].user.id;

From 6ebdd62f67f9aed2921551dfda29d3f6c6a95d3f Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 15 Oct 2019 14:49:06 +0700
Subject: [PATCH 02/99] comment date

---
 src/components/node/CommentContent/index.tsx   | 9 +++++++--
 src/components/node/CommentContent/styles.scss | 5 ++++-
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/components/node/CommentContent/index.tsx b/src/components/node/CommentContent/index.tsx
index 916e1113..ae8b702f 100644
--- a/src/components/node/CommentContent/index.tsx
+++ b/src/components/node/CommentContent/index.tsx
@@ -1,7 +1,7 @@
 import React, { FC, useMemo } from 'react';
 import { IComment, IFile } from '~/redux/types';
 import path from 'ramda/es/path';
-import { formatCommentText, getURL } from '~/utils/dom';
+import { formatCommentText, getURL, getPrettyDate } from '~/utils/dom';
 import { Group } from '~/components/containers/Group';
 import * as styles from './styles.scss';
 import { UPLOAD_TYPES } from '~/redux/uploads/constants';
@@ -36,6 +36,8 @@ const CommentContent: FC<IProps> = ({ comment }) => {
               __html: formatCommentText(path(['user', 'username'], comment), comment.text),
             }}
           />
+
+          <div className={styles.date}>{getPrettyDate(comment.created_at)}</div>
         </div>
       )}
 
@@ -48,6 +50,8 @@ const CommentContent: FC<IProps> = ({ comment }) => {
               </div>
             ))}
           </div>
+
+          <div className={styles.date}>{getPrettyDate(comment.created_at)}</div>
         </div>
       )}
 
@@ -56,6 +60,8 @@ const CommentContent: FC<IProps> = ({ comment }) => {
           {groupped.audio.map(file => (
             <div className={classnames(styles.block, styles.audio_block)} key={file.id}>
               <AudioPlayer file={file} />
+
+              <div className={styles.date}>{getPrettyDate(comment.created_at)}</div>
             </div>
           ))}
         </>
@@ -71,7 +77,6 @@ export { CommentContent };
         
       )}
 
-      <div className={styles.date}>{getPrettyDate(comment.created_at)}</div>
 
 
 
diff --git a/src/components/node/CommentContent/styles.scss b/src/components/node/CommentContent/styles.scss
index ccfb4e3d..6ac33fc5 100644
--- a/src/components/node/CommentContent/styles.scss
+++ b/src/components/node/CommentContent/styles.scss
@@ -6,6 +6,9 @@
   display: flex;
   align-items: flex-start;
   justify-content: flex-start;
+  position: relative;
+  padding-bottom: 10px;
+  box-sizing: border-box;
 
   &:first-child {
     border-top-right-radius: $radius;
@@ -41,7 +44,7 @@
   right: 0;
   font: $font_12_regular;
   color: transparentize($color: white, $amount: 0.8);
-  padding: 2px 4px;
+  padding: 4px 6px 4px 4px;
   border-radius: 0 0 $radius 0;
 }
 

From 794318ed805012a6c233e3fbd655016bf6245066 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 15 Oct 2019 16:01:27 +0700
Subject: [PATCH 03/99] fixes for audio and image block

---
 src/components/node/CommentContent/index.tsx  |  4 +--
 .../node/CommentContent/styles.scss           | 13 +++++++-
 src/components/node/CommentForm/index.tsx     | 32 +++++++++----------
 3 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/src/components/node/CommentContent/index.tsx b/src/components/node/CommentContent/index.tsx
index ae8b702f..ed4503cc 100644
--- a/src/components/node/CommentContent/index.tsx
+++ b/src/components/node/CommentContent/index.tsx
@@ -42,7 +42,7 @@ const CommentContent: FC<IProps> = ({ comment }) => {
       )}
 
       {groupped.image && groupped.image.length > 0 && (
-        <div className={styles.block}>
+        <div className={classnames(styles.block, styles.block_image)}>
           <div className={styles.images}>
             {groupped.image.map(file => (
               <div key={file.id}>
@@ -58,7 +58,7 @@ const CommentContent: FC<IProps> = ({ comment }) => {
       {groupped.audio && groupped.audio.length > 0 && (
         <>
           {groupped.audio.map(file => (
-            <div className={classnames(styles.block, styles.audio_block)} key={file.id}>
+            <div className={classnames(styles.block, styles.block_audio)} key={file.id}>
               <AudioPlayer file={file} />
 
               <div className={styles.date}>{getPrettyDate(comment.created_at)}</div>
diff --git a/src/components/node/CommentContent/styles.scss b/src/components/node/CommentContent/styles.scss
index 6ac33fc5..a2462771 100644
--- a/src/components/node/CommentContent/styles.scss
+++ b/src/components/node/CommentContent/styles.scss
@@ -22,6 +22,17 @@
 .block_audio {
   align-items: center;
   justify-content: center;
+  padding-bottom: 0 !important;
+}
+
+.block_image {
+  padding-bottom: 0 !important;
+
+  .date {
+    background: transparentize($color: $content_bg, $amount: 0.2);
+    border-radius: $radius 0 $radius 0;
+    color: transparentize(white, 0.2);
+  }
 }
 
 .text {
@@ -44,7 +55,7 @@
   right: 0;
   font: $font_12_regular;
   color: transparentize($color: white, $amount: 0.8);
-  padding: 4px 6px 4px 4px;
+  padding: 4px 6px 4px 6px;
   border-radius: 0 0 $radius 0;
 }
 
diff --git a/src/components/node/CommentForm/index.tsx b/src/components/node/CommentForm/index.tsx
index 642942f8..a096ea7e 100644
--- a/src/components/node/CommentForm/index.tsx
+++ b/src/components/node/CommentForm/index.tsx
@@ -134,6 +134,22 @@ const CommentFormUnconnected: FC<IProps> = ({
           />
         </div>
 
+        {comment.temp_ids.map(
+          temp_id =>
+            statuses[temp_id] &&
+            statuses[temp_id].is_uploading && (
+              <div key={statuses[temp_id].temp_id}>{statuses[temp_id].progress}</div>
+            )
+        )}
+
+        {comment.files.map(file => {
+          if (file.type === UPLOAD_TYPES.AUDIO) {
+            return <AudioPlayer file={file} />;
+          }
+
+          return <div>file.name</div>;
+        })}
+
         <Group horizontal className={styles.buttons}>
           <ButtonGroup>
             <Button iconLeft="image" size="small" grey iconOnly>
@@ -154,22 +170,6 @@ const CommentFormUnconnected: FC<IProps> = ({
           </Button>
         </Group>
       </form>
-
-      {comment.temp_ids.map(
-        temp_id =>
-          statuses[temp_id] &&
-          statuses[temp_id].is_uploading && (
-            <div key={statuses[temp_id].temp_id}>{statuses[temp_id].progress}</div>
-          )
-      )}
-
-      {comment.files.map(file => {
-        if (file.type === UPLOAD_TYPES.AUDIO) {
-          return <AudioPlayer file={file} />;
-        }
-
-        return <div>file.name</div>;
-      })}
     </CommentWrapper>
   );
 };

From 87b9b5f51433c5a86fa2a273630e788334dcea74 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 15 Oct 2019 16:29:49 +0700
Subject: [PATCH 04/99] player bar appearance

---
 src/components/bars/PlayerBar/index.tsx       | 64 +++++++++++++++++--
 src/components/bars/PlayerBar/styles.scss     | 60 +++++++++++++++--
 src/components/media/AudioPlayer/index.tsx    |  3 +-
 .../main/BottomContainer/styles.scss          |  4 +-
 src/containers/main/MainLayout/styles.scss    |  2 +-
 src/containers/node/NodeLayout/index.tsx      |  1 +
 6 files changed, 118 insertions(+), 16 deletions(-)

diff --git a/src/components/bars/PlayerBar/index.tsx b/src/components/bars/PlayerBar/index.tsx
index 1a6656eb..166a4724 100644
--- a/src/components/bars/PlayerBar/index.tsx
+++ b/src/components/bars/PlayerBar/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC } from 'react';
+import React, { FC, useCallback, useState, useEffect } from 'react';
 import * as styles from './styles.scss';
 import { Icon } from '~/components/input/Icon';
 import { Filler } from '~/components/containers/Filler';
@@ -7,27 +7,79 @@ import { connect } from 'react-redux';
 import pick from 'ramda/es/pick';
 import { selectPlayer } from '~/redux/player/selectors';
 import * as PLAYER_ACTIONS from '~/redux/player/actions';
+import { IPlayerProgress, Player } from '~/utils/player';
 
-const mapStateToProps = state => pick(['status'], selectPlayer(state));
+const mapStateToProps = state => pick(['status', 'file'], selectPlayer(state));
 const mapDispatchToProps = {
   playerPlay: PLAYER_ACTIONS.playerPlay,
   playerPause: PLAYER_ACTIONS.playerPause,
+  playerSeek: PLAYER_ACTIONS.playerSeek,
 };
 
 type IProps = ReturnType<typeof mapStateToProps> & typeof mapDispatchToProps & {};
 
-const PlayerBarUnconnected: FC<IProps> = ({ status }) => {
+const PlayerBarUnconnected: FC<IProps> = ({
+  status,
+  playerPlay,
+  playerPause,
+  playerSeek,
+  file,
+}) => {
+  const [progress, setProgress] = useState<IPlayerProgress>({ progress: 0, current: 0, total: 0 });
+
+  const onClick = useCallback(() => {
+    if (status === PLAYER_STATES.PLAYING) return playerPause();
+    return playerPlay();
+  }, [playerPlay, playerPause, status]);
+
+  const onProgress = useCallback(
+    ({ detail }: { detail: IPlayerProgress }) => {
+      if (!detail || !detail.total) return;
+      setProgress(detail);
+    },
+    [setProgress]
+  );
+
+  const onSeek = useCallback(
+    event => {
+      event.stopPropagation();
+      const { clientX, target } = event;
+      const { left, width } = target.getBoundingClientRect();
+      playerSeek((clientX - left) / width);
+    },
+    [playerSeek]
+  );
+
+  useEffect(() => {
+    Player.on('playprogress', onProgress);
+
+    return () => {
+      Player.off('playprogress', onProgress);
+    };
+  }, [onProgress]);
+
   if (status === PLAYER_STATES.UNSET) return null;
 
+  const title =
+    file.metadata &&
+    (file.metadata.title ||
+      [file.metadata.id3artist, file.metadata.id3title].filter(el => !!el).join(' - '));
+
   return (
     <div className={styles.place}>
       <div className={styles.wrap}>
         <div className={styles.status}>
-          <div className={styles.playpause}>
-            <Icon icon="play" />
+          <div className={styles.playpause} onClick={onClick}>
+            {status === PLAYER_STATES.PLAYING ? <Icon icon="pause" /> : <Icon icon="play" />}
           </div>
 
-          <Filler />
+          <div className={styles.info}>
+            <div className={styles.title}>{title}</div>
+
+            <div className={styles.progress} onClick={onSeek}>
+              <div className={styles.bar} style={{ width: `${progress.progress}%` }} />
+            </div>
+          </div>
 
           <div className={styles.close}>
             <Icon icon="close" />
diff --git a/src/components/bars/PlayerBar/styles.scss b/src/components/bars/PlayerBar/styles.scss
index 9e428b87..5f8d460f 100644
--- a/src/components/bars/PlayerBar/styles.scss
+++ b/src/components/bars/PlayerBar/styles.scss
@@ -1,6 +1,6 @@
 .place {
   position: relative;
-  height: 54px;
+  height: 64px;
   flex: 0 1 500px;
   display: flex;
 
@@ -13,29 +13,30 @@
 
 .wrap {
   display: flex;
-  border-radius: 27px;
+  border-radius: $radius $radius 0 0;
   background: $green_gradient;
   align-items: center;
-  box-shadow: rgba(0, 0, 0, 0.5) 0 2px 5px, inset rgba(255, 255, 255, 0.3) 0 1px,
+  box-shadow: rgba(0, 0, 0, 0.5) 0 2px 5px, inset rgba(255, 255, 255, 0.3) 1px 1px,
     inset rgba(0, 0, 0, 0.3) 0 -1px;
   position: absolute;
   top: 0;
   left: 0;
   width: 100%;
-  height: 54px;
+  height: 64px;
   flex-direction: column;
   transform: translate(0, 0);
   z-index: 3;
+  min-width: 0;
 }
 
 .status {
-  flex: 0 0 54px;
+  flex: 0 0 64px;
   display: flex;
   flex-direction: row;
   width: 100%;
   position: absolute;
   z-index: 1;
-  height: 54px;
+  height: 64px;
 }
 
 .playpause,
@@ -60,3 +61,50 @@
     height: 24px;
   }
 }
+
+.info {
+  display: flex;
+  min-width: 0;
+  align-items: center;
+  justify-content: center;
+  padding: 10px;
+  flex-direction: column;
+}
+
+.title {
+  color: #222222;
+  font: $font_14_semibold;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  width: 100%;
+}
+
+.progress {
+  position: relative;
+  height: 20px;
+  width: 100%;
+  cursor: pointer;
+
+  &::after {
+    content: ' ';
+    top: 9px;
+    left: 0;
+    width: 100%;
+    height: 2px;
+    background: #222222;
+    position: absolute;
+    border-radius: 2px;
+    opacity: 0.5;
+  }
+}
+
+.bar {
+  top: 7px;
+  left: 0;
+  width: 100%;
+  height: 6px;
+  background: #222222;
+  position: absolute;
+  border-radius: 2px;
+}
diff --git a/src/components/media/AudioPlayer/index.tsx b/src/components/media/AudioPlayer/index.tsx
index 7078d4db..8494333e 100644
--- a/src/components/media/AudioPlayer/index.tsx
+++ b/src/components/media/AudioPlayer/index.tsx
@@ -86,10 +86,11 @@ const AudioPlayerUnconnected = ({
         {playing && status === PLAYER_STATES.PLAYING ? <Icon icon="pause" /> : <Icon icon="play" />}
       </div>
       <div className={styles.content}>
+        <div className={styles.title}>{title || 'Unknown'}</div>
+
         <div className={styles.progress} onClick={onSeek}>
           <div className={styles.bar} style={{ width: `${progress.progress}%` }} />
         </div>
-        <div className={styles.title}>{title || 'Unknown'}</div>
       </div>
     </div>
   );
diff --git a/src/containers/main/BottomContainer/styles.scss b/src/containers/main/BottomContainer/styles.scss
index 9354d2f4..f7582455 100644
--- a/src/containers/main/BottomContainer/styles.scss
+++ b/src/containers/main/BottomContainer/styles.scss
@@ -1,10 +1,10 @@
 .wrap {
   position: fixed;
   transform: translateZ(0);
-  bottom: $gap;
+  bottom: 0;
   pointer-events: none;
   touch-action: none;
-  height: 54px;
+  height: 64px;
   display: flex;
   z-index: 10;
   width: 100%;
diff --git a/src/containers/main/MainLayout/styles.scss b/src/containers/main/MainLayout/styles.scss
index 5909cbb7..d98cb981 100644
--- a/src/containers/main/MainLayout/styles.scss
+++ b/src/containers/main/MainLayout/styles.scss
@@ -14,6 +14,6 @@
   width: 100%;
   max-width: $content_width;
   display: flex;
-  padding-bottom: 10px;
+  padding-bottom: 64px;
   flex-direction: column;
 }
diff --git a/src/containers/node/NodeLayout/index.tsx b/src/containers/node/NodeLayout/index.tsx
index 02d7b10b..4153147b 100644
--- a/src/containers/node/NodeLayout/index.tsx
+++ b/src/containers/node/NodeLayout/index.tsx
@@ -56,6 +56,7 @@ const NodeLayoutUnconnected: FC<IProps> = ({
     },
     [node, nodeUpdateTags]
   );
+
   const block = node && node.type && NODE_COMPONENTS[node.type] && NODE_COMPONENTS[node.type];
 
   return (

From c84dfdd2ab91aea7f992984f90f3d285e37426e5 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 15 Oct 2019 17:30:31 +0700
Subject: [PATCH 05/99] better audio player

---
 src/components/bars/PlayerBar/index.tsx    | 12 ++++++++----
 src/components/bars/PlayerBar/styles.scss  |  1 +
 src/components/media/AudioPlayer/index.tsx |  8 ++++----
 src/redux/player/actions.ts                | 13 +++++++++++++
 src/redux/player/constants.ts              |  3 +++
 src/redux/player/sagas.ts                  | 22 +++++++++++++++++-----
 src/utils/player.ts                        |  9 ++++++++-
 7 files changed, 54 insertions(+), 14 deletions(-)

diff --git a/src/components/bars/PlayerBar/index.tsx b/src/components/bars/PlayerBar/index.tsx
index 166a4724..3770ebd3 100644
--- a/src/components/bars/PlayerBar/index.tsx
+++ b/src/components/bars/PlayerBar/index.tsx
@@ -8,12 +8,15 @@ import pick from 'ramda/es/pick';
 import { selectPlayer } from '~/redux/player/selectors';
 import * as PLAYER_ACTIONS from '~/redux/player/actions';
 import { IPlayerProgress, Player } from '~/utils/player';
+import path from 'ramda/es/path';
+import { IFile } from '~/redux/types';
 
 const mapStateToProps = state => pick(['status', 'file'], selectPlayer(state));
 const mapDispatchToProps = {
   playerPlay: PLAYER_ACTIONS.playerPlay,
   playerPause: PLAYER_ACTIONS.playerPause,
   playerSeek: PLAYER_ACTIONS.playerSeek,
+  playerStop: PLAYER_ACTIONS.playerStop,
 };
 
 type IProps = ReturnType<typeof mapStateToProps> & typeof mapDispatchToProps & {};
@@ -23,6 +26,7 @@ const PlayerBarUnconnected: FC<IProps> = ({
   playerPlay,
   playerPause,
   playerSeek,
+  playerStop,
   file,
 }) => {
   const [progress, setProgress] = useState<IPlayerProgress>({ progress: 0, current: 0, total: 0 });
@@ -60,10 +64,10 @@ const PlayerBarUnconnected: FC<IProps> = ({
 
   if (status === PLAYER_STATES.UNSET) return null;
 
+  const metadata: IFile['metadata'] = path(['metadata'], file);
   const title =
-    file.metadata &&
-    (file.metadata.title ||
-      [file.metadata.id3artist, file.metadata.id3title].filter(el => !!el).join(' - '));
+    metadata &&
+    (metadata.title || [metadata.id3artist, metadata.id3title].filter(el => !!el).join(' - '));
 
   return (
     <div className={styles.place}>
@@ -81,7 +85,7 @@ const PlayerBarUnconnected: FC<IProps> = ({
             </div>
           </div>
 
-          <div className={styles.close}>
+          <div className={styles.close} onClick={playerStop}>
             <Icon icon="close" />
           </div>
         </div>
diff --git a/src/components/bars/PlayerBar/styles.scss b/src/components/bars/PlayerBar/styles.scss
index 5f8d460f..9d9356f7 100644
--- a/src/components/bars/PlayerBar/styles.scss
+++ b/src/components/bars/PlayerBar/styles.scss
@@ -63,6 +63,7 @@
 }
 
 .info {
+  flex: 1;
   display: flex;
   min-width: 0;
   align-items: center;
diff --git a/src/components/media/AudioPlayer/index.tsx b/src/components/media/AudioPlayer/index.tsx
index 8494333e..5dcbf462 100644
--- a/src/components/media/AudioPlayer/index.tsx
+++ b/src/components/media/AudioPlayer/index.tsx
@@ -14,7 +14,7 @@ const mapStateToProps = state => ({
 });
 
 const mapDispatchToProps = {
-  playerSetFile: PLAYER_ACTIONS.playerSetFile,
+  playerSetFileAndPlay: PLAYER_ACTIONS.playerSetFileAndPlay,
   playerPlay: PLAYER_ACTIONS.playerPlay,
   playerPause: PLAYER_ACTIONS.playerPause,
   playerSeek: PLAYER_ACTIONS.playerSeek,
@@ -29,7 +29,7 @@ const AudioPlayerUnconnected = ({
   file,
   player: { file: current, status },
 
-  playerSetFile,
+  playerSetFileAndPlay,
   playerPlay,
   playerPause,
   playerSeek,
@@ -43,8 +43,8 @@ const AudioPlayerUnconnected = ({
       return playerPlay();
     }
 
-    playerSetFile(file);
-  }, [file, current, status, playerPlay, playerPause, playerSetFile]);
+    playerSetFileAndPlay(file);
+  }, [file, current, status, playerPlay, playerPause, playerSetFileAndPlay]);
 
   const onProgress = useCallback(
     ({ detail }: { detail: IPlayerProgress }) => {
diff --git a/src/redux/player/actions.ts b/src/redux/player/actions.ts
index b2232d3d..fc242e2b 100644
--- a/src/redux/player/actions.ts
+++ b/src/redux/player/actions.ts
@@ -6,6 +6,11 @@ export const playerSetFile = (file: IPlayerState['file']) => ({
   file,
 });
 
+export const playerSetFileAndPlay = (file: IPlayerState['file']) => ({
+  type: PLAYER_ACTIONS.SET_FILE_AND_PLAY,
+  file,
+});
+
 export const playerSetStatus = (status: IPlayerState['status']) => ({
   type: PLAYER_ACTIONS.SET_STATUS,
   status,
@@ -19,6 +24,14 @@ export const playerPause = () => ({
   type: PLAYER_ACTIONS.PAUSE,
 });
 
+export const playerStop = () => ({
+  type: PLAYER_ACTIONS.STOP,
+});
+
+export const playerStopped = () => ({
+  type: PLAYER_ACTIONS.STOPPED,
+});
+
 export const playerSeek = (seek: number) => ({
   type: PLAYER_ACTIONS.SEEK,
   seek,
diff --git a/src/redux/player/constants.ts b/src/redux/player/constants.ts
index 83909cfe..ab36ee61 100644
--- a/src/redux/player/constants.ts
+++ b/src/redux/player/constants.ts
@@ -2,11 +2,14 @@ const prefix = 'PLAYER.';
 
 export const PLAYER_ACTIONS = {
   SET_FILE: `${prefix}SET_FILE`,
+  SET_FILE_AND_PLAY: `${prefix}SET_FILE_AND_PLAY`,
   SET_STATUS: `${prefix}SET_STATUS`,
 
   PLAY: `${prefix}PLAY`,
   PAUSE: `${prefix}PAUSE`,
   SEEK: `${prefix}SEEK`,
+  STOP: `${prefix}STOP`,
+  STOPPED: `${prefix}STOPPED`,
 };
 
 export const PLAYER_STATES = {
diff --git a/src/redux/player/sagas.ts b/src/redux/player/sagas.ts
index fd3ba811..28b24354 100644
--- a/src/redux/player/sagas.ts
+++ b/src/redux/player/sagas.ts
@@ -1,10 +1,11 @@
-import { takeLatest } from 'redux-saga/effects';
-import { PLAYER_ACTIONS } from './constants';
-import { playerSetFile, playerSeek } from './actions';
+import { takeLatest, put } from 'redux-saga/effects';
+import { PLAYER_ACTIONS, PLAYER_STATES } from './constants';
+import { playerSetFile, playerSeek, playerSetStatus } from './actions';
 import { Player } from '~/utils/player';
 import { getURL } from '~/utils/dom';
 
-function setFileSaga({ file }: ReturnType<typeof playerSetFile>) {
+function* setFileAndPlaySaga({ file }: ReturnType<typeof playerSetFile>) {
+  yield put(playerSetFile(file));
   Player.set(getURL(file));
   Player.play();
 }
@@ -17,13 +18,24 @@ function pauseSaga() {
   Player.pause();
 }
 
+function stopSaga() {
+  Player.stop();
+}
+
 function seekSaga({ seek }: ReturnType<typeof playerSeek>) {
   Player.jumpToPercent(seek * 100);
 }
 
+function* stoppedSaga() {
+  yield put(playerSetStatus(PLAYER_STATES.UNSET));
+  yield put(playerSetFile(null));
+}
+
 export default function* playerSaga() {
-  yield takeLatest(PLAYER_ACTIONS.SET_FILE, setFileSaga);
+  yield takeLatest(PLAYER_ACTIONS.SET_FILE_AND_PLAY, setFileAndPlaySaga);
   yield takeLatest(PLAYER_ACTIONS.PAUSE, pauseSaga);
   yield takeLatest(PLAYER_ACTIONS.PLAY, playSaga);
   yield takeLatest(PLAYER_ACTIONS.SEEK, seekSaga);
+  yield takeLatest(PLAYER_ACTIONS.STOP, stopSaga);
+  yield takeLatest(PLAYER_ACTIONS.STOPPED, stoppedSaga);
 }
diff --git a/src/utils/player.ts b/src/utils/player.ts
index f467bcf5..23e5d501 100644
--- a/src/utils/player.ts
+++ b/src/utils/player.ts
@@ -1,5 +1,5 @@
 import { store } from '~/redux/store';
-import { playerSetStatus } from '~/redux/player/actions';
+import { playerSetStatus, playerStopped } from '~/redux/player/actions';
 import { PLAYER_STATES } from '~/redux/player/constants';
 
 type PlayerEventType = keyof HTMLMediaElementEventMap;
@@ -64,6 +64,11 @@ export class PlayerClass {
     this.element.pause();
   };
 
+  public stop = () => {
+    this.element.src = '';
+    this.element.dispatchEvent(new CustomEvent('stop'));
+  };
+
   public getDuration = () => {
     return this.element.currentTime;
   };
@@ -83,5 +88,7 @@ const Player = new PlayerClass();
 
 Player.on('play', () => store.dispatch(playerSetStatus(PLAYER_STATES.PLAYING)));
 Player.on('pause', () => store.dispatch(playerSetStatus(PLAYER_STATES.PAUSED)));
+Player.on('stop', () => store.dispatch(playerStopped()));
+Player.on('error', () => store.dispatch(playerStopped()));
 
 export { Player };

From fe90fc16acfe3b22d6aa728ac8038e1f7f2217f6 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 15 Oct 2019 17:50:27 +0700
Subject: [PATCH 06/99] fixed comments appearance

---
 .../containers/CommentWrapper/index.tsx       | 17 ++++++---
 .../containers/CommentWrapper/styles.scss     | 36 +++++++++++++++++++
 src/components/node/Comment/index.tsx         |  2 +-
 src/components/node/CommentForm/index.tsx     |  4 +--
 4 files changed, 51 insertions(+), 8 deletions(-)

diff --git a/src/components/containers/CommentWrapper/index.tsx b/src/components/containers/CommentWrapper/index.tsx
index 4847ae2a..e93b61dc 100644
--- a/src/components/containers/CommentWrapper/index.tsx
+++ b/src/components/containers/CommentWrapper/index.tsx
@@ -3,21 +3,26 @@ import classNames from 'classnames';
 
 import * as styles from './styles.scss';
 import { Card } from '../Card';
+import { IUser } from '~/redux/auth/types';
+import { getURL } from '~/utils/dom';
+import path from 'ramda/es/path';
 
 type IProps = HTMLAttributes<HTMLDivElement> & {
-  photo?: string;
+  // photo?: string;
+  user: IUser;
   is_empty?: boolean;
   is_loading?: boolean;
   is_same?: boolean;
 };
 
 const CommentWrapper: FC<IProps> = ({
-  photo,
+  // photo,
   children,
   is_empty,
   is_loading,
   className,
   is_same,
+  user,
   ...props
 }) => (
   <Card
@@ -26,9 +31,11 @@ const CommentWrapper: FC<IProps> = ({
     {...props}
   >
     <div className={styles.thumb}>
-      {!is_same && photo && (
-        <div className={styles.thumb_image} style={{ backgroundImage: `url("${photo}")` }} />
-      )}
+      <div
+        className={styles.thumb_image}
+        style={{ backgroundImage: `url("${getURL(path(['photo'], user))}")` }}
+      />
+      <div className={styles.thumb_user}>~{path(['username'], user)}</div>
     </div>
 
     <div className={styles.text}>{children}</div>
diff --git a/src/components/containers/CommentWrapper/styles.scss b/src/components/containers/CommentWrapper/styles.scss
index 05a9b126..23988d3f 100644
--- a/src/components/containers/CommentWrapper/styles.scss
+++ b/src/components/containers/CommentWrapper/styles.scss
@@ -14,6 +14,10 @@
     margin: 0 !important;
     border-radius: 0;
   }
+
+  @include tablet {
+    flex-direction: column;
+  }
 }
 
 .text {
@@ -25,6 +29,17 @@
   flex: 0 0 $comment_height;
   border-radius: $panel_radius 0 0 $panel_radius;
   background-color: transparentize(black, 0.9);
+  display: flex;
+  flex-direction: column;
+  box-sizing: border-box;
+
+  @include tablet {
+    flex-direction: row;
+    flex: 0 0 40px;
+    padding: 8px;
+    box-shadow: inset rgba(255, 255, 255, 0.05) 1px 1px, inset rgba(0, 0, 0, 0.1) -1px -1px;
+    border-radius: $panel_radius $panel_radius 0 0;
+  }
 }
 
 .thumb_image {
@@ -32,4 +47,25 @@
   background: transparentize(white, 0.97) no-repeat 50% 50%;
   border-radius: $panel_radius 0 0 $panel_radius;
   background-size: cover;
+  flex: 0 0 $comment_height;
+
+  @include tablet {
+    height: 32px;
+    flex: 0 0 32px;
+    border-radius: $panel_radius;
+  }
+}
+
+.thumb_user {
+  display: none;
+  flex: 1;
+  align-items: center;
+  justify-content: flex-start;
+  box-sizing: border-box;
+  padding: 0 $gap;
+  font: $font_14_medium;
+
+  @include tablet {
+    display: flex;
+  }
 }
diff --git a/src/components/node/Comment/index.tsx b/src/components/node/Comment/index.tsx
index 5fd8b9f6..e3b1f3b0 100644
--- a/src/components/node/Comment/index.tsx
+++ b/src/components/node/Comment/index.tsx
@@ -25,7 +25,7 @@ const Comment: FC<IProps> = ({
       className={className}
       is_empty={is_empty}
       is_loading={is_loading}
-      photo={getURL(comment_group.user.photo)}
+      user={comment_group.user}
       is_same={is_same}
       {...props}
     >
diff --git a/src/components/node/CommentForm/index.tsx b/src/components/node/CommentForm/index.tsx
index a096ea7e..c66dae7c 100644
--- a/src/components/node/CommentForm/index.tsx
+++ b/src/components/node/CommentForm/index.tsx
@@ -42,7 +42,7 @@ type IProps = ReturnType<typeof mapStateToProps> &
 const CommentFormUnconnected: FC<IProps> = ({
   node: { comment_data, is_sending_comment },
   uploads: { statuses, files },
-  user: { photo },
+  user,
   id,
   nodePostComment,
   nodeSetCommentData,
@@ -122,7 +122,7 @@ const CommentFormUnconnected: FC<IProps> = ({
   const comment = comment_data[id];
 
   return (
-    <CommentWrapper photo={getURL(photo)}>
+    <CommentWrapper user={user}>
       <form onSubmit={onSubmit} className={styles.wrap}>
         <div className={styles.input}>
           <Textarea

From 6bb24fc86946ebf46d58c7b635d0895aed9081f5 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 15 Oct 2019 17:58:14 +0700
Subject: [PATCH 07/99] hiding comment author on mobile

---
 src/components/containers/CommentWrapper/styles.scss | 7 +++++++
 src/utils/dom.ts                                     | 4 +++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/components/containers/CommentWrapper/styles.scss b/src/components/containers/CommentWrapper/styles.scss
index 23988d3f..42897f16 100644
--- a/src/components/containers/CommentWrapper/styles.scss
+++ b/src/components/containers/CommentWrapper/styles.scss
@@ -23,6 +23,13 @@
 .text {
   flex: 1;
   min-width: 0;
+
+  @include tablet {
+    :global(.comment-author) {
+      display: none !important;
+      color: red;
+    }
+  }
 }
 
 .thumb {
diff --git a/src/utils/dom.ts b/src/utils/dom.ts
index 62649a81..00ed1461 100644
--- a/src/utils/dom.ts
+++ b/src/utils/dom.ts
@@ -77,7 +77,9 @@ export const formatCommentText = (author, text: string) =>
     .replace(/:\|--\|/gim, '://')
     .split('\n')
     .map((el, index) =>
-      index === 0 ? `${author ? `<p><b>${author}</b>: ` : ''}${el}</p>` : `<p>${el}</p>`
+      index === 0
+        ? `${author ? `<p><b class="comment-author">${author}: </b>` : ''}${el}</p>`
+        : `<p>${el}</p>`
     )
     .join('');
 // .replace(/\/\*(\*(?!\/)|[^*])*\*\//igm, '');

From 3fdf14d68026383a8bcea2dcde79bc6fb5b659d3 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 16 Oct 2019 10:10:27 +0700
Subject: [PATCH 08/99] submit bar

---
 src/components/bars/PlayerBar/styles.scss     | 16 ++---
 src/components/bars/SubmitBar/index.tsx       | 39 +++++++++++
 src/components/bars/SubmitBar/styles.scss     | 65 +++++++++++++++++++
 src/components/main/Header/index.tsx          |  4 --
 src/containers/main/BottomContainer/index.tsx | 13 +++-
 .../main/BottomContainer/styles.scss          |  4 +-
 src/containers/main/MainLayout/styles.scss    |  4 ++
 src/redux/modal/constants.ts                  |  5 +-
 src/redux/modal/reducer.ts                    |  2 +-
 src/styles/variables.scss                     |  3 +-
 10 files changed, 131 insertions(+), 24 deletions(-)
 create mode 100644 src/components/bars/SubmitBar/index.tsx
 create mode 100644 src/components/bars/SubmitBar/styles.scss

diff --git a/src/components/bars/PlayerBar/styles.scss b/src/components/bars/PlayerBar/styles.scss
index 9d9356f7..937b2b83 100644
--- a/src/components/bars/PlayerBar/styles.scss
+++ b/src/components/bars/PlayerBar/styles.scss
@@ -1,14 +1,8 @@
 .place {
   position: relative;
-  height: 64px;
+  height: $bar_height;
   flex: 0 1 500px;
   display: flex;
-
-  &:hover {
-    .seeker {
-      transform: translate(0, -64px);
-    }
-  }
 }
 
 .wrap {
@@ -22,7 +16,7 @@
   top: 0;
   left: 0;
   width: 100%;
-  height: 64px;
+  height: $bar_height;
   flex-direction: column;
   transform: translate(0, 0);
   z-index: 3;
@@ -30,18 +24,18 @@
 }
 
 .status {
-  flex: 0 0 64px;
+  flex: 0 0 $bar_height;
   display: flex;
   flex-direction: row;
   width: 100%;
   position: absolute;
   z-index: 1;
-  height: 64px;
+  height: $bar_height;
 }
 
 .playpause,
 .close {
-  flex: 0 0 48px;
+  flex: 0 0 $bar_height;
   display: flex;
   align-items: center;
   justify-content: center;
diff --git a/src/components/bars/SubmitBar/index.tsx b/src/components/bars/SubmitBar/index.tsx
new file mode 100644
index 00000000..0450787f
--- /dev/null
+++ b/src/components/bars/SubmitBar/index.tsx
@@ -0,0 +1,39 @@
+import React, { FC, useCallback } from 'react';
+import { connect } from 'react-redux';
+import { Icon } from '~/components/input/Icon';
+import * as MODAL_ACTIONS from '~/redux/modal/actions';
+import { DIALOGS } from '~/redux/modal/constants';
+
+import * as styles from './styles.scss';
+
+const mapStateToProps = null;
+const mapDispatchToProps = {
+  showDialog: MODAL_ACTIONS.modalShowDialog,
+};
+
+type IProps = typeof mapDispatchToProps & {};
+
+const SubmitBarUnconnected: FC<IProps> = ({ showDialog }) => {
+  const onOpenImageEditor = useCallback(() => showDialog(DIALOGS.EDITOR_IMAGE), [showDialog]);
+
+  return (
+    <div className={styles.wrap}>
+      <div className={styles.panel}>
+        <div onClick={onOpenImageEditor}>
+          <Icon icon="image" />
+        </div>
+      </div>
+
+      <div className={styles.button}>
+        <Icon icon="plus" />
+      </div>
+    </div>
+  );
+};
+
+const SubmitBar = connect(
+  mapStateToProps,
+  mapDispatchToProps
+)(SubmitBarUnconnected);
+
+export { SubmitBar };
diff --git a/src/components/bars/SubmitBar/styles.scss b/src/components/bars/SubmitBar/styles.scss
new file mode 100644
index 00000000..a2dc219f
--- /dev/null
+++ b/src/components/bars/SubmitBar/styles.scss
@@ -0,0 +1,65 @@
+.wrap {
+  position: absolute;
+  right: -($bar_height + $gap);
+
+  &:hover {
+    .panel {
+      transform: translate(0, 0);
+    }
+  }
+
+  @include tablet {
+    position: relative;
+    right: 0;
+    margin-left: $gap;
+  }
+}
+
+.button {
+  background: $red_gradient;
+  width: $bar_height;
+  height: $bar_height;
+  border-radius: $bar_height / 2;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border-radius: $radius $radius 0 0;
+  cursor: pointer;
+  position: relative;
+  z-index: 2;
+
+  svg {
+    width: 32px;
+    height: 32px;
+  }
+}
+
+.panel {
+  background: lighten($content_bg, 4%);
+  position: absolute;
+  bottom: 0;
+  z-index: 1;
+  padding-bottom: $bar_height;
+  border-radius: $radius $radius 0 0;
+  transform: translate(0, 100%);
+  transition: transform 250ms;
+
+  div {
+    @include outer_shadow;
+    height: $bar_height;
+    width: $bar_height;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    cursor: pointer;
+
+    svg {
+      width: 32px;
+      height: 32px;
+    }
+
+    &:first-child {
+      border-radius: $radius $radius 0 0;
+    }
+  }
+}
diff --git a/src/components/main/Header/index.tsx b/src/components/main/Header/index.tsx
index 22acda4f..7f1476c7 100644
--- a/src/components/main/Header/index.tsx
+++ b/src/components/main/Header/index.tsx
@@ -12,9 +12,7 @@ import * as MODAL_ACTIONS from '~/redux/modal/actions';
 import { DIALOGS } from '~/redux/modal/constants';
 import { pick } from 'ramda';
 import { Icon } from '~/components/input/Icon';
-import { url } from 'inspector';
 import { getURL } from '~/utils/dom';
-import path from 'ramda/es/path';
 
 const mapStateToProps = state => ({
   user: pick(['username', 'is_user', 'photo'])(selectUser(state)),
@@ -29,7 +27,6 @@ type IProps = ReturnType<typeof mapStateToProps> & typeof mapDispatchToProps & {
 
 const HeaderUnconnected: FC<IProps> = ({ user: { username, is_user, photo }, showDialog }) => {
   const onLogin = useCallback(() => showDialog(DIALOGS.LOGIN), [showDialog]);
-  const onOpenEditor = useCallback(() => showDialog(DIALOGS.EDITOR), [showDialog]);
 
   return (
     <div className={style.container}>
@@ -38,7 +35,6 @@ const HeaderUnconnected: FC<IProps> = ({ user: { username, is_user, photo }, sho
       <Filler />
 
       <div className={style.plugs}>
-        <div onClick={onOpenEditor}>editor</div>
         <Link to="/">flow</Link>
       </div>
 
diff --git a/src/containers/main/BottomContainer/index.tsx b/src/containers/main/BottomContainer/index.tsx
index 86eee480..1c551ade 100644
--- a/src/containers/main/BottomContainer/index.tsx
+++ b/src/containers/main/BottomContainer/index.tsx
@@ -1,15 +1,24 @@
 import React, { FC } from 'react';
 import * as styles from './styles.scss';
 import { PlayerBar } from '~/components/bars/PlayerBar';
+import { SubmitBar } from '~/components/bars/SubmitBar';
+import { selectUser } from '~/redux/auth/selectors';
+import pick from 'ramda/es/pick';
+import { connect } from 'react-redux';
 
-interface IProps {}
+const mapStateToProps = state => pick(['is_user'], selectUser(state));
 
-const BottomContainer: FC<IProps> = ({}) => (
+type IProps = ReturnType<typeof mapStateToProps> & {};
+
+const BottomContainerUnconnected: FC<IProps> = ({ is_user }) => (
   <div className={styles.wrap}>
     <div className={styles.content}>
       <PlayerBar />
+
+      {is_user && <SubmitBar />}
     </div>
   </div>
 );
 
+const BottomContainer = connect(mapStateToProps)(BottomContainerUnconnected);
 export { BottomContainer };
diff --git a/src/containers/main/BottomContainer/styles.scss b/src/containers/main/BottomContainer/styles.scss
index f7582455..9e5ae555 100644
--- a/src/containers/main/BottomContainer/styles.scss
+++ b/src/containers/main/BottomContainer/styles.scss
@@ -4,7 +4,7 @@
   bottom: 0;
   pointer-events: none;
   touch-action: none;
-  height: 64px;
+  height: $bar_height;
   display: flex;
   z-index: 10;
   width: 100%;
@@ -18,7 +18,7 @@
 .content {
   position: relative;
   flex: 0 1 $content_width;
-  height: 48px;
+  height: $bar_height;
   display: flex;
   align-items: center;
   justify-content: flex-end;
diff --git a/src/containers/main/MainLayout/styles.scss b/src/containers/main/MainLayout/styles.scss
index d98cb981..4ba29c90 100644
--- a/src/containers/main/MainLayout/styles.scss
+++ b/src/containers/main/MainLayout/styles.scss
@@ -6,6 +6,10 @@
   box-sizing: border-box;
   align-items: center;
   justify-content: flex-start;
+
+  @include tablet {
+    padding: 0;
+  }
 }
 
 .content {
diff --git a/src/redux/modal/constants.ts b/src/redux/modal/constants.ts
index bc98fb46..08ee7acb 100644
--- a/src/redux/modal/constants.ts
+++ b/src/redux/modal/constants.ts
@@ -1,5 +1,4 @@
 import { ValueOf } from '~/redux/types';
-import { HorizontalExample } from '~/containers/examples/HorizontalExample';
 import { EditorDialog } from '~/containers/dialogs/EditorDialog';
 import { LoginDialog } from '~/containers/dialogs/LoginDialog';
 
@@ -10,12 +9,12 @@ export const MODAL_ACTIONS = {
 };
 
 export const DIALOGS = {
-  EDITOR: 'EDITOR',
+  EDITOR_IMAGE: 'EDITOR_IMAGE',
   LOGIN: 'LOGIN',
 };
 
 export const DIALOG_CONTENT = {
-  [DIALOGS.EDITOR]: EditorDialog,
+  [DIALOGS.EDITOR_IMAGE]: EditorDialog,
   [DIALOGS.LOGIN]: LoginDialog,
 };
 
diff --git a/src/redux/modal/reducer.ts b/src/redux/modal/reducer.ts
index 8d2c95ec..be90b850 100644
--- a/src/redux/modal/reducer.ts
+++ b/src/redux/modal/reducer.ts
@@ -10,7 +10,7 @@ export interface IModalState {
 
 const INITIAL_STATE: IModalState = {
   is_shown: false,
-  dialog: DIALOGS.EDITOR,
+  dialog: null,
 };
 
 export default createReducer(INITIAL_STATE, MODAL_HANDLERS);
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index 1d7584f0..cd9a6404 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -6,6 +6,7 @@ $content_width: $cell * 4 + $grid_line * 3;
 $gap: 10px;
 $spc: $gap * 2;
 $comment_height: 72px;
+$bar_height: 64px;
 
 $radius: 8px;
 $cell_radius: $radius;
@@ -67,7 +68,7 @@ $input_shadow_error: inset $red 0 0 0 1px;
 $input_shadow_filled: $input_shadow;
 
 @mixin outer_shadow() {
-  box-shadow: inset transparentize(white, 0.95) 0 1px, transparentize(black, 0.8) 0 3px;
+  box-shadow: inset transparentize(white, 0.95) 1px 1px, transparentize(black, 0.8) -1px -1px;
 }
 
 @mixin inner_shadow() {

From 1f9c6ac8f736153bca68ecc4b2d44c30c5f8bd74 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 16 Oct 2019 11:00:33 +0700
Subject: [PATCH 09/99] refactored upload component

---
 src/components/editors/EditorPanel/index.tsx  |   9 +-
 .../editors/EditorUploadButton/index.tsx      | 132 ++++++++++++++++--
 src/components/editors/ImageEditor/index.tsx  |  20 +--
 src/components/editors/ImageGrid/index.tsx    |  38 +++--
 src/containers/dialogs/EditorDialog/index.tsx |  99 +------------
 5 files changed, 151 insertions(+), 147 deletions(-)

diff --git a/src/components/editors/EditorPanel/index.tsx b/src/components/editors/EditorPanel/index.tsx
index 6932ef1d..475b0bb2 100644
--- a/src/components/editors/EditorPanel/index.tsx
+++ b/src/components/editors/EditorPanel/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC, ChangeEventHandler } from 'react';
+import React, { FC } from 'react';
 import * as styles from './styles.scss';
 import { INode } from '~/redux/types';
 import { EditorUploadButton } from '~/components/editors/EditorUploadButton';
@@ -6,12 +6,13 @@ import { EditorUploadButton } from '~/components/editors/EditorUploadButton';
 interface IProps {
   data: INode;
   setData: (val: INode) => void;
-  onUpload: ChangeEventHandler<HTMLInputElement>;
+  temp: string[];
+  setTemp: (val: string[]) => void;
 }
 
-const EditorPanel: FC<IProps> = ({ onUpload }) => (
+const EditorPanel: FC<IProps> = ({ data, setData, temp, setTemp }) => (
   <div className={styles.panel}>
-    <EditorUploadButton onUpload={onUpload} />
+    <EditorUploadButton data={data} setData={setData} temp={temp} setTemp={setTemp} />
   </div>
 );
 
diff --git a/src/components/editors/EditorUploadButton/index.tsx b/src/components/editors/EditorUploadButton/index.tsx
index 358e938e..e29115d2 100644
--- a/src/components/editors/EditorUploadButton/index.tsx
+++ b/src/components/editors/EditorUploadButton/index.tsx
@@ -1,21 +1,127 @@
-import React, { FC, ChangeEventHandler } from 'react';
+import React, { FC, useCallback, useEffect, useState } from 'react';
 import * as styles from './styles.scss';
 import { Icon } from '~/components/input/Icon';
+import { IFileWithUUID, INode, IFile } from '~/redux/types';
+import uuid from 'uuid4';
+import { UPLOAD_SUBJECTS, UPLOAD_TARGETS, UPLOAD_TYPES } from '~/redux/uploads/constants';
+import * as UPLOAD_ACTIONS from '~/redux/uploads/actions';
+import assocPath from 'ramda/es/assocPath';
+import append from 'ramda/es/append';
+import { selectUploads } from '~/redux/uploads/selectors';
+import { connect } from 'react-redux';
 
-interface IProps {
-  onUpload?: ChangeEventHandler<HTMLInputElement>;
-}
+const mapStateToProps = state => {
+  const { statuses, files } = selectUploads(state);
 
-const EditorUploadButton: FC<IProps> = ({
-  onUpload,
-}) => (
-  <div className={styles.wrap}>
-    <input type="file" onChange={onUpload} accept="image/*" multiple />
+  return { statuses, files };
+};
 
-    <div className={styles.icon}>
-      <Icon size={32} icon="plus" />
+const mapDispatchToProps = {
+  uploadUploadFiles: UPLOAD_ACTIONS.uploadUploadFiles,
+};
+
+type IProps = ReturnType<typeof mapStateToProps> &
+  typeof mapDispatchToProps & {
+    data: INode;
+    setData: (val: INode) => void;
+    temp: string[];
+    setTemp: (val: string[]) => void;
+  };
+
+const EditorUploadButtonUnconnected: FC<IProps> = ({
+  data,
+  setData,
+  temp,
+  setTemp,
+  statuses,
+  files,
+  uploadUploadFiles,
+}) => {
+  const eventPreventer = useCallback(event => event.preventDefault(), []);
+
+  const onUpload = useCallback(
+    (uploads: File[]) => {
+      const items: IFileWithUUID[] = Array.from(uploads).map(
+        (file: File): IFileWithUUID => ({
+          file,
+          temp_id: uuid(),
+          subject: UPLOAD_SUBJECTS.EDITOR,
+          target: UPLOAD_TARGETS.NODES,
+          type: UPLOAD_TYPES.IMAGE,
+        })
+      );
+
+      const temps = items.map(file => file.temp_id);
+
+      setTemp([...temp, ...temps]);
+      uploadUploadFiles(items);
+    },
+    [setTemp, uploadUploadFiles, temp]
+  );
+
+  const onFileAdd = useCallback(
+    (file: IFile) => {
+      setData(assocPath(['files'], append(file, data.files), data));
+    },
+    [data, setData]
+  );
+
+  // const onDrop = useCallback(
+  //   (event: React.DragEvent<HTMLDivElement>) => {
+  //     event.preventDefault();
+
+  //     if (!event.dataTransfer || !event.dataTransfer.files || !event.dataTransfer.files.length)
+  //       return;
+
+  //     onUpload(Array.from(event.dataTransfer.files));
+  //   },
+  //   [onUpload]
+  // );
+
+  useEffect(() => {
+    window.addEventListener('dragover', eventPreventer, false);
+    window.addEventListener('drop', eventPreventer, false);
+
+    return () => {
+      window.removeEventListener('dragover', eventPreventer, false);
+      window.removeEventListener('drop', eventPreventer, false);
+    };
+  }, [eventPreventer]);
+
+  useEffect(() => {
+    Object.entries(statuses).forEach(([id, status]) => {
+      if (temp.includes(id) && !!status.uuid && files[status.uuid]) {
+        onFileAdd(files[status.uuid]);
+        setTemp(temp.filter(el => el !== id));
+      }
+    });
+  }, [statuses, files, temp, onFileAdd]);
+
+  const onInputChange = useCallback(
+    event => {
+      event.preventDefault();
+
+      if (!event.target.files || !event.target.files.length) return;
+
+      onUpload(Array.from(event.target.files));
+    },
+    [onUpload]
+  );
+
+  return (
+    <div className={styles.wrap}>
+      <input type="file" onChange={onInputChange} accept="image/*" multiple />
+
+      <div className={styles.icon}>
+        <Icon size={32} icon="plus" />
+      </div>
     </div>
-  </div>
-);
+  );
+};
+
+const EditorUploadButton = connect(
+  mapStateToProps,
+  mapDispatchToProps
+)(EditorUploadButtonUnconnected);
 
 export { EditorUploadButton };
diff --git a/src/components/editors/ImageEditor/index.tsx b/src/components/editors/ImageEditor/index.tsx
index 5eb13eed..aecf0a90 100644
--- a/src/components/editors/ImageEditor/index.tsx
+++ b/src/components/editors/ImageEditor/index.tsx
@@ -1,10 +1,12 @@
-import React, { FC, ChangeEventHandler, DragEventHandler } from 'react';
+import React, { FC, ChangeEventHandler, DragEventHandler, useCallback } from 'react';
 import { connect } from 'react-redux';
 import { INode } from '~/redux/types';
 import * as UPLOAD_ACTIONS from '~/redux/uploads/actions';
 import { selectUploads } from '~/redux/uploads/selectors';
 import { ImageGrid } from '~/components/editors/ImageGrid';
 import { IUploadStatus } from '~/redux/uploads/reducer';
+import { moveArrItem } from '~/utils/fn';
+import assocPath from 'ramda/es/assocPath';
 
 const mapStateToProps = selectUploads;
 const mapDispatchToProps = {
@@ -21,19 +23,9 @@ type IProps = ReturnType<typeof mapStateToProps> &
     onInputChange: ChangeEventHandler<HTMLInputElement>;
   };
 
-const ImageEditorUnconnected: FC<IProps> = ({
-  data,
-  onFileMove,
-  onInputChange,
-  pending_files,
-}) => (
-  <ImageGrid
-    onFileMove={onFileMove}
-    items={data.files}
-    locked={pending_files}
-    onUpload={onInputChange}
-  />
-);
+const ImageEditorUnconnected: FC<IProps> = ({ data, setData, pending_files }) => {
+  return <ImageGrid data={data} setData={setData} locked={pending_files} />;
+};
 
 const ImageEditor = connect(
   mapStateToProps,
diff --git a/src/components/editors/ImageGrid/index.tsx b/src/components/editors/ImageGrid/index.tsx
index 8b7f5052..7a2ef947 100644
--- a/src/components/editors/ImageGrid/index.tsx
+++ b/src/components/editors/ImageGrid/index.tsx
@@ -1,16 +1,19 @@
-import React, { FC, useCallback, ChangeEventHandler, DragEventHandler } from 'react';
-import { SortableContainer, SortableElement } from 'react-sortable-hoc';
+import React, { FC, useCallback } from 'react';
+import { SortableContainer, SortableElement, SortEvent, SortEnd } from 'react-sortable-hoc';
 import * as styles from './styles.scss';
 import { ImageUpload } from '~/components/upload/ImageUpload';
-import { IFile } from '~/redux/types';
+import { IFile, INode } from '~/redux/types';
 import { IUploadStatus } from '~/redux/uploads/reducer';
 import { getURL } from '~/utils/dom';
+import assocPath from 'ramda/es/assocPath';
+import { moveArrItem } from '~/utils/fn';
 
 interface IProps {
-  items: IFile[];
+  data: INode;
+  setData: (val: INode) => void;
   locked: IUploadStatus[];
-  onFileMove: (o: number, n: number) => void;
-  onUpload?: ChangeEventHandler<HTMLInputElement>;
+  // items: IFile[];
+  // onFileMove: (o: number, n: number) => void;
 }
 
 const SortableItem = SortableElement(({ children }) => (
@@ -18,14 +21,7 @@ const SortableItem = SortableElement(({ children }) => (
 ));
 
 const SortableList = SortableContainer(
-  ({
-    items,
-    locked,
-  }: {
-    items: IFile[];
-    locked: IUploadStatus[];
-    onUpload: ChangeEventHandler<HTMLInputElement>;
-  }) => (
+  ({ items, locked }: { items: IFile[]; locked: IUploadStatus[] }) => (
     <div className={styles.grid}>
       {items.map((file, index) => (
         <SortableItem key={file.id} index={index} collection={0}>
@@ -42,18 +38,20 @@ const SortableList = SortableContainer(
   )
 );
 
-const ImageGrid: FC<IProps> = ({ items, locked, onFileMove, onUpload }) => {
-  const onMove = useCallback(({ oldIndex, newIndex }) => onFileMove(oldIndex, newIndex), [
-    onFileMove,
-  ]);
+const ImageGrid: FC<IProps> = ({ data, setData, locked }) => {
+  const onMove = useCallback(
+    ({ oldIndex, newIndex }: SortEnd) => {
+      setData(assocPath(['files'], moveArrItem(oldIndex, newIndex, data.files), data));
+    },
+    [data, setData]
+  );
 
   return (
     <SortableList
       onSortEnd={onMove}
       axis="xy"
-      items={items}
+      items={data.files}
       locked={locked}
-      onUpload={onUpload}
       pressDelay={window.innerWidth < 768 ? 200 : 0}
       helperClass={styles.helper}
     />
diff --git a/src/containers/dialogs/EditorDialog/index.tsx b/src/containers/dialogs/EditorDialog/index.tsx
index c9332066..8b0a8a53 100644
--- a/src/containers/dialogs/EditorDialog/index.tsx
+++ b/src/containers/dialogs/EditorDialog/index.tsx
@@ -14,12 +14,8 @@ import * as styles from './styles.scss';
 import { selectNode } from '~/redux/node/selectors';
 import { ImageEditor } from '~/components/editors/ImageEditor';
 import { EditorPanel } from '~/components/editors/EditorPanel';
-import { moveArrItem } from '~/utils/fn';
-import { IFile, IFileWithUUID } from '~/redux/types';
-import * as UPLOAD_ACTIONS from '~/redux/uploads/actions';
 import * as NODE_ACTIONS from '~/redux/node/actions';
 import { selectUploads } from '~/redux/uploads/selectors';
-import { UPLOAD_TARGETS, UPLOAD_TYPES, UPLOAD_SUBJECTS } from '~/redux/uploads/constants';
 
 const mapStateToProps = state => {
   const { editor } = selectNode(state);
@@ -29,101 +25,15 @@ const mapStateToProps = state => {
 };
 
 const mapDispatchToProps = {
-  uploadUploadFiles: UPLOAD_ACTIONS.uploadUploadFiles,
   nodeSave: NODE_ACTIONS.nodeSave,
 };
 
 type IProps = IDialogProps & ReturnType<typeof mapStateToProps> & typeof mapDispatchToProps & {};
 
-const EditorDialogUnconnected: FC<IProps> = ({
-  onRequestClose,
-  editor,
-  files,
-  statuses,
-
-  uploadUploadFiles,
-  nodeSave,
-}) => {
+const EditorDialogUnconnected: FC<IProps> = ({ onRequestClose, editor, statuses, nodeSave }) => {
   const [data, setData] = useState(editor);
-  const eventPreventer = useCallback(event => event.preventDefault(), []);
   const [temp, setTemp] = useState([]);
 
-  const onUpload = useCallback(
-    (uploads: File[]) => {
-      const items: IFileWithUUID[] = Array.from(uploads).map(
-        (file: File): IFileWithUUID => ({
-          file,
-          temp_id: uuid(),
-          subject: UPLOAD_SUBJECTS.EDITOR,
-          target: UPLOAD_TARGETS.NODES,
-          type: UPLOAD_TYPES.IMAGE,
-        })
-      );
-
-      const temps = items.map(file => file.temp_id);
-
-      setTemp([...temp, ...temps]);
-      uploadUploadFiles(items);
-    },
-    [setTemp, uploadUploadFiles, temp]
-  );
-
-  const onFileMove = useCallback(
-    (old_index: number, new_index: number) => {
-      setData(assocPath(['files'], moveArrItem(old_index, new_index, data.files), data));
-    },
-    [data, setData]
-  );
-
-  const onFileAdd = useCallback(
-    (file: IFile) => {
-      setData(assocPath(['files'], append(file, data.files), data));
-    },
-    [data, setData]
-  );
-
-  const onDrop = useCallback(
-    (event: React.DragEvent<HTMLDivElement>) => {
-      event.preventDefault();
-
-      if (!event.dataTransfer || !event.dataTransfer.files || !event.dataTransfer.files.length)
-        return;
-
-      onUpload(Array.from(event.dataTransfer.files));
-    },
-    [onUpload]
-  );
-
-  const onInputChange = useCallback(
-    event => {
-      event.preventDefault();
-
-      if (!event.target.files || !event.target.files.length) return;
-
-      onUpload(Array.from(event.target.files));
-    },
-    [onUpload]
-  );
-
-  useEffect(() => {
-    window.addEventListener('dragover', eventPreventer, false);
-    window.addEventListener('drop', eventPreventer, false);
-
-    return () => {
-      window.removeEventListener('dragover', eventPreventer, false);
-      window.removeEventListener('drop', eventPreventer, false);
-    };
-  }, [eventPreventer]);
-
-  useEffect(() => {
-    Object.entries(statuses).forEach(([id, status]) => {
-      if (temp.includes(id) && !!status.uuid && files[status.uuid]) {
-        onFileAdd(files[status.uuid]);
-        setTemp(temp.filter(el => el !== id));
-      }
-    });
-  }, [statuses, files, temp, onFileAdd]);
-
   const setTitle = useCallback(
     title => {
       setData({ ...data, title });
@@ -141,7 +51,7 @@ const EditorDialogUnconnected: FC<IProps> = ({
 
   const buttons = (
     <Padder style={{ position: 'relative' }}>
-      <EditorPanel data={data} setData={setData} onUpload={onInputChange} />
+      <EditorPanel data={data} setData={setData} temp={temp} setTemp={setTemp} />
 
       <Group horizontal>
         <InputText title="Название" value={data.title} handler={setTitle} autoFocus />
@@ -156,14 +66,11 @@ const EditorDialogUnconnected: FC<IProps> = ({
   return (
     <form onSubmit={onSubmit} className={styles.form}>
       <ScrollDialog buttons={buttons} width={860} onClose={onRequestClose}>
-        <div className={styles.editor} onDrop={onDrop}>
+        <div className={styles.editor}>
           <ImageEditor
             data={data}
             pending_files={temp.filter(id => !!statuses[id]).map(id => statuses[id])}
             setData={setData}
-            onUpload={onInputChange}
-            onFileMove={onFileMove}
-            onInputChange={onInputChange}
           />
         </div>
       </ScrollDialog>

From bd5122f3655026809d7e90ad348a0ba7430920a5 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 16 Oct 2019 11:11:35 +0700
Subject: [PATCH 10/99] editor refactoring

---
 src/components/containers/Scroll/index.tsx    |  9 ++---
 src/components/editors/ImageEditor/index.tsx  | 17 +++++-----
 src/components/editors/ImageGrid/index.tsx    |  2 --
 src/components/input/InputText/index.tsx      | 34 ++++++++-----------
 src/containers/dialogs/EditorDialog/index.tsx |  6 +---
 5 files changed, 28 insertions(+), 40 deletions(-)

diff --git a/src/components/containers/Scroll/index.tsx b/src/components/containers/Scroll/index.tsx
index 36be053d..07ea0dfd 100644
--- a/src/components/containers/Scroll/index.tsx
+++ b/src/components/containers/Scroll/index.tsx
@@ -14,12 +14,7 @@ interface IProps {
   onScrollStop?: MouseEventHandler;
 }
 
-export const Scroll = ({
-  children,
-  className = '',
-  onRef = null,
-  ...props
-}: IProps) => {
+const Scroll = ({ children, className = '', onRef = null, ...props }: IProps) => {
   const [ref, setRef] = useState(null);
 
   useEffect(() => {
@@ -43,3 +38,5 @@ export const Scroll = ({
     </Scrollbars>
   );
 };
+
+export { Scroll };
diff --git a/src/components/editors/ImageEditor/index.tsx b/src/components/editors/ImageEditor/index.tsx
index aecf0a90..77762732 100644
--- a/src/components/editors/ImageEditor/index.tsx
+++ b/src/components/editors/ImageEditor/index.tsx
@@ -1,12 +1,10 @@
-import React, { FC, ChangeEventHandler, DragEventHandler, useCallback } from 'react';
+import React, { FC, ChangeEventHandler, DragEventHandler, useCallback, useMemo } from 'react';
 import { connect } from 'react-redux';
 import { INode } from '~/redux/types';
 import * as UPLOAD_ACTIONS from '~/redux/uploads/actions';
 import { selectUploads } from '~/redux/uploads/selectors';
 import { ImageGrid } from '~/components/editors/ImageGrid';
 import { IUploadStatus } from '~/redux/uploads/reducer';
-import { moveArrItem } from '~/utils/fn';
-import assocPath from 'ramda/es/assocPath';
 
 const mapStateToProps = selectUploads;
 const mapDispatchToProps = {
@@ -16,14 +14,17 @@ const mapDispatchToProps = {
 type IProps = ReturnType<typeof mapStateToProps> &
   typeof mapDispatchToProps & {
     data: INode;
-    pending_files: IUploadStatus[];
-
     setData: (val: INode) => void;
-    onFileMove: (from: number, to: number) => void;
-    onInputChange: ChangeEventHandler<HTMLInputElement>;
+    temp: string[];
+    setTemp: (val: string[]) => void;
   };
 
-const ImageEditorUnconnected: FC<IProps> = ({ data, setData, pending_files }) => {
+const ImageEditorUnconnected: FC<IProps> = ({ data, setData, temp, statuses }) => {
+  const pending_files = useMemo(() => temp.filter(id => !!statuses[id]).map(id => statuses[id]), [
+    temp,
+    statuses,
+  ]);
+
   return <ImageGrid data={data} setData={setData} locked={pending_files} />;
 };
 
diff --git a/src/components/editors/ImageGrid/index.tsx b/src/components/editors/ImageGrid/index.tsx
index 7a2ef947..beb7f2b9 100644
--- a/src/components/editors/ImageGrid/index.tsx
+++ b/src/components/editors/ImageGrid/index.tsx
@@ -12,8 +12,6 @@ interface IProps {
   data: INode;
   setData: (val: INode) => void;
   locked: IUploadStatus[];
-  // items: IFile[];
-  // onFileMove: (o: number, n: number) => void;
 }
 
 const SortableItem = SortableElement(({ children }) => (
diff --git a/src/components/input/InputText/index.tsx b/src/components/input/InputText/index.tsx
index 434df389..524d0182 100644
--- a/src/components/input/InputText/index.tsx
+++ b/src/components/input/InputText/index.tsx
@@ -1,9 +1,4 @@
-import React, {
-  FC,
-  ChangeEvent,
-  useCallback,
-  useState, useEffect,
-} from 'react';
+import React, { FC, ChangeEvent, useCallback, useState, useEffect } from 'react';
 import classNames from 'classnames';
 import * as styles from '~/styles/inputs.scss';
 import { Icon } from '~/components/input/Icon';
@@ -28,7 +23,7 @@ const InputText: FC<IInputTextProps> = ({
 
   const onInput = useCallback(
     ({ target }: ChangeEvent<HTMLInputElement>) => handler(target.value),
-    [handler],
+    [handler]
   );
 
   const onFocus = useCallback(() => setFocused(true), []);
@@ -39,18 +34,15 @@ const InputText: FC<IInputTextProps> = ({
   }, [inner_ref, onRef]);
 
   return (
-    <div className={classNames(
-      styles.input_text_wrapper,
-      wrapperClassName,
-      {
+    <div
+      className={classNames(styles.input_text_wrapper, wrapperClassName, {
         [styles.required]: required,
         [styles.focused]: focused,
         [styles.has_status]: !!status || !!error,
         [styles.has_value]: !!value,
         [styles.has_error]: !!error,
         [styles.has_loader]: is_loading,
-      },
-    )}
+      })}
     >
       <div className={styles.input}>
         <input
@@ -79,12 +71,16 @@ const InputText: FC<IInputTextProps> = ({
           <LoaderCircle size={20} />
         </div>
       </div>
-      {
-        title && <div className={styles.title}><span>{title}</span></div>
-      }
-      {
-        error && <div className={styles.error}><span>{error}</span></div>
-      }
+      {title && (
+        <div className={styles.title}>
+          <span>{title}</span>
+        </div>
+      )}
+      {error && (
+        <div className={styles.error}>
+          <span>{error}</span>
+        </div>
+      )}
     </div>
   );
 };
diff --git a/src/containers/dialogs/EditorDialog/index.tsx b/src/containers/dialogs/EditorDialog/index.tsx
index 8b0a8a53..965702c3 100644
--- a/src/containers/dialogs/EditorDialog/index.tsx
+++ b/src/containers/dialogs/EditorDialog/index.tsx
@@ -67,11 +67,7 @@ const EditorDialogUnconnected: FC<IProps> = ({ onRequestClose, editor, statuses,
     <form onSubmit={onSubmit} className={styles.form}>
       <ScrollDialog buttons={buttons} width={860} onClose={onRequestClose}>
         <div className={styles.editor}>
-          <ImageEditor
-            data={data}
-            pending_files={temp.filter(id => !!statuses[id]).map(id => statuses[id])}
-            setData={setData}
-          />
+          <ImageEditor data={data} setData={setData} temp={temp} setTemp={setTemp} />
         </div>
       </ScrollDialog>
     </form>

From 09b68c19d2f3196a7b494b32f3762afbc0014c31 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 16 Oct 2019 11:35:25 +0700
Subject: [PATCH 11/99] fixed appearance for editor

---
 package-lock.json                            | 56 +++++++++++---------
 package.json                                 | 10 ++--
 src/components/bars/SubmitBar/styles.scss    |  2 +-
 src/components/editors/ImageEditor/index.tsx |  3 +-
 src/components/input/Button/index.tsx        |  4 +-
 5 files changed, 42 insertions(+), 33 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 4cffdd1e..480e97d9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,9 +5,9 @@
   "requires": true,
   "dependencies": {
     "@babel/cli": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.6.3.tgz",
-      "integrity": "sha512-kWKOEeuylpa781yCeA5//eEx1u3WtLZqbi2VWXLKmb3QDPb5T2f7Yk311MK7bvvjR70dluAeiu4VXXsG1WwJsw==",
+      "version": "7.6.4",
+      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.6.4.tgz",
+      "integrity": "sha512-tqrDyvPryBM6xjIyKKUwr3s8CzmmYidwgdswd7Uc/Cv0ogZcuS1TYQTLx/eWKP3UbJ6JxZAiYlBZabXm/rtRsQ==",
       "dev": true,
       "requires": {
         "chokidar": "2.1.8",
@@ -19,7 +19,15 @@
         "mkdirp": "0.5.1",
         "output-file-sync": "2.0.1",
         "slash": "2.0.0",
-        "source-map": "0.6.1"
+        "source-map": "0.5.7"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        }
       }
     },
     "@babel/code-frame": {
@@ -996,11 +1004,11 @@
       "dev": true
     },
     "@types/ramda": {
-      "version": "0.26.29",
-      "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.26.29.tgz",
-      "integrity": "sha512-j0rrDm19024J0X5wHl8ZK0mQas9TVvL7KQPocDEZU0nq/OUtmh0mBBBrfSIKGJZF1VLhtW6MGw+YRojUSY+5kg==",
+      "version": "0.26.33",
+      "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.26.33.tgz",
+      "integrity": "sha512-sUCQmKfAWmlbb6PpFqvndbGgTf0bCcmHLJqMYw8ErVS0UoZTTiz952aFedJhV+JERiVH7poh33358c7p0AAN8A==",
       "requires": {
-        "ts-toolbelt": "4.8.8"
+        "ts-toolbelt": "4.8.16"
       }
     },
     "@types/react": {
@@ -1013,9 +1021,9 @@
       }
     },
     "@types/react-router": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.1.tgz",
-      "integrity": "sha512-S7SlFAPb7ZKr6HHMW0kLHGcz8pyJSL0UdM+JtlWthDqKUWwr7E6oPXuHgkofDI8dKCm16slg8K8VCf5pZJquaA==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.2.tgz",
+      "integrity": "sha512-euC3SiwDg3NcjFdNmFL8uVuAFTpZJm0WMFUw+4eXMUnxa7M9RGFEG0szt0z+/Zgk4G2k9JBFhaEnY64RBiFmuw==",
       "dev": true,
       "requires": {
         "@types/history": "4.7.3",
@@ -5169,9 +5177,9 @@
       }
     },
     "dotenv": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz",
-      "integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA=="
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
+      "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
     },
     "dotenv-defaults": {
       "version": "1.0.2",
@@ -12945,9 +12953,9 @@
       }
     },
     "terser": {
-      "version": "4.3.8",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.8.tgz",
-      "integrity": "sha512-otmIRlRVmLChAWsnSFNO0Bfk6YySuBp6G9qrHiJwlLDd4mxe2ta4sjI7TzIR+W1nBMjilzrMcPOz9pSusgx3hQ==",
+      "version": "4.3.9",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.9.tgz",
+      "integrity": "sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA==",
       "dev": true,
       "requires": {
         "commander": "2.20.1",
@@ -12967,7 +12975,7 @@
         "schema-utils": "1.0.0",
         "serialize-javascript": "1.9.1",
         "source-map": "0.6.1",
-        "terser": "4.3.8",
+        "terser": "4.3.9",
         "webpack-sources": "1.4.3",
         "worker-farm": "1.7.0"
       },
@@ -13355,9 +13363,9 @@
       }
     },
     "ts-toolbelt": {
-      "version": "4.8.8",
-      "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.8.tgz",
-      "integrity": "sha512-5QLdemct/ssqyVgmEIK1KKY7Y39fX05kanAdnp+O529Jk7dFct+4kgasvMGXagBIvLCUviksDCZs2Lo2/fp6BQ=="
+      "version": "4.8.16",
+      "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-4.8.16.tgz",
+      "integrity": "sha512-4xLaT2ENZ39jD+zVYgsuETHfFFnXk8unVOesBcmp0gLd57CHKIiLLtavzT+Ij1U5Z8041m1yfISDMBFG5y1zJw=="
     },
     "tsconfig-paths": {
       "version": "3.9.0",
@@ -13987,9 +13995,9 @@
       }
     },
     "webpack": {
-      "version": "4.41.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.0.tgz",
-      "integrity": "sha512-yNV98U4r7wX1VJAj5kyMsu36T8RPPQntcb5fJLOsMz/pt/WrKC0Vp1bAlqPLkA1LegSwQwf6P+kAbyhRKVQ72g==",
+      "version": "4.41.2",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.2.tgz",
+      "integrity": "sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==",
       "dev": true,
       "requires": {
         "@webassemblyjs/ast": "1.8.5",
diff --git a/package.json b/package.json
index 76600f7f..a055da27 100644
--- a/package.json
+++ b/package.json
@@ -14,10 +14,10 @@
     "url": "https://github.com/muerwre/my-empty-react-project"
   },
   "devDependencies": {
-    "@babel/cli": "^7.6.3",
+    "@babel/cli": "^7.6.4",
     "@babel/preset-env": "^7.6.3",
     "@babel/types": "7.5.5",
-    "@types/react-router": "^5.0.3",
+    "@types/react-router": "^5.1.2",
     "autoresponsive-react": "^1.1.31",
     "awesome-typescript-loader": "^5.2.1",
     "babel-core": "^6.26.3",
@@ -42,7 +42,7 @@
     "ts-node": "^8.4.1",
     "typescript": "^3.6.4",
     "uglifyjs-webpack-plugin": "^1.3.0",
-    "webpack": "^4.41.0",
+    "webpack": "^4.41.2",
     "webpack-cli": "^3.3.9",
     "webpack-dev-server": "^3.8.2"
   },
@@ -51,7 +51,7 @@
     "@hot-loader/react-dom": "^16.10.2",
     "@types/classnames": "^2.2.7",
     "@types/node": "^11.13.22",
-    "@types/ramda": "^0.26.29",
+    "@types/ramda": "^0.26.33",
     "@types/react": "16.8.23",
     "@typescript-eslint/eslint-plugin": "^1.13.0",
     "@typescript-eslint/parser": "^1.13.0",
@@ -61,7 +61,7 @@
     "clean-webpack-plugin": "^0.1.9",
     "connected-react-router": "^6.3.2",
     "date-fns": "^2.4.1",
-    "dotenv": "^8.1.0",
+    "dotenv": "^8.2.0",
     "dotenv-webpack": "^1.7.0",
     "eslint": "^5.16.0",
     "eslint-config-airbnb": "^17.1.1",
diff --git a/src/components/bars/SubmitBar/styles.scss b/src/components/bars/SubmitBar/styles.scss
index a2dc219f..83b9ce01 100644
--- a/src/components/bars/SubmitBar/styles.scss
+++ b/src/components/bars/SubmitBar/styles.scss
@@ -8,7 +8,7 @@
     }
   }
 
-  @include tablet {
+  @media (max-width: $content_width + ($bar_height + $gap) * 2) {
     position: relative;
     right: 0;
     margin-left: $gap;
diff --git a/src/components/editors/ImageEditor/index.tsx b/src/components/editors/ImageEditor/index.tsx
index 77762732..45ff0bd5 100644
--- a/src/components/editors/ImageEditor/index.tsx
+++ b/src/components/editors/ImageEditor/index.tsx
@@ -1,10 +1,9 @@
-import React, { FC, ChangeEventHandler, DragEventHandler, useCallback, useMemo } from 'react';
+import React, { FC, useMemo } from 'react';
 import { connect } from 'react-redux';
 import { INode } from '~/redux/types';
 import * as UPLOAD_ACTIONS from '~/redux/uploads/actions';
 import { selectUploads } from '~/redux/uploads/selectors';
 import { ImageGrid } from '~/components/editors/ImageGrid';
-import { IUploadStatus } from '~/redux/uploads/reducer';
 
 const mapStateToProps = selectUploads;
 const mapDispatchToProps = {
diff --git a/src/components/input/Button/index.tsx b/src/components/input/Button/index.tsx
index 85deb8f5..af33a097 100644
--- a/src/components/input/Button/index.tsx
+++ b/src/components/input/Button/index.tsx
@@ -22,7 +22,7 @@ type IButtonProps = DetailedHTMLProps<
   iconOnly?: boolean;
 };
 
-export const Button: FC<IButtonProps> = ({
+const Button: FC<IButtonProps> = ({
   className = '',
   size = 'normal',
   iconLeft,
@@ -63,3 +63,5 @@ export const Button: FC<IButtonProps> = ({
       iconRight && <Icon icon={iconRight} size={20} key={2} />,
     ]
   );
+
+export { Button };

From 38a4c8e6a6c7269655925030a6026a9c03dc5c49 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 16 Oct 2019 11:54:41 +0700
Subject: [PATCH 12/99] editor displaying errors

---
 src/constants/errors.ts                       |  5 +++
 src/containers/dialogs/EditorDialog/index.tsx | 33 ++++++++++++++-----
 src/redux/modal/reducer.ts                    |  4 +--
 src/redux/node/api.ts                         |  1 +
 src/redux/node/handlers.ts                    |  2 +-
 src/redux/node/selectors.ts                   |  6 ++++
 6 files changed, 40 insertions(+), 11 deletions(-)

diff --git a/src/constants/errors.ts b/src/constants/errors.ts
index f1e1cf59..15fffbf7 100644
--- a/src/constants/errors.ts
+++ b/src/constants/errors.ts
@@ -3,8 +3,13 @@ export const ERRORS = {
   TOO_SHIRT: 'Is_Too_Shirt',
   EMPTY_RESPONSE: 'Empty_Response',
   NO_COMMENTS: 'No_Comments',
+  FILES_REQUIRED: 'Files_Required',
 };
 
 export const ERROR_LITERAL = {
+  [ERRORS.NOT_AN_EMAIL]: 'Введите правильный e-mail',
+  [ERRORS.TOO_SHIRT]: 'Слишком короткий',
   [ERRORS.NO_COMMENTS]: 'Комментариев пока нет',
+  [ERRORS.EMPTY_RESPONSE]: 'Пустой ответ сервера',
+  [ERRORS.FILES_REQUIRED]: 'Добавьте файлы',
 };
diff --git a/src/containers/dialogs/EditorDialog/index.tsx b/src/containers/dialogs/EditorDialog/index.tsx
index 965702c3..c018aaaa 100644
--- a/src/containers/dialogs/EditorDialog/index.tsx
+++ b/src/containers/dialogs/EditorDialog/index.tsx
@@ -1,8 +1,5 @@
-import React, { FC, useState, useCallback, useEffect, FormEvent } from 'react';
+import React, { FC, useState, useCallback, FormEvent, useEffect } from 'react';
 import { connect } from 'react-redux';
-import assocPath from 'ramda/es/assocPath';
-import append from 'ramda/es/append';
-import uuid from 'uuid4';
 import { ScrollDialog } from '../ScrollDialog';
 import { IDialogProps } from '~/redux/modal/constants';
 import { useCloseOnEscape } from '~/utils/hooks';
@@ -16,21 +13,29 @@ import { ImageEditor } from '~/components/editors/ImageEditor';
 import { EditorPanel } from '~/components/editors/EditorPanel';
 import * as NODE_ACTIONS from '~/redux/node/actions';
 import { selectUploads } from '~/redux/uploads/selectors';
+import { ERROR_LITERAL } from '~/constants/errors';
 
 const mapStateToProps = state => {
-  const { editor } = selectNode(state);
+  const { editor, errors } = selectNode(state);
   const { statuses, files } = selectUploads(state);
 
-  return { editor, statuses, files };
+  return { editor, statuses, files, errors };
 };
 
 const mapDispatchToProps = {
   nodeSave: NODE_ACTIONS.nodeSave,
+  nodeSetSaveErrors: NODE_ACTIONS.nodeSetSaveErrors,
 };
 
 type IProps = IDialogProps & ReturnType<typeof mapStateToProps> & typeof mapDispatchToProps & {};
 
-const EditorDialogUnconnected: FC<IProps> = ({ onRequestClose, editor, statuses, nodeSave }) => {
+const EditorDialogUnconnected: FC<IProps> = ({
+  onRequestClose,
+  editor,
+  errors,
+  nodeSave,
+  nodeSetSaveErrors,
+}) => {
   const [data, setData] = useState(editor);
   const [temp, setTemp] = useState([]);
 
@@ -49,6 +54,11 @@ const EditorDialogUnconnected: FC<IProps> = ({ onRequestClose, editor, statuses,
     [data, nodeSave]
   );
 
+  useEffect(() => {
+    if (!Object.keys(errors).length) return;
+    nodeSetSaveErrors({});
+  }, [data]);
+
   const buttons = (
     <Padder style={{ position: 'relative' }}>
       <EditorPanel data={data} setData={setData} temp={temp} setTemp={setTemp} />
@@ -63,9 +73,16 @@ const EditorDialogUnconnected: FC<IProps> = ({ onRequestClose, editor, statuses,
 
   useCloseOnEscape(onRequestClose);
 
+  const error = errors && Object.values(errors)[0];
+
   return (
     <form onSubmit={onSubmit} className={styles.form}>
-      <ScrollDialog buttons={buttons} width={860} onClose={onRequestClose}>
+      <ScrollDialog
+        buttons={buttons}
+        width={860}
+        error={error && ERROR_LITERAL[error]}
+        onClose={onRequestClose}
+      >
         <div className={styles.editor}>
           <ImageEditor data={data} setData={setData} temp={temp} setTemp={setTemp} />
         </div>
diff --git a/src/redux/modal/reducer.ts b/src/redux/modal/reducer.ts
index be90b850..764ce9c6 100644
--- a/src/redux/modal/reducer.ts
+++ b/src/redux/modal/reducer.ts
@@ -9,8 +9,8 @@ export interface IModalState {
 }
 
 const INITIAL_STATE: IModalState = {
-  is_shown: false,
-  dialog: null,
+  is_shown: true,
+  dialog: DIALOGS.EDITOR_IMAGE,
 };
 
 export default createReducer(INITIAL_STATE, MODAL_HANDLERS);
diff --git a/src/redux/node/api.ts b/src/redux/node/api.ts
index 2e0d37fe..b7c2e7cd 100644
--- a/src/redux/node/api.ts
+++ b/src/redux/node/api.ts
@@ -14,6 +14,7 @@ export const postNode = ({
     .post(API.NODE.SAVE, { node }, configWithToken(access))
     .then(resultMiddleware)
     .catch(errorMiddleware);
+// .then(console.log);
 
 export const getNodes = ({
   skip = 0,
diff --git a/src/redux/node/handlers.ts b/src/redux/node/handlers.ts
index 813d53c7..4c6341df 100644
--- a/src/redux/node/handlers.ts
+++ b/src/redux/node/handlers.ts
@@ -43,7 +43,7 @@ const setTags = (state: INodeState, { tags }: ReturnType<typeof nodeSetTags>) =>
   assocPath(['current', 'tags'], tags, state);
 
 export const NODE_HANDLERS = {
-  [NODE_ACTIONS.SAVE]: setSaveErrors,
+  [NODE_ACTIONS.SET_SAVE_ERRORS]: setSaveErrors,
   [NODE_ACTIONS.SET_LOADING]: setLoading,
   [NODE_ACTIONS.SET_LOADING_COMMENTS]: setLoadingComments,
   [NODE_ACTIONS.SET_CURRENT]: setCurrent,
diff --git a/src/redux/node/selectors.ts b/src/redux/node/selectors.ts
index f5b591c0..fb33213c 100644
--- a/src/redux/node/selectors.ts
+++ b/src/redux/node/selectors.ts
@@ -1,4 +1,10 @@
 import { IState } from '../store';
 import { INodeState } from './reducer';
+import { IResultWithStatus, INode } from '../types';
 
 export const selectNode = (state: IState): INodeState => state.node;
+
+// export const catchNodeErrors = (data: IResultWithStatus<INode>): IResultWithStatus<INode> => ({
+// data,
+// errors: data.errors,
+// })

From 770f3cb2aadfd50a3dee014f09652c7fcfadd8ac Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 16 Oct 2019 12:46:52 +0700
Subject: [PATCH 13/99] removing uploaded files

---
 .../editors/EditorUploadButton/index.tsx      | 10 ++++-
 src/components/editors/ImageGrid/index.tsx    | 35 ++++++++++++++---
 src/components/upload/ImageUpload/index.tsx   | 38 +++++++++++++------
 src/components/upload/ImageUpload/styles.scss | 26 +++++++++++++
 src/containers/dialogs/EditorDialog/index.tsx | 26 ++++++++++---
 src/containers/dialogs/Modal/index.tsx        |  8 ++--
 .../editors/EditorDialogImage/index.tsx       | 10 +++++
 src/redux/modal/constants.ts                  |  4 +-
 src/redux/node/constants.ts                   |  7 ++++
 src/redux/types.ts                            |  2 +-
 src/redux/uploads/reducer.ts                  |  2 +-
 11 files changed, 137 insertions(+), 31 deletions(-)
 create mode 100644 src/containers/editors/EditorDialogImage/index.tsx

diff --git a/src/components/editors/EditorUploadButton/index.tsx b/src/components/editors/EditorUploadButton/index.tsx
index e29115d2..eb183634 100644
--- a/src/components/editors/EditorUploadButton/index.tsx
+++ b/src/components/editors/EditorUploadButton/index.tsx
@@ -9,6 +9,7 @@ import assocPath from 'ramda/es/assocPath';
 import append from 'ramda/es/append';
 import { selectUploads } from '~/redux/uploads/selectors';
 import { connect } from 'react-redux';
+import { MAX_NODE_FILES } from '~/redux/node/constants';
 
 const mapStateToProps = state => {
   const { statuses, files } = selectUploads(state);
@@ -41,6 +42,11 @@ const EditorUploadButtonUnconnected: FC<IProps> = ({
 
   const onUpload = useCallback(
     (uploads: File[]) => {
+      const current = temp.length + data.files.length;
+      const limit = MAX_NODE_FILES - current;
+
+      if (current >= MAX_NODE_FILES) return;
+
       const items: IFileWithUUID[] = Array.from(uploads).map(
         (file: File): IFileWithUUID => ({
           file,
@@ -51,12 +57,12 @@ const EditorUploadButtonUnconnected: FC<IProps> = ({
         })
       );
 
-      const temps = items.map(file => file.temp_id);
+      const temps = items.map(file => file.temp_id).slice(0, limit);
 
       setTemp([...temp, ...temps]);
       uploadUploadFiles(items);
     },
-    [setTemp, uploadUploadFiles, temp]
+    [setTemp, uploadUploadFiles, temp, data]
   );
 
   const onFileAdd = useCallback(
diff --git a/src/components/editors/ImageGrid/index.tsx b/src/components/editors/ImageGrid/index.tsx
index beb7f2b9..2310acd3 100644
--- a/src/components/editors/ImageGrid/index.tsx
+++ b/src/components/editors/ImageGrid/index.tsx
@@ -7,6 +7,9 @@ import { IUploadStatus } from '~/redux/uploads/reducer';
 import { getURL } from '~/utils/dom';
 import assocPath from 'ramda/es/assocPath';
 import { moveArrItem } from '~/utils/fn';
+import omit from 'ramda/es/omit';
+import remove from 'ramda/es/remove';
+import reject from 'ramda/es/reject';
 
 interface IProps {
   data: INode;
@@ -19,13 +22,23 @@ const SortableItem = SortableElement(({ children }) => (
 ));
 
 const SortableList = SortableContainer(
-  ({ items, locked }: { items: IFile[]; locked: IUploadStatus[] }) => (
+  ({
+    items,
+    locked,
+    onDrop,
+  }: {
+    items: IFile[];
+    locked: IUploadStatus[];
+    onDrop: (file_id: IFile['id']) => void;
+  }) => (
     <div className={styles.grid}>
-      {items.map((file, index) => (
-        <SortableItem key={file.id} index={index} collection={0}>
-          <ImageUpload id={file.id} thumb={getURL(file)} />
-        </SortableItem>
-      ))}
+      {items
+        .filter(file => file && file.id)
+        .map((file, index) => (
+          <SortableItem key={file.id} index={index} collection={0}>
+            <ImageUpload id={file.id} thumb={getURL(file)} onDrop={onDrop} />
+          </SortableItem>
+        ))}
 
       {locked.map((item, index) => (
         <SortableItem key={item.temp_id} index={index} collection={1} disabled>
@@ -44,8 +57,18 @@ const ImageGrid: FC<IProps> = ({ data, setData, locked }) => {
     [data, setData]
   );
 
+  const onDrop = useCallback(
+    (file_id: IFile['id']) => {
+      setData(
+        assocPath(['files'], reject(el => !el || !el.id || el.id === file_id, data.files), data)
+      );
+    },
+    [setData, data]
+  );
+
   return (
     <SortableList
+      onDrop={onDrop}
       onSortEnd={onMove}
       axis="xy"
       items={data.files}
diff --git a/src/components/upload/ImageUpload/index.tsx b/src/components/upload/ImageUpload/index.tsx
index f90f6156..81d010bd 100644
--- a/src/components/upload/ImageUpload/index.tsx
+++ b/src/components/upload/ImageUpload/index.tsx
@@ -1,27 +1,43 @@
-import React, { FC } from 'react';
+import React, { FC, useCallback } from 'react';
 import classNames from 'classnames';
 import * as styles from './styles.scss';
 import { ArcProgress } from '~/components/input/ArcProgress';
+import { IFile } from '~/redux/types';
+import { Icon } from '~/components/input/Icon';
 
 interface IProps {
-  id?: string;
+  id?: IFile['id'];
   thumb?: string;
   progress?: number;
+  onDrop?: (file_id: IFile['id']) => void;
 
   is_uploading?: boolean;
 }
 
-const ImageUpload: FC<IProps> = ({ thumb, progress, is_uploading }) => (
-  <div className={styles.wrap}>
-    <div className={classNames(styles.thumb_wrap, { is_uploading })}>
-      {thumb && <div className={styles.thumb} style={{ backgroundImage: `url("${thumb}")` }} />}
-      {is_uploading && (
-        <div className={styles.progress}>
-          <ArcProgress size={72} progress={progress} />
+const ImageUpload: FC<IProps> = ({ thumb, progress, is_uploading, id, onDrop }) => {
+  const onDropFile = useCallback(() => {
+    if (!id || !onDrop) return;
+    onDrop(id);
+  }, [id, onDrop]);
+
+  return (
+    <div className={styles.wrap}>
+      {id && onDrop && (
+        <div className={styles.drop} onMouseDown={onDropFile}>
+          <Icon icon="close" />
         </div>
       )}
+
+      <div className={classNames(styles.thumb_wrap, { is_uploading })}>
+        {thumb && <div className={styles.thumb} style={{ backgroundImage: `url("${thumb}")` }} />}
+        {is_uploading && (
+          <div className={styles.progress}>
+            <ArcProgress size={72} progress={progress} />
+          </div>
+        )}
+      </div>
     </div>
-  </div>
-);
+  );
+};
 
 export { ImageUpload };
diff --git a/src/components/upload/ImageUpload/styles.scss b/src/components/upload/ImageUpload/styles.scss
index 52bd0d22..f8f6baf6 100644
--- a/src/components/upload/ImageUpload/styles.scss
+++ b/src/components/upload/ImageUpload/styles.scss
@@ -57,3 +57,29 @@
 .helper {
   opacity: 0.3;
 }
+
+.drop {
+  width: 24px;
+  height: 24px;
+  background: #222222;
+  position: absolute;
+  right: $gap;
+  top: $gap;
+  border-radius: 12px;
+  z-index: 2;
+  transition: background-color 250ms, opacity 0.25s;
+  cursor: pointer;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  svg {
+    width: 20px;
+    height: 20px;
+  }
+
+  &:hover {
+    opacity: 1;
+    background-color: $red;
+  }
+}
diff --git a/src/containers/dialogs/EditorDialog/index.tsx b/src/containers/dialogs/EditorDialog/index.tsx
index c018aaaa..02d5a53e 100644
--- a/src/containers/dialogs/EditorDialog/index.tsx
+++ b/src/containers/dialogs/EditorDialog/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC, useState, useCallback, FormEvent, useEffect } from 'react';
+import React, { FC, useState, useCallback, FormEvent, useEffect, createElement } from 'react';
 import { connect } from 'react-redux';
 import { ScrollDialog } from '../ScrollDialog';
 import { IDialogProps } from '~/redux/modal/constants';
@@ -9,11 +9,11 @@ import { Button } from '~/components/input/Button';
 import { Padder } from '~/components/containers/Padder';
 import * as styles from './styles.scss';
 import { selectNode } from '~/redux/node/selectors';
-import { ImageEditor } from '~/components/editors/ImageEditor';
 import { EditorPanel } from '~/components/editors/EditorPanel';
 import * as NODE_ACTIONS from '~/redux/node/actions';
 import { selectUploads } from '~/redux/uploads/selectors';
 import { ERROR_LITERAL } from '~/constants/errors';
+import { NODE_EDITORS } from '~/redux/node/constants';
 
 const mapStateToProps = state => {
   const { editor, errors } = selectNode(state);
@@ -27,14 +27,19 @@ const mapDispatchToProps = {
   nodeSetSaveErrors: NODE_ACTIONS.nodeSetSaveErrors,
 };
 
-type IProps = IDialogProps & ReturnType<typeof mapStateToProps> & typeof mapDispatchToProps & {};
+type IProps = IDialogProps &
+  ReturnType<typeof mapStateToProps> &
+  typeof mapDispatchToProps & {
+    type: typeof NODE_EDITORS[keyof typeof NODE_EDITORS];
+  };
 
 const EditorDialogUnconnected: FC<IProps> = ({
-  onRequestClose,
   editor,
   errors,
   nodeSave,
   nodeSetSaveErrors,
+  onRequestClose,
+  type,
 }) => {
   const [data, setData] = useState(editor);
   const [temp, setTemp] = useState([]);
@@ -54,6 +59,10 @@ const EditorDialogUnconnected: FC<IProps> = ({
     [data, nodeSave]
   );
 
+  useEffect(() => {
+    if (!NODE_EDITORS[type] && onRequestClose) onRequestClose();
+  }, [type]);
+
   useEffect(() => {
     if (!Object.keys(errors).length) return;
     nodeSetSaveErrors({});
@@ -75,6 +84,8 @@ const EditorDialogUnconnected: FC<IProps> = ({
 
   const error = errors && Object.values(errors)[0];
 
+  if (!NODE_EDITORS[type]) return null;
+
   return (
     <form onSubmit={onSubmit} className={styles.form}>
       <ScrollDialog
@@ -84,7 +95,12 @@ const EditorDialogUnconnected: FC<IProps> = ({
         onClose={onRequestClose}
       >
         <div className={styles.editor}>
-          <ImageEditor data={data} setData={setData} temp={temp} setTemp={setTemp} />
+          {createElement(NODE_EDITORS[type], {
+            data,
+            setData,
+            temp,
+            setTemp,
+          })}
         </div>
       </ScrollDialog>
     </form>
diff --git a/src/containers/dialogs/Modal/index.tsx b/src/containers/dialogs/Modal/index.tsx
index 13b1a2d6..d3c6362d 100644
--- a/src/containers/dialogs/Modal/index.tsx
+++ b/src/containers/dialogs/Modal/index.tsx
@@ -29,6 +29,8 @@ const ModalUnconnected: FC<IProps> = ({
 
   if (!dialog || !DIALOG_CONTENT[dialog] || !is_shown) return null;
 
+  console.log({ onRequestClose });
+
   return ReactDOM.createPortal(
     <div className={styles.fixed}>
       <div className={styles.overlay} onClick={onRequestClose} />
@@ -38,18 +40,18 @@ const ModalUnconnected: FC<IProps> = ({
             {React.createElement(DIALOG_CONTENT[dialog], {
               onRequestClose,
               onDialogChange: modalShowDialog,
-            } as IDialogProps)}
+            })}
           </div>
         </div>
       </div>
     </div>,
-    document.body,
+    document.body
   );
 };
 
 const Modal = connect(
   mapStateToProps,
-  mapDispatchToProps,
+  mapDispatchToProps
 )(ModalUnconnected);
 
 export { ModalUnconnected, Modal };
diff --git a/src/containers/editors/EditorDialogImage/index.tsx b/src/containers/editors/EditorDialogImage/index.tsx
new file mode 100644
index 00000000..9d2b8f41
--- /dev/null
+++ b/src/containers/editors/EditorDialogImage/index.tsx
@@ -0,0 +1,10 @@
+import React, { FC } from 'react';
+import { EditorDialog } from '~/containers/dialogs/EditorDialog';
+import { IDialogProps } from '~/redux/types';
+import { NODE_TYPES } from '~/redux/node/constants';
+
+type IProps = IDialogProps & {};
+
+const EditorDialogImage: FC<IProps> = props => <EditorDialog type={NODE_TYPES.IMAGE} {...props} />;
+
+export { EditorDialogImage };
diff --git a/src/redux/modal/constants.ts b/src/redux/modal/constants.ts
index 08ee7acb..fd43d538 100644
--- a/src/redux/modal/constants.ts
+++ b/src/redux/modal/constants.ts
@@ -1,5 +1,5 @@
 import { ValueOf } from '~/redux/types';
-import { EditorDialog } from '~/containers/dialogs/EditorDialog';
+import { EditorDialogImage } from '~/containers/editors/EditorDialogImage';
 import { LoginDialog } from '~/containers/dialogs/LoginDialog';
 
 export const MODAL_ACTIONS = {
@@ -14,7 +14,7 @@ export const DIALOGS = {
 };
 
 export const DIALOG_CONTENT = {
-  [DIALOGS.EDITOR_IMAGE]: EditorDialog,
+  [DIALOGS.EDITOR_IMAGE]: EditorDialogImage,
   [DIALOGS.LOGIN]: LoginDialog,
 };
 
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index f61dad63..22c1930e 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -1,6 +1,7 @@
 import { FC } from 'react';
 import { IBlock, INode, ValueOf, IComment } from '../types';
 import { NodeImageBlock } from '~/components/node/NodeImageBlock';
+import { ImageEditor } from '~/components/editors/ImageEditor';
 
 const prefix = 'NODE.';
 export const NODE_ACTIONS = {
@@ -74,3 +75,9 @@ export const EMPTY_COMMENT: IComment = {
   is_private: false,
   user: null,
 };
+
+export const NODE_EDITORS = {
+  [NODE_TYPES.IMAGE]: ImageEditor,
+};
+
+export const MAX_NODE_FILES = 16;
diff --git a/src/redux/types.ts b/src/redux/types.ts
index a8523790..ff43f361 100644
--- a/src/redux/types.ts
+++ b/src/redux/types.ts
@@ -58,7 +58,7 @@ export type UUID = string;
 export type IUploadType = 'image' | 'text' | 'audio' | 'video' | 'other';
 
 export interface IFile {
-  id?: UUID;
+  id?: number;
   temp_id?: UUID;
   user_id?: UUID;
   node_id?: UUID;
diff --git a/src/redux/uploads/reducer.ts b/src/redux/uploads/reducer.ts
index 43f3f205..98915b38 100644
--- a/src/redux/uploads/reducer.ts
+++ b/src/redux/uploads/reducer.ts
@@ -6,7 +6,7 @@ export interface IUploadStatus {
   is_uploading: boolean;
   error: string;
   preview: string;
-  uuid: UUID;
+  uuid: IFile['id'];
   url: string;
   type: string;
   thumbnail_url: string;

From a957281d01d7716893215c3599a4ff01b0056f1f Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 16 Oct 2019 12:51:38 +0700
Subject: [PATCH 14/99] dropping items

---
 src/components/editors/ImageGrid/index.tsx | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/components/editors/ImageGrid/index.tsx b/src/components/editors/ImageGrid/index.tsx
index 2310acd3..2c976763 100644
--- a/src/components/editors/ImageGrid/index.tsx
+++ b/src/components/editors/ImageGrid/index.tsx
@@ -17,11 +17,11 @@ interface IProps {
   locked: IUploadStatus[];
 }
 
-const SortableItem = SortableElement(({ children }) => (
+const SortableImageGridItem = SortableElement(({ children }) => (
   <div className={styles.item}>{children}</div>
 ));
 
-const SortableList = SortableContainer(
+const SortableImageGrid = SortableContainer(
   ({
     items,
     locked,
@@ -35,15 +35,15 @@ const SortableList = SortableContainer(
       {items
         .filter(file => file && file.id)
         .map((file, index) => (
-          <SortableItem key={file.id} index={index} collection={0}>
+          <SortableImageGridItem key={file.id} index={index} collection={0}>
             <ImageUpload id={file.id} thumb={getURL(file)} onDrop={onDrop} />
-          </SortableItem>
+          </SortableImageGridItem>
         ))}
 
       {locked.map((item, index) => (
-        <SortableItem key={item.temp_id} index={index} collection={1} disabled>
+        <SortableImageGridItem key={item.temp_id} index={index} collection={1} disabled>
           <ImageUpload thumb={item.preview} progress={item.progress} is_uploading />
-        </SortableItem>
+        </SortableImageGridItem>
       ))}
     </div>
   )
@@ -67,7 +67,7 @@ const ImageGrid: FC<IProps> = ({ data, setData, locked }) => {
   );
 
   return (
-    <SortableList
+    <SortableImageGrid
       onDrop={onDrop}
       onSortEnd={onMove}
       axis="xy"

From 5872e7a4574d460ffb4ada9e7d24a207c24b76f7 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 16 Oct 2019 15:40:39 +0700
Subject: [PATCH 15/99] moved out image grid components

---
 src/components/editors/ImageGrid/index.tsx    | 39 +------------------
 src/components/editors/ImageGrid/styles.scss  | 28 +------------
 .../editors/SortableImageGrid/index.tsx       | 38 ++++++++++++++++++
 .../editors/SortableImageGrid/styles.scss     | 14 +++++++
 .../editors/SortableImageGridItem/index.tsx   | 10 +++++
 .../editors/SortableImageGridItem/styles.scss |  4 ++
 6 files changed, 69 insertions(+), 64 deletions(-)
 create mode 100644 src/components/editors/SortableImageGrid/index.tsx
 create mode 100644 src/components/editors/SortableImageGrid/styles.scss
 create mode 100644 src/components/editors/SortableImageGridItem/index.tsx
 create mode 100644 src/components/editors/SortableImageGridItem/styles.scss

diff --git a/src/components/editors/ImageGrid/index.tsx b/src/components/editors/ImageGrid/index.tsx
index 2c976763..0ead0f6c 100644
--- a/src/components/editors/ImageGrid/index.tsx
+++ b/src/components/editors/ImageGrid/index.tsx
@@ -1,15 +1,12 @@
 import React, { FC, useCallback } from 'react';
-import { SortableContainer, SortableElement, SortEvent, SortEnd } from 'react-sortable-hoc';
+import { SortEnd } from 'react-sortable-hoc';
 import * as styles from './styles.scss';
-import { ImageUpload } from '~/components/upload/ImageUpload';
 import { IFile, INode } from '~/redux/types';
 import { IUploadStatus } from '~/redux/uploads/reducer';
-import { getURL } from '~/utils/dom';
 import assocPath from 'ramda/es/assocPath';
 import { moveArrItem } from '~/utils/fn';
-import omit from 'ramda/es/omit';
-import remove from 'ramda/es/remove';
 import reject from 'ramda/es/reject';
+import { SortableImageGrid } from '~/components/editors/SortableImageGrid';
 
 interface IProps {
   data: INode;
@@ -17,38 +14,6 @@ interface IProps {
   locked: IUploadStatus[];
 }
 
-const SortableImageGridItem = SortableElement(({ children }) => (
-  <div className={styles.item}>{children}</div>
-));
-
-const SortableImageGrid = SortableContainer(
-  ({
-    items,
-    locked,
-    onDrop,
-  }: {
-    items: IFile[];
-    locked: IUploadStatus[];
-    onDrop: (file_id: IFile['id']) => void;
-  }) => (
-    <div className={styles.grid}>
-      {items
-        .filter(file => file && file.id)
-        .map((file, index) => (
-          <SortableImageGridItem key={file.id} index={index} collection={0}>
-            <ImageUpload id={file.id} thumb={getURL(file)} onDrop={onDrop} />
-          </SortableImageGridItem>
-        ))}
-
-      {locked.map((item, index) => (
-        <SortableImageGridItem key={item.temp_id} index={index} collection={1} disabled>
-          <ImageUpload thumb={item.preview} progress={item.progress} is_uploading />
-        </SortableImageGridItem>
-      ))}
-    </div>
-  )
-);
-
 const ImageGrid: FC<IProps> = ({ data, setData, locked }) => {
   const onMove = useCallback(
     ({ oldIndex, newIndex }: SortEnd) => {
diff --git a/src/components/editors/ImageGrid/styles.scss b/src/components/editors/ImageGrid/styles.scss
index 18c1d269..7ab40804 100644
--- a/src/components/editors/ImageGrid/styles.scss
+++ b/src/components/editors/ImageGrid/styles.scss
@@ -1,30 +1,4 @@
-.grid {
-  min-height: 200px;
-  padding-bottom: 62px;
-  box-sizing: border-box;
-
-  display: grid;
-  grid-column-gap: $gap;
-  grid-row-gap: $gap;
-  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
-
-  // display: flex;
-  // flex-wrap: wrap;
-  @media (max-width: 600px) {
-    grid-template-columns: repeat(auto-fill, minmax(30vw, 1fr));
-  }
-}
-
-.item {
-  // flex: 0 4 25%;
-  // width: 25%;
-  // float: left;
-  // padding: $gap / 2;
-  z-index: 1;
-  box-sizing: border-box;
-}
-
 .helper {
   opacity: 0.5;
-  z-index: 10;
+  z-index: 10 !important;
 }
diff --git a/src/components/editors/SortableImageGrid/index.tsx b/src/components/editors/SortableImageGrid/index.tsx
new file mode 100644
index 00000000..26fdd309
--- /dev/null
+++ b/src/components/editors/SortableImageGrid/index.tsx
@@ -0,0 +1,38 @@
+import React from 'react';
+import { SortableContainer } from 'react-sortable-hoc';
+import { ImageUpload } from '~/components/upload/ImageUpload';
+import * as styles from './styles.scss';
+import { SortableImageGridItem } from '~/components/editors/SortableImageGridItem';
+import { IFile } from '~/redux/types';
+import { IUploadStatus } from '~/redux/uploads/reducer';
+import { getURL } from '~/utils/dom';
+
+const SortableImageGrid = SortableContainer(
+  ({
+    items,
+    locked,
+    onDrop,
+  }: {
+    items: IFile[];
+    locked: IUploadStatus[];
+    onDrop: (file_id: IFile['id']) => void;
+  }) => (
+    <div className={styles.grid}>
+      {items
+        .filter(file => file && file.id)
+        .map((file, index) => (
+          <SortableImageGridItem key={file.id} index={index} collection={0}>
+            <ImageUpload id={file.id} thumb={getURL(file)} onDrop={onDrop} />
+          </SortableImageGridItem>
+        ))}
+
+      {locked.map((item, index) => (
+        <SortableImageGridItem key={item.temp_id} index={index} collection={1} disabled>
+          <ImageUpload thumb={item.preview} progress={item.progress} is_uploading />
+        </SortableImageGridItem>
+      ))}
+    </div>
+  )
+);
+
+export { SortableImageGrid };
diff --git a/src/components/editors/SortableImageGrid/styles.scss b/src/components/editors/SortableImageGrid/styles.scss
new file mode 100644
index 00000000..c525238b
--- /dev/null
+++ b/src/components/editors/SortableImageGrid/styles.scss
@@ -0,0 +1,14 @@
+.grid {
+  min-height: 200px;
+  padding-bottom: 62px;
+  box-sizing: border-box;
+
+  display: grid;
+  grid-column-gap: $gap;
+  grid-row-gap: $gap;
+  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
+
+  @media (max-width: 600px) {
+    grid-template-columns: repeat(auto-fill, minmax(30vw, 1fr));
+  }
+}
diff --git a/src/components/editors/SortableImageGridItem/index.tsx b/src/components/editors/SortableImageGridItem/index.tsx
new file mode 100644
index 00000000..6fb94e6e
--- /dev/null
+++ b/src/components/editors/SortableImageGridItem/index.tsx
@@ -0,0 +1,10 @@
+import React from 'react';
+import { SortableElement } from 'react-sortable-hoc';
+
+import * as styles from './styles.scss';
+
+const SortableImageGridItem = SortableElement(({ children }) => (
+  <div className={styles.item}>{children}</div>
+));
+
+export { SortableImageGridItem };
diff --git a/src/components/editors/SortableImageGridItem/styles.scss b/src/components/editors/SortableImageGridItem/styles.scss
new file mode 100644
index 00000000..81fd01cb
--- /dev/null
+++ b/src/components/editors/SortableImageGridItem/styles.scss
@@ -0,0 +1,4 @@
+.item {
+  z-index: 1;
+  box-sizing: border-box;
+}

From 265b075ddce4f296b7c3fd175e2b760d5a994818 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 16 Oct 2019 15:47:52 +0700
Subject: [PATCH 16/99] refactored code

---
 src/components/editors/ImageEditor/index.tsx |  8 +++++---
 src/components/editors/ImageGrid/index.tsx   | 20 +++++++++-----------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/components/editors/ImageEditor/index.tsx b/src/components/editors/ImageEditor/index.tsx
index 45ff0bd5..decfacb6 100644
--- a/src/components/editors/ImageEditor/index.tsx
+++ b/src/components/editors/ImageEditor/index.tsx
@@ -1,6 +1,6 @@
-import React, { FC, useMemo } from 'react';
+import React, { FC, useMemo, useCallback } from 'react';
 import { connect } from 'react-redux';
-import { INode } from '~/redux/types';
+import { INode, IFile } from '~/redux/types';
 import * as UPLOAD_ACTIONS from '~/redux/uploads/actions';
 import { selectUploads } from '~/redux/uploads/selectors';
 import { ImageGrid } from '~/components/editors/ImageGrid';
@@ -24,7 +24,9 @@ const ImageEditorUnconnected: FC<IProps> = ({ data, setData, temp, statuses }) =
     statuses,
   ]);
 
-  return <ImageGrid data={data} setData={setData} locked={pending_files} />;
+  const setFiles = useCallback((files: IFile[]) => setData({ ...data, files }), [data, setData]);
+
+  return <ImageGrid files={data.files} setFiles={setFiles} locked={pending_files} />;
 };
 
 const ImageEditor = connect(
diff --git a/src/components/editors/ImageGrid/index.tsx b/src/components/editors/ImageGrid/index.tsx
index 0ead0f6c..c4a2eb50 100644
--- a/src/components/editors/ImageGrid/index.tsx
+++ b/src/components/editors/ImageGrid/index.tsx
@@ -9,26 +9,24 @@ import reject from 'ramda/es/reject';
 import { SortableImageGrid } from '~/components/editors/SortableImageGrid';
 
 interface IProps {
-  data: INode;
-  setData: (val: INode) => void;
+  files: IFile[];
+  setFiles: (val: IFile[]) => void;
   locked: IUploadStatus[];
 }
 
-const ImageGrid: FC<IProps> = ({ data, setData, locked }) => {
+const ImageGrid: FC<IProps> = ({ files, setFiles, locked }) => {
   const onMove = useCallback(
     ({ oldIndex, newIndex }: SortEnd) => {
-      setData(assocPath(['files'], moveArrItem(oldIndex, newIndex, data.files), data));
+      setFiles(moveArrItem(oldIndex, newIndex, files) as IFile[]);
     },
-    [data, setData]
+    [setFiles, files]
   );
 
   const onDrop = useCallback(
-    (file_id: IFile['id']) => {
-      setData(
-        assocPath(['files'], reject(el => !el || !el.id || el.id === file_id, data.files), data)
-      );
+    (remove_id: IFile['id']) => {
+      setFiles(files.filter(file => file.id === remove_id));
     },
-    [setData, data]
+    [setFiles, files]
   );
 
   return (
@@ -36,7 +34,7 @@ const ImageGrid: FC<IProps> = ({ data, setData, locked }) => {
       onDrop={onDrop}
       onSortEnd={onMove}
       axis="xy"
-      items={data.files}
+      items={files}
       locked={locked}
       pressDelay={window.innerWidth < 768 ? 200 : 0}
       helperClass={styles.helper}

From 1b6a81d27cbbb1e8299d16ea46c3c0a7d9f9ab94 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 16 Oct 2019 16:22:01 +0700
Subject: [PATCH 17/99] sagas for node creation dialog

---
 src/components/bars/SubmitBar/index.tsx       | 10 ++++---
 src/components/editors/TextEditor/index.tsx   | 27 +++++++++++++++++++
 src/components/editors/TextEditor/styles.scss |  3 +++
 .../editors/EditorDialogText/index.tsx        | 10 +++++++
 src/redux/modal/constants.ts                  | 11 +++++++-
 src/redux/modal/reducer.ts                    |  4 +--
 src/redux/node/actions.ts                     | 17 +++++++++++-
 src/redux/node/constants.ts                   | 23 +++++++++++-----
 src/redux/node/handlers.ts                    |  5 ++++
 src/redux/node/sagas.ts                       | 15 +++++++++--
 src/redux/types.ts                            | 16 +++++++----
 11 files changed, 119 insertions(+), 22 deletions(-)
 create mode 100644 src/components/editors/TextEditor/index.tsx
 create mode 100644 src/components/editors/TextEditor/styles.scss
 create mode 100644 src/containers/editors/EditorDialogText/index.tsx

diff --git a/src/components/bars/SubmitBar/index.tsx b/src/components/bars/SubmitBar/index.tsx
index 0450787f..da44ab82 100644
--- a/src/components/bars/SubmitBar/index.tsx
+++ b/src/components/bars/SubmitBar/index.tsx
@@ -1,20 +1,22 @@
 import React, { FC, useCallback } from 'react';
 import { connect } from 'react-redux';
 import { Icon } from '~/components/input/Icon';
-import * as MODAL_ACTIONS from '~/redux/modal/actions';
+import * as NODE_ACTIONS from '~/redux/node/actions';
 import { DIALOGS } from '~/redux/modal/constants';
 
 import * as styles from './styles.scss';
+import { NODE_TYPES } from '~/redux/node/constants';
 
 const mapStateToProps = null;
 const mapDispatchToProps = {
-  showDialog: MODAL_ACTIONS.modalShowDialog,
+  nodeCreate: NODE_ACTIONS.nodeCreate,
+  // showDialog: MODAL_ACTIONS.modalShowDialog,
 };
 
 type IProps = typeof mapDispatchToProps & {};
 
-const SubmitBarUnconnected: FC<IProps> = ({ showDialog }) => {
-  const onOpenImageEditor = useCallback(() => showDialog(DIALOGS.EDITOR_IMAGE), [showDialog]);
+const SubmitBarUnconnected: FC<IProps> = ({ nodeCreate }) => {
+  const onOpenImageEditor = useCallback(() => nodeCreate(NODE_TYPES.IMAGE), [nodeCreate]);
 
   return (
     <div className={styles.wrap}>
diff --git a/src/components/editors/TextEditor/index.tsx b/src/components/editors/TextEditor/index.tsx
new file mode 100644
index 00000000..539045f1
--- /dev/null
+++ b/src/components/editors/TextEditor/index.tsx
@@ -0,0 +1,27 @@
+import React, { FC, useCallback } from 'react';
+import { INode } from '~/redux/types';
+import * as styles from './styles.scss';
+import { Textarea } from '~/components/input/Textarea';
+import path from 'ramda/es/path';
+
+interface IProps {
+  data: INode;
+  setData: (val: INode) => void;
+}
+
+const TextEditor: FC<IProps> = ({ data, setData }) => {
+  const setText = useCallback(
+    (text: string) => setData({ ...data, blocks: [{ type: 'text', text }] }),
+    [data, setData]
+  );
+
+  const text = (path(['blocks', 0, 'text'], data) as string) || '';
+
+  return (
+    <div className={styles.wrap}>
+      <Textarea value={text} handler={setText} minRows={6} />
+    </div>
+  );
+};
+
+export { TextEditor };
diff --git a/src/components/editors/TextEditor/styles.scss b/src/components/editors/TextEditor/styles.scss
new file mode 100644
index 00000000..4d3618e6
--- /dev/null
+++ b/src/components/editors/TextEditor/styles.scss
@@ -0,0 +1,3 @@
+.wrap {
+  padding-bottom: 60px;
+}
diff --git a/src/containers/editors/EditorDialogText/index.tsx b/src/containers/editors/EditorDialogText/index.tsx
new file mode 100644
index 00000000..311df8ed
--- /dev/null
+++ b/src/containers/editors/EditorDialogText/index.tsx
@@ -0,0 +1,10 @@
+import React, { FC } from 'react';
+import { EditorDialog } from '~/containers/dialogs/EditorDialog';
+import { IDialogProps } from '~/redux/types';
+import { NODE_TYPES } from '~/redux/node/constants';
+
+type IProps = IDialogProps & {};
+
+const EditorDialogText: FC<IProps> = props => <EditorDialog type={NODE_TYPES.TEXT} {...props} />;
+
+export { EditorDialogText };
diff --git a/src/redux/modal/constants.ts b/src/redux/modal/constants.ts
index fd43d538..2bde90a2 100644
--- a/src/redux/modal/constants.ts
+++ b/src/redux/modal/constants.ts
@@ -1,6 +1,8 @@
 import { ValueOf } from '~/redux/types';
-import { EditorDialogImage } from '~/containers/editors/EditorDialogImage';
 import { LoginDialog } from '~/containers/dialogs/LoginDialog';
+import { EditorDialogImage } from '~/containers/editors/EditorDialogImage';
+import { EditorDialogText } from '~/containers/editors/EditorDialogText';
+import { NODE_TYPES } from '../node/constants';
 
 export const MODAL_ACTIONS = {
   SET_SHOWN: 'MODAL.SET_SHOWN',
@@ -10,14 +12,21 @@ export const MODAL_ACTIONS = {
 
 export const DIALOGS = {
   EDITOR_IMAGE: 'EDITOR_IMAGE',
+  EDITOR_TEXT: 'EDITOR_TEXT',
   LOGIN: 'LOGIN',
 };
 
 export const DIALOG_CONTENT = {
   [DIALOGS.EDITOR_IMAGE]: EditorDialogImage,
+  [DIALOGS.EDITOR_TEXT]: EditorDialogText,
   [DIALOGS.LOGIN]: LoginDialog,
 };
 
+export const NODE_EDITOR_DIALOGS = {
+  [NODE_TYPES.IMAGE]: DIALOGS.EDITOR_IMAGE,
+  [NODE_TYPES.TEXT]: DIALOGS.EDITOR_TEXT,
+};
+
 export interface IDialogProps {
   onRequestClose: () => void;
   onDialogChange: (dialog: ValueOf<typeof DIALOGS>) => void;
diff --git a/src/redux/modal/reducer.ts b/src/redux/modal/reducer.ts
index 764ce9c6..2a7e472a 100644
--- a/src/redux/modal/reducer.ts
+++ b/src/redux/modal/reducer.ts
@@ -9,8 +9,8 @@ export interface IModalState {
 }
 
 const INITIAL_STATE: IModalState = {
-  is_shown: true,
-  dialog: DIALOGS.EDITOR_IMAGE,
+  is_shown: false,
+  dialog: DIALOGS.EDITOR_TEXT,
 };
 
 export default createReducer(INITIAL_STATE, MODAL_HANDLERS);
diff --git a/src/redux/node/actions.ts b/src/redux/node/actions.ts
index 2e7e29f7..e34e9fee 100644
--- a/src/redux/node/actions.ts
+++ b/src/redux/node/actions.ts
@@ -1,5 +1,5 @@
 import { INode, IValidationErrors, IComment, ITag } from '../types';
-import { NODE_ACTIONS } from './constants';
+import { NODE_ACTIONS, NODE_TYPES } from './constants';
 import { INodeState } from './reducer';
 
 export const nodeSave = (node: INode) => ({
@@ -64,3 +64,18 @@ export const nodeSetTags = (tags: ITag[]) => ({
   type: NODE_ACTIONS.SET_TAGS,
   tags,
 });
+
+export const nodeCreate = (node_type: INode['type']) => ({
+  type: NODE_ACTIONS.CREATE,
+  node_type,
+});
+
+export const nodeEdit = (id: INode['id']) => ({
+  type: NODE_ACTIONS.CREATE,
+  id,
+});
+
+export const nodeSetEditor = (editor: INode) => ({
+  type: NODE_ACTIONS.SET_EDITOR,
+  editor,
+});
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index 22c1930e..5f34723a 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -2,18 +2,24 @@ import { FC } from 'react';
 import { IBlock, INode, ValueOf, IComment } from '../types';
 import { NodeImageBlock } from '~/components/node/NodeImageBlock';
 import { ImageEditor } from '~/components/editors/ImageEditor';
+import { TextEditor } from '~/components/editors/TextEditor';
+import { DIALOGS } from '../modal/constants';
 
 const prefix = 'NODE.';
 export const NODE_ACTIONS = {
   SAVE: `${prefix}SAVE`,
   LOAD_NODE: `${prefix}LOAD_NODE`,
 
+  EDIT: `${prefix}EDIT`,
+  CREATE: `${prefix}CREATE`,
+
   SET_SAVE_ERRORS: `${prefix}SET_SAVE_ERRORS`,
   SET_LOADING: `${prefix}SET_LOADING`,
   SET_LOADING_COMMENTS: `${prefix}SET_LOADING_COMMENTS`,
   SET_SENDING_COMMENT: `${prefix}SET_SENDING_COMMENT`,
   SET_CURRENT: `${prefix}SET_CURRENT`,
   SET_COMMENT_DATA: `${prefix}SET_COMMENT_DATA`,
+  SET_EDITOR: `${prefix}SET_EDITOR`,
 
   POST_COMMENT: `${prefix}POST_COMMENT`,
   SET_COMMENTS: `${prefix}SET_COMMENTS`,
@@ -22,13 +28,6 @@ export const NODE_ACTIONS = {
   SET_TAGS: `${prefix}SET_TAGS`,
 };
 
-export const EMPTY_BLOCK: IBlock = {
-  type: null,
-  files: [],
-  content: null,
-  embeds: [],
-};
-
 export const EMPTY_NODE: INode = {
   id: null,
 
@@ -78,6 +77,16 @@ export const EMPTY_COMMENT: IComment = {
 
 export const NODE_EDITORS = {
   [NODE_TYPES.IMAGE]: ImageEditor,
+  [NODE_TYPES.TEXT]: TextEditor,
 };
 
 export const MAX_NODE_FILES = 16;
+
+export const NODE_EDITOR_DATA: Record<
+  typeof NODE_TYPES[keyof typeof NODE_TYPES],
+  Partial<INode>
+> = {
+  [NODE_TYPES.TEXT]: {
+    blocks: [{ text: '', type: 'text' }],
+  },
+};
diff --git a/src/redux/node/handlers.ts b/src/redux/node/handlers.ts
index 4c6341df..8600f9b2 100644
--- a/src/redux/node/handlers.ts
+++ b/src/redux/node/handlers.ts
@@ -9,6 +9,7 @@ import {
   nodeSetComments,
   nodeSetCommentData,
   nodeSetTags,
+  nodeSetEditor,
 } from './actions';
 import { INodeState } from './reducer';
 
@@ -42,6 +43,9 @@ const setCommentData = (
 const setTags = (state: INodeState, { tags }: ReturnType<typeof nodeSetTags>) =>
   assocPath(['current', 'tags'], tags, state);
 
+const setEditor = (state: INodeState, { editor }: ReturnType<typeof nodeSetEditor>) =>
+  assocPath(['current', 'editor'], editor, state);
+
 export const NODE_HANDLERS = {
   [NODE_ACTIONS.SET_SAVE_ERRORS]: setSaveErrors,
   [NODE_ACTIONS.SET_LOADING]: setLoading,
@@ -51,4 +55,5 @@ export const NODE_HANDLERS = {
   [NODE_ACTIONS.SET_COMMENTS]: setComments,
   [NODE_ACTIONS.SET_COMMENT_DATA]: setCommentData,
   [NODE_ACTIONS.SET_TAGS]: setTags,
+  [NODE_ACTIONS.SET_EDITOR]: setEditor,
 };
diff --git a/src/redux/node/sagas.ts b/src/redux/node/sagas.ts
index 927b7e87..7889b02b 100644
--- a/src/redux/node/sagas.ts
+++ b/src/redux/node/sagas.ts
@@ -1,7 +1,7 @@
 import { takeLatest, call, put, select, delay } from 'redux-saga/effects';
 import { push } from 'connected-react-router';
 
-import { NODE_ACTIONS, EMPTY_NODE, EMPTY_COMMENT } from './constants';
+import { NODE_ACTIONS, EMPTY_NODE, EMPTY_COMMENT, NODE_EDITOR_DATA } from './constants';
 import {
   nodeSave,
   nodeSetSaveErrors,
@@ -15,16 +15,19 @@ import {
   nodeSetCommentData,
   nodeUpdateTags,
   nodeSetTags,
+  nodeCreate,
+  nodeSetEditor,
 } from './actions';
 import { postNode, getNode, postNodeComment, getNodeComments, updateNodeTags } from './api';
 import { reqWrapper } from '../auth/sagas';
 import { flowSetNodes } from '../flow/actions';
 import { ERRORS } from '~/constants/errors';
-import { modalSetShown } from '../modal/actions';
+import { modalSetShown, modalShowDialog } from '../modal/actions';
 import { selectFlowNodes } from '../flow/selectors';
 import { URLS } from '~/constants/urls';
 import { selectNode } from './selectors';
 import { IResultWithStatus, INode } from '../types';
+import { NODE_EDITOR_DIALOGS } from '../modal/constants';
 
 function* onNodeSave({ node }: ReturnType<typeof nodeSave>) {
   yield put(nodeSetSaveErrors({}));
@@ -118,9 +121,17 @@ function* onUpdateTags({ id, tags }: ReturnType<typeof nodeUpdateTags>) {
   yield put(nodeSetTags(node.tags));
 }
 
+function* onCreateSaga({ node_type: type }: ReturnType<typeof nodeCreate>) {
+  if (!NODE_EDITOR_DIALOGS[type]) return;
+
+  yield put(nodeSetEditor({ ...EMPTY_NODE, ...(NODE_EDITOR_DATA[type] || {}), type }));
+  yield put(modalShowDialog(NODE_EDITOR_DIALOGS[type]));
+}
+
 export default function* nodeSaga() {
   yield takeLatest(NODE_ACTIONS.SAVE, onNodeSave);
   yield takeLatest(NODE_ACTIONS.LOAD_NODE, onNodeLoad);
   yield takeLatest(NODE_ACTIONS.POST_COMMENT, onPostComment);
   yield takeLatest(NODE_ACTIONS.UPDATE_TAGS, onUpdateTags);
+  yield takeLatest(NODE_ACTIONS.CREATE, onCreateSaga);
 }
diff --git a/src/redux/types.ts b/src/redux/types.ts
index ff43f361..7c05e93d 100644
--- a/src/redux/types.ts
+++ b/src/redux/types.ts
@@ -2,6 +2,7 @@ import { DetailedHTMLProps, InputHTMLAttributes } from 'react';
 import { DIALOGS } from '~/redux/modal/constants';
 import { ERRORS } from '~/constants/errors';
 import { IUser } from './auth/types';
+import { string } from 'prop-types';
 
 export interface ITag {
   id: number;
@@ -93,13 +94,18 @@ export interface IFileWithUUID {
   type: string;
 }
 
-export interface IBlock {
-  type: 'image' | 'text' | 'media' | 'youtube' | 'video';
-  files: UUID[];
-  content: string;
-  embeds: string[];
+export interface IBlockText {
+  type: 'text';
+  text: string;
 }
 
+export interface IBlockEmbed {
+  type: 'embed';
+  url: string;
+}
+
+export type IBlock = IBlockText | IBlockEmbed;
+
 export interface INode {
   id?: number;
   user: Partial<IUser>;

From f42953b46065fafac9fc1505f40aa23e55a727b7 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 16 Oct 2019 17:18:39 +0700
Subject: [PATCH 18/99] simple drag

---
 .../node/NodeImageSlideBlock/index.tsx        | 150 ++++++++++++++++++
 .../node/NodeImageSlideBlock/styles.scss      |  56 +++++++
 src/redux/node/constants.ts                   |   4 +-
 3 files changed, 208 insertions(+), 2 deletions(-)
 create mode 100644 src/components/node/NodeImageSlideBlock/index.tsx
 create mode 100644 src/components/node/NodeImageSlideBlock/styles.scss

diff --git a/src/components/node/NodeImageSlideBlock/index.tsx b/src/components/node/NodeImageSlideBlock/index.tsx
new file mode 100644
index 00000000..c2efff13
--- /dev/null
+++ b/src/components/node/NodeImageSlideBlock/index.tsx
@@ -0,0 +1,150 @@
+import React, {
+  FC,
+  useMemo,
+  useState,
+  useEffect,
+  RefObject,
+  LegacyRef,
+  useRef,
+  useCallback,
+  MouseEventHandler,
+} from 'react';
+import { ImageSwitcher } from '../ImageSwitcher';
+import * as styles from './styles.scss';
+import { INode } from '~/redux/types';
+import classNames from 'classnames';
+import { getImageSize } from '~/utils/dom';
+import { UPLOAD_TYPES } from '~/redux/uploads/constants';
+
+interface IProps {
+  is_loading: boolean;
+  node: INode;
+  layout: {};
+  updateLayout: () => void;
+}
+
+const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) => {
+  const [is_animated, setIsAnimated] = useState(false);
+  const [current, setCurrent] = useState(0);
+  const [height, setHeight] = useState(320);
+  const [loaded, setLoaded] = useState<Record<number, boolean>>({});
+  const refs = useRef<Record<number, HTMLDivElement>>({});
+  const [heights, setHeights] = useState({});
+
+  const [initial_offset, setInitialOffset] = useState(0);
+  const [initial_x, setInitialX] = useState(0);
+  const [offset, setOffset] = useState(0);
+  const [is_dragging, setIsDragging] = useState(false);
+  const slide = useRef();
+
+  const images = useMemo(
+    () =>
+      (node && node.files && node.files.filter(({ type }) => type === UPLOAD_TYPES.IMAGE)) || [],
+    [node]
+  );
+
+  // console.log({ heights });
+
+  const updateSizes = useCallback(() => {
+    const values = Object.keys(refs.current).map(key => {
+      const ref = refs.current[key];
+      if (!ref || !ref.getBoundingClientRect) return 0;
+      return ref.getBoundingClientRect().height;
+    });
+  }, [refs]);
+
+  const setRef = useCallback(
+    index => el => {
+      refs.current[index] = el;
+    },
+    [refs, heights, setHeights]
+  );
+
+  const onImageLoad = useCallback(index => () => setLoaded({ ...loaded, [index]: true }), [
+    setLoaded,
+    loaded,
+  ]);
+
+  // update outside hooks
+  useEffect(() => updateLayout(), [loaded]);
+
+  useEffect(() => {
+    updateSizes();
+    //
+    // if (!refs || !refs.current[current] || !loaded[current]) return setHeight(320);
+    //
+    // const el = refs.current[current];
+    //
+    // const element_height = el.getBoundingClientRect && el.getBoundingClientRect().height;
+    //
+    // setHeight(element_height);
+  }, [refs, current, loaded]);
+
+  // useEffect(() => {
+  // const timer = setTimeout(() => setIsAnimated(true), 250);
+  //
+  // return () => clearTimeout(timer);
+  // }, []);
+
+  const stopDragging = useCallback(() => {
+    window.removeEventListener('mouseup', stopDragging);
+    setIsDragging(false);
+  }, [setIsDragging]);
+
+  const startDragging: MouseEventHandler<HTMLDivElement> = useCallback(
+    event => {
+      window.addEventListener('mouseup', stopDragging);
+      setIsDragging(true);
+      setInitialX(event.clientX);
+      setInitialOffset(offset);
+    },
+    [setIsDragging, stopDragging, setInitialX, offset, setInitialOffset]
+  );
+
+  const onDrag = useCallback(
+    event => {
+      if (!is_dragging) return;
+
+      setOffset(initial_offset + event.clientX - initial_x);
+    },
+    [is_dragging, initial_x, setOffset, initial_offset]
+  );
+
+  return (
+    <div className={classNames(styles.wrap, { is_loading, is_animated })}>
+      <div
+        className={styles.image_container}
+        style={{
+          height,
+          transform: `translate(${offset}px, 0)`,
+          width: `${images.length * 100}%`,
+        }}
+        onMouseDown={startDragging}
+        onMouseMove={onDrag}
+        ref={slide}
+      >
+        {(is_loading || !loaded[0] || !images.length) && <div className={styles.placeholder} />}
+
+        {images.map((file, index) => (
+          <div
+            className={classNames(styles.image_wrap, {
+              is_active: index === current && loaded[index],
+            })}
+            ref={setRef(index)}
+            key={file.id}
+          >
+            <img
+              className={styles.image}
+              src={getImageSize(file, 'node')}
+              alt=""
+              key={file.id}
+              onLoad={onImageLoad(index)}
+            />
+          </div>
+        ))}
+      </div>
+    </div>
+  );
+};
+
+export { NodeImageSlideBlock };
diff --git a/src/components/node/NodeImageSlideBlock/styles.scss b/src/components/node/NodeImageSlideBlock/styles.scss
new file mode 100644
index 00000000..c36ee620
--- /dev/null
+++ b/src/components/node/NodeImageSlideBlock/styles.scss
@@ -0,0 +1,56 @@
+.wrap {
+  overflow: hidden;
+  position: relative;
+  min-width: 0;
+  width: 100%;
+
+  &:global(.is_animated) {
+    .image_container {
+      transition: height 0.5s;
+    }
+
+    .image_wrap {
+      transition: opacity 0.5s;
+    }
+  }
+}
+
+.image_container {
+  background: $node_image_bg;
+  border-radius: $panel_radius 0 0 $panel_radius;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  position: relative;
+  overflow: hidden;
+  user-select: none;
+
+  .image {
+    max-height: 960px;
+    max-width: 100%;
+    opacity: 1;
+    border-radius: $radius $radius 0 0;
+  }
+}
+
+.image_wrap {
+  width: 100%;
+  // top: 0;
+  // left: 0;
+  // opacity: 0;
+  pointer-events: none;
+  touch-action: none;
+  z-index: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  &:global(.is_active) {
+    opacity: 1;
+  }
+}
+
+.placeholder {
+  background: red;
+  height: 320px;
+}
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index 5f34723a..64bd54c8 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -1,6 +1,6 @@
 import { FC } from 'react';
 import { IBlock, INode, ValueOf, IComment } from '../types';
-import { NodeImageBlock } from '~/components/node/NodeImageBlock';
+import { NodeImageSlideBlock } from '~/components/node/NodeImageSlideBlock';
 import { ImageEditor } from '~/components/editors/ImageEditor';
 import { TextEditor } from '~/components/editors/TextEditor';
 import { DIALOGS } from '../modal/constants';
@@ -63,7 +63,7 @@ type INodeComponents = Record<
 >;
 
 export const NODE_COMPONENTS: INodeComponents = {
-  [NODE_TYPES.IMAGE]: NodeImageBlock,
+  [NODE_TYPES.IMAGE]: NodeImageSlideBlock,
 };
 
 export const EMPTY_COMMENT: IComment = {

From b2b21f5b9ad74a9e59e1a791888ec5f8a324b77a Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 17 Oct 2019 11:09:42 +0700
Subject: [PATCH 19/99] moving slider

---
 .../node/NodeImageSlideBlock/index.tsx        | 67 +++++++++++++------
 1 file changed, 45 insertions(+), 22 deletions(-)

diff --git a/src/components/node/NodeImageSlideBlock/index.tsx b/src/components/node/NodeImageSlideBlock/index.tsx
index c2efff13..7fc60160 100644
--- a/src/components/node/NodeImageSlideBlock/index.tsx
+++ b/src/components/node/NodeImageSlideBlock/index.tsx
@@ -35,7 +35,8 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
   const [initial_x, setInitialX] = useState(0);
   const [offset, setOffset] = useState(0);
   const [is_dragging, setIsDragging] = useState(false);
-  const slide = useRef();
+  const slide = useRef<HTMLDivElement>();
+  const wrap = useRef<HTMLDivElement>();
 
   const images = useMemo(
     () =>
@@ -46,11 +47,14 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
   // console.log({ heights });
 
   const updateSizes = useCallback(() => {
-    const values = Object.keys(refs.current).map(key => {
+    const values = Object.keys(refs.current).reduce((obj, key) => {
       const ref = refs.current[key];
       if (!ref || !ref.getBoundingClientRect) return 0;
-      return ref.getBoundingClientRect().height;
-    });
+      return { ...obj, [key]: ref.getBoundingClientRect().height };
+    }, {});
+
+    setHeights(values);
+    console.log({ values });
   }, [refs]);
 
   const setRef = useCallback(
@@ -80,38 +84,58 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
     // setHeight(element_height);
   }, [refs, current, loaded]);
 
+  useEffect(() => {
+    if (!wrap || !wrap.current) return;
+
+    const { width } = wrap.current.getBoundingClientRect();
+    const selected = Math.abs(-offset / width);
+    const prev = heights[Math.floor(selected)] || 320;
+    const next = heights[Math.ceil(selected)] || 320;
+    const now = prev - (prev - next) * (selected % 1);
+
+    setHeight(now);
+    console.log({ offset, prev, next, now, selected });
+  }, [offset, heights]);
   // useEffect(() => {
   // const timer = setTimeout(() => setIsAnimated(true), 250);
   //
   // return () => clearTimeout(timer);
   // }, []);
 
-  const stopDragging = useCallback(() => {
-    window.removeEventListener('mouseup', stopDragging);
-    setIsDragging(false);
-  }, [setIsDragging]);
-
-  const startDragging: MouseEventHandler<HTMLDivElement> = useCallback(
-    event => {
-      window.addEventListener('mouseup', stopDragging);
-      setIsDragging(true);
-      setInitialX(event.clientX);
-      setInitialOffset(offset);
-    },
-    [setIsDragging, stopDragging, setInitialX, offset, setInitialOffset]
-  );
-
   const onDrag = useCallback(
     event => {
       if (!is_dragging) return;
-
       setOffset(initial_offset + event.clientX - initial_x);
     },
     [is_dragging, initial_x, setOffset, initial_offset]
   );
 
+  const stopDragging = useCallback(() => {
+    window.removeEventListener('mouseup', stopDragging);
+    setIsDragging(false);
+  }, [setIsDragging, onDrag]);
+
+  const startDragging: MouseEventHandler<HTMLDivElement> = useCallback(
+    event => {
+      setIsDragging(true);
+      setInitialX(event.clientX);
+      setInitialOffset(offset);
+
+      window.addEventListener('mouseup', stopDragging);
+    },
+    [setIsDragging, stopDragging, setInitialX, offset, setInitialOffset, onDrag]
+  );
+
+  useEffect(() => {
+    window.addEventListener('mousemove', onDrag);
+
+    return () => {
+      window.removeEventListener('mousemove', onDrag);
+    };
+  }, [onDrag]);
+
   return (
-    <div className={classNames(styles.wrap, { is_loading, is_animated })}>
+    <div className={classNames(styles.wrap, { is_loading, is_animated })} ref={wrap}>
       <div
         className={styles.image_container}
         style={{
@@ -120,7 +144,6 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
           width: `${images.length * 100}%`,
         }}
         onMouseDown={startDragging}
-        onMouseMove={onDrag}
         ref={slide}
       >
         {(is_loading || !loaded[0] || !images.length) && <div className={styles.placeholder} />}

From 31093d42c3773e4f69d013da1c76bec6c77d135a Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 17 Oct 2019 11:24:23 +0700
Subject: [PATCH 20/99] minimal slide height

---
 .../node/NodeImageSlideBlock/index.tsx         | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/components/node/NodeImageSlideBlock/index.tsx b/src/components/node/NodeImageSlideBlock/index.tsx
index 7fc60160..acc33248 100644
--- a/src/components/node/NodeImageSlideBlock/index.tsx
+++ b/src/components/node/NodeImageSlideBlock/index.tsx
@@ -89,13 +89,13 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
 
     const { width } = wrap.current.getBoundingClientRect();
     const selected = Math.abs(-offset / width);
-    const prev = heights[Math.floor(selected)] || 320;
-    const next = heights[Math.ceil(selected)] || 320;
+    const prev = Math.max(heights[Math.floor(selected)] || 320, 320);
+    const next = Math.max(heights[Math.ceil(selected)] || 320, 320);
     const now = prev - (prev - next) * (selected % 1);
 
     setHeight(now);
-    console.log({ offset, prev, next, now, selected });
   }, [offset, heights]);
+
   // useEffect(() => {
   // const timer = setTimeout(() => setIsAnimated(true), 250);
   //
@@ -104,8 +104,16 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
 
   const onDrag = useCallback(
     event => {
-      if (!is_dragging) return;
-      setOffset(initial_offset + event.clientX - initial_x);
+      if (!is_dragging || !slide.current || !wrap.current) return;
+
+      const { width: slide_width } = slide.current.getBoundingClientRect();
+      const { width: wrap_width } = wrap.current.getBoundingClientRect();
+
+      console.log(wrap_width - slide_width, initial_offset + event.clientX - initial_x);
+
+      setOffset(
+        Math.min(Math.max(initial_offset + event.clientX - initial_x, wrap_width - slide_width), 0)
+      );
     },
     [is_dragging, initial_x, setOffset, initial_offset]
   );

From 4236ef9824ad96af017a0e48bcd59a2a5ced2db7 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 17 Oct 2019 12:33:52 +0700
Subject: [PATCH 21/99] sliding with mouse

---
 .../node/NodeImageSlideBlock/index.tsx        | 50 +++++++++++++------
 1 file changed, 36 insertions(+), 14 deletions(-)

diff --git a/src/components/node/NodeImageSlideBlock/index.tsx b/src/components/node/NodeImageSlideBlock/index.tsx
index acc33248..30066358 100644
--- a/src/components/node/NodeImageSlideBlock/index.tsx
+++ b/src/components/node/NodeImageSlideBlock/index.tsx
@@ -8,6 +8,7 @@ import React, {
   useRef,
   useCallback,
   MouseEventHandler,
+  TouchEventHandler,
 } from 'react';
 import { ImageSwitcher } from '../ImageSwitcher';
 import * as styles from './styles.scss';
@@ -23,6 +24,8 @@ interface IProps {
   updateLayout: () => void;
 }
 
+const getX = event => (event.touches ? event.touches[0].clientX : event.clientX);
+
 const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) => {
   const [is_animated, setIsAnimated] = useState(false);
   const [current, setCurrent] = useState(0);
@@ -54,7 +57,6 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
     }, {});
 
     setHeights(values);
-    console.log({ values });
   }, [refs]);
 
   const setRef = useCallback(
@@ -104,54 +106,74 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
 
   const onDrag = useCallback(
     event => {
-      if (!is_dragging || !slide.current || !wrap.current) return;
+      if (
+        !is_dragging ||
+        !slide.current ||
+        !wrap.current ||
+        (event.touches && event.clientY > event.clientX)
+      )
+        return;
 
       const { width: slide_width } = slide.current.getBoundingClientRect();
       const { width: wrap_width } = wrap.current.getBoundingClientRect();
 
-      console.log(wrap_width - slide_width, initial_offset + event.clientX - initial_x);
-
       setOffset(
-        Math.min(Math.max(initial_offset + event.clientX - initial_x, wrap_width - slide_width), 0)
+        Math.min(Math.max(initial_offset + getX(event) - initial_x, wrap_width - slide_width), 0)
       );
     },
     [is_dragging, initial_x, setOffset, initial_offset]
   );
 
   const stopDragging = useCallback(() => {
-    window.removeEventListener('mouseup', stopDragging);
-    setIsDragging(false);
-  }, [setIsDragging, onDrag]);
+    if (!is_dragging) return;
 
-  const startDragging: MouseEventHandler<HTMLDivElement> = useCallback(
+    const { width: wrap_width } = wrap.current.getBoundingClientRect();
+
+    setIsDragging(false);
+    setOffset(Math.round(offset / wrap_width) * wrap_width);
+  }, [setIsDragging, offset, setOffset, is_dragging, wrap]);
+
+  const startDragging = useCallback(
     event => {
       setIsDragging(true);
-      setInitialX(event.clientX);
+      setInitialX(getX(event));
       setInitialOffset(offset);
-
-      window.addEventListener('mouseup', stopDragging);
     },
-    [setIsDragging, stopDragging, setInitialX, offset, setInitialOffset, onDrag]
+    [setIsDragging, setInitialX, offset, setInitialOffset]
   );
 
   useEffect(() => {
+    window.addEventListener('resize', updateSizes);
+
     window.addEventListener('mousemove', onDrag);
+    window.addEventListener('touchmove', onDrag);
+
+    window.addEventListener('mouseup', stopDragging);
+    window.addEventListener('touchend', stopDragging);
 
     return () => {
+      window.removeEventListener('resize', updateSizes);
+
       window.removeEventListener('mousemove', onDrag);
+      window.removeEventListener('touchmove', onDrag);
+
+      window.removeEventListener('mouseup', stopDragging);
+      window.removeEventListener('touchend', stopDragging);
     };
-  }, [onDrag]);
+  }, [onDrag, stopDragging]);
 
   return (
     <div className={classNames(styles.wrap, { is_loading, is_animated })} ref={wrap}>
       <div
         className={styles.image_container}
         style={{
+          transition: is_dragging ? 'none' : 'transform 500ms',
           height,
           transform: `translate(${offset}px, 0)`,
           width: `${images.length * 100}%`,
         }}
         onMouseDown={startDragging}
+        onTouchStart={startDragging}
         ref={slide}
       >
         {(is_loading || !loaded[0] || !images.length) && <div className={styles.placeholder} />}

From a37bc7696555467fbdc5c06a106c7ff948ac5192 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 17 Oct 2019 12:55:27 +0700
Subject: [PATCH 22/99] finished slider

---
 .../node/NodeImageSlideBlock/index.tsx        | 41 ++++++++++---------
 .../node/NodeImageSlideBlock/styles.scss      | 11 +----
 2 files changed, 22 insertions(+), 30 deletions(-)

diff --git a/src/components/node/NodeImageSlideBlock/index.tsx b/src/components/node/NodeImageSlideBlock/index.tsx
index 30066358..40c4f71c 100644
--- a/src/components/node/NodeImageSlideBlock/index.tsx
+++ b/src/components/node/NodeImageSlideBlock/index.tsx
@@ -27,7 +27,7 @@ interface IProps {
 const getX = event => (event.touches ? event.touches[0].clientX : event.clientX);
 
 const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) => {
-  const [is_animated, setIsAnimated] = useState(false);
+  // const [is_animated, setIsAnimated] = useState(false);
   const [current, setCurrent] = useState(0);
   const [height, setHeight] = useState(320);
   const [loaded, setLoaded] = useState<Record<number, boolean>>({});
@@ -72,19 +72,9 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
   ]);
 
   // update outside hooks
-  useEffect(() => updateLayout(), [loaded]);
+  useEffect(() => updateLayout(), [loaded, height]);
 
-  useEffect(() => {
-    updateSizes();
-    //
-    // if (!refs || !refs.current[current] || !loaded[current]) return setHeight(320);
-    //
-    // const el = refs.current[current];
-    //
-    // const element_height = el.getBoundingClientRect && el.getBoundingClientRect().height;
-    //
-    // setHeight(element_height);
-  }, [refs, current, loaded]);
+  useEffect(() => updateSizes(), [refs, current, loaded]);
 
   useEffect(() => {
     if (!wrap || !wrap.current) return;
@@ -95,15 +85,11 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
     const next = Math.max(heights[Math.ceil(selected)] || 320, 320);
     const now = prev - (prev - next) * (selected % 1);
 
+    if (current !== Math.round(selected)) setCurrent(Math.round(selected));
+
     setHeight(now);
   }, [offset, heights]);
 
-  // useEffect(() => {
-  // const timer = setTimeout(() => setIsAnimated(true), 250);
-  //
-  // return () => clearTimeout(timer);
-  // }, []);
-
   const onDrag = useCallback(
     event => {
       if (
@@ -162,8 +148,23 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
     };
   }, [onDrag, stopDragging]);
 
+  const changeCurrent = useCallback(
+    (item: number) => {
+      const { width } = wrap.current.getBoundingClientRect();
+      setOffset(-1 * item * width);
+    },
+    [wrap]
+  );
+
   return (
-    <div className={classNames(styles.wrap, { is_loading, is_animated })} ref={wrap}>
+    <div className={classNames(styles.wrap, { is_loading })} ref={wrap}>
+      <ImageSwitcher
+        total={images.length}
+        current={current}
+        onChange={changeCurrent}
+        loaded={loaded}
+      />
+
       <div
         className={styles.image_container}
         style={{
diff --git a/src/components/node/NodeImageSlideBlock/styles.scss b/src/components/node/NodeImageSlideBlock/styles.scss
index c36ee620..2feef7be 100644
--- a/src/components/node/NodeImageSlideBlock/styles.scss
+++ b/src/components/node/NodeImageSlideBlock/styles.scss
@@ -3,16 +3,7 @@
   position: relative;
   min-width: 0;
   width: 100%;
-
-  &:global(.is_animated) {
-    .image_container {
-      transition: height 0.5s;
-    }
-
-    .image_wrap {
-      transition: opacity 0.5s;
-    }
-  }
+  transition: height 0.25s;
 }
 
 .image_container {

From 57f90ee46bbde409a6792d97e52bd8f191a49562 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 17 Oct 2019 13:17:34 +0700
Subject: [PATCH 23/99] fixed text editor appearance

---
 src/components/bars/SubmitBar/index.tsx       |  5 +++++
 src/components/editors/TextEditor/styles.scss |  4 +++-
 src/containers/dialogs/EditorDialog/index.tsx | 12 +++++++++---
 src/redux/node/handlers.ts                    |  2 +-
 src/styles/inputs.scss                        |  2 +-
 5 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/components/bars/SubmitBar/index.tsx b/src/components/bars/SubmitBar/index.tsx
index da44ab82..d5952c43 100644
--- a/src/components/bars/SubmitBar/index.tsx
+++ b/src/components/bars/SubmitBar/index.tsx
@@ -17,6 +17,7 @@ type IProps = typeof mapDispatchToProps & {};
 
 const SubmitBarUnconnected: FC<IProps> = ({ nodeCreate }) => {
   const onOpenImageEditor = useCallback(() => nodeCreate(NODE_TYPES.IMAGE), [nodeCreate]);
+  const onOpenTextEditor = useCallback(() => nodeCreate(NODE_TYPES.TEXT), [nodeCreate]);
 
   return (
     <div className={styles.wrap}>
@@ -24,6 +25,10 @@ const SubmitBarUnconnected: FC<IProps> = ({ nodeCreate }) => {
         <div onClick={onOpenImageEditor}>
           <Icon icon="image" />
         </div>
+
+        <div onClick={onOpenTextEditor}>
+          <Icon icon="image" />
+        </div>
       </div>
 
       <div className={styles.button}>
diff --git a/src/components/editors/TextEditor/styles.scss b/src/components/editors/TextEditor/styles.scss
index 4d3618e6..86245f67 100644
--- a/src/components/editors/TextEditor/styles.scss
+++ b/src/components/editors/TextEditor/styles.scss
@@ -1,3 +1,5 @@
 .wrap {
-  padding-bottom: 60px;
+  & > div {
+    padding-bottom: 64px;
+  }
 }
diff --git a/src/containers/dialogs/EditorDialog/index.tsx b/src/containers/dialogs/EditorDialog/index.tsx
index 02d5a53e..8257e08d 100644
--- a/src/containers/dialogs/EditorDialog/index.tsx
+++ b/src/containers/dialogs/EditorDialog/index.tsx
@@ -13,12 +13,14 @@ import { EditorPanel } from '~/components/editors/EditorPanel';
 import * as NODE_ACTIONS from '~/redux/node/actions';
 import { selectUploads } from '~/redux/uploads/selectors';
 import { ERROR_LITERAL } from '~/constants/errors';
-import { NODE_EDITORS } from '~/redux/node/constants';
+import { NODE_EDITORS, EMPTY_NODE } from '~/redux/node/constants';
 
 const mapStateToProps = state => {
   const { editor, errors } = selectNode(state);
   const { statuses, files } = selectUploads(state);
 
+  console.log('mss', { editor });
+
   return { editor, statuses, files, errors };
 };
 
@@ -41,9 +43,11 @@ const EditorDialogUnconnected: FC<IProps> = ({
   onRequestClose,
   type,
 }) => {
-  const [data, setData] = useState(editor);
+  const [data, setData] = useState(EMPTY_NODE);
   const [temp, setTemp] = useState([]);
 
+  useEffect(() => setData(editor), [editor]);
+
   const setTitle = useCallback(
     title => {
       setData({ ...data, title });
@@ -53,10 +57,12 @@ const EditorDialogUnconnected: FC<IProps> = ({
 
   const onSubmit = useCallback(
     (event: FormEvent) => {
+      console.log({ data, editor });
       event.preventDefault();
+      return;
       nodeSave(data);
     },
-    [data, nodeSave]
+    [data, nodeSave, editor]
   );
 
   useEffect(() => {
diff --git a/src/redux/node/handlers.ts b/src/redux/node/handlers.ts
index 8600f9b2..3ed37d47 100644
--- a/src/redux/node/handlers.ts
+++ b/src/redux/node/handlers.ts
@@ -44,7 +44,7 @@ const setTags = (state: INodeState, { tags }: ReturnType<typeof nodeSetTags>) =>
   assocPath(['current', 'tags'], tags, state);
 
 const setEditor = (state: INodeState, { editor }: ReturnType<typeof nodeSetEditor>) =>
-  assocPath(['current', 'editor'], editor, state);
+  assocPath(['editor'], editor, state);
 
 export const NODE_HANDLERS = {
   [NODE_ACTIONS.SET_SAVE_ERRORS]: setSaveErrors,
diff --git a/src/styles/inputs.scss b/src/styles/inputs.scss
index 960b61cb..a605a81d 100644
--- a/src/styles/inputs.scss
+++ b/src/styles/inputs.scss
@@ -38,7 +38,7 @@
 
   &.focused {
     opacity: 1;
-    z-index: 999;
+    // z-index: 999;
 
     &.has_status .status {
       flex-basis: 0;

From 54ce8db210bf5b620beb8013908328c86d4d71c3 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 17 Oct 2019 14:44:13 +0700
Subject: [PATCH 24/99] displaying text

---
 .../node/NodeImageSlideBlock/index.tsx        | 13 +-----------
 src/components/node/NodeTextBlock/index.tsx   | 20 +++++++++++++++++++
 src/components/node/NodeTextBlock/styles.scss | 11 ++++++++++
 src/constants/errors.ts                       |  2 ++
 src/containers/dialogs/EditorDialog/index.tsx |  6 +-----
 src/containers/node/NodeLayout/index.tsx      | 11 ++++++++--
 src/redux/modal/reducer.ts                    |  2 +-
 src/redux/node/constants.ts                   |  8 ++++++--
 8 files changed, 51 insertions(+), 22 deletions(-)
 create mode 100644 src/components/node/NodeTextBlock/index.tsx
 create mode 100644 src/components/node/NodeTextBlock/styles.scss

diff --git a/src/components/node/NodeImageSlideBlock/index.tsx b/src/components/node/NodeImageSlideBlock/index.tsx
index 40c4f71c..fe80da69 100644
--- a/src/components/node/NodeImageSlideBlock/index.tsx
+++ b/src/components/node/NodeImageSlideBlock/index.tsx
@@ -1,15 +1,4 @@
-import React, {
-  FC,
-  useMemo,
-  useState,
-  useEffect,
-  RefObject,
-  LegacyRef,
-  useRef,
-  useCallback,
-  MouseEventHandler,
-  TouchEventHandler,
-} from 'react';
+import React, { FC, useMemo, useState, useEffect, useRef, useCallback } from 'react';
 import { ImageSwitcher } from '../ImageSwitcher';
 import * as styles from './styles.scss';
 import { INode } from '~/redux/types';
diff --git a/src/components/node/NodeTextBlock/index.tsx b/src/components/node/NodeTextBlock/index.tsx
new file mode 100644
index 00000000..8b053775
--- /dev/null
+++ b/src/components/node/NodeTextBlock/index.tsx
@@ -0,0 +1,20 @@
+import React, { FC } from 'react';
+import { INode } from '~/redux/types';
+import path from 'ramda/es/path';
+import { formatCommentText } from '~/utils/dom';
+import * as styles from './styles.scss';
+
+interface IProps {
+  node: INode;
+}
+
+const NodeTextBlock: FC<IProps> = ({ node }) => (
+  <div
+    className={styles.text}
+    dangerouslySetInnerHTML={{
+      __html: formatCommentText(null, path(['blocks', 0, 'text'], node)),
+    }}
+  />
+);
+
+export { NodeTextBlock };
diff --git a/src/components/node/NodeTextBlock/styles.scss b/src/components/node/NodeTextBlock/styles.scss
new file mode 100644
index 00000000..d075cd73
--- /dev/null
+++ b/src/components/node/NodeTextBlock/styles.scss
@@ -0,0 +1,11 @@
+.text {
+  @include outer_shadow();
+
+  background: $content_bg;
+  padding: $gap;
+  border-radius: $radius;
+
+  p {
+    margin: $gap / 2 0;
+  }
+}
diff --git a/src/constants/errors.ts b/src/constants/errors.ts
index 15fffbf7..4070a22c 100644
--- a/src/constants/errors.ts
+++ b/src/constants/errors.ts
@@ -4,6 +4,7 @@ export const ERRORS = {
   EMPTY_RESPONSE: 'Empty_Response',
   NO_COMMENTS: 'No_Comments',
   FILES_REQUIRED: 'Files_Required',
+  TEXT_REQUIRED: 'Text_Required',
 };
 
 export const ERROR_LITERAL = {
@@ -12,4 +13,5 @@ export const ERROR_LITERAL = {
   [ERRORS.NO_COMMENTS]: 'Комментариев пока нет',
   [ERRORS.EMPTY_RESPONSE]: 'Пустой ответ сервера',
   [ERRORS.FILES_REQUIRED]: 'Добавьте файлы',
+  [ERRORS.TEXT_REQUIRED]: 'Нужно немного текста',
 };
diff --git a/src/containers/dialogs/EditorDialog/index.tsx b/src/containers/dialogs/EditorDialog/index.tsx
index 8257e08d..5430e4ca 100644
--- a/src/containers/dialogs/EditorDialog/index.tsx
+++ b/src/containers/dialogs/EditorDialog/index.tsx
@@ -19,8 +19,6 @@ const mapStateToProps = state => {
   const { editor, errors } = selectNode(state);
   const { statuses, files } = selectUploads(state);
 
-  console.log('mss', { editor });
-
   return { editor, statuses, files, errors };
 };
 
@@ -57,12 +55,10 @@ const EditorDialogUnconnected: FC<IProps> = ({
 
   const onSubmit = useCallback(
     (event: FormEvent) => {
-      console.log({ data, editor });
       event.preventDefault();
-      return;
       nodeSave(data);
     },
-    [data, nodeSave, editor]
+    [data, nodeSave]
   );
 
   useEffect(() => {
diff --git a/src/containers/node/NodeLayout/index.tsx b/src/containers/node/NodeLayout/index.tsx
index 4153147b..cde602c5 100644
--- a/src/containers/node/NodeLayout/index.tsx
+++ b/src/containers/node/NodeLayout/index.tsx
@@ -13,7 +13,7 @@ import { NodeRelated } from '~/components/node/NodeRelated';
 import * as styles from './styles.scss';
 import { NodeComments } from '~/components/node/NodeComments';
 import { NodeTags } from '~/components/node/NodeTags';
-import { NODE_COMPONENTS } from '~/redux/node/constants';
+import { NODE_COMPONENTS, NODE_INLINES } from '~/redux/node/constants';
 import * as NODE_ACTIONS from '~/redux/node/actions';
 import { CommentForm } from '~/components/node/CommentForm';
 import { selectUser } from '~/redux/auth/selectors';
@@ -57,7 +57,8 @@ const NodeLayoutUnconnected: FC<IProps> = ({
     [node, nodeUpdateTags]
   );
 
-  const block = node && node.type && NODE_COMPONENTS[node.type] && NODE_COMPONENTS[node.type];
+  const block = node && node.type && NODE_COMPONENTS[node.type];
+  const inline_block = node && node.type && NODE_INLINES[node.type];
 
   return (
     <Card className={styles.node} seamless>
@@ -69,6 +70,12 @@ const NodeLayoutUnconnected: FC<IProps> = ({
         <Padder>
           <Group horizontal className={styles.content}>
             <Group className={styles.comments}>
+              {inline_block && (
+                <div className={styles.inline_block}>
+                  {createElement(inline_block, { node, is_loading, updateLayout, layout })}
+                </div>
+              )}
+
               {is_loading_comments || !comments.length ? (
                 <NodeNoComments is_loading={is_loading_comments} />
               ) : (
diff --git a/src/redux/modal/reducer.ts b/src/redux/modal/reducer.ts
index 2a7e472a..a8d4ca97 100644
--- a/src/redux/modal/reducer.ts
+++ b/src/redux/modal/reducer.ts
@@ -9,7 +9,7 @@ export interface IModalState {
 }
 
 const INITIAL_STATE: IModalState = {
-  is_shown: false,
+  is_shown: true,
   dialog: DIALOGS.EDITOR_TEXT,
 };
 
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index 64bd54c8..04afa40a 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -1,9 +1,9 @@
 import { FC } from 'react';
-import { IBlock, INode, ValueOf, IComment } from '../types';
+import { INode, ValueOf, IComment } from '../types';
 import { NodeImageSlideBlock } from '~/components/node/NodeImageSlideBlock';
+import { NodeTextBlock } from '~/components/node/NodeTextBlock';
 import { ImageEditor } from '~/components/editors/ImageEditor';
 import { TextEditor } from '~/components/editors/TextEditor';
-import { DIALOGS } from '../modal/constants';
 
 const prefix = 'NODE.';
 export const NODE_ACTIONS = {
@@ -66,6 +66,10 @@ export const NODE_COMPONENTS: INodeComponents = {
   [NODE_TYPES.IMAGE]: NodeImageSlideBlock,
 };
 
+export const NODE_INLINES: INodeComponents = {
+  [NODE_TYPES.TEXT]: NodeTextBlock,
+};
+
 export const EMPTY_COMMENT: IComment = {
   id: null,
   text: '',

From 1552e88ddd7aeeef8c823107b78e089a9577d0f7 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 17 Oct 2019 14:46:07 +0700
Subject: [PATCH 25/99] showing text nodes

---
 src/components/node/NodeTextBlock/styles.scss | 4 ++--
 src/utils/dom.ts                              | 8 ++++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/components/node/NodeTextBlock/styles.scss b/src/components/node/NodeTextBlock/styles.scss
index d075cd73..8bcd3b80 100644
--- a/src/components/node/NodeTextBlock/styles.scss
+++ b/src/components/node/NodeTextBlock/styles.scss
@@ -2,10 +2,10 @@
   @include outer_shadow();
 
   background: $content_bg;
-  padding: $gap;
+  padding: $gap * 4;
   border-radius: $radius;
 
   p {
-    margin: $gap / 2 0;
+    margin: $gap 0;
   }
 }
diff --git a/src/utils/dom.ts b/src/utils/dom.ts
index 00ed1461..15d122f2 100644
--- a/src/utils/dom.ts
+++ b/src/utils/dom.ts
@@ -67,8 +67,10 @@ export const getURL = (file: Partial<IFile>) => {
 export const getImageSize = (file: IFile, size?: string): string => getURL(file);
 // `${process.env.API_HOST}${image}`.replace('{size}', size);
 
-export const formatCommentText = (author, text: string) =>
-  text
+export const formatCommentText = (author, text: string) => {
+  if (!text) return '';
+
+  return text
     .replace(/(\n{2,})/gi, '\n')
     .replace(/</g, '&lt;')
     .replace(/>/g, '&gt;')
@@ -82,6 +84,8 @@ export const formatCommentText = (author, text: string) =>
         : `<p>${el}</p>`
     )
     .join('');
+};
+
 // .replace(/\/\*(\*(?!\/)|[^*])*\*\//igm, '');
 
 export const getPrettyDate = (date: string): string =>

From de8e5b2d9e8cbb428f02bf759e5ab18f13cb24e4 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 17 Oct 2019 14:56:32 +0700
Subject: [PATCH 26/99] hide the dialog!

---
 src/redux/modal/reducer.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/redux/modal/reducer.ts b/src/redux/modal/reducer.ts
index a8d4ca97..2a7e472a 100644
--- a/src/redux/modal/reducer.ts
+++ b/src/redux/modal/reducer.ts
@@ -9,7 +9,7 @@ export interface IModalState {
 }
 
 const INITIAL_STATE: IModalState = {
-  is_shown: true,
+  is_shown: false,
   dialog: DIALOGS.EDITOR_TEXT,
 };
 

From 6d0a22707cf802c01049b69d9b89df59c1def5fc Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 17 Oct 2019 16:34:41 +0700
Subject: [PATCH 27/99] better text formatting

---
 src/components/node/NodeTextBlock/index.tsx   |  4 +--
 src/components/node/NodeTextBlock/styles.scss |  2 ++
 src/utils/dom.ts                              | 26 +++++++++++--------
 3 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/src/components/node/NodeTextBlock/index.tsx b/src/components/node/NodeTextBlock/index.tsx
index 8b053775..adb38d73 100644
--- a/src/components/node/NodeTextBlock/index.tsx
+++ b/src/components/node/NodeTextBlock/index.tsx
@@ -1,7 +1,7 @@
 import React, { FC } from 'react';
 import { INode } from '~/redux/types';
 import path from 'ramda/es/path';
-import { formatCommentText } from '~/utils/dom';
+import { formatText } from '~/utils/dom';
 import * as styles from './styles.scss';
 
 interface IProps {
@@ -12,7 +12,7 @@ const NodeTextBlock: FC<IProps> = ({ node }) => (
   <div
     className={styles.text}
     dangerouslySetInnerHTML={{
-      __html: formatCommentText(null, path(['blocks', 0, 'text'], node)),
+      __html: formatText(path(['blocks', 0, 'text'], node)),
     }}
   />
 );
diff --git a/src/components/node/NodeTextBlock/styles.scss b/src/components/node/NodeTextBlock/styles.scss
index 8bcd3b80..9acebdf6 100644
--- a/src/components/node/NodeTextBlock/styles.scss
+++ b/src/components/node/NodeTextBlock/styles.scss
@@ -7,5 +7,7 @@
 
   p {
     margin: $gap 0;
+    font-size: 18px;
+    line-height: 24px;
   }
 }
diff --git a/src/utils/dom.ts b/src/utils/dom.ts
index 15d122f2..155bdb66 100644
--- a/src/utils/dom.ts
+++ b/src/utils/dom.ts
@@ -67,10 +67,8 @@ export const getURL = (file: Partial<IFile>) => {
 export const getImageSize = (file: IFile, size?: string): string => getURL(file);
 // `${process.env.API_HOST}${image}`.replace('{size}', size);
 
-export const formatCommentText = (author, text: string) => {
-  if (!text) return '';
-
-  return text
+export const formatText = (text: string): string =>
+  text
     .replace(/(\n{2,})/gi, '\n')
     .replace(/</g, '&lt;')
     .replace(/>/g, '&gt;')
@@ -78,15 +76,21 @@ export const formatCommentText = (author, text: string) => {
     .replace(/(\/\/[^\n]+)/gim, '<span class="grey">$1</span>')
     .replace(/:\|--\|/gim, '://')
     .split('\n')
-    .map((el, index) =>
-      index === 0
-        ? `${author ? `<p><b class="comment-author">${author}: </b>` : ''}${el}</p>`
-        : `<p>${el}</p>`
-    )
+    .map(el => `<p>${el}</p>`)
+    // .map((el, index) =>
+    //   index === 0
+    //     ? `${author ? `<p><b class="comment-author">${author}: </b>` : ''}${el}</p>`
+    //     : `<p>${el}</p>`
+    // )
     .join('');
-};
 
-// .replace(/\/\*(\*(?!\/)|[^*])*\*\//igm, '');
+export const formatCommentText = (author: string, text: string): string =>
+  text
+    ? formatText(text).replace(
+        /^<p>/,
+        author ? `<p><b class="comment-author">${author}: </b></p>` : '<p>'
+      )
+    : '';
 
 export const getPrettyDate = (date: string): string =>
   formatDistanceToNow(new Date(date), { locale: ru, includeSeconds: true, addSuffix: true });

From 6476e60c816cf128e6364af0971850288b9fd782 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 17 Oct 2019 16:53:52 +0700
Subject: [PATCH 28/99] better text nodes appearance

---
 src/components/flow/Cell/index.tsx   | 27 ++++++++++++++---------
 src/components/flow/Cell/styles.scss | 19 ++++++-----------
 src/styles/variables.scss            |  2 +-
 src/utils/dom.ts                     | 32 +++++++++++++++-------------
 4 files changed, 42 insertions(+), 38 deletions(-)

diff --git a/src/components/flow/Cell/index.tsx b/src/components/flow/Cell/index.tsx
index e85c2576..c88bf53b 100644
--- a/src/components/flow/Cell/index.tsx
+++ b/src/components/flow/Cell/index.tsx
@@ -1,23 +1,18 @@
 import React, { FC, useState, useCallback } from 'react';
 import { INode } from '~/redux/types';
-import { URLS } from '~/constants/urls';
-import { getImageSize, getURL } from '~/utils/dom';
-import classNames = require('classnames');
+import { getURL } from '~/utils/dom';
+import classNames from 'classnames';
 
 import * as styles from './styles.scss';
+import path from 'ramda/es/path';
 
 interface IProps {
   node: INode;
-  // height?: number;
-  // width?: number;
-  // title?: string;
-  // is_hero?: boolean;
-  // is_stamp?: boolean;
   onSelect: (id: INode['id'], type: INode['type']) => void;
   is_text?: boolean;
 }
 
-const Cell: FC<IProps> = ({ node: { id, title, brief, type }, onSelect, is_text = false }) => {
+const Cell: FC<IProps> = ({ node: { id, title, brief, type, blocks }, onSelect }) => {
   const [is_loaded, setIsLoaded] = useState(false);
 
   const onImageLoad = useCallback(() => {
@@ -26,12 +21,17 @@ const Cell: FC<IProps> = ({ node: { id, title, brief, type }, onSelect, is_text
 
   const onClick = useCallback(() => onSelect(id, type), [onSelect, id]);
 
+  const text = path([0, 'text'], blocks);
+
   return (
     <div
       className={classNames(styles.cell, 'vert-1', 'hor-1', { is_text: false })}
       onClick={onClick}
     >
-      <div className={styles.face}>{title && <div className={styles.title}>{title}</div>}</div>
+      <div className={styles.face}>
+        {title && <div className={styles.title}>{title}</div>}
+        {text && <div className={styles.text}>{text}</div>}
+      </div>
 
       {brief && brief.thumbnail && (
         <div
@@ -49,3 +49,10 @@ const Cell: FC<IProps> = ({ node: { id, title, brief, type }, onSelect, is_text
 };
 
 export { Cell };
+
+/*
+  {type === NODE_TYPES.TEXT && (
+    <div className={styles.text}>{path(['blocks', 0, 'text'], blocks)}</div>
+  )}
+  }
+*/
diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index 4b020662..539ab88c 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -26,16 +26,10 @@
 }
 
 .text {
-  font: $font_16_regular;
-  line-height: 1.3em;
+  font: $font_18_regular;
+  line-height: 23px;
+  margin-top: $gap;
   letter-spacing: 0.5px;
-  position: absolute;
-  top: 0;
-  left: 0;
-  padding: $gap;
-  background: darken($content_bg, 4%);
-  height: 100%;
-  overflow: hidden;
 
   &::after {
     content: ' ';
@@ -43,10 +37,10 @@
     bottom: 0;
     left: 0;
     width: 100%;
-    height: 100px;
+    height: 160px;
     pointer-events: none;
     touch-action: none;
-    background: linear-gradient(transparentize($content_bg, 1), $content_bg 70px);
+    background: linear-gradient(transparentize($content_bg, 1), $content_bg 95%);
     z-index: 1;
     border-radius: 0 0 $radius $radius;
   }
@@ -55,6 +49,7 @@
 .title,
 .text_title {
   font: $font_cell_title;
+  line-height: 1.1em;
 
   text-transform: uppercase;
   overflow: hidden;
@@ -63,7 +58,7 @@
 }
 
 .title {
-  max-height: 2.6em;
+  // max-height: 3.3em;
 }
 
 .text_title {
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index cd9a6404..e86b5b2f 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -52,7 +52,7 @@ $font_10_semibold: $semibold 10px $font;
 $font_8_regular: $regular 8px $font;
 $font_8_semibold: $semibold 8px $font;
 
-$font_cell_title: $font_24_bold;
+$font_cell_title: $bold 30px $font;
 $font_hero_title: $font_48_semibold;
 
 $shadow_depth_1: transparentize(black, 0.8) 0 1px, inset transparentize(white, 0.98) 0 1px;
diff --git a/src/utils/dom.ts b/src/utils/dom.ts
index 155bdb66..e52f98cc 100644
--- a/src/utils/dom.ts
+++ b/src/utils/dom.ts
@@ -68,21 +68,23 @@ export const getImageSize = (file: IFile, size?: string): string => getURL(file)
 // `${process.env.API_HOST}${image}`.replace('{size}', size);
 
 export const formatText = (text: string): string =>
-  text
-    .replace(/(\n{2,})/gi, '\n')
-    .replace(/</g, '&lt;')
-    .replace(/>/g, '&gt;')
-    .replace(/:\/\//gim, ':|--|')
-    .replace(/(\/\/[^\n]+)/gim, '<span class="grey">$1</span>')
-    .replace(/:\|--\|/gim, '://')
-    .split('\n')
-    .map(el => `<p>${el}</p>`)
-    // .map((el, index) =>
-    //   index === 0
-    //     ? `${author ? `<p><b class="comment-author">${author}: </b>` : ''}${el}</p>`
-    //     : `<p>${el}</p>`
-    // )
-    .join('');
+  !text
+    ? ''
+    : text
+        .replace(/(\n{2,})/gi, '\n')
+        .replace(/</g, '&lt;')
+        .replace(/>/g, '&gt;')
+        .replace(/:\/\//gim, ':|--|')
+        .replace(/(\/\/[^\n]+)/gim, '<span class="grey">$1</span>')
+        .replace(/:\|--\|/gim, '://')
+        .split('\n')
+        .map(el => `<p>${el}</p>`)
+        // .map((el, index) =>
+        //   index === 0
+        //     ? `${author ? `<p><b class="comment-author">${author}: </b>` : ''}${el}</p>`
+        //     : `<p>${el}</p>`
+        // )
+        .join('');
 
 export const formatCommentText = (author: string, text: string): string =>
   text

From 1249389691c7abd2538b4aee82e6283988ba770b Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 17 Oct 2019 17:59:29 +0700
Subject: [PATCH 29/99] fixed text appearance

---
 src/components/flow/Cell/styles.scss | 1 +
 src/utils/dom.ts                     | 9 ++++++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index 539ab88c..b57eef2b 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -55,6 +55,7 @@
   overflow: hidden;
 
   box-sizing: border-box;
+  word-break: break-word;
 }
 
 .title {
diff --git a/src/utils/dom.ts b/src/utils/dom.ts
index e52f98cc..62a4a020 100644
--- a/src/utils/dom.ts
+++ b/src/utils/dom.ts
@@ -1,6 +1,7 @@
 import { IFile } from '~/redux/types';
 import formatDistanceToNow from 'date-fns/formatDistanceToNow';
 import { ru } from 'date-fns/locale';
+import Axios from 'axios';
 
 export const getStyle = (oElm: any, strCssRule: string) => {
   if (document.defaultView && document.defaultView.getComputedStyle) {
@@ -90,9 +91,15 @@ export const formatCommentText = (author: string, text: string): string =>
   text
     ? formatText(text).replace(
         /^<p>/,
-        author ? `<p><b class="comment-author">${author}: </b></p>` : '<p>'
+        author ? `<p><b class="comment-author">${author}: </b>` : '<p>'
       )
     : '';
 
 export const getPrettyDate = (date: string): string =>
   formatDistanceToNow(new Date(date), { locale: ru, includeSeconds: true, addSuffix: true });
+
+export const getYoutubeTitle = async (id: string) => {
+  Axios.get(`http://youtube.com/get_video_info?video_id=${id}`).then(console.log);
+};
+
+(<any>window).getYoutubeTitle = getYoutubeTitle;

From 1c92f9a3b80cce7dd18a7ad0b71cb9779e850be1 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Fri, 18 Oct 2019 09:35:32 +0700
Subject: [PATCH 30/99] changing max image height to its container

---
 .../editors/EditorUploadButton/index.tsx      |  8 ++---
 .../node/NodeImageSlideBlock/index.tsx        | 34 ++++++++++++++-----
 src/redux/node/constants.ts                   |  7 ++--
 3 files changed, 34 insertions(+), 15 deletions(-)

diff --git a/src/components/editors/EditorUploadButton/index.tsx b/src/components/editors/EditorUploadButton/index.tsx
index eb183634..47660d5b 100644
--- a/src/components/editors/EditorUploadButton/index.tsx
+++ b/src/components/editors/EditorUploadButton/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC, useCallback, useEffect, useState } from 'react';
+import React, { FC, useCallback, useEffect } from 'react';
 import * as styles from './styles.scss';
 import { Icon } from '~/components/input/Icon';
 import { IFileWithUUID, INode, IFile } from '~/redux/types';
@@ -9,7 +9,7 @@ import assocPath from 'ramda/es/assocPath';
 import append from 'ramda/es/append';
 import { selectUploads } from '~/redux/uploads/selectors';
 import { connect } from 'react-redux';
-import { MAX_NODE_FILES } from '~/redux/node/constants';
+import { NODE_SETTINGS } from '~/redux/node/constants';
 
 const mapStateToProps = state => {
   const { statuses, files } = selectUploads(state);
@@ -43,9 +43,9 @@ const EditorUploadButtonUnconnected: FC<IProps> = ({
   const onUpload = useCallback(
     (uploads: File[]) => {
       const current = temp.length + data.files.length;
-      const limit = MAX_NODE_FILES - current;
+      const limit = NODE_SETTINGS.MAX_FILES - current;
 
-      if (current >= MAX_NODE_FILES) return;
+      if (current >= NODE_SETTINGS.MAX_FILES) return;
 
       const items: IFileWithUUID[] = Array.from(uploads).map(
         (file: File): IFileWithUUID => ({
diff --git a/src/components/node/NodeImageSlideBlock/index.tsx b/src/components/node/NodeImageSlideBlock/index.tsx
index fe80da69..690453fa 100644
--- a/src/components/node/NodeImageSlideBlock/index.tsx
+++ b/src/components/node/NodeImageSlideBlock/index.tsx
@@ -5,6 +5,7 @@ import { INode } from '~/redux/types';
 import classNames from 'classnames';
 import { getImageSize } from '~/utils/dom';
 import { UPLOAD_TYPES } from '~/redux/uploads/constants';
+import { NODE_SETTINGS } from '~/redux/node/constants';
 
 interface IProps {
   is_loading: boolean;
@@ -19,6 +20,7 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
   // const [is_animated, setIsAnimated] = useState(false);
   const [current, setCurrent] = useState(0);
   const [height, setHeight] = useState(320);
+  const [max_height, setMaxHeight] = useState(960);
   const [loaded, setLoaded] = useState<Record<number, boolean>>({});
   const refs = useRef<Record<number, HTMLDivElement>>({});
   const [heights, setHeights] = useState({});
@@ -36,12 +38,12 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
     [node]
   );
 
-  // console.log({ heights });
-
   const updateSizes = useCallback(() => {
     const values = Object.keys(refs.current).reduce((obj, key) => {
       const ref = refs.current[key];
+
       if (!ref || !ref.getBoundingClientRect) return 0;
+
       return { ...obj, [key]: ref.getBoundingClientRect().height };
     }, {});
 
@@ -62,7 +64,6 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
 
   // update outside hooks
   useEffect(() => updateLayout(), [loaded, height]);
-
   useEffect(() => updateSizes(), [refs, current, loaded]);
 
   useEffect(() => {
@@ -77,7 +78,7 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
     if (current !== Math.round(selected)) setCurrent(Math.round(selected));
 
     setHeight(now);
-  }, [offset, heights]);
+  }, [offset, heights, max_height]);
 
   const onDrag = useCallback(
     event => {
@@ -99,14 +100,24 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
     [is_dragging, initial_x, setOffset, initial_offset]
   );
 
+  const normalizeOffset = useCallback(() => {
+    const { width: wrap_width } = wrap.current.getBoundingClientRect();
+    setOffset(Math.round(offset / wrap_width) * wrap_width);
+  }, [wrap, offset]);
+
+  const updateMaxHeight = useCallback(() => {
+    if (!wrap.current) return;
+    const { width } = wrap.current.getBoundingClientRect();
+    setMaxHeight(width * NODE_SETTINGS.MAX_IMAGE_ASPECT);
+    normalizeOffset();
+  }, [wrap, setMaxHeight, normalizeOffset]);
+
   const stopDragging = useCallback(() => {
     if (!is_dragging) return;
 
-    const { width: wrap_width } = wrap.current.getBoundingClientRect();
-
+    normalizeOffset();
     setIsDragging(false);
-    setOffset(Math.round(offset / wrap_width) * wrap_width);
-  }, [setIsDragging, offset, setOffset, is_dragging, wrap]);
+  }, [setIsDragging, is_dragging, normalizeOffset]);
 
   const startDragging = useCallback(
     event => {
@@ -117,8 +128,11 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
     [setIsDragging, setInitialX, offset, setInitialOffset]
   );
 
+  useEffect(() => updateMaxHeight(), []);
+
   useEffect(() => {
     window.addEventListener('resize', updateSizes);
+    window.addEventListener('resize', updateMaxHeight);
 
     window.addEventListener('mousemove', onDrag);
     window.addEventListener('touchmove', onDrag);
@@ -128,6 +142,7 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
 
     return () => {
       window.removeEventListener('resize', updateSizes);
+      window.removeEventListener('resize', updateMaxHeight);
 
       window.removeEventListener('mousemove', onDrag);
       window.removeEventListener('touchmove', onDrag);
@@ -135,7 +150,7 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
       window.removeEventListener('mouseup', stopDragging);
       window.removeEventListener('touchend', stopDragging);
     };
-  }, [onDrag, stopDragging]);
+  }, [onDrag, stopDragging, updateMaxHeight, updateSizes]);
 
   const changeCurrent = useCallback(
     (item: number) => {
@@ -182,6 +197,7 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
               alt=""
               key={file.id}
               onLoad={onImageLoad(index)}
+              style={{ maxHeight: max_height }}
             />
           </div>
         ))}
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index 04afa40a..8f08cce4 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -84,8 +84,6 @@ export const NODE_EDITORS = {
   [NODE_TYPES.TEXT]: TextEditor,
 };
 
-export const MAX_NODE_FILES = 16;
-
 export const NODE_EDITOR_DATA: Record<
   typeof NODE_TYPES[keyof typeof NODE_TYPES],
   Partial<INode>
@@ -94,3 +92,8 @@ export const NODE_EDITOR_DATA: Record<
     blocks: [{ text: '', type: 'text' }],
   },
 };
+
+export const NODE_SETTINGS = {
+  MAX_FILES: 16,
+  MAX_IMAGE_ASPECT: 1.2,
+};

From 12e366fce93850948079e627e1b2a9ce33e493d2 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Fri, 18 Oct 2019 09:36:07 +0700
Subject: [PATCH 31/99] c;eanup

---
 src/components/node/NodeImageSlideBlock/index.tsx | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/components/node/NodeImageSlideBlock/index.tsx b/src/components/node/NodeImageSlideBlock/index.tsx
index 690453fa..24092867 100644
--- a/src/components/node/NodeImageSlideBlock/index.tsx
+++ b/src/components/node/NodeImageSlideBlock/index.tsx
@@ -17,7 +17,6 @@ interface IProps {
 const getX = event => (event.touches ? event.touches[0].clientX : event.clientX);
 
 const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) => {
-  // const [is_animated, setIsAnimated] = useState(false);
   const [current, setCurrent] = useState(0);
   const [height, setHeight] = useState(320);
   const [max_height, setMaxHeight] = useState(960);

From 8612cc5ce7d1b54c173faa7f757a42bac81b218a Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Sat, 19 Oct 2019 19:42:39 +0700
Subject: [PATCH 32/99] video node editor

---
 src/components/bars/SubmitBar/index.tsx       |  7 +++-
 src/components/editors/VideoEditor/index.tsx  | 40 +++++++++++++++++++
 .../editors/VideoEditor/styles.scss           | 30 ++++++++++++++
 .../editors/EditorDialogVideo/index.tsx       | 10 +++++
 .../editors/EditorDialogVideo/styles.scss     |  0
 src/redux/flow/sagas.ts                       |  6 +--
 src/redux/modal/constants.ts                  |  4 ++
 src/redux/node/constants.ts                   |  2 +
 src/redux/types.ts                            |  2 +-
 src/sprites/Sprites.tsx                       | 10 +++++
 10 files changed, 105 insertions(+), 6 deletions(-)
 create mode 100644 src/components/editors/VideoEditor/index.tsx
 create mode 100644 src/components/editors/VideoEditor/styles.scss
 create mode 100644 src/containers/editors/EditorDialogVideo/index.tsx
 create mode 100644 src/containers/editors/EditorDialogVideo/styles.scss

diff --git a/src/components/bars/SubmitBar/index.tsx b/src/components/bars/SubmitBar/index.tsx
index d5952c43..d9ae30f1 100644
--- a/src/components/bars/SubmitBar/index.tsx
+++ b/src/components/bars/SubmitBar/index.tsx
@@ -18,6 +18,7 @@ type IProps = typeof mapDispatchToProps & {};
 const SubmitBarUnconnected: FC<IProps> = ({ nodeCreate }) => {
   const onOpenImageEditor = useCallback(() => nodeCreate(NODE_TYPES.IMAGE), [nodeCreate]);
   const onOpenTextEditor = useCallback(() => nodeCreate(NODE_TYPES.TEXT), [nodeCreate]);
+  const onOpenVideoEditor = useCallback(() => nodeCreate(NODE_TYPES.VIDEO), [nodeCreate]);
 
   return (
     <div className={styles.wrap}>
@@ -27,7 +28,11 @@ const SubmitBarUnconnected: FC<IProps> = ({ nodeCreate }) => {
         </div>
 
         <div onClick={onOpenTextEditor}>
-          <Icon icon="image" />
+          <Icon icon="text" />
+        </div>
+
+        <div onClick={onOpenVideoEditor}>
+          <Icon icon="video" />
         </div>
       </div>
 
diff --git a/src/components/editors/VideoEditor/index.tsx b/src/components/editors/VideoEditor/index.tsx
new file mode 100644
index 00000000..7409b1d9
--- /dev/null
+++ b/src/components/editors/VideoEditor/index.tsx
@@ -0,0 +1,40 @@
+import React, { FC, useCallback, useMemo } from 'react';
+import { INode } from '~/redux/types';
+import * as styles from './styles.scss';
+import path from 'ramda/es/path';
+import { InputText } from '~/components/input/InputText';
+
+interface IProps {
+  data: INode;
+  setData: (val: INode) => void;
+}
+
+const VideoEditor: FC<IProps> = ({ data, setData }) => {
+  const setUrl = useCallback(
+    (url: string) => setData({ ...data, blocks: [{ type: 'video', url }] }),
+    [data, setData]
+  );
+
+  const url = (path(['blocks', 0, 'url'], data) as string) || '';
+  const preview = useMemo(() => {
+    const match =
+      url &&
+      url.match(
+        /http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)?[\w\?=]*)?/
+      );
+
+    return match && match[1] ? `http://img.youtube.com/vi/${match[1]}/maxresdefault.jpg` : null;
+  }, [url]);
+
+  return (
+    <div className={styles.preview} style={{ backgroundImage: preview && `url("${preview}")` }}>
+      <div className={styles.input_wrap}>
+        <div className={styles.input}>
+          <InputText value={url} handler={setUrl} placeholder="Адрес видео" />
+        </div>
+      </div>
+    </div>
+  );
+};
+
+export { VideoEditor };
diff --git a/src/components/editors/VideoEditor/styles.scss b/src/components/editors/VideoEditor/styles.scss
new file mode 100644
index 00000000..ce800aa2
--- /dev/null
+++ b/src/components/editors/VideoEditor/styles.scss
@@ -0,0 +1,30 @@
+.preview {
+  padding-top: 56.25%;
+  position: relative;
+  // background: darken($color: $content_bg, $amount: 2%);
+}
+
+.input_wrap {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.input {
+  // @include outer_shadow();
+
+  flex: 1 0 50%;
+  padding: $gap * 2 $gap $gap * 2 $gap;
+  // border-radius: $radius;
+  background: $content_bg;
+  // margin: 20px;
+
+  input {
+    text-align: center;
+  }
+}
diff --git a/src/containers/editors/EditorDialogVideo/index.tsx b/src/containers/editors/EditorDialogVideo/index.tsx
new file mode 100644
index 00000000..092c688f
--- /dev/null
+++ b/src/containers/editors/EditorDialogVideo/index.tsx
@@ -0,0 +1,10 @@
+import React, { FC } from 'react';
+import { EditorDialog } from '~/containers/dialogs/EditorDialog';
+import { IDialogProps } from '~/redux/types';
+import { NODE_TYPES } from '~/redux/node/constants';
+
+type IProps = IDialogProps & {};
+
+const EditorDialogVideo: FC<IProps> = props => <EditorDialog type={NODE_TYPES.VIDEO} {...props} />;
+
+export { EditorDialogVideo };
diff --git a/src/containers/editors/EditorDialogVideo/styles.scss b/src/containers/editors/EditorDialogVideo/styles.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/src/redux/flow/sagas.ts b/src/redux/flow/sagas.ts
index cb621c23..a52cb975 100644
--- a/src/redux/flow/sagas.ts
+++ b/src/redux/flow/sagas.ts
@@ -13,13 +13,11 @@ function* onGetFlow() {
   }: IResultWithStatus<{ nodes: INode[] }> = yield call(getNodes, {});
 
   if (!nodes || !nodes.length) {
-    // todo: set error empty response
+    yield put(flowSetNodes([]));
+    return;
   }
 
-  // todo: write nodes
   yield put(flowSetNodes(nodes));
-
-  // console.log('flow', { nodes, error });
 }
 
 export default function* nodeSaga() {
diff --git a/src/redux/modal/constants.ts b/src/redux/modal/constants.ts
index 2bde90a2..fa3b53c5 100644
--- a/src/redux/modal/constants.ts
+++ b/src/redux/modal/constants.ts
@@ -2,6 +2,7 @@ import { ValueOf } from '~/redux/types';
 import { LoginDialog } from '~/containers/dialogs/LoginDialog';
 import { EditorDialogImage } from '~/containers/editors/EditorDialogImage';
 import { EditorDialogText } from '~/containers/editors/EditorDialogText';
+import { EditorDialogVideo } from '~/containers/editors/EditorDialogVideo';
 import { NODE_TYPES } from '../node/constants';
 
 export const MODAL_ACTIONS = {
@@ -13,18 +14,21 @@ export const MODAL_ACTIONS = {
 export const DIALOGS = {
   EDITOR_IMAGE: 'EDITOR_IMAGE',
   EDITOR_TEXT: 'EDITOR_TEXT',
+  EDITOR_VIDEO: 'EDITOR_VIDEO',
   LOGIN: 'LOGIN',
 };
 
 export const DIALOG_CONTENT = {
   [DIALOGS.EDITOR_IMAGE]: EditorDialogImage,
   [DIALOGS.EDITOR_TEXT]: EditorDialogText,
+  [DIALOGS.EDITOR_VIDEO]: EditorDialogVideo,
   [DIALOGS.LOGIN]: LoginDialog,
 };
 
 export const NODE_EDITOR_DIALOGS = {
   [NODE_TYPES.IMAGE]: DIALOGS.EDITOR_IMAGE,
   [NODE_TYPES.TEXT]: DIALOGS.EDITOR_TEXT,
+  [NODE_TYPES.VIDEO]: DIALOGS.EDITOR_VIDEO,
 };
 
 export interface IDialogProps {
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index 8f08cce4..4278f0a2 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -4,6 +4,7 @@ import { NodeImageSlideBlock } from '~/components/node/NodeImageSlideBlock';
 import { NodeTextBlock } from '~/components/node/NodeTextBlock';
 import { ImageEditor } from '~/components/editors/ImageEditor';
 import { TextEditor } from '~/components/editors/TextEditor';
+import { VideoEditor } from '~/components/editors/VideoEditor';
 
 const prefix = 'NODE.';
 export const NODE_ACTIONS = {
@@ -82,6 +83,7 @@ export const EMPTY_COMMENT: IComment = {
 export const NODE_EDITORS = {
   [NODE_TYPES.IMAGE]: ImageEditor,
   [NODE_TYPES.TEXT]: TextEditor,
+  [NODE_TYPES.VIDEO]: VideoEditor,
 };
 
 export const NODE_EDITOR_DATA: Record<
diff --git a/src/redux/types.ts b/src/redux/types.ts
index 7c05e93d..65cc711f 100644
--- a/src/redux/types.ts
+++ b/src/redux/types.ts
@@ -100,7 +100,7 @@ export interface IBlockText {
 }
 
 export interface IBlockEmbed {
-  type: 'embed';
+  type: 'video';
   url: string;
 }
 
diff --git a/src/sprites/Sprites.tsx b/src/sprites/Sprites.tsx
index bba02120..6c97ebdd 100644
--- a/src/sprites/Sprites.tsx
+++ b/src/sprites/Sprites.tsx
@@ -98,6 +98,16 @@ const Sprites: FC<{}> = () => (
       <path fill="none" d="M0 0h24v24H0V0z" />
       <path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" />
     </g>
+
+    <g id="text" stroke="none">
+      <path fill="none" d="M0 0h24v24H0V0z" />
+      <path d="M14 17H4v2h10v-2zm6-8H4v2h16V9zM4 15h16v-2H4v2zM4 5v2h16V5H4z" />
+    </g>
+
+    <g id="video" stroke="none">
+      <path fill="none" d="M0 0h24v24H0V0z" />
+      <path d="M17 10.5V7c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z" />
+    </g>
   </svg>
 );
 

From f7c2f0e90fb219b505da9c42875dbb0f68b0e656 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Sat, 19 Oct 2019 19:53:53 +0700
Subject: [PATCH 33/99] creating youtube node

---
 src/components/editors/EditorPanel/index.tsx    |  5 ++++-
 src/components/editors/VideoEditor/index.tsx    |  3 ++-
 src/components/editors/VideoEditor/styles.scss  | 11 ++++++++---
 src/constants/errors.ts                         |  2 ++
 src/containers/dialogs/ScrollDialog/styles.scss |  2 +-
 src/redux/node/constants.ts                     |  5 +++++
 6 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/src/components/editors/EditorPanel/index.tsx b/src/components/editors/EditorPanel/index.tsx
index 475b0bb2..78e60097 100644
--- a/src/components/editors/EditorPanel/index.tsx
+++ b/src/components/editors/EditorPanel/index.tsx
@@ -2,6 +2,7 @@ import React, { FC } from 'react';
 import * as styles from './styles.scss';
 import { INode } from '~/redux/types';
 import { EditorUploadButton } from '~/components/editors/EditorUploadButton';
+import { NODE_UPLOAD_TYPES } from '~/redux/node/constants';
 
 interface IProps {
   data: INode;
@@ -12,7 +13,9 @@ interface IProps {
 
 const EditorPanel: FC<IProps> = ({ data, setData, temp, setTemp }) => (
   <div className={styles.panel}>
-    <EditorUploadButton data={data} setData={setData} temp={temp} setTemp={setTemp} />
+    {data.type && NODE_UPLOAD_TYPES[data.type] && (
+      <EditorUploadButton data={data} setData={setData} temp={temp} setTemp={setTemp} />
+    )}
   </div>
 );
 
diff --git a/src/components/editors/VideoEditor/index.tsx b/src/components/editors/VideoEditor/index.tsx
index 7409b1d9..282e53c1 100644
--- a/src/components/editors/VideoEditor/index.tsx
+++ b/src/components/editors/VideoEditor/index.tsx
@@ -3,6 +3,7 @@ import { INode } from '~/redux/types';
 import * as styles from './styles.scss';
 import path from 'ramda/es/path';
 import { InputText } from '~/components/input/InputText';
+import classnames from 'classnames';
 
 interface IProps {
   data: INode;
@@ -29,7 +30,7 @@ const VideoEditor: FC<IProps> = ({ data, setData }) => {
   return (
     <div className={styles.preview} style={{ backgroundImage: preview && `url("${preview}")` }}>
       <div className={styles.input_wrap}>
-        <div className={styles.input}>
+        <div className={classnames(styles.input, { active: !!preview })}>
           <InputText value={url} handler={setUrl} placeholder="Адрес видео" />
         </div>
       </div>
diff --git a/src/components/editors/VideoEditor/styles.scss b/src/components/editors/VideoEditor/styles.scss
index ce800aa2..5184851c 100644
--- a/src/components/editors/VideoEditor/styles.scss
+++ b/src/components/editors/VideoEditor/styles.scss
@@ -1,6 +1,7 @@
 .preview {
   padding-top: 56.25%;
   position: relative;
+  border-radius: $radius;
   // background: darken($color: $content_bg, $amount: 2%);
 }
 
@@ -19,12 +20,16 @@
   // @include outer_shadow();
 
   flex: 1 0 50%;
-  padding: $gap * 2 $gap $gap * 2 $gap;
-  // border-radius: $radius;
+  padding: $gap * 2;
+  border-radius: $radius;
   background: $content_bg;
-  // margin: 20px;
+  margin: 20px;
 
   input {
     text-align: center;
   }
+
+  &:global(.active) {
+    background: $red;
+  }
 }
diff --git a/src/constants/errors.ts b/src/constants/errors.ts
index 4070a22c..910b4dbb 100644
--- a/src/constants/errors.ts
+++ b/src/constants/errors.ts
@@ -5,6 +5,7 @@ export const ERRORS = {
   NO_COMMENTS: 'No_Comments',
   FILES_REQUIRED: 'Files_Required',
   TEXT_REQUIRED: 'Text_Required',
+  UNKNOWN_NODE_TYPE: 'Unknown_Node_Type',
 };
 
 export const ERROR_LITERAL = {
@@ -14,4 +15,5 @@ export const ERROR_LITERAL = {
   [ERRORS.EMPTY_RESPONSE]: 'Пустой ответ сервера',
   [ERRORS.FILES_REQUIRED]: 'Добавьте файлы',
   [ERRORS.TEXT_REQUIRED]: 'Нужно немного текста',
+  [ERRORS.UNKNOWN_NODE_TYPE]: 'Неизвестный тип поста',
 };
diff --git a/src/containers/dialogs/ScrollDialog/styles.scss b/src/containers/dialogs/ScrollDialog/styles.scss
index 2d5740a2..0d0b1856 100644
--- a/src/containers/dialogs/ScrollDialog/styles.scss
+++ b/src/containers/dialogs/ScrollDialog/styles.scss
@@ -133,7 +133,7 @@
 }
 
 .error {
-  background: linear-gradient(transparentize($orange, 1), $red);
+  background: linear-gradient(transparentize($orange, 1), $red 90%);
   position: absolute;
   width: 100%;
   height: auto;
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index 4278f0a2..89034de1 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -5,6 +5,7 @@ import { NodeTextBlock } from '~/components/node/NodeTextBlock';
 import { ImageEditor } from '~/components/editors/ImageEditor';
 import { TextEditor } from '~/components/editors/TextEditor';
 import { VideoEditor } from '~/components/editors/VideoEditor';
+import { UPLOAD_TYPES } from '../uploads/constants';
 
 const prefix = 'NODE.';
 export const NODE_ACTIONS = {
@@ -86,6 +87,10 @@ export const NODE_EDITORS = {
   [NODE_TYPES.VIDEO]: VideoEditor,
 };
 
+export const NODE_UPLOAD_TYPES = {
+  [NODE_TYPES.IMAGE]: [UPLOAD_TYPES.IMAGE],
+};
+
 export const NODE_EDITOR_DATA: Record<
   typeof NODE_TYPES[keyof typeof NODE_TYPES],
   Partial<INode>

From 6917c465f3a3b51e2b37c4ace1f722fd22e11cf8 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Sat, 19 Oct 2019 20:06:48 +0700
Subject: [PATCH 34/99] displaying node videos

---
 src/components/node/NodeVideoBlock/index.tsx  | 36 +++++++++++++++++++
 .../node/NodeVideoBlock/styles.scss           | 12 +++++++
 src/constants/errors.ts                       |  2 ++
 src/redux/node/constants.ts                   |  2 ++
 4 files changed, 52 insertions(+)
 create mode 100644 src/components/node/NodeVideoBlock/index.tsx
 create mode 100644 src/components/node/NodeVideoBlock/styles.scss

diff --git a/src/components/node/NodeVideoBlock/index.tsx b/src/components/node/NodeVideoBlock/index.tsx
new file mode 100644
index 00000000..0c250b4c
--- /dev/null
+++ b/src/components/node/NodeVideoBlock/index.tsx
@@ -0,0 +1,36 @@
+import React, { FC, useMemo } from 'react';
+import { INode } from '~/redux/types';
+import * as styles from './styles.scss';
+import path from 'ramda/es/path';
+
+interface IProps {
+  node: INode;
+}
+
+const NodeVideoBlock: FC<IProps> = ({ node }) => {
+  const video = useMemo(() => {
+    const url: string = path(['blocks', 0, 'url'], node);
+    const match =
+      url &&
+      url.match(
+        /http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)?[\w\?=]*)?/
+      );
+
+    return match && match[1];
+  }, [node]);
+
+  return (
+    <div className={styles.wrap}>
+      <iframe
+        width="560"
+        height="315"
+        src={`https://www.youtube.com/embed/${video}`}
+        frameBorder="0"
+        allowFullScreen
+        title="video"
+      />
+    </div>
+  );
+};
+
+export { NodeVideoBlock };
diff --git a/src/components/node/NodeVideoBlock/styles.scss b/src/components/node/NodeVideoBlock/styles.scss
new file mode 100644
index 00000000..d6c742c6
--- /dev/null
+++ b/src/components/node/NodeVideoBlock/styles.scss
@@ -0,0 +1,12 @@
+.wrap {
+  padding-bottom: 56.25%;
+  position: relative;
+
+  iframe {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+  }
+}
diff --git a/src/constants/errors.ts b/src/constants/errors.ts
index 910b4dbb..70a8ee47 100644
--- a/src/constants/errors.ts
+++ b/src/constants/errors.ts
@@ -6,6 +6,7 @@ export const ERRORS = {
   FILES_REQUIRED: 'Files_Required',
   TEXT_REQUIRED: 'Text_Required',
   UNKNOWN_NODE_TYPE: 'Unknown_Node_Type',
+  URL_INVALID: 'Url_Invalid',
 };
 
 export const ERROR_LITERAL = {
@@ -16,4 +17,5 @@ export const ERROR_LITERAL = {
   [ERRORS.FILES_REQUIRED]: 'Добавьте файлы',
   [ERRORS.TEXT_REQUIRED]: 'Нужно немного текста',
   [ERRORS.UNKNOWN_NODE_TYPE]: 'Неизвестный тип поста',
+  [ERRORS.URL_INVALID]: 'Неизвестный адрес',
 };
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index 89034de1..44f85a85 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -2,6 +2,7 @@ import { FC } from 'react';
 import { INode, ValueOf, IComment } from '../types';
 import { NodeImageSlideBlock } from '~/components/node/NodeImageSlideBlock';
 import { NodeTextBlock } from '~/components/node/NodeTextBlock';
+import { NodeVideoBlock } from '~/components/node/NodeVideoBlock';
 import { ImageEditor } from '~/components/editors/ImageEditor';
 import { TextEditor } from '~/components/editors/TextEditor';
 import { VideoEditor } from '~/components/editors/VideoEditor';
@@ -66,6 +67,7 @@ type INodeComponents = Record<
 
 export const NODE_COMPONENTS: INodeComponents = {
   [NODE_TYPES.IMAGE]: NodeImageSlideBlock,
+  [NODE_TYPES.VIDEO]: NodeVideoBlock,
 };
 
 export const NODE_INLINES: INodeComponents = {

From 5d7b76f0032051fc7357e018c5f97c2d151a0143 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Sat, 19 Oct 2019 21:39:23 +0700
Subject: [PATCH 35/99] flow appearance

---
 src/components/flow/FlowGrid/styles.scss | 18 +++++++++++++++++-
 src/styles/variables.scss                |  9 ++++++++-
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/components/flow/FlowGrid/styles.scss b/src/components/flow/FlowGrid/styles.scss
index bfc6dc1f..bda06973 100644
--- a/src/components/flow/FlowGrid/styles.scss
+++ b/src/components/flow/FlowGrid/styles.scss
@@ -8,11 +8,27 @@ $cols: $content_width / $cell;
 .grid_test {
   display: grid;
   grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));
-  grid-template-rows: $cell;
+  grid-template-rows: 40vh $cell;
   grid-auto-rows: $cell;
   grid-auto-flow: row dense;
   grid-column-gap: $grid_line;
   grid-row-gap: $grid_line;
+
+  @media (max-width: $cell * 5) {
+    grid-template-columns: repeat(4, 1fr);
+  }
+
+  @media (max-width: $cell * 4) {
+    grid-template-columns: repeat(3, 1fr);
+  }
+
+  @media (max-width: $cell * 3) {
+    grid-template-columns: repeat(2, 1fr);
+  }
+
+  @media (max-width: $cell * 2) {
+    grid-template-columns: repeat(1, 1fr);
+  }
 }
 
 .pad_last {
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index e86b5b2f..e05cd282 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -106,7 +106,9 @@ $input_shadow_filled: $input_shadow;
 }
 
 @mixin phone {
-  @content;
+  @media (max-width: 320px) {
+    @content;
+  }
 }
 
 @mixin tablet {
@@ -114,6 +116,11 @@ $input_shadow_filled: $input_shadow;
     @content;
   }
 }
+@mixin desktop {
+  @media (max-width: $content_width) {
+    @content;
+  }
+}
 
 @mixin vertical_at_tablet {
   @media (max-width: 599px) {

From 23a38fed6087e2ffa675cac7586db37a40a440d8 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Sun, 20 Oct 2019 18:13:09 +0700
Subject: [PATCH 36/99] changed node structure

---
 src/components/flow/Cell/index.tsx | 8 ++++----
 src/redux/types.ts                 | 9 ++-------
 2 files changed, 6 insertions(+), 11 deletions(-)

diff --git a/src/components/flow/Cell/index.tsx b/src/components/flow/Cell/index.tsx
index c88bf53b..46148fb0 100644
--- a/src/components/flow/Cell/index.tsx
+++ b/src/components/flow/Cell/index.tsx
@@ -12,7 +12,7 @@ interface IProps {
   is_text?: boolean;
 }
 
-const Cell: FC<IProps> = ({ node: { id, title, brief, type, blocks }, onSelect }) => {
+const Cell: FC<IProps> = ({ node: { id, title, thumbnail, type, blocks }, onSelect }) => {
   const [is_loaded, setIsLoaded] = useState(false);
 
   const onImageLoad = useCallback(() => {
@@ -33,15 +33,15 @@ const Cell: FC<IProps> = ({ node: { id, title, brief, type, blocks }, onSelect }
         {text && <div className={styles.text}>{text}</div>}
       </div>
 
-      {brief && brief.thumbnail && (
+      {thumbnail && (
         <div
           className={styles.thumbnail}
           style={{
-            backgroundImage: `url("${getURL({ url: brief.thumbnail })}")`,
+            backgroundImage: `url("${getURL({ url: thumbnail })}")`,
             opacity: is_loaded ? 1 : 0,
           }}
         >
-          <img src={getURL({ url: brief.thumbnail })} onLoad={onImageLoad} alt="" />
+          <img src={getURL({ url: thumbnail })} onLoad={onImageLoad} alt="" />
         </div>
       )}
     </div>
diff --git a/src/redux/types.ts b/src/redux/types.ts
index 65cc711f..c8cb11f8 100644
--- a/src/redux/types.ts
+++ b/src/redux/types.ts
@@ -117,13 +117,8 @@ export interface INode {
   type: string;
 
   blocks: IBlock[];
-
-  brief?: {
-    thumbnail?: string;
-    description?: string;
-    owner?: string;
-    comments?: number;
-  };
+  thumbnail?: string;
+  description?: string;
 
   options: {
     flow: {

From f38865b01e94cd3ff2a318fbc82cbb6f04aa034b Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Sun, 20 Oct 2019 18:13:41 +0700
Subject: [PATCH 37/99] cleanup

---
 src/components/flow/Cell/index.tsx | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/src/components/flow/Cell/index.tsx b/src/components/flow/Cell/index.tsx
index 46148fb0..49941986 100644
--- a/src/components/flow/Cell/index.tsx
+++ b/src/components/flow/Cell/index.tsx
@@ -49,10 +49,3 @@ const Cell: FC<IProps> = ({ node: { id, title, thumbnail, type, blocks }, onSele
 };
 
 export { Cell };
-
-/*
-  {type === NODE_TYPES.TEXT && (
-    <div className={styles.text}>{path(['blocks', 0, 'text'], blocks)}</div>
-  )}
-  }
-*/

From 554a2ccfa7730fe107cb3819690cebb609241187 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Sun, 20 Oct 2019 18:46:55 +0700
Subject: [PATCH 38/99] changed flow cell types

---
 src/redux/types.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/redux/types.ts b/src/redux/types.ts
index c8cb11f8..a849deab 100644
--- a/src/redux/types.ts
+++ b/src/redux/types.ts
@@ -122,7 +122,7 @@ export interface INode {
 
   options: {
     flow: {
-      display: 'single' | 'double' | 'quadro';
+      display: 'single' | 'vertical' | 'horizontal' | 'quadro';
       show_description: boolean;
     };
   };

From 2ca9e9bdeff74bd5e3fb0d85272274b1bafec5f4 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 13:27:28 +0700
Subject: [PATCH 39/99] fixed file dropping and panel buttons

---
 .../editors/EditorImageUploadButton/index.tsx | 23 +++++++++++++++++++
 src/components/editors/EditorPanel/index.tsx  | 12 +++++-----
 .../editors/EditorUploadButton/index.tsx      |  9 ++++++--
 src/components/editors/ImageGrid/index.tsx    |  4 ++--
 src/containers/dialogs/Modal/index.tsx        |  2 --
 src/redux/node/constants.ts                   |  5 ++--
 6 files changed, 41 insertions(+), 14 deletions(-)
 create mode 100644 src/components/editors/EditorImageUploadButton/index.tsx

diff --git a/src/components/editors/EditorImageUploadButton/index.tsx b/src/components/editors/EditorImageUploadButton/index.tsx
new file mode 100644
index 00000000..410667f4
--- /dev/null
+++ b/src/components/editors/EditorImageUploadButton/index.tsx
@@ -0,0 +1,23 @@
+import React, { FC } from 'react';
+import { EditorUploadButton } from '~/components/editors/EditorUploadButton';
+import { INode } from '~/redux/types';
+
+interface IProps {
+  data: INode;
+  setData: (val: INode) => void;
+  temp: string[];
+  setTemp: (val: string[]) => void;
+}
+
+const EditorImageUploadButton: FC<IProps> = ({ data, setData, temp, setTemp }) => (
+  <EditorUploadButton
+    data={data}
+    setData={setData}
+    temp={temp}
+    setTemp={setTemp}
+    accept="image/*"
+    icon="image"
+  />
+);
+
+export { EditorImageUploadButton };
diff --git a/src/components/editors/EditorPanel/index.tsx b/src/components/editors/EditorPanel/index.tsx
index 78e60097..bbcec349 100644
--- a/src/components/editors/EditorPanel/index.tsx
+++ b/src/components/editors/EditorPanel/index.tsx
@@ -1,8 +1,7 @@
-import React, { FC } from 'react';
+import React, { FC, createElement } from 'react';
 import * as styles from './styles.scss';
 import { INode } from '~/redux/types';
-import { EditorUploadButton } from '~/components/editors/EditorUploadButton';
-import { NODE_UPLOAD_TYPES } from '~/redux/node/constants';
+import { NODE_PANEL_COMPONENTS } from '~/redux/node/constants';
 
 interface IProps {
   data: INode;
@@ -13,9 +12,10 @@ interface IProps {
 
 const EditorPanel: FC<IProps> = ({ data, setData, temp, setTemp }) => (
   <div className={styles.panel}>
-    {data.type && NODE_UPLOAD_TYPES[data.type] && (
-      <EditorUploadButton data={data} setData={setData} temp={temp} setTemp={setTemp} />
-    )}
+    {NODE_PANEL_COMPONENTS[data.type] &&
+      NODE_PANEL_COMPONENTS[data.type].map((el, key) =>
+        createElement(el, { key, data, setData, temp, setTemp })
+      )}
   </div>
 );
 
diff --git a/src/components/editors/EditorUploadButton/index.tsx b/src/components/editors/EditorUploadButton/index.tsx
index 47660d5b..a4b2aee1 100644
--- a/src/components/editors/EditorUploadButton/index.tsx
+++ b/src/components/editors/EditorUploadButton/index.tsx
@@ -27,6 +27,9 @@ type IProps = ReturnType<typeof mapStateToProps> &
     setData: (val: INode) => void;
     temp: string[];
     setTemp: (val: string[]) => void;
+
+    accept?: string;
+    icon?: string;
   };
 
 const EditorUploadButtonUnconnected: FC<IProps> = ({
@@ -37,6 +40,8 @@ const EditorUploadButtonUnconnected: FC<IProps> = ({
   statuses,
   files,
   uploadUploadFiles,
+  accept = 'image/*',
+  icon = 'plus',
 }) => {
   const eventPreventer = useCallback(event => event.preventDefault(), []);
 
@@ -116,10 +121,10 @@ const EditorUploadButtonUnconnected: FC<IProps> = ({
 
   return (
     <div className={styles.wrap}>
-      <input type="file" onChange={onInputChange} accept="image/*" multiple />
+      <input type="file" onChange={onInputChange} accept={accept} multiple />
 
       <div className={styles.icon}>
-        <Icon size={32} icon="plus" />
+        <Icon size={32} icon={icon} />
       </div>
     </div>
   );
diff --git a/src/components/editors/ImageGrid/index.tsx b/src/components/editors/ImageGrid/index.tsx
index c4a2eb50..55350dbf 100644
--- a/src/components/editors/ImageGrid/index.tsx
+++ b/src/components/editors/ImageGrid/index.tsx
@@ -17,14 +17,14 @@ interface IProps {
 const ImageGrid: FC<IProps> = ({ files, setFiles, locked }) => {
   const onMove = useCallback(
     ({ oldIndex, newIndex }: SortEnd) => {
-      setFiles(moveArrItem(oldIndex, newIndex, files) as IFile[]);
+      setFiles(moveArrItem(oldIndex, newIndex, files.filter(file => !!file)) as IFile[]);
     },
     [setFiles, files]
   );
 
   const onDrop = useCallback(
     (remove_id: IFile['id']) => {
-      setFiles(files.filter(file => file.id === remove_id));
+      setFiles(files.filter(file => file && file.id !== remove_id));
     },
     [setFiles, files]
   );
diff --git a/src/containers/dialogs/Modal/index.tsx b/src/containers/dialogs/Modal/index.tsx
index d3c6362d..d0470af1 100644
--- a/src/containers/dialogs/Modal/index.tsx
+++ b/src/containers/dialogs/Modal/index.tsx
@@ -29,8 +29,6 @@ const ModalUnconnected: FC<IProps> = ({
 
   if (!dialog || !DIALOG_CONTENT[dialog] || !is_shown) return null;
 
-  console.log({ onRequestClose });
-
   return ReactDOM.createPortal(
     <div className={styles.fixed}>
       <div className={styles.overlay} onClick={onRequestClose} />
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index 44f85a85..8ec40fd8 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -7,6 +7,7 @@ import { ImageEditor } from '~/components/editors/ImageEditor';
 import { TextEditor } from '~/components/editors/TextEditor';
 import { VideoEditor } from '~/components/editors/VideoEditor';
 import { UPLOAD_TYPES } from '../uploads/constants';
+import { EditorImageUploadButton } from '~/components/editors/EditorImageUploadButton';
 
 const prefix = 'NODE.';
 export const NODE_ACTIONS = {
@@ -89,8 +90,8 @@ export const NODE_EDITORS = {
   [NODE_TYPES.VIDEO]: VideoEditor,
 };
 
-export const NODE_UPLOAD_TYPES = {
-  [NODE_TYPES.IMAGE]: [UPLOAD_TYPES.IMAGE],
+export const NODE_PANEL_COMPONENTS = {
+  [NODE_TYPES.IMAGE]: [EditorImageUploadButton],
 };
 
 export const NODE_EDITOR_DATA: Record<

From d676ff88e4b9920f17d288b63b9af99b37b5c7f9 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 13:28:24 +0700
Subject: [PATCH 40/99] cleanup

---
 src/components/editors/ImageGrid/index.tsx | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/components/editors/ImageGrid/index.tsx b/src/components/editors/ImageGrid/index.tsx
index 55350dbf..3b97b7af 100644
--- a/src/components/editors/ImageGrid/index.tsx
+++ b/src/components/editors/ImageGrid/index.tsx
@@ -1,11 +1,9 @@
 import React, { FC, useCallback } from 'react';
 import { SortEnd } from 'react-sortable-hoc';
 import * as styles from './styles.scss';
-import { IFile, INode } from '~/redux/types';
+import { IFile } from '~/redux/types';
 import { IUploadStatus } from '~/redux/uploads/reducer';
-import assocPath from 'ramda/es/assocPath';
 import { moveArrItem } from '~/utils/fn';
-import reject from 'ramda/es/reject';
 import { SortableImageGrid } from '~/components/editors/SortableImageGrid';
 
 interface IProps {

From 5e9b6e1819354a751dab65b06ab21630aa27c49c Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 13:42:00 +0700
Subject: [PATCH 41/99] audio upload buttin

---
 src/components/bars/SubmitBar/index.tsx       |  5 ++++
 src/components/editors/AudioEditor/index.tsx  | 14 +++++++++++
 .../editors/EditorAudioUploadButton/index.tsx | 25 +++++++++++++++++++
 .../editors/EditorImageUploadButton/index.tsx |  2 ++
 .../editors/EditorPanel/styles.scss           | 15 ++++++++++-
 .../editors/EditorUploadButton/index.tsx      |  8 ++++--
 .../editors/EditorDialogAudio/index.tsx       | 10 ++++++++
 src/redux/modal/constants.ts                  |  4 +++
 src/redux/node/constants.ts                   |  5 +++-
 src/sprites/Sprites.tsx                       |  7 ++++--
 10 files changed, 89 insertions(+), 6 deletions(-)
 create mode 100644 src/components/editors/AudioEditor/index.tsx
 create mode 100644 src/components/editors/EditorAudioUploadButton/index.tsx
 create mode 100644 src/containers/editors/EditorDialogAudio/index.tsx

diff --git a/src/components/bars/SubmitBar/index.tsx b/src/components/bars/SubmitBar/index.tsx
index d9ae30f1..6ed41060 100644
--- a/src/components/bars/SubmitBar/index.tsx
+++ b/src/components/bars/SubmitBar/index.tsx
@@ -19,6 +19,7 @@ const SubmitBarUnconnected: FC<IProps> = ({ nodeCreate }) => {
   const onOpenImageEditor = useCallback(() => nodeCreate(NODE_TYPES.IMAGE), [nodeCreate]);
   const onOpenTextEditor = useCallback(() => nodeCreate(NODE_TYPES.TEXT), [nodeCreate]);
   const onOpenVideoEditor = useCallback(() => nodeCreate(NODE_TYPES.VIDEO), [nodeCreate]);
+  const onOpenAudioEditor = useCallback(() => nodeCreate(NODE_TYPES.AUDIO), [nodeCreate]);
 
   return (
     <div className={styles.wrap}>
@@ -34,6 +35,10 @@ const SubmitBarUnconnected: FC<IProps> = ({ nodeCreate }) => {
         <div onClick={onOpenVideoEditor}>
           <Icon icon="video" />
         </div>
+
+        <div onClick={onOpenAudioEditor}>
+          <Icon icon="audio" />
+        </div>
       </div>
 
       <div className={styles.button}>
diff --git a/src/components/editors/AudioEditor/index.tsx b/src/components/editors/AudioEditor/index.tsx
new file mode 100644
index 00000000..b3ef026f
--- /dev/null
+++ b/src/components/editors/AudioEditor/index.tsx
@@ -0,0 +1,14 @@
+import React, { FC, useCallback } from 'react';
+import { INode } from '~/redux/types';
+import path from 'ramda/es/path';
+
+interface IProps {
+  data: INode;
+  setData: (val: INode) => void;
+}
+
+const AudioEditor: FC<IProps> = ({ data, setData }) => {
+  return <div>something!</div>;
+};
+
+export { AudioEditor };
diff --git a/src/components/editors/EditorAudioUploadButton/index.tsx b/src/components/editors/EditorAudioUploadButton/index.tsx
new file mode 100644
index 00000000..3f35eb7e
--- /dev/null
+++ b/src/components/editors/EditorAudioUploadButton/index.tsx
@@ -0,0 +1,25 @@
+import React, { FC } from 'react';
+import { EditorUploadButton } from '~/components/editors/EditorUploadButton';
+import { INode } from '~/redux/types';
+import { UPLOAD_TYPES } from '~/redux/uploads/constants';
+
+interface IProps {
+  data: INode;
+  setData: (val: INode) => void;
+  temp: string[];
+  setTemp: (val: string[]) => void;
+}
+
+const EditorAudioUploadButton: FC<IProps> = ({ data, setData, temp, setTemp }) => (
+  <EditorUploadButton
+    data={data}
+    setData={setData}
+    temp={temp}
+    setTemp={setTemp}
+    accept="audio/*"
+    icon="audio"
+    type={UPLOAD_TYPES.AUDIO}
+  />
+);
+
+export { EditorAudioUploadButton };
diff --git a/src/components/editors/EditorImageUploadButton/index.tsx b/src/components/editors/EditorImageUploadButton/index.tsx
index 410667f4..3ca8006d 100644
--- a/src/components/editors/EditorImageUploadButton/index.tsx
+++ b/src/components/editors/EditorImageUploadButton/index.tsx
@@ -1,6 +1,7 @@
 import React, { FC } from 'react';
 import { EditorUploadButton } from '~/components/editors/EditorUploadButton';
 import { INode } from '~/redux/types';
+import { UPLOAD_TYPES } from '~/redux/uploads/constants';
 
 interface IProps {
   data: INode;
@@ -17,6 +18,7 @@ const EditorImageUploadButton: FC<IProps> = ({ data, setData, temp, setTemp }) =
     setTemp={setTemp}
     accept="image/*"
     icon="image"
+    type={UPLOAD_TYPES.IMAGE}
   />
 );
 
diff --git a/src/components/editors/EditorPanel/styles.scss b/src/components/editors/EditorPanel/styles.scss
index 36902205..0c3178d2 100644
--- a/src/components/editors/EditorPanel/styles.scss
+++ b/src/components/editors/EditorPanel/styles.scss
@@ -7,4 +7,17 @@
   box-sizing: border-box;
   padding: $gap;
   z-index: 10;
-}
\ No newline at end of file
+  display: flex;
+  flex-direction: row;
+
+  & > * {
+    margin: 0 $gap;
+
+    &:first-child {
+      margin-left: 0;
+    }
+    &:last-child {
+      margin-right: 0;
+    }
+  }
+}
diff --git a/src/components/editors/EditorUploadButton/index.tsx b/src/components/editors/EditorUploadButton/index.tsx
index a4b2aee1..c69dc3cf 100644
--- a/src/components/editors/EditorUploadButton/index.tsx
+++ b/src/components/editors/EditorUploadButton/index.tsx
@@ -30,6 +30,7 @@ type IProps = ReturnType<typeof mapStateToProps> &
 
     accept?: string;
     icon?: string;
+    type?: typeof UPLOAD_TYPES[keyof typeof UPLOAD_TYPES];
   };
 
 const EditorUploadButtonUnconnected: FC<IProps> = ({
@@ -42,6 +43,7 @@ const EditorUploadButtonUnconnected: FC<IProps> = ({
   uploadUploadFiles,
   accept = 'image/*',
   icon = 'plus',
+  type = UPLOAD_TYPES.IMAGE,
 }) => {
   const eventPreventer = useCallback(event => event.preventDefault(), []);
 
@@ -52,13 +54,15 @@ const EditorUploadButtonUnconnected: FC<IProps> = ({
 
       if (current >= NODE_SETTINGS.MAX_FILES) return;
 
+      console.log({ type });
+
       const items: IFileWithUUID[] = Array.from(uploads).map(
         (file: File): IFileWithUUID => ({
           file,
           temp_id: uuid(),
           subject: UPLOAD_SUBJECTS.EDITOR,
           target: UPLOAD_TARGETS.NODES,
-          type: UPLOAD_TYPES.IMAGE,
+          type,
         })
       );
 
@@ -67,7 +71,7 @@ const EditorUploadButtonUnconnected: FC<IProps> = ({
       setTemp([...temp, ...temps]);
       uploadUploadFiles(items);
     },
-    [setTemp, uploadUploadFiles, temp, data]
+    [setTemp, uploadUploadFiles, temp, data, type]
   );
 
   const onFileAdd = useCallback(
diff --git a/src/containers/editors/EditorDialogAudio/index.tsx b/src/containers/editors/EditorDialogAudio/index.tsx
new file mode 100644
index 00000000..27b306f9
--- /dev/null
+++ b/src/containers/editors/EditorDialogAudio/index.tsx
@@ -0,0 +1,10 @@
+import React, { FC } from 'react';
+import { EditorDialog } from '~/containers/dialogs/EditorDialog';
+import { IDialogProps } from '~/redux/types';
+import { NODE_TYPES } from '~/redux/node/constants';
+
+type IProps = IDialogProps & {};
+
+const EditorDialogAudio: FC<IProps> = props => <EditorDialog type={NODE_TYPES.AUDIO} {...props} />;
+
+export { EditorDialogAudio };
diff --git a/src/redux/modal/constants.ts b/src/redux/modal/constants.ts
index fa3b53c5..8426320d 100644
--- a/src/redux/modal/constants.ts
+++ b/src/redux/modal/constants.ts
@@ -3,6 +3,7 @@ import { LoginDialog } from '~/containers/dialogs/LoginDialog';
 import { EditorDialogImage } from '~/containers/editors/EditorDialogImage';
 import { EditorDialogText } from '~/containers/editors/EditorDialogText';
 import { EditorDialogVideo } from '~/containers/editors/EditorDialogVideo';
+import { EditorDialogAudio } from '~/containers/editors/EditorDialogAudio';
 import { NODE_TYPES } from '../node/constants';
 
 export const MODAL_ACTIONS = {
@@ -15,6 +16,7 @@ export const DIALOGS = {
   EDITOR_IMAGE: 'EDITOR_IMAGE',
   EDITOR_TEXT: 'EDITOR_TEXT',
   EDITOR_VIDEO: 'EDITOR_VIDEO',
+  EDITOR_AUDIO: 'EDITOR_AUDIO',
   LOGIN: 'LOGIN',
 };
 
@@ -22,6 +24,7 @@ export const DIALOG_CONTENT = {
   [DIALOGS.EDITOR_IMAGE]: EditorDialogImage,
   [DIALOGS.EDITOR_TEXT]: EditorDialogText,
   [DIALOGS.EDITOR_VIDEO]: EditorDialogVideo,
+  [DIALOGS.EDITOR_AUDIO]: EditorDialogAudio,
   [DIALOGS.LOGIN]: LoginDialog,
 };
 
@@ -29,6 +32,7 @@ export const NODE_EDITOR_DIALOGS = {
   [NODE_TYPES.IMAGE]: DIALOGS.EDITOR_IMAGE,
   [NODE_TYPES.TEXT]: DIALOGS.EDITOR_TEXT,
   [NODE_TYPES.VIDEO]: DIALOGS.EDITOR_VIDEO,
+  [NODE_TYPES.AUDIO]: DIALOGS.EDITOR_AUDIO,
 };
 
 export interface IDialogProps {
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index 8ec40fd8..b3b8b56d 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -6,8 +6,9 @@ import { NodeVideoBlock } from '~/components/node/NodeVideoBlock';
 import { ImageEditor } from '~/components/editors/ImageEditor';
 import { TextEditor } from '~/components/editors/TextEditor';
 import { VideoEditor } from '~/components/editors/VideoEditor';
-import { UPLOAD_TYPES } from '../uploads/constants';
+import { AudioEditor } from '~/components/editors/AudioEditor';
 import { EditorImageUploadButton } from '~/components/editors/EditorImageUploadButton';
+import { EditorAudioUploadButton } from '~/components/editors/EditorAudioUploadButton';
 
 const prefix = 'NODE.';
 export const NODE_ACTIONS = {
@@ -88,10 +89,12 @@ export const NODE_EDITORS = {
   [NODE_TYPES.IMAGE]: ImageEditor,
   [NODE_TYPES.TEXT]: TextEditor,
   [NODE_TYPES.VIDEO]: VideoEditor,
+  [NODE_TYPES.AUDIO]: AudioEditor,
 };
 
 export const NODE_PANEL_COMPONENTS = {
   [NODE_TYPES.IMAGE]: [EditorImageUploadButton],
+  [NODE_TYPES.AUDIO]: [EditorAudioUploadButton, EditorImageUploadButton],
 };
 
 export const NODE_EDITOR_DATA: Record<
diff --git a/src/sprites/Sprites.tsx b/src/sprites/Sprites.tsx
index 6c97ebdd..c4631a4f 100644
--- a/src/sprites/Sprites.tsx
+++ b/src/sprites/Sprites.tsx
@@ -108,9 +108,12 @@ const Sprites: FC<{}> = () => (
       <path fill="none" d="M0 0h24v24H0V0z" />
       <path d="M17 10.5V7c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z" />
     </g>
+
+    <g id="audio" stroke="none">
+      <path fill="none" d="M0 0h24v24H0V0z" />
+      <path d="M12 3v9.28c-.47-.17-.97-.28-1.5-.28C8.01 12 6 14.01 6 16.5S8.01 21 10.5 21c2.31 0 4.2-1.75 4.45-4H15V6h4V3h-7z" />
+    </g>
   </svg>
 );
 
 export { Sprites };
-
-// <path d="M0 0H8V8H-8V-8Z" fillRule="evenodd" />

From a9d4be064e546dd2badfeb9e026ed0f60c034ea3 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 17:13:58 +0700
Subject: [PATCH 42/99] audio editor images

---
 src/components/editors/AudioEditor/index.tsx | 56 ++++++++++++++++----
 1 file changed, 47 insertions(+), 9 deletions(-)

diff --git a/src/components/editors/AudioEditor/index.tsx b/src/components/editors/AudioEditor/index.tsx
index b3ef026f..a22ea0d1 100644
--- a/src/components/editors/AudioEditor/index.tsx
+++ b/src/components/editors/AudioEditor/index.tsx
@@ -1,14 +1,52 @@
-import React, { FC, useCallback } from 'react';
+import React, { FC, useCallback, useMemo } from 'react';
 import { INode } from '~/redux/types';
-import path from 'ramda/es/path';
+import { connect } from 'react-redux';
+import { UPLOAD_TYPES } from '~/redux/uploads/constants';
+import { ImageGrid } from '../ImageGrid';
+import * as UPLOAD_ACTIONS from '~/redux/uploads/actions';
+import { selectUploads } from '~/redux/uploads/selectors';
 
-interface IProps {
-  data: INode;
-  setData: (val: INode) => void;
-}
-
-const AudioEditor: FC<IProps> = ({ data, setData }) => {
-  return <div>something!</div>;
+const mapStateToProps = selectUploads;
+const mapDispatchToProps = {
+  uploadUploadFiles: UPLOAD_ACTIONS.uploadUploadFiles,
 };
 
+type IProps = ReturnType<typeof mapStateToProps> &
+  typeof mapDispatchToProps & {
+    data: INode;
+    setData: (val: INode) => void;
+    temp: string[];
+    setTemp: (val: string[]) => void;
+  };
+
+const AudioEditorUnconnected: FC<IProps> = ({ data, setData, temp, statuses }) => {
+  const images = useMemo(
+    () => data.files.filter(file => file && file.type === UPLOAD_TYPES.IMAGE),
+    [data.files]
+  );
+
+  const pending_images = useMemo(() => temp.filter(id => !!statuses[id]).map(id => statuses[id]), [
+    temp,
+    statuses,
+  ]);
+
+  const audios = useMemo(
+    () => data.files.filter(file => file && file.type === UPLOAD_TYPES.AUDIO),
+    [data.files]
+  );
+
+  const setImages = useCallback(files => setData({ ...data, files: [...files, ...audios] }), [
+    setData,
+    data,
+    audios,
+  ]);
+
+  return <ImageGrid files={images} setFiles={setImages} locked={pending_images} />;
+};
+
+const AudioEditor = connect(
+  mapStateToProps,
+  mapDispatchToProps
+)(AudioEditorUnconnected);
+
 export { AudioEditor };

From 645ea8e29e0632f89751e52bea2f79c70ebc9de6 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 17:51:52 +0700
Subject: [PATCH 43/99] audio editor

---
 src/components/editors/AudioEditor/index.tsx  | 34 +++++++--
 .../editors/AudioEditor/styles.scss           |  4 +
 src/components/editors/AudioGrid/index.tsx    | 43 +++++++++++
 src/components/editors/AudioGrid/styles.scss  |  4 +
 .../editors/SortableAudioGrid/index.tsx       | 38 ++++++++++
 .../editors/SortableAudioGrid/styles.scss     | 13 ++++
 .../editors/SortableAudioGridItem/index.tsx   | 10 +++
 .../editors/SortableAudioGridItem/styles.scss |  4 +
 .../editors/SortableImageGrid/styles.scss     |  2 -
 src/components/upload/AudioUpload/index.tsx   | 43 +++++++++++
 src/components/upload/AudioUpload/styles.scss | 75 +++++++++++++++++++
 src/constants/errors.ts                       |  2 +
 src/redux/uploads/constants.ts                |  1 +
 src/redux/uploads/reducer.ts                  |  1 +
 src/redux/uploads/sagas.ts                    |  8 +-
 15 files changed, 273 insertions(+), 9 deletions(-)
 create mode 100644 src/components/editors/AudioEditor/styles.scss
 create mode 100644 src/components/editors/AudioGrid/index.tsx
 create mode 100644 src/components/editors/AudioGrid/styles.scss
 create mode 100644 src/components/editors/SortableAudioGrid/index.tsx
 create mode 100644 src/components/editors/SortableAudioGrid/styles.scss
 create mode 100644 src/components/editors/SortableAudioGridItem/index.tsx
 create mode 100644 src/components/editors/SortableAudioGridItem/styles.scss
 create mode 100644 src/components/upload/AudioUpload/index.tsx
 create mode 100644 src/components/upload/AudioUpload/styles.scss

diff --git a/src/components/editors/AudioEditor/index.tsx b/src/components/editors/AudioEditor/index.tsx
index a22ea0d1..9826c74c 100644
--- a/src/components/editors/AudioEditor/index.tsx
+++ b/src/components/editors/AudioEditor/index.tsx
@@ -3,8 +3,10 @@ import { INode } from '~/redux/types';
 import { connect } from 'react-redux';
 import { UPLOAD_TYPES } from '~/redux/uploads/constants';
 import { ImageGrid } from '../ImageGrid';
+import { AudioGrid } from '../AudioGrid';
 import * as UPLOAD_ACTIONS from '~/redux/uploads/actions';
 import { selectUploads } from '~/redux/uploads/selectors';
+import * as styles from './styles.scss';
 
 const mapStateToProps = selectUploads;
 const mapDispatchToProps = {
@@ -25,23 +27,45 @@ const AudioEditorUnconnected: FC<IProps> = ({ data, setData, temp, statuses }) =
     [data.files]
   );
 
-  const pending_images = useMemo(() => temp.filter(id => !!statuses[id]).map(id => statuses[id]), [
-    temp,
-    statuses,
-  ]);
+  const pending_images = useMemo(
+    () =>
+      temp
+        .filter(id => !!statuses[id] && statuses[id].type === UPLOAD_TYPES.IMAGE)
+        .map(id => statuses[id]),
+    [temp, statuses]
+  );
 
   const audios = useMemo(
     () => data.files.filter(file => file && file.type === UPLOAD_TYPES.AUDIO),
     [data.files]
   );
 
+  const pending_audios = useMemo(
+    () =>
+      temp
+        .filter(id => !!statuses[id] && statuses[id].type === UPLOAD_TYPES.AUDIO)
+        .map(id => statuses[id]),
+    [temp, statuses]
+  );
+
   const setImages = useCallback(files => setData({ ...data, files: [...files, ...audios] }), [
     setData,
     data,
     audios,
   ]);
 
-  return <ImageGrid files={images} setFiles={setImages} locked={pending_images} />;
+  const setAudios = useCallback(files => setData({ ...data, files: [...files, ...images] }), [
+    setData,
+    data,
+    images,
+  ]);
+
+  return (
+    <div className={styles.wrap}>
+      <ImageGrid files={images} setFiles={setImages} locked={pending_images} />
+      <AudioGrid files={audios} setFiles={setAudios} locked={pending_audios} />
+    </div>
+  );
 };
 
 const AudioEditor = connect(
diff --git a/src/components/editors/AudioEditor/styles.scss b/src/components/editors/AudioEditor/styles.scss
new file mode 100644
index 00000000..4909ae19
--- /dev/null
+++ b/src/components/editors/AudioEditor/styles.scss
@@ -0,0 +1,4 @@
+.wrap {
+  padding-bottom: 64px;
+  min-height: 200px;
+}
diff --git a/src/components/editors/AudioGrid/index.tsx b/src/components/editors/AudioGrid/index.tsx
new file mode 100644
index 00000000..8dd8556d
--- /dev/null
+++ b/src/components/editors/AudioGrid/index.tsx
@@ -0,0 +1,43 @@
+import React, { FC, useCallback } from 'react';
+import { SortEnd } from 'react-sortable-hoc';
+import * as styles from './styles.scss';
+import { IFile } from '~/redux/types';
+import { IUploadStatus } from '~/redux/uploads/reducer';
+import { moveArrItem } from '~/utils/fn';
+import { SortableAudioGrid } from '~/components/editors/SortableAudioGrid';
+
+interface IProps {
+  files: IFile[];
+  setFiles: (val: IFile[]) => void;
+  locked: IUploadStatus[];
+}
+
+const AudioGrid: FC<IProps> = ({ files, setFiles, locked }) => {
+  const onMove = useCallback(
+    ({ oldIndex, newIndex }: SortEnd) => {
+      setFiles(moveArrItem(oldIndex, newIndex, files.filter(file => !!file)) as IFile[]);
+    },
+    [setFiles, files]
+  );
+
+  const onDrop = useCallback(
+    (remove_id: IFile['id']) => {
+      setFiles(files.filter(file => file && file.id !== remove_id));
+    },
+    [setFiles, files]
+  );
+
+  return (
+    <SortableAudioGrid
+      onDrop={onDrop}
+      onSortEnd={onMove}
+      axis="xy"
+      items={files}
+      locked={locked}
+      pressDelay={window.innerWidth < 768 ? 200 : 0}
+      helperClass={styles.helper}
+    />
+  );
+};
+
+export { AudioGrid };
diff --git a/src/components/editors/AudioGrid/styles.scss b/src/components/editors/AudioGrid/styles.scss
new file mode 100644
index 00000000..7ab40804
--- /dev/null
+++ b/src/components/editors/AudioGrid/styles.scss
@@ -0,0 +1,4 @@
+.helper {
+  opacity: 0.5;
+  z-index: 10 !important;
+}
diff --git a/src/components/editors/SortableAudioGrid/index.tsx b/src/components/editors/SortableAudioGrid/index.tsx
new file mode 100644
index 00000000..5aa4c293
--- /dev/null
+++ b/src/components/editors/SortableAudioGrid/index.tsx
@@ -0,0 +1,38 @@
+import React from 'react';
+import { SortableContainer } from 'react-sortable-hoc';
+import { AudioUpload } from '~/components/upload/AudioUpload';
+import * as styles from './styles.scss';
+import { SortableImageGridItem } from '~/components/editors/SortableImageGridItem';
+import { IFile } from '~/redux/types';
+import { IUploadStatus } from '~/redux/uploads/reducer';
+import { AudioPlayer } from '~/components/media/AudioPlayer';
+
+const SortableAudioGrid = SortableContainer(
+  ({
+    items,
+    locked,
+    onDrop,
+  }: {
+    items: IFile[];
+    locked: IUploadStatus[];
+    onDrop: (file_id: IFile['id']) => void;
+  }) => (
+    <div className={styles.grid}>
+      {items
+        .filter(file => file && file.id)
+        .map((file, index) => (
+          <SortableImageGridItem key={file.id} index={index} collection={0}>
+            <AudioPlayer file={file} onDrop={onDrop} />
+          </SortableImageGridItem>
+        ))}
+
+      {locked.map((item, index) => (
+        <SortableImageGridItem key={item.temp_id} index={index} collection={1} disabled>
+          <AudioUpload title={item.name} progress={item.progress} is_uploading />
+        </SortableImageGridItem>
+      ))}
+    </div>
+  )
+);
+
+export { SortableAudioGrid };
diff --git a/src/components/editors/SortableAudioGrid/styles.scss b/src/components/editors/SortableAudioGrid/styles.scss
new file mode 100644
index 00000000..7dc895db
--- /dev/null
+++ b/src/components/editors/SortableAudioGrid/styles.scss
@@ -0,0 +1,13 @@
+.grid {
+  box-sizing: border-box;
+
+  display: grid;
+  grid-column-gap: $gap;
+  grid-row-gap: $gap;
+  grid-template-columns: auto;
+  grid-template-rows: $comment_height;
+
+  @media (max-width: 600px) {
+    grid-template-columns: repeat(auto-fill, minmax(30vw, 1fr));
+  }
+}
diff --git a/src/components/editors/SortableAudioGridItem/index.tsx b/src/components/editors/SortableAudioGridItem/index.tsx
new file mode 100644
index 00000000..2b7ff3d0
--- /dev/null
+++ b/src/components/editors/SortableAudioGridItem/index.tsx
@@ -0,0 +1,10 @@
+import React from 'react';
+import { SortableElement } from 'react-sortable-hoc';
+
+import * as styles from './styles.scss';
+
+const SortableAudioGridItem = SortableElement(({ children }) => (
+  <div className={styles.item}>{children}</div>
+));
+
+export { SortableAudioGridItem };
diff --git a/src/components/editors/SortableAudioGridItem/styles.scss b/src/components/editors/SortableAudioGridItem/styles.scss
new file mode 100644
index 00000000..81fd01cb
--- /dev/null
+++ b/src/components/editors/SortableAudioGridItem/styles.scss
@@ -0,0 +1,4 @@
+.item {
+  z-index: 1;
+  box-sizing: border-box;
+}
diff --git a/src/components/editors/SortableImageGrid/styles.scss b/src/components/editors/SortableImageGrid/styles.scss
index c525238b..cbd34386 100644
--- a/src/components/editors/SortableImageGrid/styles.scss
+++ b/src/components/editors/SortableImageGrid/styles.scss
@@ -1,6 +1,4 @@
 .grid {
-  min-height: 200px;
-  padding-bottom: 62px;
   box-sizing: border-box;
 
   display: grid;
diff --git a/src/components/upload/AudioUpload/index.tsx b/src/components/upload/AudioUpload/index.tsx
new file mode 100644
index 00000000..fd150593
--- /dev/null
+++ b/src/components/upload/AudioUpload/index.tsx
@@ -0,0 +1,43 @@
+import React, { FC, useCallback } from 'react';
+import classNames from 'classnames';
+import * as styles from './styles.scss';
+import { ArcProgress } from '~/components/input/ArcProgress';
+import { IFile } from '~/redux/types';
+import { Icon } from '~/components/input/Icon';
+
+interface IProps {
+  id?: IFile['id'];
+  title?: string;
+  progress?: number;
+  onDrop?: (file_id: IFile['id']) => void;
+
+  is_uploading?: boolean;
+}
+
+const AudioUpload: FC<IProps> = ({ title, progress, is_uploading, id, onDrop }) => {
+  const onDropFile = useCallback(() => {
+    if (!id || !onDrop) return;
+    onDrop(id);
+  }, [id, onDrop]);
+
+  return (
+    <div className={styles.wrap}>
+      {id && onDrop && (
+        <div className={styles.drop} onMouseDown={onDropFile}>
+          <Icon icon="close" />
+        </div>
+      )}
+
+      <div className={classNames(styles.thumb_wrap, { is_uploading })}>
+        {is_uploading && (
+          <div className={styles.progress}>
+            <ArcProgress size={40} progress={progress} />
+          </div>
+        )}
+        {title && <div className={styles.title}>{title}</div>}
+      </div>
+    </div>
+  );
+};
+
+export { AudioUpload };
diff --git a/src/components/upload/AudioUpload/styles.scss b/src/components/upload/AudioUpload/styles.scss
new file mode 100644
index 00000000..17882875
--- /dev/null
+++ b/src/components/upload/AudioUpload/styles.scss
@@ -0,0 +1,75 @@
+.wrap {
+  background: lighten($content_bg, 4%);
+  // padding-bottom: 100%;
+  border-radius: $radius;
+  position: relative;
+  user-select: none;
+  height: $comment_height;
+}
+
+.thumb_wrap {
+  // position: absolute;
+  // width: 100%;
+  // height: 100%;
+  z-index: 1;
+  border-radius: $radius;
+  overflow: hidden;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-direction: row;
+  height: 100%;
+}
+
+.title {
+  flex: 1;
+  border-radius: $radius;
+  display: flex;
+  align-items: center;
+  padding: 10px;
+  box-sizing: border-box;
+}
+
+.progress {
+  flex: 0 0 $comment_height;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  svg {
+    width: 40px;
+    height: 40px;
+    fill: none;
+    fill: white;
+  }
+}
+
+.helper {
+  opacity: 0.3;
+}
+
+.drop {
+  width: 24px;
+  height: 24px;
+  background: #222222;
+  position: absolute;
+  right: $gap;
+  top: $gap;
+  border-radius: 12px;
+  z-index: 2;
+  transition: background-color 250ms, opacity 0.25s;
+  cursor: pointer;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  svg {
+    width: 20px;
+    height: 20px;
+  }
+
+  &:hover {
+    opacity: 1;
+    background-color: $red;
+  }
+}
diff --git a/src/constants/errors.ts b/src/constants/errors.ts
index 70a8ee47..92aea57b 100644
--- a/src/constants/errors.ts
+++ b/src/constants/errors.ts
@@ -7,6 +7,7 @@ export const ERRORS = {
   TEXT_REQUIRED: 'Text_Required',
   UNKNOWN_NODE_TYPE: 'Unknown_Node_Type',
   URL_INVALID: 'Url_Invalid',
+  FILES_AUDIO_REQUIRED: 'Files_Audio_Required',
 };
 
 export const ERROR_LITERAL = {
@@ -18,4 +19,5 @@ export const ERROR_LITERAL = {
   [ERRORS.TEXT_REQUIRED]: 'Нужно немного текста',
   [ERRORS.UNKNOWN_NODE_TYPE]: 'Неизвестный тип поста',
   [ERRORS.URL_INVALID]: 'Неизвестный адрес',
+  [ERRORS.FILES_AUDIO_REQUIRED]: 'Нужна хотя бы одна песня',
 };
diff --git a/src/redux/uploads/constants.ts b/src/redux/uploads/constants.ts
index 74a1528b..21a03c8a 100644
--- a/src/redux/uploads/constants.ts
+++ b/src/redux/uploads/constants.ts
@@ -38,6 +38,7 @@ export const EMPTY_UPLOAD_STATUS: IUploadStatus = {
   thumbnail_url: null,
   type: null,
   temp_id: null,
+  name: null,
 };
 
 // for targeted cancellation
diff --git a/src/redux/uploads/reducer.ts b/src/redux/uploads/reducer.ts
index 98915b38..38a5d310 100644
--- a/src/redux/uploads/reducer.ts
+++ b/src/redux/uploads/reducer.ts
@@ -12,6 +12,7 @@ export interface IUploadStatus {
   thumbnail_url: string;
   progress: number;
   temp_id: UUID;
+  name: string;
 }
 
 export interface IUploadState {
diff --git a/src/redux/uploads/sagas.ts b/src/redux/uploads/sagas.ts
index 357852e8..94868079 100644
--- a/src/redux/uploads/sagas.ts
+++ b/src/redux/uploads/sagas.ts
@@ -78,8 +78,10 @@ function* uploadFile({ file, temp_id, type, target }: IFileWithUUID) {
       {
         preview,
         is_uploading: true,
-        type: file.type,
+        // type: file.type,
         temp_id,
+        type,
+        name: file.name,
       }
     )
   );
@@ -106,7 +108,7 @@ function* uploadFile({ file, temp_id, type, target }: IFileWithUUID) {
 
   if (error) {
     return yield put(
-      uploadSetStatus(temp_id, { is_uploading: false, error: data.detail || error })
+      uploadSetStatus(temp_id, { is_uploading: false, error: data.detail || error, type })
     );
   }
 
@@ -116,8 +118,10 @@ function* uploadFile({ file, temp_id, type, target }: IFileWithUUID) {
       error: null,
       uuid: data.id,
       url: data.full_path,
+      type,
       thumbnail_url: data.full_path,
       progress: 1,
+      name: file.name,
     })
   );
 

From 88333e36b7ce3076dd94584fe1f84db85657fcbc Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 17:58:51 +0700
Subject: [PATCH 44/99] adding audio post and view it

---
 src/components/node/NodeAudioBlock/index.tsx  | 26 +++++++++++++++++++
 .../node/NodeAudioBlock/styles.scss           | 17 ++++++++++++
 src/redux/node/constants.ts                   |  2 ++
 3 files changed, 45 insertions(+)
 create mode 100644 src/components/node/NodeAudioBlock/index.tsx
 create mode 100644 src/components/node/NodeAudioBlock/styles.scss

diff --git a/src/components/node/NodeAudioBlock/index.tsx b/src/components/node/NodeAudioBlock/index.tsx
new file mode 100644
index 00000000..7a4bde45
--- /dev/null
+++ b/src/components/node/NodeAudioBlock/index.tsx
@@ -0,0 +1,26 @@
+import React, { FC, useMemo } from 'react';
+import { INode } from '~/redux/types';
+import { UPLOAD_TYPES } from '~/redux/uploads/constants';
+import { AudioPlayer } from '~/components/media/AudioPlayer';
+import * as styles from './styles.scss';
+
+interface IProps {
+  node: INode;
+}
+
+const NodeAudioBlock: FC<IProps> = ({ node }) => {
+  const audios = useMemo(
+    () => node.files.filter(file => file && file.type === UPLOAD_TYPES.AUDIO),
+    [node.files]
+  );
+
+  return (
+    <div className={styles.wrap}>
+      {audios.map(file => (
+        <AudioPlayer key={file.id} file={file} />
+      ))}
+    </div>
+  );
+};
+
+export { NodeAudioBlock };
diff --git a/src/components/node/NodeAudioBlock/styles.scss b/src/components/node/NodeAudioBlock/styles.scss
new file mode 100644
index 00000000..5df8c201
--- /dev/null
+++ b/src/components/node/NodeAudioBlock/styles.scss
@@ -0,0 +1,17 @@
+.wrap {
+  background: $content_bg;
+  border-radius: $radius;
+
+  & > div {
+    @include outer_shadow();
+
+    &:first-child {
+      border-top-left-radius: $radius;
+      border-top-right-radius: $radius;
+    }
+    &:last-child {
+      border-bottom-left-radius: $radius;
+      border-bottom-right-radius: $radius;
+    }
+  }
+}
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index b3b8b56d..6c9f5655 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -2,6 +2,7 @@ import { FC } from 'react';
 import { INode, ValueOf, IComment } from '../types';
 import { NodeImageSlideBlock } from '~/components/node/NodeImageSlideBlock';
 import { NodeTextBlock } from '~/components/node/NodeTextBlock';
+import { NodeAudioBlock } from '~/components/node/NodeAudioBlock';
 import { NodeVideoBlock } from '~/components/node/NodeVideoBlock';
 import { ImageEditor } from '~/components/editors/ImageEditor';
 import { TextEditor } from '~/components/editors/TextEditor';
@@ -74,6 +75,7 @@ export const NODE_COMPONENTS: INodeComponents = {
 
 export const NODE_INLINES: INodeComponents = {
   [NODE_TYPES.TEXT]: NodeTextBlock,
+  [NODE_TYPES.AUDIO]: NodeAudioBlock,
 };
 
 export const EMPTY_COMMENT: IComment = {

From d22c1f64d097a3bfcd2b45004884ec63b7bb109f Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 19:42:11 +0700
Subject: [PATCH 45/99] fixed textures

---
 src/components/bars/PlayerBar/styles.scss      |   2 +-
 src/components/node/NodePanelInner/styles.scss |   2 +-
 src/sprites/noise.png                          | Bin 0 -> 180542 bytes
 src/sprites/noise_top.png                      | Bin 0 -> 171602 bytes
 src/styles/colors.scss                         |   9 ++++++---
 src/styles/global.scss                         |   9 ++++++---
 6 files changed, 14 insertions(+), 8 deletions(-)
 create mode 100644 src/sprites/noise.png
 create mode 100644 src/sprites/noise_top.png

diff --git a/src/components/bars/PlayerBar/styles.scss b/src/components/bars/PlayerBar/styles.scss
index 937b2b83..389cbc42 100644
--- a/src/components/bars/PlayerBar/styles.scss
+++ b/src/components/bars/PlayerBar/styles.scss
@@ -8,7 +8,7 @@
 .wrap {
   display: flex;
   border-radius: $radius $radius 0 0;
-  background: $green_gradient;
+  background: $main_gradient;
   align-items: center;
   box-shadow: rgba(0, 0, 0, 0.5) 0 2px 5px, inset rgba(255, 255, 255, 0.3) 1px 1px,
     inset rgba(0, 0, 0, 0.3) 0 -1px;
diff --git a/src/components/node/NodePanelInner/styles.scss b/src/components/node/NodePanelInner/styles.scss
index 830ee740..054e0829 100644
--- a/src/components/node/NodePanelInner/styles.scss
+++ b/src/components/node/NodePanelInner/styles.scss
@@ -94,7 +94,7 @@
     right: 4px;
     width: 24px;
     height: 52px;
-    background: $green_gradient;
+    background: $main_gradient;
     box-shadow: transparentize(black, 0.8) 4px 2px;
     border-radius: 2px;
   }
diff --git a/src/sprites/noise.png b/src/sprites/noise.png
new file mode 100644
index 0000000000000000000000000000000000000000..b854243521987f05ebe5d033e8ce9c7442106967
GIT binary patch
literal 180542
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
GLSTZZU-29O

literal 0
HcmV?d00001

diff --git a/src/sprites/noise_top.png b/src/sprites/noise_top.png
new file mode 100644
index 0000000000000000000000000000000000000000..d620eede7707144d0fd7e6629913d83f5ebc0ecc
GIT binary patch
literal 171602
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
KMNUMnLSTZxJw-$S

literal 0
HcmV?d00001

diff --git a/src/styles/colors.scss b/src/styles/colors.scss
index be1dfce9..99ba2c95 100644
--- a/src/styles/colors.scss
+++ b/src/styles/colors.scss
@@ -15,10 +15,13 @@ $green_gradient: linear-gradient(170deg, adjust_hue($wisegreen, 15deg) 0%, $wise
 $purple_gradient: linear-gradient(170deg, $red, $dark_blue);
 $cyan_gradient: linear-gradient(260deg, #3c75ff -50%, #7b2653 150%);
 
-$main_bg_color: #2c2b2b;
+$main_gradient: $green_gradient;
+
+// $main_bg_color: darken(#2c2b2b, 4%);
+$main_bg_color: darken(#2c2d2d, 6%);
 $main_text_color: white;
 
-$content_bg: darken($main_bg_color, 6%);
+$content_bg: darken($main_bg_color, 0%);
 $content_bg_secondary: darken($content_bg, 2%);
 
 $cell_bg: lighten($main_bg_color, 0%);
@@ -34,7 +37,7 @@ $button_bg_color: $red_gradient;
 
 $comment_bg: lighten($content_bg, 2%);
 $panel_bg: transparent;
-$node_bg: darken($content_bg, 4%);
+$node_bg: darken($content_bg, 2%);
 $node_image_bg: darken($main_bg_color, 7%);
 $node_title_background: darken($main_bg_color, 8%);
 
diff --git a/src/styles/global.scss b/src/styles/global.scss
index 76ede1f3..9733167f 100644
--- a/src/styles/global.scss
+++ b/src/styles/global.scss
@@ -7,7 +7,8 @@ html {
 body {
   background: darken($main_bg_color, 12%);
   min-height: 100vh;
-  background: url('http://vault48.org/pixmaps/texture.jpg');
+  // background: url('http://vault48.org/pixmaps/texture.jpg');
+  background: url('../../src/sprites/noise.png') $main_bg_color;
   color: $main_text_color;
   font: $font_16_regular;
   -webkit-font-smoothing: antialiased;
@@ -18,12 +19,14 @@ body {
   &::before {
     content: '';
     position: absolute;
-    height: 400px;
+    height: 600px;
     width: 100%;
     top: 0;
     left: 0;
     z-index: -1;
-    background: url('http://vault48.org/pixmaps/texture_alt.jpg');
+    // background: url('http://vault48.org/pixmaps/texture_alt.jpg');
+    background: url('../../src/sprites/noise_top.png') 0% 0%;
+    background-size: 600px 600px;
     pointer-events: none;
   }
 }

From 4971c85132c25a124b9f5e9de4f0c87a140b5032 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 20:01:59 +0700
Subject: [PATCH 46/99] fixed gradients

---
 src/components/media/AudioPlayer/styles.scss | 3 ++-
 src/styles/colors.scss                       | 9 ++++++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/components/media/AudioPlayer/styles.scss b/src/components/media/AudioPlayer/styles.scss
index f4cd63bf..5603da44 100644
--- a/src/components/media/AudioPlayer/styles.scss
+++ b/src/components/media/AudioPlayer/styles.scss
@@ -98,7 +98,8 @@
 }
 
 .bar {
-  background: linear-gradient(270deg, $green, $wisegreen);
+  // background: linear-gradient(270deg, $green, $wisegreen);
+  background: $main_gradient;
   position: absolute;
   height: 10px;
   left: 0;
diff --git a/src/styles/colors.scss b/src/styles/colors.scss
index 99ba2c95..abe26770 100644
--- a/src/styles/colors.scss
+++ b/src/styles/colors.scss
@@ -11,10 +11,17 @@ $wisegreen: #007962;
 
 $red_gradient: linear-gradient(165deg, $orange -50%, $red 150%);
 $blue_gradient: linear-gradient(170deg, $green, $dark_blue);
-$green_gradient: linear-gradient(170deg, adjust_hue($wisegreen, 15deg) 0%, $wisegreen 100%);
+$green_gradient: linear-gradient(
+  170deg,
+  lighten(adjust_hue($wisegreen, 15deg), 10%) 0%,
+  $wisegreen 100%
+);
 $purple_gradient: linear-gradient(170deg, $red, $dark_blue);
 $cyan_gradient: linear-gradient(260deg, #3c75ff -50%, #7b2653 150%);
 
+$red_gradient_alt: linear-gradient(270deg, #d2004c, #ff4545);
+$purple_gradient_alt: linear-gradient(90deg, #442294, #ff4545);
+
 $main_gradient: $green_gradient;
 
 // $main_bg_color: darken(#2c2b2b, 4%);

From 8daa08d61bab0a61d424c713f92a85ddc2b8a4f2 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 20:03:47 +0700
Subject: [PATCH 47/99] comment appearance animation

---
 src/components/node/Comment/styles.scss | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/components/node/Comment/styles.scss b/src/components/node/Comment/styles.scss
index 1afb844d..c56bbe59 100644
--- a/src/components/node/Comment/styles.scss
+++ b/src/components/node/Comment/styles.scss
@@ -1,2 +1,11 @@
-.wrap {
+@keyframes appear {
+  from {
+    opacity: 0;
+  }
+  to {
+    opacity: 1;
+  }
+}
+.wrap {
+  animation: appear 1s;
 }

From f40aad7b7ac932091a79423b82cf399a5d4ec660 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 20:16:34 +0700
Subject: [PATCH 48/99] bigger tags

---
 src/components/node/Tag/styles.scss | 12 +++++++-----
 src/styles/colors.scss              |  5 +++--
 src/styles/variables.scss           |  2 +-
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/src/components/node/Tag/styles.scss b/src/components/node/Tag/styles.scss
index 34f20e30..238aff8c 100644
--- a/src/components/node/Tag/styles.scss
+++ b/src/components/node/Tag/styles.scss
@@ -1,4 +1,6 @@
 .tag {
+  @include outer_shadow();
+
   height: $tag_height;
   background: $tag_bg;
   display: flex;
@@ -9,8 +11,8 @@
   font: $font_14_semibold;
   align-self: flex-start;
   padding: 0 8px 0 0;
-  box-shadow: $shadow_depth_2;
-  margin: ($gap / 2) $gap ($gap / 2) 0;
+  // box-shadow: $shadow_depth_2;
+  margin: 0 $gap $gap 0;
   position: relative;
 
   &:global(.is_hoverable) {
@@ -64,7 +66,7 @@
     top: 0;
     bottom: 0;
     width: 100%;
-    padding-left: 23px;
+    padding-left: $tag_height;
     padding-right: 5px;
     box-sizing: border-box;
   }
@@ -74,10 +76,10 @@
   width: $tag_height;
   height: $tag_height;
   display: flex;
-  margin-right: 3px;
+  // padding-right: 0px;
   align-items: center;
   justify-content: center;
-  flex: 0 0 22px;
+  flex: 0 0 $tag_height;
 
   &::after {
     content: ' ';
diff --git a/src/styles/colors.scss b/src/styles/colors.scss
index abe26770..bffd8115 100644
--- a/src/styles/colors.scss
+++ b/src/styles/colors.scss
@@ -1,4 +1,5 @@
-$red: #ff3344;
+// $red: #ff3344;
+$red: #da6972;
 $yellow: #ffd60f;
 $dark_blue: #3c75ff;
 $blue: #3ca1ff;
@@ -9,7 +10,7 @@ $orange: #ff7549;
 $grass: #41800d;
 $wisegreen: #007962;
 
-$red_gradient: linear-gradient(165deg, $orange -50%, $red 150%);
+$red_gradient: linear-gradient(165deg, $red, #ea057c 100%);
 $blue_gradient: linear-gradient(170deg, $green, $dark_blue);
 $green_gradient: linear-gradient(
   170deg,
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index e05cd282..3803c192 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -61,7 +61,7 @@ $shadow_depth_2: transparentize(black, 0.8) 0 2px, inset transparentize(white, 0
 $comment_shadow: $shadow_depth_2;
 $node_shadow: transparentize(black, 0.8) 0 2px, transparentize(black, 0.8) 0 2px 4px;
 
-$tag_height: 22px;
+$tag_height: 26px;
 
 $input_shadow: inset transparentize(white, 0.9) 0 0 0 1px;
 $input_shadow_error: inset $red 0 0 0 1px;

From e5c50890674064754fdad5d71cfe47b3cf36797a Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 20:32:24 +0700
Subject: [PATCH 49/99] fixed grey button color

---
 src/components/input/Button/styles.scss        | 1 +
 src/components/node/CommentContent/styles.scss | 3 ++-
 src/components/node/NodePanelInner/styles.scss | 1 +
 src/styles/colors.scss                         | 2 +-
 src/styles/variables.scss                      | 2 +-
 5 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/components/input/Button/styles.scss b/src/components/input/Button/styles.scss
index 19eaeb6a..91a0af24 100644
--- a/src/components/input/Button/styles.scss
+++ b/src/components/input/Button/styles.scss
@@ -108,6 +108,7 @@
   &:global(.disabled),
   &:global(.grey) {
     background: transparentize(white, 0.9);
+    color: white;
     // background: lighten(white, 0.5);
     // filter: grayscale(100%);
   }
diff --git a/src/components/node/CommentContent/styles.scss b/src/components/node/CommentContent/styles.scss
index a2462771..3b5141cc 100644
--- a/src/components/node/CommentContent/styles.scss
+++ b/src/components/node/CommentContent/styles.scss
@@ -1,8 +1,9 @@
 @import 'flexbin/flexbin.scss';
 
 .block {
+  @include outer_shadow();
   min-height: $comment_height;
-  box-shadow: inset rgba(255, 255, 255, 0.05) 1px 1px, inset rgba(0, 0, 0, 0.1) -1px -1px;
+  // box-shadow: inset rgba(255, 255, 255, 0.05) 1px 1px, inset rgba(0, 0, 0, 0.1) -1px -1px;
   display: flex;
   align-items: flex-start;
   justify-content: flex-start;
diff --git a/src/components/node/NodePanelInner/styles.scss b/src/components/node/NodePanelInner/styles.scss
index 054e0829..cdbbcfd0 100644
--- a/src/components/node/NodePanelInner/styles.scss
+++ b/src/components/node/NodePanelInner/styles.scss
@@ -27,6 +27,7 @@
   padding: $gap;
   background: $node_bg;
   height: 72px;
+  @include outer_shadow();
 }
 
 .title {
diff --git a/src/styles/colors.scss b/src/styles/colors.scss
index bffd8115..9c79d31a 100644
--- a/src/styles/colors.scss
+++ b/src/styles/colors.scss
@@ -26,7 +26,7 @@ $purple_gradient_alt: linear-gradient(90deg, #442294, #ff4545);
 $main_gradient: $green_gradient;
 
 // $main_bg_color: darken(#2c2b2b, 4%);
-$main_bg_color: darken(#2c2d2d, 6%);
+$main_bg_color: darken(#332f2d, 6%);
 $main_text_color: white;
 
 $content_bg: darken($main_bg_color, 0%);
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index 3803c192..66e8f78a 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -68,7 +68,7 @@ $input_shadow_error: inset $red 0 0 0 1px;
 $input_shadow_filled: $input_shadow;
 
 @mixin outer_shadow() {
-  box-shadow: inset transparentize(white, 0.95) 1px 1px, transparentize(black, 0.8) -1px -1px;
+  box-shadow: inset transparentize(white, 0.95) 0 1px, transparentize(black, 0.8) -1px -1px;
 }
 
 @mixin inner_shadow() {

From 42139b0dde5b7682c424a2f391bb85ac37cce02a Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 21:17:05 +0700
Subject: [PATCH 50/99] cells shadow

---
 src/components/flow/Cell/styles.scss          |   2 +
 .../node/NodeImageSlideBlock/styles.scss      |   1 +
 src/sprites/favicon.ico                       | Bin 0 -> 719 bytes
 src/styles/colors.scss                        |   2 +-
 webpack.config.js                             |  56 ++++++++----------
 5 files changed, 30 insertions(+), 31 deletions(-)
 create mode 100644 src/sprites/favicon.ico

diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index b57eef2b..d225b1b5 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -111,6 +111,8 @@
 }
 
 .face {
+  @include outer_shadow();
+
   box-sizing: border-box;
   position: absolute;
   top: 0;
diff --git a/src/components/node/NodeImageSlideBlock/styles.scss b/src/components/node/NodeImageSlideBlock/styles.scss
index 2feef7be..4824443b 100644
--- a/src/components/node/NodeImageSlideBlock/styles.scss
+++ b/src/components/node/NodeImageSlideBlock/styles.scss
@@ -4,6 +4,7 @@
   min-width: 0;
   width: 100%;
   transition: height 0.25s;
+  border-radius: $radius $radius 0 0;
 }
 
 .image_container {
diff --git a/src/sprites/favicon.ico b/src/sprites/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..3059b281001a27cba9392e4a77037fcfe57bfd99
GIT binary patch
literal 719
zcmV;=0x<oFP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004b3#c}2nYxW
zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ@H10!&FnK~y-6m6I`R+fWpRKZ^%O8ibw|NSwiA1}%bEWXxs{p|inR
zGi9+`LJH{*D8>-l=0~J|pp?Xc5Q4$W^Pok94j!^N9-=%n*n^E<huX$zA<zRC?r`qm
z-ov>$V+`vk6bd`QAy8fvKz~t}X`238=jWCJg+d_*G=a~SW!bLlBBf+J9y1z^mi!6u
z3HX+#saXjuhJOGD#bS{tikQu27-M*Rd?ZN{_V@R(ZJX=sYk;4?yEILWwNP#X2Vocz
zh9SLPkE^RIj4@c&AIj6y6Gul!oSvQn94ux)O1UGY90x&Q>h-$W*w`?&TFoe>%>Dhn
z+1uMQQc5GGG~3(T=I-v!)M_;&r5sBscLZ=~S(Y6|5xriIYPHJo@iEP2lO#!A89bRx
zI6FJTaU1{}s0*O%x-PTX46QYdMuU@+6P}-+saC51#Bsbb^5NlOT{E(Pvgdhdt=Zbz
zVmh6YBne>{k|fEh2dGpk?C$Oo1Oc0yn*e2NT`r%`^LH-R(P%VqU6)d+v^)a~=xeR<
zJdeR(fa5p>K|mbG1VQks7edhOcFE;(yu7>s^ev#DWf?*UeBY<tZqsVD@O__7r$eXH
z!S{Vytriy-7kHkB5P~er0F(eO=kxhTrIZ~-5jQtC2q8E>KW93fVvNCY9NO(Rx3{-c
zDixGc%;)n7@O_!Y_rRAh3@H|iD5X}W=JR<5g8{zp6Gaij;gC3v0Y0Q@`t{8yYpnrR
zYb&J~4u`Lz{N^)xo(F)|nk>tfYybO9>-gVy{tef=Avq%?htvQ7002ovPDHLkV1lb-
BID`NI

literal 0
HcmV?d00001

diff --git a/src/styles/colors.scss b/src/styles/colors.scss
index 9c79d31a..6fc6b561 100644
--- a/src/styles/colors.scss
+++ b/src/styles/colors.scss
@@ -46,7 +46,7 @@ $button_bg_color: $red_gradient;
 $comment_bg: lighten($content_bg, 2%);
 $panel_bg: transparent;
 $node_bg: darken($content_bg, 2%);
-$node_image_bg: darken($main_bg_color, 7%);
+$node_image_bg: darken($main_bg_color, 4%);
 $node_title_background: darken($main_bg_color, 8%);
 
 $editor_bg: $content_bg;
diff --git a/webpack.config.js b/webpack.config.js
index 5c184b40..2dc6a614 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -11,7 +11,7 @@ const htmlPlugin = new HtmlWebPackPlugin({
   filename: './index.html',
   title: 'VAULT',
   hash: false,
-  // favicon: 'src/sprites/favicon.png',
+  favicon: 'src/sprites/favicon.ico',
 });
 
 const isDevelopment = process.env.NODE_ENV !== 'production';
@@ -22,7 +22,7 @@ const resolve = {
     'react-dom': '@hot-loader/react-dom',
     '~': join(__dirname, 'src'),
   },
-  extensions: ['*', '.ts', '.tsx', '.js', '.jsx', '.json', '.scss']
+  extensions: ['*', '.ts', '.tsx', '.js', '.jsx', '.json', '.scss'],
 };
 
 /* Configuration */
@@ -45,10 +45,7 @@ module.exports = () => {
       rules: [
         {
           test: /\.css$/,
-          use: [
-            { loader: 'style-loader' },
-            { loader: 'css-loader' }
-          ],
+          use: [{ loader: 'style-loader' }, { loader: 'css-loader' }],
         },
         {
           test: /\.less$/,
@@ -62,11 +59,11 @@ module.exports = () => {
                 modules: true,
                 sourceMap: true,
                 importLoaders: 2,
-                localIdentName: '[folder]__[local]__[hash:base64:5]'
-              }
+                localIdentName: '[folder]__[local]__[hash:base64:5]',
+              },
             },
-            { loader: 'less-loader' }
-          ]
+            { loader: 'less-loader' },
+          ],
         },
         {
           test: /\.scss$/,
@@ -79,16 +76,16 @@ module.exports = () => {
                 modules: true,
                 sourceMap: true,
                 importLoaders: 2,
-                localIdentName: '[folder]__[local]__[hash:base64:5]'
-              }
+                localIdentName: '[folder]__[local]__[hash:base64:5]',
+              },
             },
             { loader: 'resolve-url-loader' },
             {
               loader: 'sass-loader',
               options: {
                 sourceMap: true,
-                sourceMapContents: false
-              }
+                sourceMapContents: false,
+              },
             },
             {
               loader: 'sass-resources-loader',
@@ -96,14 +93,14 @@ module.exports = () => {
                 resources: ['src/styles/variables.scss'],
               },
             },
-          ]
+          ],
         },
         {
           test: /\.(ts|tsx|js|jsx)$/,
           exclude: /node_modules/,
           use: {
-            loader: 'babel-loader'
-          }
+            loader: 'babel-loader',
+          },
         },
         { test: /\.(ts|tsx)?$/, loader: 'awesome-typescript-loader' },
         {
@@ -113,17 +110,17 @@ module.exports = () => {
             options: {
               name: '[name].[ext]',
               // outputPath: '/font'
-            }
-          }
+            },
+          },
         },
         {
           test: /\.(png|svg)$/,
           use: {
             loader: 'file-loader',
-            options: {}
-          }
-        }
-      ]
+            options: {},
+          },
+        },
+      ],
     },
     devtool,
     resolve,
@@ -151,18 +148,18 @@ module.exports = () => {
             minChunks: 2,
             minSize: 0,
             reuseExistingChunk: true,
-          }
-        }
+          },
+        },
       },
       minimizer: [
         new UglifyJsPlugin({
           cache: true,
           parallel: true,
-          sourceMap: true // set to true if you want JS source maps
+          sourceMap: true, // set to true if you want JS source maps
         }),
-        new OptimizeCSSAssetsPlugin({})
+        new OptimizeCSSAssetsPlugin({}),
       ],
-      occurrenceOrder: true // To keep filename consistent between different modes (for example building only)
+      occurrenceOrder: true, // To keep filename consistent between different modes (for example building only)
     },
     devServer: {
       historyApiFallback: true,
@@ -171,7 +168,6 @@ module.exports = () => {
       contentBase: 'dist',
       publicPath: '/',
       hot: true,
-    }
+    },
   };
 };
-

From e35371e3aa46802b451439d14cfc4e3ad3e80552 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 21:28:35 +0700
Subject: [PATCH 51/99] fixed player colors

---
 src/components/bars/PlayerBar/styles.scss | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/components/bars/PlayerBar/styles.scss b/src/components/bars/PlayerBar/styles.scss
index 389cbc42..fb1af0ef 100644
--- a/src/components/bars/PlayerBar/styles.scss
+++ b/src/components/bars/PlayerBar/styles.scss
@@ -6,12 +6,14 @@
 }
 
 .wrap {
+  @include outer_shadow();
   display: flex;
   border-radius: $radius $radius 0 0;
-  background: $main_gradient;
+  // background: $main_gradient;
   align-items: center;
-  box-shadow: rgba(0, 0, 0, 0.5) 0 2px 5px, inset rgba(255, 255, 255, 0.3) 1px 1px,
-    inset rgba(0, 0, 0, 0.3) 0 -1px;
+  background: lighten($content_bg, 6%);
+  // box-shadow: rgba(0, 0, 0, 0.5) 0 2px 5px, inset rgba(255, 255, 255, 0.3) 1px 1px,
+  // inset rgba(0, 0, 0, 0.3) 0 -1px;
   position: absolute;
   top: 0;
   left: 0;
@@ -44,7 +46,7 @@
   svg {
     width: 32px;
     height: 32px;
-    fill: $content_bg;
+    fill: darken(white, 50%);
     stroke: none;
   }
 }
@@ -67,7 +69,7 @@
 }
 
 .title {
-  color: #222222;
+  color: darken(white, 50%);
   font: $font_14_semibold;
   white-space: nowrap;
   overflow: hidden;
@@ -87,7 +89,7 @@
     left: 0;
     width: 100%;
     height: 2px;
-    background: #222222;
+    background: darken(white, 50%);
     position: absolute;
     border-radius: 2px;
     opacity: 0.5;
@@ -99,7 +101,7 @@
   left: 0;
   width: 100%;
   height: 6px;
-  background: #222222;
+  background: darken(white, 50%);
   position: absolute;
   border-radius: 2px;
 }

From 353cadb09f4bb5d8eb1a52331ecb489b60f75176 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Mon, 21 Oct 2019 21:37:55 +0700
Subject: [PATCH 52/99] cell menu

---
 src/components/flow/Cell/index.tsx   |  2 ++
 src/components/flow/Cell/styles.scss | 23 +++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/src/components/flow/Cell/index.tsx b/src/components/flow/Cell/index.tsx
index 49941986..28bc34b9 100644
--- a/src/components/flow/Cell/index.tsx
+++ b/src/components/flow/Cell/index.tsx
@@ -28,6 +28,8 @@ const Cell: FC<IProps> = ({ node: { id, title, thumbnail, type, blocks }, onSele
       className={classNames(styles.cell, 'vert-1', 'hor-1', { is_text: false })}
       onClick={onClick}
     >
+      <div className={styles.menu}>MENU</div>
+
       <div className={styles.face}>
         {title && <div className={styles.title}>{title}</div>}
         {text && <div className={styles.text}>{text}</div>}
diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index d225b1b5..547fb927 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -22,6 +22,14 @@
     }
   }
 
+  &:hover {
+    .menu {
+      opacity: 1;
+      pointer-events: all;
+      touch-action: auto;
+    }
+  }
+
   @include outer_shadow();
 }
 
@@ -124,3 +132,18 @@
   border-radius: $cell_radius;
   padding: $gap;
 }
+
+.menu {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 60px;
+  background: $content_bg;
+  z-index: 4;
+  border-radius: $radius;
+  opacity: 0;
+  pointer-events: none;
+  touch-action: none;
+  transition: opacity 0.5s;
+}

From 4fd5142e8b6e602233f5756581787c4051073fc8 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 22 Oct 2019 11:16:17 +0700
Subject: [PATCH 53/99] audio image block

---
 src/components/flow/Cell/styles.scss          |  1 +
 .../node/NodeAudioImageBlock/index.tsx        | 28 ++++++++++++++++
 .../node/NodeAudioImageBlock/styles.scss      | 32 +++++++++++++++++++
 src/redux/node/constants.ts                   |  2 ++
 4 files changed, 63 insertions(+)
 create mode 100644 src/components/node/NodeAudioImageBlock/index.tsx
 create mode 100644 src/components/node/NodeAudioImageBlock/styles.scss

diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index 547fb927..f9b20df7 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -146,4 +146,5 @@
   pointer-events: none;
   touch-action: none;
   transition: opacity 0.5s;
+  display: none;
 }
diff --git a/src/components/node/NodeAudioImageBlock/index.tsx b/src/components/node/NodeAudioImageBlock/index.tsx
new file mode 100644
index 00000000..c3883c4e
--- /dev/null
+++ b/src/components/node/NodeAudioImageBlock/index.tsx
@@ -0,0 +1,28 @@
+import React, { FC, useMemo } from 'react';
+import { INode } from '~/redux/types';
+import * as styles from './styles.scss';
+import { UPLOAD_TYPES } from '~/redux/uploads/constants';
+import path from 'ramda/es/path';
+import { getURL } from '~/utils/dom';
+
+interface IProps {
+  node: INode;
+}
+
+const NodeAudioImageBlock: FC<IProps> = ({ node }) => {
+  const images = useMemo(
+    () => node.files.filter(file => file && file.type === UPLOAD_TYPES.IMAGE),
+    [node.files]
+  );
+
+  return (
+    <div className={styles.wrap}>
+      <div
+        className={styles.slide}
+        style={{ backgroundImage: `url("${getURL(path([0], images))}")` }}
+      />
+    </div>
+  );
+};
+
+export { NodeAudioImageBlock };
diff --git a/src/components/node/NodeAudioImageBlock/styles.scss b/src/components/node/NodeAudioImageBlock/styles.scss
new file mode 100644
index 00000000..035a0634
--- /dev/null
+++ b/src/components/node/NodeAudioImageBlock/styles.scss
@@ -0,0 +1,32 @@
+.wrap {
+  @include outer_shadow();
+  padding-bottom: 33vh;
+  position: relative;
+  border-radius: $radius $radius 0 0;
+
+  &::after {
+    border-radius: $radius $radius 0 0;
+    content: ' ADD PATTERN HERE ';
+    z-index: 3;
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: rgba(0, 0, 0, 0.5);
+  }
+}
+
+.slide {
+  @include outer_shadow();
+
+  border-radius: $radius $radius 0 0;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  top: 0;
+  left: 0;
+  background: no-repeat 50% 30%;
+  background-size: cover;
+  z-index: 1;
+}
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index 6c9f5655..6aee481c 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -4,6 +4,7 @@ import { NodeImageSlideBlock } from '~/components/node/NodeImageSlideBlock';
 import { NodeTextBlock } from '~/components/node/NodeTextBlock';
 import { NodeAudioBlock } from '~/components/node/NodeAudioBlock';
 import { NodeVideoBlock } from '~/components/node/NodeVideoBlock';
+import { NodeAudioImageBlock } from '~/components/node/NodeAudioImageBlock';
 import { ImageEditor } from '~/components/editors/ImageEditor';
 import { TextEditor } from '~/components/editors/TextEditor';
 import { VideoEditor } from '~/components/editors/VideoEditor';
@@ -71,6 +72,7 @@ type INodeComponents = Record<
 export const NODE_COMPONENTS: INodeComponents = {
   [NODE_TYPES.IMAGE]: NodeImageSlideBlock,
   [NODE_TYPES.VIDEO]: NodeVideoBlock,
+  [NODE_TYPES.AUDIO]: NodeAudioImageBlock,
 };
 
 export const NODE_INLINES: INodeComponents = {

From 5d257fa2d4c495ea483b4e6857f875b7a2720eff Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 22 Oct 2019 11:21:53 +0700
Subject: [PATCH 54/99] audio post dots

---
 .../node/NodeAudioImageBlock/styles.scss      |  4 +-
 src/sprites/dots.svg                          | 81 ++-----------------
 2 files changed, 8 insertions(+), 77 deletions(-)

diff --git a/src/components/node/NodeAudioImageBlock/styles.scss b/src/components/node/NodeAudioImageBlock/styles.scss
index 035a0634..8d235c9e 100644
--- a/src/components/node/NodeAudioImageBlock/styles.scss
+++ b/src/components/node/NodeAudioImageBlock/styles.scss
@@ -6,14 +6,14 @@
 
   &::after {
     border-radius: $radius $radius 0 0;
-    content: ' ADD PATTERN HERE ';
+    content: ' ';
     z-index: 3;
     position: absolute;
     top: 0;
     left: 0;
     width: 100%;
     height: 100%;
-    background: rgba(0, 0, 0, 0.5);
+    background: rgba(0, 0, 0, 0.5) url('~/sprites/dots.svg');
   }
 }
 
diff --git a/src/sprites/dots.svg b/src/sprites/dots.svg
index 94a266e4..8a77a7a1 100644
--- a/src/sprites/dots.svg
+++ b/src/sprites/dots.svg
@@ -1,6 +1,3 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -9,76 +6,10 @@
    xmlns="http://www.w3.org/2000/svg"
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="30"
-   height="30"
-   viewBox="0 0 7.9374998 7.9375004"
+   width="3"
+   height="3"
+   viewBox="0 0 3 3"
    version="1.1"
-   id="svg8"
-   inkscape:version="0.92.2 5c3e80d, 2017-08-06"
-   sodipodi:docname="dots.svg">
-  <defs
-     id="defs2" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#111111"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="19.909475"
-     inkscape:cx="16.741834"
-     inkscape:cy="10.63598"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:showpageshadow="false"
-     units="px"
-     inkscape:window-width="1920"
-     inkscape:window-height="1036"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1">
-    <inkscape:grid
-       type="xygrid"
-       id="grid815" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata5">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(0,-289.06249)">
-    <rect
-       style="opacity:0.051;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect5700"
-       width="0.52916664"
-       height="0.52916664"
-       x="0"
-       y="296.47083" />
-    <rect
-       y="296.47083"
-       x="7.9375"
-       height="0.52916664"
-       width="0.52916664"
-       id="rect5733"
-       style="opacity:0.051;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
-    <rect
-       style="opacity:0.102;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.52916664;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       id="rect5735"
-       width="0.52916664"
-       height="0.52916664"
-       x="3.7041667"
-       y="292.50208" />
-  </g>
-</svg>
+>
+   <rect fill="black" width="1" height="2" x="0" y="0" />
+</svg>
\ No newline at end of file

From f4c337b2558c9b0c838ee664db77551cd7f95b39 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 22 Oct 2019 11:53:53 +0700
Subject: [PATCH 55/99] =?UTF-8?q?=D1=81=D0=B4=D1=83=D1=84=D1=82=D0=B3?=
 =?UTF-8?q?=D0=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/bars/SubmitBar/styles.scss    |  2 +-
 src/components/node/NodeComments/styles.scss | 21 +++++---------------
 src/styles/colors.scss                       |  2 +-
 3 files changed, 7 insertions(+), 18 deletions(-)

diff --git a/src/components/bars/SubmitBar/styles.scss b/src/components/bars/SubmitBar/styles.scss
index 83b9ce01..9d6cd3dd 100644
--- a/src/components/bars/SubmitBar/styles.scss
+++ b/src/components/bars/SubmitBar/styles.scss
@@ -16,7 +16,7 @@
 }
 
 .button {
-  background: $red_gradient;
+  background: $red;
   width: $bar_height;
   height: $bar_height;
   border-radius: $bar_height / 2;
diff --git a/src/components/node/NodeComments/styles.scss b/src/components/node/NodeComments/styles.scss
index 2aa67d98..401c1465 100644
--- a/src/components/node/NodeComments/styles.scss
+++ b/src/components/node/NodeComments/styles.scss
@@ -1,20 +1,9 @@
 .wrap {
   & > div {
-    margin: $gap 0 0 0;
+    margin: 0 0 $gap 0;
+
+    &:last-child {
+      margin: 0;
+    }
   }
-
-  // display: flex;
-  // flex-direction: column !important;
-
-  // & > div {
-  //   margin: ($gap / 2) 0;
-
-  //   &:last-child {
-  //     margin-top: 0;
-  //   }
-
-  //   &:first-child {
-  //     margin-bottom: 0;
-  //   }
-  // }
 }
diff --git a/src/styles/colors.scss b/src/styles/colors.scss
index 6fc6b561..588e0d1a 100644
--- a/src/styles/colors.scss
+++ b/src/styles/colors.scss
@@ -1,5 +1,5 @@
 // $red: #ff3344;
-$red: #da6972;
+$red: #ff6553;
 $yellow: #ffd60f;
 $dark_blue: #3c75ff;
 $blue: #3ca1ff;

From 249a9b368c4ad193e0ba4dbf60f410c6f1ac0190 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 22 Oct 2019 12:17:45 +0700
Subject: [PATCH 56/99] node edit and like buttons + actions

---
 src/components/node/NodePanel/index.tsx       | 27 ++++++++++--
 src/components/node/NodePanelInner/index.tsx  | 31 ++++++++++----
 .../node/NodePanelInner/styles.scss           | 42 +++++++++++++------
 src/containers/node/NodeLayout/index.tsx      | 26 ++++++++++--
 src/redux/node/actions.ts                     |  7 +++-
 src/redux/node/constants.ts                   |  1 +
 src/utils/node.ts                             | 11 +++++
 7 files changed, 117 insertions(+), 28 deletions(-)
 create mode 100644 src/utils/node.ts

diff --git a/src/components/node/NodePanel/index.tsx b/src/components/node/NodePanel/index.tsx
index 9d93e8a9..e3494792 100644
--- a/src/components/node/NodePanel/index.tsx
+++ b/src/components/node/NodePanel/index.tsx
@@ -7,9 +7,14 @@ import { NodePanelInner } from '~/components/node/NodePanelInner';
 interface IProps {
   node: INode;
   layout: {};
+
+  can_edit: boolean;
+  can_like: boolean;
+  onEdit: () => void;
+  onLike: () => void;
 }
 
-const NodePanel: FC<IProps> = ({ node, layout }) => {
+const NodePanel: FC<IProps> = ({ node, layout, can_edit, can_like, onEdit, onLike }) => {
   const [stack, setStack] = useState(false);
 
   const ref = useRef(null);
@@ -37,9 +42,25 @@ const NodePanel: FC<IProps> = ({ node, layout }) => {
   return (
     <div className={styles.place} ref={ref}>
       {stack ? (
-        createPortal(<NodePanelInner node={node} stack />, document.body)
+        createPortal(
+          <NodePanelInner
+            node={node}
+            stack
+            onEdit={onEdit}
+            onLike={onLike}
+            can_edit={can_edit}
+            can_like={can_like}
+          />,
+          document.body
+        )
       ) : (
-        <NodePanelInner node={node} />
+        <NodePanelInner
+          node={node}
+          onEdit={onEdit}
+          onLike={onLike}
+          can_edit={can_edit}
+          can_like={can_like}
+        />
       )}
     </div>
   );
diff --git a/src/components/node/NodePanelInner/index.tsx b/src/components/node/NodePanelInner/index.tsx
index 49d56bcd..3364f0f8 100644
--- a/src/components/node/NodePanelInner/index.tsx
+++ b/src/components/node/NodePanelInner/index.tsx
@@ -9,25 +9,42 @@ import classNames from 'classnames';
 interface IProps {
   node: INode;
   stack?: boolean;
+
+  can_edit: boolean;
+  can_like: boolean;
+  onEdit: () => void;
+  onLike: () => void;
 }
 
-const NodePanelInner: FC<IProps> = ({ node: { title, user }, stack }) => {
+const NodePanelInner: FC<IProps> = ({
+  node: { title, user },
+  stack,
+  can_edit,
+  can_like,
+  onEdit,
+  onLike,
+}) => {
   return (
     <div className={classNames(styles.wrap, { stack })}>
       <div className={styles.content}>
         <Group horizontal className={styles.panel}>
           <Filler>
             <div className={styles.title}>{title || '...'}</div>
-            {user && user.username && <div className={styles.name}>~ {user.username}</div>}
+            {user && user.username && <div className={styles.name}>~{user.username}</div>}
           </Filler>
         </Group>
 
         <div className={styles.buttons}>
-          <Icon icon="edit" size={24} />
-
-          <div className={styles.sep} />
-
-          <Icon icon="heart" size={24} />
+          {can_edit && (
+            <div>
+              <Icon icon="edit" size={24} onClick={onEdit} />
+            </div>
+          )}
+          {can_like && (
+            <div>
+              <Icon icon="heart" size={24} onClick={onLike} />
+            </div>
+          )}
         </div>
       </div>
     </div>
diff --git a/src/components/node/NodePanelInner/styles.scss b/src/components/node/NodePanelInner/styles.scss
index cdbbcfd0..133cb699 100644
--- a/src/components/node/NodePanelInner/styles.scss
+++ b/src/components/node/NodePanelInner/styles.scss
@@ -66,22 +66,43 @@
 
   & > * {
     margin: 0 $gap;
+    cursor: pointer;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+
+    svg {
+      fill: darken(white, 50%);
+      transition: fill 0.25s;
+    }
+
+    &:hover {
+      svg {
+        fill: $red;
+      }
+    }
+
+    &::after {
+      content: ' ';
+      flex: 0 0 6px;
+      height: $gap;
+      width: 6px;
+      border-radius: 4px;
+      background: transparentize(black, 0.7);
+      margin-left: $gap * 2;
+    }
 
     &:first-child {
       margin-left: 0;
     }
+
     &:last-child {
       margin-right: 0;
+      &::after {
+        display: none;
+      }
     }
   }
-  //height: 54px;
-  //border-radius: $radius $radius 0 0;
-  //background: linear-gradient(176deg, #f42a00, #5c1085);
-  //position: absolute;
-  //bottom: 0;
-  //right: 10px;
-  //width: 270px;
-  //display: flex;
 }
 
 .mark {
@@ -102,9 +123,4 @@
 }
 
 .sep {
-  flex: 0 0 6px;
-  height: 6px;
-  width: 6px;
-  border-radius: 4px;
-  background: transparentize(black, 0.7);
 }
diff --git a/src/containers/node/NodeLayout/index.tsx b/src/containers/node/NodeLayout/index.tsx
index cde602c5..9aa29fb9 100644
--- a/src/containers/node/NodeLayout/index.tsx
+++ b/src/containers/node/NodeLayout/index.tsx
@@ -1,7 +1,7 @@
-import React, { FC, createElement, useEffect, useCallback, useState } from 'react';
+import React, { FC, createElement, useEffect, useCallback, useState, useMemo } from 'react';
 import { RouteComponentProps } from 'react-router';
 import { connect } from 'react-redux';
-
+import { canEditNode, canLikeNode } from '~/utils/node';
 import { selectNode } from '~/redux/node/selectors';
 import { Card } from '~/components/containers/Card';
 
@@ -26,6 +26,8 @@ const mapStateToProps = state => ({
 const mapDispatchToProps = {
   nodeLoadNode: NODE_ACTIONS.nodeLoadNode,
   nodeUpdateTags: NODE_ACTIONS.nodeUpdateTags,
+  nodeEdit: NODE_ACTIONS.nodeEdit,
+  nodeLike: NODE_ACTIONS.nodeLike,
 };
 
 type IProps = ReturnType<typeof mapStateToProps> &
@@ -37,9 +39,12 @@ const NodeLayoutUnconnected: FC<IProps> = ({
     params: { id },
   },
   node: { is_loading, is_loading_comments, comments = [], current: node },
-  user: { is_user },
+  user,
+  user: { is_user, role },
   nodeLoadNode,
   nodeUpdateTags,
+  nodeEdit,
+  nodeLike,
 }) => {
   const [layout, setLayout] = useState({});
 
@@ -57,14 +62,27 @@ const NodeLayoutUnconnected: FC<IProps> = ({
     [node, nodeUpdateTags]
   );
 
+  const can_edit = useMemo(() => canEditNode(node, user), [node, user]);
+  const can_like = useMemo(() => canLikeNode(node, user), [node, user]);
+
   const block = node && node.type && NODE_COMPONENTS[node.type];
   const inline_block = node && node.type && NODE_INLINES[node.type];
 
+  const onEdit = useCallback(() => nodeEdit(node.id), [nodeEdit, node]);
+  const onLike = useCallback(() => nodeLike(node.id), [nodeLike, node]);
+
   return (
     <Card className={styles.node} seamless>
       {block && createElement(block, { node, is_loading, updateLayout, layout })}
 
-      <NodePanel node={node} layout={layout} />
+      <NodePanel
+        node={node}
+        layout={layout}
+        can_edit={can_edit}
+        can_like={can_like}
+        onEdit={onEdit}
+        onLike={onLike}
+      />
 
       <Group>
         <Padder>
diff --git a/src/redux/node/actions.ts b/src/redux/node/actions.ts
index e34e9fee..4d3dd3d7 100644
--- a/src/redux/node/actions.ts
+++ b/src/redux/node/actions.ts
@@ -71,7 +71,12 @@ export const nodeCreate = (node_type: INode['type']) => ({
 });
 
 export const nodeEdit = (id: INode['id']) => ({
-  type: NODE_ACTIONS.CREATE,
+  type: NODE_ACTIONS.EDIT,
+  id,
+});
+
+export const nodeLike = (id: INode['id']) => ({
+  type: NODE_ACTIONS.LIKE,
   id,
 });
 
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index 6aee481c..c5900ebb 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -18,6 +18,7 @@ export const NODE_ACTIONS = {
   LOAD_NODE: `${prefix}LOAD_NODE`,
 
   EDIT: `${prefix}EDIT`,
+  LIKE: `${prefix}LIKE`,
   CREATE: `${prefix}CREATE`,
 
   SET_SAVE_ERRORS: `${prefix}SET_SAVE_ERRORS`,
diff --git a/src/utils/node.ts b/src/utils/node.ts
new file mode 100644
index 00000000..2b81e9e8
--- /dev/null
+++ b/src/utils/node.ts
@@ -0,0 +1,11 @@
+import { USER_ROLES } from '~/redux/auth/constants';
+import { INode } from '~/redux/types';
+import { IUser } from '~/redux/auth/types';
+import path from 'ramda/es/path';
+
+export const canEditNode = (node: Partial<INode>, user: Partial<IUser>): boolean =>
+  path(['role'], user) === USER_ROLES.ADMIN ||
+  (path(['user', 'id'], node) && path(['user', 'id'], node) === path(['id'], user));
+
+export const canLikeNode = (node: Partial<INode>, user: Partial<IUser>): boolean =>
+  path(['role'], user) && path(['role'], user) !== USER_ROLES.GUEST;

From f71be36520a86fdf0a8076c8d8ba2c594628d07f Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 22 Oct 2019 12:31:59 +0700
Subject: [PATCH 57/99] node editing saga

---
 src/components/editors/ImageEditor/index.tsx  |  7 ++++++-
 .../editors/ImageEditor/styles.scss           | 12 +-----------
 .../dialogs/LoadingDialog/index.tsx           | 11 +++++++++++
 .../dialogs/LoadingDialog/styles.scss         | 11 +++++++++++
 src/redux/modal/constants.ts                  |  3 +++
 src/redux/node/sagas.ts                       | 19 ++++++++++++++++++-
 6 files changed, 50 insertions(+), 13 deletions(-)
 create mode 100644 src/containers/dialogs/LoadingDialog/index.tsx
 create mode 100644 src/containers/dialogs/LoadingDialog/styles.scss

diff --git a/src/components/editors/ImageEditor/index.tsx b/src/components/editors/ImageEditor/index.tsx
index decfacb6..0e9ead80 100644
--- a/src/components/editors/ImageEditor/index.tsx
+++ b/src/components/editors/ImageEditor/index.tsx
@@ -4,6 +4,7 @@ import { INode, IFile } from '~/redux/types';
 import * as UPLOAD_ACTIONS from '~/redux/uploads/actions';
 import { selectUploads } from '~/redux/uploads/selectors';
 import { ImageGrid } from '~/components/editors/ImageGrid';
+import * as styles from './styles.scss';
 
 const mapStateToProps = selectUploads;
 const mapDispatchToProps = {
@@ -26,7 +27,11 @@ const ImageEditorUnconnected: FC<IProps> = ({ data, setData, temp, statuses }) =
 
   const setFiles = useCallback((files: IFile[]) => setData({ ...data, files }), [data, setData]);
 
-  return <ImageGrid files={data.files} setFiles={setFiles} locked={pending_files} />;
+  return (
+    <div className={styles.wrap}>
+      <ImageGrid files={data.files} setFiles={setFiles} locked={pending_files} />
+    </div>
+  );
 };
 
 const ImageEditor = connect(
diff --git a/src/components/editors/ImageEditor/styles.scss b/src/components/editors/ImageEditor/styles.scss
index 79d3ce9a..6ca09dc5 100644
--- a/src/components/editors/ImageEditor/styles.scss
+++ b/src/components/editors/ImageEditor/styles.scss
@@ -1,14 +1,4 @@
-.uploads {
+.wrap {
   min-height: 200px;
   padding-bottom: 60px;
-  box-sizing: border-box;
-
-  display: grid;
-  grid-column-gap: $gap;
-  grid-row-gap: $gap;
-  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
-
-  @media (max-width: 600px) {
-    grid-template-columns: repeat(auto-fill, minmax(30vw, 1fr));
-  }
 }
diff --git a/src/containers/dialogs/LoadingDialog/index.tsx b/src/containers/dialogs/LoadingDialog/index.tsx
new file mode 100644
index 00000000..abead2d4
--- /dev/null
+++ b/src/containers/dialogs/LoadingDialog/index.tsx
@@ -0,0 +1,11 @@
+import React, { FC } from 'react';
+import { LoaderCircle } from '~/components/input/LoaderCircle';
+import * as styles from './styles.scss';
+
+const LoadingDialog: FC<{}> = () => (
+  <div className={styles.wrap}>
+    <LoaderCircle size={64} />
+  </div>
+);
+
+export { LoadingDialog };
diff --git a/src/containers/dialogs/LoadingDialog/styles.scss b/src/containers/dialogs/LoadingDialog/styles.scss
new file mode 100644
index 00000000..b0eb90de
--- /dev/null
+++ b/src/containers/dialogs/LoadingDialog/styles.scss
@@ -0,0 +1,11 @@
+.wrap {
+  height: 200px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  svg {
+    fill: white;
+    opacity: 0.5;
+  }
+}
diff --git a/src/redux/modal/constants.ts b/src/redux/modal/constants.ts
index 8426320d..0d12834b 100644
--- a/src/redux/modal/constants.ts
+++ b/src/redux/modal/constants.ts
@@ -1,5 +1,6 @@
 import { ValueOf } from '~/redux/types';
 import { LoginDialog } from '~/containers/dialogs/LoginDialog';
+import { LoadingDialog } from '~/containers/dialogs/LoadingDialog';
 import { EditorDialogImage } from '~/containers/editors/EditorDialogImage';
 import { EditorDialogText } from '~/containers/editors/EditorDialogText';
 import { EditorDialogVideo } from '~/containers/editors/EditorDialogVideo';
@@ -18,6 +19,7 @@ export const DIALOGS = {
   EDITOR_VIDEO: 'EDITOR_VIDEO',
   EDITOR_AUDIO: 'EDITOR_AUDIO',
   LOGIN: 'LOGIN',
+  LOADING: 'LOADING',
 };
 
 export const DIALOG_CONTENT = {
@@ -26,6 +28,7 @@ export const DIALOG_CONTENT = {
   [DIALOGS.EDITOR_VIDEO]: EditorDialogVideo,
   [DIALOGS.EDITOR_AUDIO]: EditorDialogAudio,
   [DIALOGS.LOGIN]: LoginDialog,
+  [DIALOGS.LOADING]: LoadingDialog,
 };
 
 export const NODE_EDITOR_DIALOGS = {
diff --git a/src/redux/node/sagas.ts b/src/redux/node/sagas.ts
index 7889b02b..aa6525c1 100644
--- a/src/redux/node/sagas.ts
+++ b/src/redux/node/sagas.ts
@@ -17,6 +17,7 @@ import {
   nodeSetTags,
   nodeCreate,
   nodeSetEditor,
+  nodeEdit,
 } from './actions';
 import { postNode, getNode, postNodeComment, getNodeComments, updateNodeTags } from './api';
 import { reqWrapper } from '../auth/sagas';
@@ -27,7 +28,7 @@ import { selectFlowNodes } from '../flow/selectors';
 import { URLS } from '~/constants/urls';
 import { selectNode } from './selectors';
 import { IResultWithStatus, INode } from '../types';
-import { NODE_EDITOR_DIALOGS } from '../modal/constants';
+import { NODE_EDITOR_DIALOGS, DIALOGS } from '../modal/constants';
 
 function* onNodeSave({ node }: ReturnType<typeof nodeSave>) {
   yield put(nodeSetSaveErrors({}));
@@ -128,10 +129,26 @@ function* onCreateSaga({ node_type: type }: ReturnType<typeof nodeCreate>) {
   yield put(modalShowDialog(NODE_EDITOR_DIALOGS[type]));
 }
 
+function* onEditSaga({ id }: ReturnType<typeof nodeEdit>) {
+  yield put(modalShowDialog(DIALOGS.LOADING));
+
+  const {
+    data: { node },
+    error,
+  } = yield call(reqWrapper, getNode, { id });
+
+  if (error || !node || !node.type || !NODE_EDITOR_DIALOGS[node.type])
+    return yield put(modalSetShown(false));
+
+  yield put(nodeSetEditor(node));
+  yield put(modalShowDialog(NODE_EDITOR_DIALOGS[node.type]));
+}
+
 export default function* nodeSaga() {
   yield takeLatest(NODE_ACTIONS.SAVE, onNodeSave);
   yield takeLatest(NODE_ACTIONS.LOAD_NODE, onNodeLoad);
   yield takeLatest(NODE_ACTIONS.POST_COMMENT, onPostComment);
   yield takeLatest(NODE_ACTIONS.UPDATE_TAGS, onUpdateTags);
   yield takeLatest(NODE_ACTIONS.CREATE, onCreateSaga);
+  yield takeLatest(NODE_ACTIONS.EDIT, onEditSaga);
 }

From fbd64dec4ce0a7a08d3bb535dd92d5e82c41f100 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 22 Oct 2019 13:01:31 +0700
Subject: [PATCH 58/99] posting node updates flow

---
 src/constants/errors.ts |  2 ++
 src/redux/node/sagas.ts | 13 ++++++++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/constants/errors.ts b/src/constants/errors.ts
index 92aea57b..efcb7ca1 100644
--- a/src/constants/errors.ts
+++ b/src/constants/errors.ts
@@ -8,6 +8,7 @@ export const ERRORS = {
   UNKNOWN_NODE_TYPE: 'Unknown_Node_Type',
   URL_INVALID: 'Url_Invalid',
   FILES_AUDIO_REQUIRED: 'Files_Audio_Required',
+  NOT_ENOUGH_RIGHTS: 'Not_Enough_Rights',
 };
 
 export const ERROR_LITERAL = {
@@ -20,4 +21,5 @@ export const ERROR_LITERAL = {
   [ERRORS.UNKNOWN_NODE_TYPE]: 'Неизвестный тип поста',
   [ERRORS.URL_INVALID]: 'Неизвестный адрес',
   [ERRORS.FILES_AUDIO_REQUIRED]: 'Нужна хотя бы одна песня',
+  [ERRORS.NOT_ENOUGH_RIGHTS]: 'У вас недостаточно прав',
 };
diff --git a/src/redux/node/sagas.ts b/src/redux/node/sagas.ts
index aa6525c1..7200a9d8 100644
--- a/src/redux/node/sagas.ts
+++ b/src/redux/node/sagas.ts
@@ -46,7 +46,18 @@ function* onNodeSave({ node }: ReturnType<typeof nodeSave>) {
   }
 
   const nodes = yield select(selectFlowNodes);
-  yield put(flowSetNodes([result, ...nodes]));
+  const updated_flow_nodes = node.id
+    ? nodes.map(item => (item.id === result.id ? result : item))
+    : [result, ...nodes];
+
+  yield put(flowSetNodes(updated_flow_nodes));
+
+  const { current } = yield select(selectNode);
+
+  if (node.id && current.id === result.id) {
+    yield put(nodeSetCurrent(result));
+  }
+
   return yield put(modalSetShown(false));
 }
 

From 2df87f9ab9861956c79568332668f53337825002 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 22 Oct 2019 14:20:57 +0700
Subject: [PATCH 59/99] fixed image slider normalizer

---
 src/components/node/NodeImageSlideBlock/index.tsx | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/components/node/NodeImageSlideBlock/index.tsx b/src/components/node/NodeImageSlideBlock/index.tsx
index 24092867..d26a4d57 100644
--- a/src/components/node/NodeImageSlideBlock/index.tsx
+++ b/src/components/node/NodeImageSlideBlock/index.tsx
@@ -101,8 +101,17 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
 
   const normalizeOffset = useCallback(() => {
     const { width: wrap_width } = wrap.current.getBoundingClientRect();
-    setOffset(Math.round(offset / wrap_width) * wrap_width);
-  }, [wrap, offset]);
+    const { width: slide_width } = slide.current.getBoundingClientRect();
+
+    const shift = (initial_offset - offset) / wrap_width; // percent / 100
+    const diff = initial_offset - (shift > 0 ? Math.ceil(shift) : Math.floor(shift)) * wrap_width;
+    const new_offset =
+      Math.abs(shift) > 0.33
+        ? Math.min(Math.max(diff, wrap_width - slide_width), 0) // next or prev slide
+        : Math.round(offset / wrap_width) * wrap_width; // back to this one
+
+    setOffset(new_offset);
+  }, [wrap, offset, initial_offset]);
 
   const updateMaxHeight = useCallback(() => {
     if (!wrap.current) return;

From f9a269137a10e4f6d75948babb76422fa10ea05c Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 22 Oct 2019 14:21:28 +0700
Subject: [PATCH 60/99] fixed normalizer to 25%

---
 src/components/node/NodeImageSlideBlock/index.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/components/node/NodeImageSlideBlock/index.tsx b/src/components/node/NodeImageSlideBlock/index.tsx
index d26a4d57..6060f3d2 100644
--- a/src/components/node/NodeImageSlideBlock/index.tsx
+++ b/src/components/node/NodeImageSlideBlock/index.tsx
@@ -106,7 +106,7 @@ const NodeImageSlideBlock: FC<IProps> = ({ node, is_loading, updateLayout }) =>
     const shift = (initial_offset - offset) / wrap_width; // percent / 100
     const diff = initial_offset - (shift > 0 ? Math.ceil(shift) : Math.floor(shift)) * wrap_width;
     const new_offset =
-      Math.abs(shift) > 0.33
+      Math.abs(shift) > 0.25
         ? Math.min(Math.max(diff, wrap_width - slide_width), 0) // next or prev slide
         : Math.round(offset / wrap_width) * wrap_width; // back to this one
 

From c8593b7e7a5c8a9527a76072a10dd862fb088455 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 22 Oct 2019 15:14:58 +0700
Subject: [PATCH 61/99] adding cover to node

---
 .../editors/AudioEditor/styles.scss           |   2 +-
 .../editors/EditorUploadButton/index.tsx      |   2 -
 .../editors/EditorUploadButton/styles.scss    |  12 +-
 .../editors/EditorUploadCoverButton/index.tsx | 111 ++++++++++++++++++
 .../EditorUploadCoverButton/styles.scss       |  80 +++++++++++++
 .../editors/ImageEditor/styles.scss           |   2 +-
 src/redux/node/constants.ts                   |   3 +-
 src/styles/variables.scss                     |   2 +
 8 files changed, 204 insertions(+), 10 deletions(-)
 create mode 100644 src/components/editors/EditorUploadCoverButton/index.tsx
 create mode 100644 src/components/editors/EditorUploadCoverButton/styles.scss

diff --git a/src/components/editors/AudioEditor/styles.scss b/src/components/editors/AudioEditor/styles.scss
index 4909ae19..c32787d8 100644
--- a/src/components/editors/AudioEditor/styles.scss
+++ b/src/components/editors/AudioEditor/styles.scss
@@ -1,4 +1,4 @@
 .wrap {
-  padding-bottom: 64px;
+  padding-bottom: $upload_button_height + $gap;
   min-height: 200px;
 }
diff --git a/src/components/editors/EditorUploadButton/index.tsx b/src/components/editors/EditorUploadButton/index.tsx
index c69dc3cf..c25acf68 100644
--- a/src/components/editors/EditorUploadButton/index.tsx
+++ b/src/components/editors/EditorUploadButton/index.tsx
@@ -54,8 +54,6 @@ const EditorUploadButtonUnconnected: FC<IProps> = ({
 
       if (current >= NODE_SETTINGS.MAX_FILES) return;
 
-      console.log({ type });
-
       const items: IFileWithUUID[] = Array.from(uploads).map(
         (file: File): IFileWithUUID => ({
           file,
diff --git a/src/components/editors/EditorUploadButton/styles.scss b/src/components/editors/EditorUploadButton/styles.scss
index 629c551b..c793e1c6 100644
--- a/src/components/editors/EditorUploadButton/styles.scss
+++ b/src/components/editors/EditorUploadButton/styles.scss
@@ -1,14 +1,16 @@
 .wrap {
-  width: 52px;
-  height: 52px;
-  border-radius: 32px !important;
+  @include outer_shadow();
+
+  width: $upload_button_height;
+  height: $upload_button_height;
+  border-radius: ($upload_button_height / 2) !important;
   position: relative;
   border-radius: $radius;
   cursor: pointer;
   // opacity: 0.7;
   transition: opacity 0.5s;
   background: $red_gradient;
-  box-shadow: $content_bg 0 0 5px 10px;
+  // box-shadow: $content_bg 0 0 5px 10px;
 
   &:hover {
     opacity: 1;
@@ -35,4 +37,4 @@
   display: flex;
   align-items: center;
   justify-content: center;
-}
\ No newline at end of file
+}
diff --git a/src/components/editors/EditorUploadCoverButton/index.tsx b/src/components/editors/EditorUploadCoverButton/index.tsx
new file mode 100644
index 00000000..dc8fc43c
--- /dev/null
+++ b/src/components/editors/EditorUploadCoverButton/index.tsx
@@ -0,0 +1,111 @@
+import React, { FC, useState, useCallback, useEffect } from 'react';
+import { INode, IFileWithUUID } from '~/redux/types';
+import uuid from 'uuid4';
+import * as styles from './styles.scss';
+import { UPLOAD_SUBJECTS, UPLOAD_TARGETS, UPLOAD_TYPES } from '~/redux/uploads/constants';
+import path from 'ramda/es/path';
+import { connect } from 'react-redux';
+import * as UPLOAD_ACTIONS from '~/redux/uploads/actions';
+import { selectUploads } from '~/redux/uploads/selectors';
+import { getURL } from '~/utils/dom';
+import { Icon } from '~/components/input/Icon';
+
+const mapStateToProps = state => {
+  const { statuses, files } = selectUploads(state);
+
+  return { statuses, files };
+};
+
+const mapDispatchToProps = {
+  uploadUploadFiles: UPLOAD_ACTIONS.uploadUploadFiles,
+};
+
+type IProps = ReturnType<typeof mapStateToProps> &
+  typeof mapDispatchToProps & {
+    data: INode;
+    setData: (data: INode) => void;
+    temp: string[];
+    setTemp: (val: string[]) => void;
+  };
+
+const EditorUploadCoverButtonUnconnected: FC<IProps> = ({
+  data,
+  setData,
+  files,
+  statuses,
+  uploadUploadFiles,
+}) => {
+  const [cover_temp, setCoverTemp] = useState<string>(null);
+
+  useEffect(() => {
+    Object.entries(statuses).forEach(([id, status]) => {
+      if (cover_temp === id && !!status.uuid && files[status.uuid]) {
+        setData({ ...data, cover: files[status.uuid] });
+        setCoverTemp(null);
+      }
+    });
+  }, [statuses, files, cover_temp, setData, data]);
+
+  const onUpload = useCallback(
+    (uploads: File[]) => {
+      const items: IFileWithUUID[] = Array.from(uploads).map(
+        (file: File): IFileWithUUID => ({
+          file,
+          temp_id: uuid(),
+          subject: UPLOAD_SUBJECTS.EDITOR,
+          target: UPLOAD_TARGETS.NODES,
+          type: UPLOAD_TYPES.IMAGE,
+        })
+      );
+
+      setCoverTemp(path([0, 'temp_id'], items));
+      uploadUploadFiles(items);
+    },
+    [uploadUploadFiles, setCoverTemp]
+  );
+
+  const onInputChange = useCallback(
+    event => {
+      event.preventDefault();
+
+      if (!event.target.files || !event.target.files.length) return;
+
+      onUpload(Array.from(event.target.files));
+    },
+    [onUpload]
+  );
+  const onDropCover = useCallback(() => {
+    setData({ ...data, cover: null });
+  }, [setData, data]);
+
+  const background = data.cover ? getURL(data.cover) : null;
+  const status = cover_temp && path([cover_temp], statuses);
+  const preview = status && path(['preview'], status);
+
+  return (
+    <div className={styles.wrap}>
+      <div
+        className={styles.preview}
+        style={{ backgroundImage: `url("${preview || background}")` }}
+      >
+        <div className={styles.input}>
+          {!data.cover && <span>ОБЛОЖКА</span>}
+          <input type="file" accept="image/*" onChange={onInputChange} />
+        </div>
+
+        {data.cover && (
+          <div className={styles.button} onClick={onDropCover}>
+            <Icon icon="close" />
+          </div>
+        )}
+      </div>
+    </div>
+  );
+};
+
+const EditorUploadCoverButton = connect(
+  mapStateToProps,
+  mapDispatchToProps
+)(EditorUploadCoverButtonUnconnected);
+
+export { EditorUploadCoverButton };
diff --git a/src/components/editors/EditorUploadCoverButton/styles.scss b/src/components/editors/EditorUploadCoverButton/styles.scss
new file mode 100644
index 00000000..ccb396ec
--- /dev/null
+++ b/src/components/editors/EditorUploadCoverButton/styles.scss
@@ -0,0 +1,80 @@
+.wrap {
+  @include outer_shadow();
+
+  height: $upload_button_height;
+  border-radius: ($upload_button_height / 2) !important;
+  position: relative;
+  border-radius: $radius;
+  cursor: pointer;
+  transition: opacity 0.5s;
+  background: lighten($content_bg, 4%);
+  flex: 0 1 $upload_button_height * 4;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  &:hover {
+    opacity: 1;
+  }
+
+  input {
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    top: 0;
+    left: 0;
+    opacity: 0;
+    z-index: 2;
+    cursor: pointer;
+  }
+}
+
+.input {
+  position: relative;
+  height: 100%;
+  flex: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font: $font_16_medium;
+  text-shadow: rgba(0, 0, 0, 0.5) 0 1px;
+}
+
+.preview {
+  width: 100%;
+  height: 100%;
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 1;
+  border-radius: ($upload_button_height / 2) !important;
+  background: 50% 50% no-repeat;
+  background-size: cover;
+  display: flex;
+  align-items: center;
+  flex-direction: row;
+  justify-content: flex-end;
+}
+
+.button {
+  width: $upload_button_height;
+  flex: 0 0 $upload_button_height;
+  height: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  box-shadow: inset rgba(255, 255, 255, 0.05) 1px 1px, rgba(0, 0, 0, 0.3) -1px 0;
+  border-radius: $upload_button_height;
+  background: transparentize($color: lighten($content_bg, 4%), $amount: 0);
+
+  &:hover {
+    svg {
+      fill: $red;
+    }
+  }
+
+  svg {
+    width: 32px;
+    height: 32px;
+  }
+}
diff --git a/src/components/editors/ImageEditor/styles.scss b/src/components/editors/ImageEditor/styles.scss
index 6ca09dc5..e5bcef09 100644
--- a/src/components/editors/ImageEditor/styles.scss
+++ b/src/components/editors/ImageEditor/styles.scss
@@ -1,4 +1,4 @@
 .wrap {
   min-height: 200px;
-  padding-bottom: 60px;
+  padding-bottom: $upload_button_height + $gap;
 }
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index c5900ebb..e5c79811 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -11,6 +11,7 @@ import { VideoEditor } from '~/components/editors/VideoEditor';
 import { AudioEditor } from '~/components/editors/AudioEditor';
 import { EditorImageUploadButton } from '~/components/editors/EditorImageUploadButton';
 import { EditorAudioUploadButton } from '~/components/editors/EditorAudioUploadButton';
+import { EditorUploadCoverButton } from '~/components/editors/EditorUploadCoverButton';
 
 const prefix = 'NODE.';
 export const NODE_ACTIONS = {
@@ -98,7 +99,7 @@ export const NODE_EDITORS = {
 };
 
 export const NODE_PANEL_COMPONENTS = {
-  [NODE_TYPES.IMAGE]: [EditorImageUploadButton],
+  [NODE_TYPES.IMAGE]: [EditorImageUploadButton, EditorUploadCoverButton],
   [NODE_TYPES.AUDIO]: [EditorAudioUploadButton, EditorImageUploadButton],
 };
 
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index 66e8f78a..6af3bd4e 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -26,6 +26,8 @@ $medium: 500;
 $light: 300;
 $extra_light: 200;
 
+$upload_button_height: 52px;
+
 $font: Montserrat, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,
   'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
   'Noto Color Emoji';

From ad0b9e6a28a3ec3129cbc07e07f993774f2ca48e Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 22 Oct 2019 15:49:04 +0700
Subject: [PATCH 62/99] node cover display

---
 .../containers/BlurWrapper/styles.scss        |  3 ++
 src/components/containers/PageCover/index.tsx | 25 ++++++++++++++++
 .../containers/PageCover/styles.scss          | 30 +++++++++++++++++++
 src/containers/App.tsx                        |  8 +++--
 src/containers/node/NodeLayout/index.tsx      | 12 ++++++--
 src/redux/node/actions.ts                     |  7 ++++-
 src/redux/node/constants.ts                   |  5 +++-
 src/redux/node/handlers.ts                    |  7 +++++
 src/redux/node/reducer.ts                     |  4 ++-
 9 files changed, 94 insertions(+), 7 deletions(-)
 create mode 100644 src/components/containers/PageCover/index.tsx
 create mode 100644 src/components/containers/PageCover/styles.scss

diff --git a/src/components/containers/BlurWrapper/styles.scss b/src/components/containers/BlurWrapper/styles.scss
index e9fb9aec..253b89c5 100644
--- a/src/components/containers/BlurWrapper/styles.scss
+++ b/src/components/containers/BlurWrapper/styles.scss
@@ -1,4 +1,7 @@
 .blur {
   filter: blur(0);
   transition: filter 0.25s;
+  max-height: 100vh;
+  width: 100vw;
+  overflow: visible auto;
 }
diff --git a/src/components/containers/PageCover/index.tsx b/src/components/containers/PageCover/index.tsx
new file mode 100644
index 00000000..c461a2a8
--- /dev/null
+++ b/src/components/containers/PageCover/index.tsx
@@ -0,0 +1,25 @@
+import React, { FC } from 'react';
+import * as styles from './styles.scss';
+import { createPortal } from 'react-dom';
+import { selectNode } from '~/redux/node/selectors';
+import { connect } from 'react-redux';
+import pick from 'ramda/es/pick';
+import { getURL } from '~/utils/dom';
+
+const mapStateToProps = state => pick(['current_cover_image'], selectNode(state));
+
+type IProps = ReturnType<typeof mapStateToProps> & {};
+
+const PageCoverUnconnected: FC<IProps> = ({ current_cover_image }) =>
+  current_cover_image
+    ? createPortal(
+        <div
+          className={styles.wrap}
+          style={{ backgroundImage: `url("${getURL(current_cover_image)}")` }}
+        />,
+        document.body
+      )
+    : null;
+
+const PageCover = connect(mapStateToProps)(PageCoverUnconnected);
+export { PageCover };
diff --git a/src/components/containers/PageCover/styles.scss b/src/components/containers/PageCover/styles.scss
new file mode 100644
index 00000000..4ad4866e
--- /dev/null
+++ b/src/components/containers/PageCover/styles.scss
@@ -0,0 +1,30 @@
+@keyframes fadeIn {
+  0% {
+    opacity: 0;
+  }
+  100% {
+    opacity: 1;
+  }
+}
+
+.wrap {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: -1;
+  background: 50% 50% no-repeat;
+  background-size: cover;
+  width: 100%;
+  height: 100%;
+  animation: fadeIn 2s;
+
+  &::after {
+    content: ' ';
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: url(~/sprites/dots.svg) rgba(0, 0, 0, 0.5);
+  }
+}
diff --git a/src/containers/App.tsx b/src/containers/App.tsx
index 1b988ac6..fb02ef7b 100644
--- a/src/containers/App.tsx
+++ b/src/containers/App.tsx
@@ -14,18 +14,22 @@ import { URLS } from '~/constants/urls';
 import { Modal } from '~/containers/dialogs/Modal';
 import { selectModal } from '~/redux/modal/selectors';
 import { BlurWrapper } from '~/components/containers/BlurWrapper';
+import { PageCover } from '~/components/containers/PageCover';
 import { NodeLayout } from './node/NodeLayout';
 import { BottomContainer } from '~/containers/main/BottomContainer';
 
-const mapStateToProps = selectModal;
+const mapStateToProps = state => ({
+  modal: selectModal(state),
+});
 const mapDispatchToProps = {};
 
 type IProps = typeof mapDispatchToProps & ReturnType<typeof mapStateToProps> & {};
 
-const Component: FC<IProps> = ({ is_shown }) => (
+const Component: FC<IProps> = ({ modal: { is_shown } }) => (
   <ConnectedRouter history={history}>
     <div>
       <BlurWrapper is_blurred={is_shown}>
+        <PageCover />
         <MainLayout>
           <Modal />
           <Sprites />
diff --git a/src/containers/node/NodeLayout/index.tsx b/src/containers/node/NodeLayout/index.tsx
index 9aa29fb9..43da34de 100644
--- a/src/containers/node/NodeLayout/index.tsx
+++ b/src/containers/node/NodeLayout/index.tsx
@@ -26,6 +26,7 @@ const mapStateToProps = state => ({
 const mapDispatchToProps = {
   nodeLoadNode: NODE_ACTIONS.nodeLoadNode,
   nodeUpdateTags: NODE_ACTIONS.nodeUpdateTags,
+  nodeSetCoverImage: NODE_ACTIONS.nodeSetCoverImage,
   nodeEdit: NODE_ACTIONS.nodeEdit,
   nodeLike: NODE_ACTIONS.nodeLike,
 };
@@ -38,13 +39,14 @@ const NodeLayoutUnconnected: FC<IProps> = ({
   match: {
     params: { id },
   },
-  node: { is_loading, is_loading_comments, comments = [], current: node },
+  node: { is_loading, is_loading_comments, comments = [], current: node, current_cover_image },
   user,
-  user: { is_user, role },
+  user: { is_user },
   nodeLoadNode,
   nodeUpdateTags,
   nodeEdit,
   nodeLike,
+  nodeSetCoverImage,
 }) => {
   const [layout, setLayout] = useState({});
 
@@ -71,6 +73,12 @@ const NodeLayoutUnconnected: FC<IProps> = ({
   const onEdit = useCallback(() => nodeEdit(node.id), [nodeEdit, node]);
   const onLike = useCallback(() => nodeLike(node.id), [nodeLike, node]);
 
+  useEffect(() => {
+    if (!node.cover) return;
+    nodeSetCoverImage(node.cover);
+    return () => nodeSetCoverImage(null);
+  }, [nodeSetCoverImage, node.cover]);
+
   return (
     <Card className={styles.node} seamless>
       {block && createElement(block, { node, is_loading, updateLayout, layout })}
diff --git a/src/redux/node/actions.ts b/src/redux/node/actions.ts
index 4d3dd3d7..56dd72a3 100644
--- a/src/redux/node/actions.ts
+++ b/src/redux/node/actions.ts
@@ -1,4 +1,4 @@
-import { INode, IValidationErrors, IComment, ITag } from '../types';
+import { INode, IValidationErrors, IComment, ITag, IFile } from '../types';
 import { NODE_ACTIONS, NODE_TYPES } from './constants';
 import { INodeState } from './reducer';
 
@@ -84,3 +84,8 @@ export const nodeSetEditor = (editor: INode) => ({
   type: NODE_ACTIONS.SET_EDITOR,
   editor,
 });
+
+export const nodeSetCoverImage = (current_cover_image: IFile) => ({
+  type: NODE_ACTIONS.SET_COVER_IMAGE,
+  current_cover_image,
+});
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index e5c79811..74026ed5 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -35,6 +35,7 @@ export const NODE_ACTIONS = {
 
   UPDATE_TAGS: `${prefix}UPDATE_TAGS`,
   SET_TAGS: `${prefix}SET_TAGS`,
+  SET_COVER_IMAGE: `${prefix}SET_COVER_IMAGE`,
 };
 
 export const EMPTY_NODE: INode = {
@@ -99,8 +100,10 @@ export const NODE_EDITORS = {
 };
 
 export const NODE_PANEL_COMPONENTS = {
+  [NODE_TYPES.TEXT]: [EditorUploadCoverButton],
+  [NODE_TYPES.VIDEO]: [EditorUploadCoverButton],
   [NODE_TYPES.IMAGE]: [EditorImageUploadButton, EditorUploadCoverButton],
-  [NODE_TYPES.AUDIO]: [EditorAudioUploadButton, EditorImageUploadButton],
+  [NODE_TYPES.AUDIO]: [EditorAudioUploadButton, EditorImageUploadButton, EditorUploadCoverButton],
 };
 
 export const NODE_EDITOR_DATA: Record<
diff --git a/src/redux/node/handlers.ts b/src/redux/node/handlers.ts
index 3ed37d47..ef7d677c 100644
--- a/src/redux/node/handlers.ts
+++ b/src/redux/node/handlers.ts
@@ -10,6 +10,7 @@ import {
   nodeSetCommentData,
   nodeSetTags,
   nodeSetEditor,
+  nodeSetCoverImage,
 } from './actions';
 import { INodeState } from './reducer';
 
@@ -46,6 +47,11 @@ const setTags = (state: INodeState, { tags }: ReturnType<typeof nodeSetTags>) =>
 const setEditor = (state: INodeState, { editor }: ReturnType<typeof nodeSetEditor>) =>
   assocPath(['editor'], editor, state);
 
+const setCoverImage = (
+  state: INodeState,
+  { current_cover_image }: ReturnType<typeof nodeSetCoverImage>
+) => assocPath(['current_cover_image'], current_cover_image, state);
+
 export const NODE_HANDLERS = {
   [NODE_ACTIONS.SET_SAVE_ERRORS]: setSaveErrors,
   [NODE_ACTIONS.SET_LOADING]: setLoading,
@@ -56,4 +62,5 @@ export const NODE_HANDLERS = {
   [NODE_ACTIONS.SET_COMMENT_DATA]: setCommentData,
   [NODE_ACTIONS.SET_TAGS]: setTags,
   [NODE_ACTIONS.SET_EDITOR]: setEditor,
+  [NODE_ACTIONS.SET_COVER_IMAGE]: setCoverImage,
 };
diff --git a/src/redux/node/reducer.ts b/src/redux/node/reducer.ts
index 5f05586d..fa15f16e 100644
--- a/src/redux/node/reducer.ts
+++ b/src/redux/node/reducer.ts
@@ -1,5 +1,5 @@
 import { createReducer } from '~/utils/reducer';
-import { INode, IComment } from '../types';
+import { INode, IComment, IFile } from '../types';
 import { EMPTY_NODE, EMPTY_COMMENT } from './constants';
 import { NODE_HANDLERS } from './handlers';
 
@@ -8,6 +8,7 @@ export type INodeState = Readonly<{
   current: INode;
   comments: IComment[];
   comment_data: Record<number, IComment>;
+  current_cover_image: IFile;
 
   error: string;
   errors: Record<string, string>;
@@ -27,6 +28,7 @@ const INITIAL_STATE: INodeState = {
   current: { ...EMPTY_NODE },
   comment_data: { 0: { ...EMPTY_COMMENT } },
   comments: [],
+  current_cover_image: null,
 
   is_loading: false,
   is_loading_comments: false,

From 53abb3853eb59b4af1a47e7df2528f44d96c0727 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 22 Oct 2019 16:58:39 +0700
Subject: [PATCH 63/99] removed page cover on tablets

---
 src/components/bars/SubmitBar/styles.scss       | 2 +-
 src/components/containers/PageCover/styles.scss | 4 ++++
 src/styles/colors.scss                          | 4 ++--
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/components/bars/SubmitBar/styles.scss b/src/components/bars/SubmitBar/styles.scss
index 9d6cd3dd..83b9ce01 100644
--- a/src/components/bars/SubmitBar/styles.scss
+++ b/src/components/bars/SubmitBar/styles.scss
@@ -16,7 +16,7 @@
 }
 
 .button {
-  background: $red;
+  background: $red_gradient;
   width: $bar_height;
   height: $bar_height;
   border-radius: $bar_height / 2;
diff --git a/src/components/containers/PageCover/styles.scss b/src/components/containers/PageCover/styles.scss
index 4ad4866e..2816ba7b 100644
--- a/src/components/containers/PageCover/styles.scss
+++ b/src/components/containers/PageCover/styles.scss
@@ -27,4 +27,8 @@
     height: 100%;
     background: url(~/sprites/dots.svg) rgba(0, 0, 0, 0.5);
   }
+
+  @include tablet {
+    display: none;
+  }
 }
diff --git a/src/styles/colors.scss b/src/styles/colors.scss
index 588e0d1a..e10897b8 100644
--- a/src/styles/colors.scss
+++ b/src/styles/colors.scss
@@ -1,5 +1,5 @@
 // $red: #ff3344;
-$red: #ff6553;
+$red: #ff3344;
 $yellow: #ffd60f;
 $dark_blue: #3c75ff;
 $blue: #3ca1ff;
@@ -10,7 +10,7 @@ $orange: #ff7549;
 $grass: #41800d;
 $wisegreen: #007962;
 
-$red_gradient: linear-gradient(165deg, $red, #ea057c 100%);
+$red_gradient: linear-gradient(165deg, $orange -50%, $red 150%);
 $blue_gradient: linear-gradient(170deg, $green, $dark_blue);
 $green_gradient: linear-gradient(
   170deg,

From 16af90fd50d2a57cceb6894cf30a319100412e91 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Tue, 22 Oct 2019 17:58:37 +0700
Subject: [PATCH 64/99] fetching node liked

---
 src/redux/node/api.ts   | 4 +++-
 src/redux/node/sagas.ts | 2 +-
 src/redux/types.ts      | 1 +
 3 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/redux/node/api.ts b/src/redux/node/api.ts
index b7c2e7cd..e8f6da65 100644
--- a/src/redux/node/api.ts
+++ b/src/redux/node/api.ts
@@ -28,11 +28,13 @@ export const getNodes = ({
 
 export const getNode = ({
   id,
+  access,
 }: {
   id: string | number;
+  access: string;
 }): Promise<IResultWithStatus<{ nodes: INode[] }>> =>
   api
-    .get(API.NODE.GET_NODE(id))
+    .get(API.NODE.GET_NODE(id), configWithToken(access))
     .then(resultMiddleware)
     .catch(errorMiddleware);
 
diff --git a/src/redux/node/sagas.ts b/src/redux/node/sagas.ts
index 7200a9d8..2749d7fc 100644
--- a/src/redux/node/sagas.ts
+++ b/src/redux/node/sagas.ts
@@ -73,7 +73,7 @@ function* onNodeLoad({ id, node_type }: ReturnType<typeof nodeLoadNode>) {
 
   const {
     data: { node, error },
-  } = yield call(getNode, { id });
+  } = yield call(reqWrapper, getNode, { id });
 
   yield put(nodeSetLoading(false));
 
diff --git a/src/redux/types.ts b/src/redux/types.ts
index a849deab..cd9e592a 100644
--- a/src/redux/types.ts
+++ b/src/redux/types.ts
@@ -119,6 +119,7 @@ export interface INode {
   blocks: IBlock[];
   thumbnail?: string;
   description?: string;
+  is_liked?: boolean;
 
   options: {
     flow: {

From 948817e8fce3ebdceb89f977a67f2fc359bd815c Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 10:18:41 +0700
Subject: [PATCH 65/99] optimized node layout rerenders

---
 package-lock.json                          | 5624 ++++++++++----------
 package.json                               |    1 +
 src/components/input/Button/index.tsx      |   86 +-
 src/components/node/NodeComments/index.tsx |    6 +-
 src/components/node/NodePanel/index.tsx    |    6 +-
 src/components/node/NodeTags/index.tsx     |    6 +-
 src/containers/node/NodeLayout/index.tsx   |  158 +-
 7 files changed, 2954 insertions(+), 2933 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 480e97d9..ce268ac4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,16 +10,16 @@
       "integrity": "sha512-tqrDyvPryBM6xjIyKKUwr3s8CzmmYidwgdswd7Uc/Cv0ogZcuS1TYQTLx/eWKP3UbJ6JxZAiYlBZabXm/rtRsQ==",
       "dev": true,
       "requires": {
-        "chokidar": "2.1.8",
-        "commander": "2.20.1",
-        "convert-source-map": "1.6.0",
-        "fs-readdir-recursive": "1.1.0",
-        "glob": "7.1.4",
-        "lodash": "4.17.15",
-        "mkdirp": "0.5.1",
-        "output-file-sync": "2.0.1",
-        "slash": "2.0.0",
-        "source-map": "0.5.7"
+        "chokidar": "^2.1.8",
+        "commander": "^2.8.1",
+        "convert-source-map": "^1.1.0",
+        "fs-readdir-recursive": "^1.1.0",
+        "glob": "^7.0.0",
+        "lodash": "^4.17.13",
+        "mkdirp": "^0.5.1",
+        "output-file-sync": "^2.0.0",
+        "slash": "^2.0.0",
+        "source-map": "^0.5.0"
       },
       "dependencies": {
         "source-map": {
@@ -35,7 +35,7 @@
       "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
       "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
       "requires": {
-        "@babel/highlight": "7.5.0"
+        "@babel/highlight": "^7.0.0"
       }
     },
     "@babel/generator": {
@@ -44,10 +44,10 @@
       "integrity": "sha512-hLhYbAb3pHwxjlijC4AQ7mqZdcoujiNaW7izCT04CIowHK8psN0IN8QjDv0iyFtycF5FowUOTwDloIheI25aMw==",
       "dev": true,
       "requires": {
-        "@babel/types": "7.6.3",
-        "jsesc": "2.5.2",
-        "lodash": "4.17.15",
-        "source-map": "0.6.1"
+        "@babel/types": "^7.6.3",
+        "jsesc": "^2.5.1",
+        "lodash": "^4.17.13",
+        "source-map": "^0.6.1"
       },
       "dependencies": {
         "@babel/types": {
@@ -56,9 +56,9 @@
           "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
-            "esutils": "2.0.3",
-            "lodash": "4.17.15",
-            "to-fast-properties": "2.0.0"
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.13",
+            "to-fast-properties": "^2.0.0"
           }
         }
       }
@@ -69,7 +69,7 @@
       "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
       "dev": true,
       "requires": {
-        "@babel/types": "7.5.5"
+        "@babel/types": "^7.0.0"
       }
     },
     "@babel/helper-builder-binary-assignment-operator-visitor": {
@@ -78,8 +78,8 @@
       "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
       "dev": true,
       "requires": {
-        "@babel/helper-explode-assignable-expression": "7.1.0",
-        "@babel/types": "7.5.5"
+        "@babel/helper-explode-assignable-expression": "^7.1.0",
+        "@babel/types": "^7.0.0"
       }
     },
     "@babel/helper-call-delegate": {
@@ -88,9 +88,9 @@
       "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-hoist-variables": "7.4.4",
-        "@babel/traverse": "7.6.3",
-        "@babel/types": "7.5.5"
+        "@babel/helper-hoist-variables": "^7.4.4",
+        "@babel/traverse": "^7.4.4",
+        "@babel/types": "^7.4.4"
       }
     },
     "@babel/helper-define-map": {
@@ -99,9 +99,9 @@
       "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "7.1.0",
-        "@babel/types": "7.5.5",
-        "lodash": "4.17.15"
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/types": "^7.5.5",
+        "lodash": "^4.17.13"
       }
     },
     "@babel/helper-explode-assignable-expression": {
@@ -110,8 +110,8 @@
       "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
       "dev": true,
       "requires": {
-        "@babel/traverse": "7.6.3",
-        "@babel/types": "7.5.5"
+        "@babel/traverse": "^7.1.0",
+        "@babel/types": "^7.0.0"
       }
     },
     "@babel/helper-function-name": {
@@ -120,9 +120,9 @@
       "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
       "dev": true,
       "requires": {
-        "@babel/helper-get-function-arity": "7.0.0",
-        "@babel/template": "7.6.0",
-        "@babel/types": "7.5.5"
+        "@babel/helper-get-function-arity": "^7.0.0",
+        "@babel/template": "^7.1.0",
+        "@babel/types": "^7.0.0"
       }
     },
     "@babel/helper-get-function-arity": {
@@ -131,7 +131,7 @@
       "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
       "dev": true,
       "requires": {
-        "@babel/types": "7.5.5"
+        "@babel/types": "^7.0.0"
       }
     },
     "@babel/helper-hoist-variables": {
@@ -140,7 +140,7 @@
       "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==",
       "dev": true,
       "requires": {
-        "@babel/types": "7.5.5"
+        "@babel/types": "^7.4.4"
       }
     },
     "@babel/helper-member-expression-to-functions": {
@@ -149,7 +149,7 @@
       "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==",
       "dev": true,
       "requires": {
-        "@babel/types": "7.5.5"
+        "@babel/types": "^7.5.5"
       }
     },
     "@babel/helper-module-imports": {
@@ -158,7 +158,7 @@
       "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
       "dev": true,
       "requires": {
-        "@babel/types": "7.5.5"
+        "@babel/types": "^7.0.0"
       }
     },
     "@babel/helper-module-transforms": {
@@ -167,12 +167,12 @@
       "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-imports": "7.0.0",
-        "@babel/helper-simple-access": "7.1.0",
-        "@babel/helper-split-export-declaration": "7.4.4",
-        "@babel/template": "7.6.0",
-        "@babel/types": "7.5.5",
-        "lodash": "4.17.15"
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/helper-simple-access": "^7.1.0",
+        "@babel/helper-split-export-declaration": "^7.4.4",
+        "@babel/template": "^7.4.4",
+        "@babel/types": "^7.5.5",
+        "lodash": "^4.17.13"
       }
     },
     "@babel/helper-optimise-call-expression": {
@@ -181,7 +181,7 @@
       "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
       "dev": true,
       "requires": {
-        "@babel/types": "7.5.5"
+        "@babel/types": "^7.0.0"
       }
     },
     "@babel/helper-plugin-utils": {
@@ -196,7 +196,7 @@
       "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==",
       "dev": true,
       "requires": {
-        "lodash": "4.17.15"
+        "lodash": "^4.17.13"
       }
     },
     "@babel/helper-remap-async-to-generator": {
@@ -205,11 +205,11 @@
       "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "7.0.0",
-        "@babel/helper-wrap-function": "7.2.0",
-        "@babel/template": "7.6.0",
-        "@babel/traverse": "7.6.3",
-        "@babel/types": "7.5.5"
+        "@babel/helper-annotate-as-pure": "^7.0.0",
+        "@babel/helper-wrap-function": "^7.1.0",
+        "@babel/template": "^7.1.0",
+        "@babel/traverse": "^7.1.0",
+        "@babel/types": "^7.0.0"
       }
     },
     "@babel/helper-replace-supers": {
@@ -218,10 +218,10 @@
       "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==",
       "dev": true,
       "requires": {
-        "@babel/helper-member-expression-to-functions": "7.5.5",
-        "@babel/helper-optimise-call-expression": "7.0.0",
-        "@babel/traverse": "7.6.3",
-        "@babel/types": "7.5.5"
+        "@babel/helper-member-expression-to-functions": "^7.5.5",
+        "@babel/helper-optimise-call-expression": "^7.0.0",
+        "@babel/traverse": "^7.5.5",
+        "@babel/types": "^7.5.5"
       }
     },
     "@babel/helper-simple-access": {
@@ -230,8 +230,8 @@
       "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
       "dev": true,
       "requires": {
-        "@babel/template": "7.6.0",
-        "@babel/types": "7.5.5"
+        "@babel/template": "^7.1.0",
+        "@babel/types": "^7.0.0"
       }
     },
     "@babel/helper-split-export-declaration": {
@@ -240,7 +240,7 @@
       "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
       "dev": true,
       "requires": {
-        "@babel/types": "7.5.5"
+        "@babel/types": "^7.4.4"
       }
     },
     "@babel/helper-wrap-function": {
@@ -249,10 +249,10 @@
       "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "7.1.0",
-        "@babel/template": "7.6.0",
-        "@babel/traverse": "7.6.3",
-        "@babel/types": "7.5.5"
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/template": "^7.1.0",
+        "@babel/traverse": "^7.1.0",
+        "@babel/types": "^7.2.0"
       }
     },
     "@babel/highlight": {
@@ -260,9 +260,9 @@
       "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
       "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
       "requires": {
-        "chalk": "2.4.2",
-        "esutils": "2.0.3",
-        "js-tokens": "4.0.0"
+        "chalk": "^2.0.0",
+        "esutils": "^2.0.2",
+        "js-tokens": "^4.0.0"
       }
     },
     "@babel/parser": {
@@ -277,9 +277,9 @@
       "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/helper-remap-async-to-generator": "7.1.0",
-        "@babel/plugin-syntax-async-generators": "7.2.0"
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-remap-async-to-generator": "^7.1.0",
+        "@babel/plugin-syntax-async-generators": "^7.2.0"
       }
     },
     "@babel/plugin-proposal-dynamic-import": {
@@ -288,8 +288,8 @@
       "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/plugin-syntax-dynamic-import": "7.2.0"
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-dynamic-import": "^7.2.0"
       }
     },
     "@babel/plugin-proposal-json-strings": {
@@ -298,8 +298,8 @@
       "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/plugin-syntax-json-strings": "7.2.0"
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-json-strings": "^7.2.0"
       }
     },
     "@babel/plugin-proposal-object-rest-spread": {
@@ -308,8 +308,8 @@
       "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/plugin-syntax-object-rest-spread": "7.2.0"
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
       }
     },
     "@babel/plugin-proposal-optional-catch-binding": {
@@ -318,8 +318,8 @@
       "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/plugin-syntax-optional-catch-binding": "7.2.0"
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
       }
     },
     "@babel/plugin-proposal-unicode-property-regex": {
@@ -328,9 +328,9 @@
       "integrity": "sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/helper-regex": "7.5.5",
-        "regexpu-core": "4.6.0"
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-regex": "^7.4.4",
+        "regexpu-core": "^4.6.0"
       }
     },
     "@babel/plugin-syntax-async-generators": {
@@ -339,7 +339,7 @@
       "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-syntax-dynamic-import": {
@@ -348,7 +348,7 @@
       "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-syntax-json-strings": {
@@ -357,7 +357,7 @@
       "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-syntax-object-rest-spread": {
@@ -366,7 +366,7 @@
       "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-syntax-optional-catch-binding": {
@@ -375,7 +375,7 @@
       "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-arrow-functions": {
@@ -384,7 +384,7 @@
       "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-async-to-generator": {
@@ -393,9 +393,9 @@
       "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-imports": "7.0.0",
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/helper-remap-async-to-generator": "7.1.0"
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-remap-async-to-generator": "^7.1.0"
       }
     },
     "@babel/plugin-transform-block-scoped-functions": {
@@ -404,7 +404,7 @@
       "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-block-scoping": {
@@ -413,8 +413,8 @@
       "integrity": "sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0",
-        "lodash": "4.17.15"
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "lodash": "^4.17.13"
       }
     },
     "@babel/plugin-transform-classes": {
@@ -423,14 +423,14 @@
       "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "7.0.0",
-        "@babel/helper-define-map": "7.5.5",
-        "@babel/helper-function-name": "7.1.0",
-        "@babel/helper-optimise-call-expression": "7.0.0",
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/helper-replace-supers": "7.5.5",
-        "@babel/helper-split-export-declaration": "7.4.4",
-        "globals": "11.12.0"
+        "@babel/helper-annotate-as-pure": "^7.0.0",
+        "@babel/helper-define-map": "^7.5.5",
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/helper-optimise-call-expression": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-replace-supers": "^7.5.5",
+        "@babel/helper-split-export-declaration": "^7.4.4",
+        "globals": "^11.1.0"
       }
     },
     "@babel/plugin-transform-computed-properties": {
@@ -439,7 +439,7 @@
       "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-destructuring": {
@@ -448,7 +448,7 @@
       "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-dotall-regex": {
@@ -457,9 +457,9 @@
       "integrity": "sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/helper-regex": "7.5.5",
-        "regexpu-core": "4.6.0"
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-regex": "^7.4.4",
+        "regexpu-core": "^4.6.0"
       }
     },
     "@babel/plugin-transform-duplicate-keys": {
@@ -468,7 +468,7 @@
       "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-exponentiation-operator": {
@@ -477,8 +477,8 @@
       "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
       "dev": true,
       "requires": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "7.1.0",
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-for-of": {
@@ -487,7 +487,7 @@
       "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-function-name": {
@@ -496,8 +496,8 @@
       "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "7.1.0",
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-literals": {
@@ -506,7 +506,7 @@
       "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-member-expression-literals": {
@@ -515,7 +515,7 @@
       "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-modules-amd": {
@@ -524,9 +524,9 @@
       "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "7.5.5",
-        "@babel/helper-plugin-utils": "7.0.0",
-        "babel-plugin-dynamic-import-node": "2.3.0"
+        "@babel/helper-module-transforms": "^7.1.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "babel-plugin-dynamic-import-node": "^2.3.0"
       }
     },
     "@babel/plugin-transform-modules-commonjs": {
@@ -535,10 +535,10 @@
       "integrity": "sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "7.5.5",
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/helper-simple-access": "7.1.0",
-        "babel-plugin-dynamic-import-node": "2.3.0"
+        "@babel/helper-module-transforms": "^7.4.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-simple-access": "^7.1.0",
+        "babel-plugin-dynamic-import-node": "^2.3.0"
       }
     },
     "@babel/plugin-transform-modules-systemjs": {
@@ -547,9 +547,9 @@
       "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==",
       "dev": true,
       "requires": {
-        "@babel/helper-hoist-variables": "7.4.4",
-        "@babel/helper-plugin-utils": "7.0.0",
-        "babel-plugin-dynamic-import-node": "2.3.0"
+        "@babel/helper-hoist-variables": "^7.4.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "babel-plugin-dynamic-import-node": "^2.3.0"
       }
     },
     "@babel/plugin-transform-modules-umd": {
@@ -558,8 +558,8 @@
       "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "7.5.5",
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-module-transforms": "^7.1.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-named-capturing-groups-regex": {
@@ -568,7 +568,7 @@
       "integrity": "sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw==",
       "dev": true,
       "requires": {
-        "regexpu-core": "4.6.0"
+        "regexpu-core": "^4.6.0"
       }
     },
     "@babel/plugin-transform-new-target": {
@@ -577,7 +577,7 @@
       "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-object-super": {
@@ -586,8 +586,8 @@
       "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/helper-replace-supers": "7.5.5"
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-replace-supers": "^7.5.5"
       }
     },
     "@babel/plugin-transform-parameters": {
@@ -596,9 +596,9 @@
       "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==",
       "dev": true,
       "requires": {
-        "@babel/helper-call-delegate": "7.4.4",
-        "@babel/helper-get-function-arity": "7.0.0",
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-call-delegate": "^7.4.4",
+        "@babel/helper-get-function-arity": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-property-literals": {
@@ -607,7 +607,7 @@
       "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-regenerator": {
@@ -616,7 +616,7 @@
       "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==",
       "dev": true,
       "requires": {
-        "regenerator-transform": "0.14.1"
+        "regenerator-transform": "^0.14.0"
       }
     },
     "@babel/plugin-transform-reserved-words": {
@@ -625,7 +625,7 @@
       "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-shorthand-properties": {
@@ -634,7 +634,7 @@
       "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-spread": {
@@ -643,7 +643,7 @@
       "integrity": "sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-sticky-regex": {
@@ -652,8 +652,8 @@
       "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/helper-regex": "7.5.5"
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-regex": "^7.0.0"
       }
     },
     "@babel/plugin-transform-template-literals": {
@@ -662,8 +662,8 @@
       "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "7.0.0",
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-annotate-as-pure": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-typeof-symbol": {
@@ -672,7 +672,7 @@
       "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0"
+        "@babel/helper-plugin-utils": "^7.0.0"
       }
     },
     "@babel/plugin-transform-unicode-regex": {
@@ -681,9 +681,9 @@
       "integrity": "sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/helper-regex": "7.5.5",
-        "regexpu-core": "4.6.0"
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-regex": "^7.4.4",
+        "regexpu-core": "^4.6.0"
       }
     },
     "@babel/preset-env": {
@@ -692,56 +692,56 @@
       "integrity": "sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-imports": "7.0.0",
-        "@babel/helper-plugin-utils": "7.0.0",
-        "@babel/plugin-proposal-async-generator-functions": "7.2.0",
-        "@babel/plugin-proposal-dynamic-import": "7.5.0",
-        "@babel/plugin-proposal-json-strings": "7.2.0",
-        "@babel/plugin-proposal-object-rest-spread": "7.6.2",
-        "@babel/plugin-proposal-optional-catch-binding": "7.2.0",
-        "@babel/plugin-proposal-unicode-property-regex": "7.6.2",
-        "@babel/plugin-syntax-async-generators": "7.2.0",
-        "@babel/plugin-syntax-dynamic-import": "7.2.0",
-        "@babel/plugin-syntax-json-strings": "7.2.0",
-        "@babel/plugin-syntax-object-rest-spread": "7.2.0",
-        "@babel/plugin-syntax-optional-catch-binding": "7.2.0",
-        "@babel/plugin-transform-arrow-functions": "7.2.0",
-        "@babel/plugin-transform-async-to-generator": "7.5.0",
-        "@babel/plugin-transform-block-scoped-functions": "7.2.0",
-        "@babel/plugin-transform-block-scoping": "7.6.3",
-        "@babel/plugin-transform-classes": "7.5.5",
-        "@babel/plugin-transform-computed-properties": "7.2.0",
-        "@babel/plugin-transform-destructuring": "7.6.0",
-        "@babel/plugin-transform-dotall-regex": "7.6.2",
-        "@babel/plugin-transform-duplicate-keys": "7.5.0",
-        "@babel/plugin-transform-exponentiation-operator": "7.2.0",
-        "@babel/plugin-transform-for-of": "7.4.4",
-        "@babel/plugin-transform-function-name": "7.4.4",
-        "@babel/plugin-transform-literals": "7.2.0",
-        "@babel/plugin-transform-member-expression-literals": "7.2.0",
-        "@babel/plugin-transform-modules-amd": "7.5.0",
-        "@babel/plugin-transform-modules-commonjs": "7.6.0",
-        "@babel/plugin-transform-modules-systemjs": "7.5.0",
-        "@babel/plugin-transform-modules-umd": "7.2.0",
-        "@babel/plugin-transform-named-capturing-groups-regex": "7.6.3",
-        "@babel/plugin-transform-new-target": "7.4.4",
-        "@babel/plugin-transform-object-super": "7.5.5",
-        "@babel/plugin-transform-parameters": "7.4.4",
-        "@babel/plugin-transform-property-literals": "7.2.0",
-        "@babel/plugin-transform-regenerator": "7.4.5",
-        "@babel/plugin-transform-reserved-words": "7.2.0",
-        "@babel/plugin-transform-shorthand-properties": "7.2.0",
-        "@babel/plugin-transform-spread": "7.6.2",
-        "@babel/plugin-transform-sticky-regex": "7.2.0",
-        "@babel/plugin-transform-template-literals": "7.4.4",
-        "@babel/plugin-transform-typeof-symbol": "7.2.0",
-        "@babel/plugin-transform-unicode-regex": "7.6.2",
-        "@babel/types": "7.6.3",
-        "browserslist": "4.7.0",
-        "core-js-compat": "3.2.1",
-        "invariant": "2.2.4",
-        "js-levenshtein": "1.1.6",
-        "semver": "5.5.0"
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
+        "@babel/plugin-proposal-dynamic-import": "^7.5.0",
+        "@babel/plugin-proposal-json-strings": "^7.2.0",
+        "@babel/plugin-proposal-object-rest-spread": "^7.6.2",
+        "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.6.2",
+        "@babel/plugin-syntax-async-generators": "^7.2.0",
+        "@babel/plugin-syntax-dynamic-import": "^7.2.0",
+        "@babel/plugin-syntax-json-strings": "^7.2.0",
+        "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
+        "@babel/plugin-transform-arrow-functions": "^7.2.0",
+        "@babel/plugin-transform-async-to-generator": "^7.5.0",
+        "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
+        "@babel/plugin-transform-block-scoping": "^7.6.3",
+        "@babel/plugin-transform-classes": "^7.5.5",
+        "@babel/plugin-transform-computed-properties": "^7.2.0",
+        "@babel/plugin-transform-destructuring": "^7.6.0",
+        "@babel/plugin-transform-dotall-regex": "^7.6.2",
+        "@babel/plugin-transform-duplicate-keys": "^7.5.0",
+        "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
+        "@babel/plugin-transform-for-of": "^7.4.4",
+        "@babel/plugin-transform-function-name": "^7.4.4",
+        "@babel/plugin-transform-literals": "^7.2.0",
+        "@babel/plugin-transform-member-expression-literals": "^7.2.0",
+        "@babel/plugin-transform-modules-amd": "^7.5.0",
+        "@babel/plugin-transform-modules-commonjs": "^7.6.0",
+        "@babel/plugin-transform-modules-systemjs": "^7.5.0",
+        "@babel/plugin-transform-modules-umd": "^7.2.0",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.3",
+        "@babel/plugin-transform-new-target": "^7.4.4",
+        "@babel/plugin-transform-object-super": "^7.5.5",
+        "@babel/plugin-transform-parameters": "^7.4.4",
+        "@babel/plugin-transform-property-literals": "^7.2.0",
+        "@babel/plugin-transform-regenerator": "^7.4.5",
+        "@babel/plugin-transform-reserved-words": "^7.2.0",
+        "@babel/plugin-transform-shorthand-properties": "^7.2.0",
+        "@babel/plugin-transform-spread": "^7.6.2",
+        "@babel/plugin-transform-sticky-regex": "^7.2.0",
+        "@babel/plugin-transform-template-literals": "^7.4.4",
+        "@babel/plugin-transform-typeof-symbol": "^7.2.0",
+        "@babel/plugin-transform-unicode-regex": "^7.6.2",
+        "@babel/types": "^7.6.3",
+        "browserslist": "^4.6.0",
+        "core-js-compat": "^3.1.1",
+        "invariant": "^2.2.2",
+        "js-levenshtein": "^1.1.3",
+        "semver": "^5.5.0"
       },
       "dependencies": {
         "@babel/types": {
@@ -750,9 +750,9 @@
           "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
-            "esutils": "2.0.3",
-            "lodash": "4.17.15",
-            "to-fast-properties": "2.0.0"
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.13",
+            "to-fast-properties": "^2.0.0"
           }
         }
       }
@@ -762,7 +762,7 @@
       "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz",
       "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==",
       "requires": {
-        "regenerator-runtime": "0.13.3"
+        "regenerator-runtime": "^0.13.2"
       },
       "dependencies": {
         "regenerator-runtime": {
@@ -778,9 +778,9 @@
       "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==",
       "dev": true,
       "requires": {
-        "@babel/code-frame": "7.5.5",
-        "@babel/parser": "7.6.3",
-        "@babel/types": "7.6.3"
+        "@babel/code-frame": "^7.0.0",
+        "@babel/parser": "^7.6.0",
+        "@babel/types": "^7.6.0"
       },
       "dependencies": {
         "@babel/types": {
@@ -789,9 +789,9 @@
           "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
-            "esutils": "2.0.3",
-            "lodash": "4.17.15",
-            "to-fast-properties": "2.0.0"
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.13",
+            "to-fast-properties": "^2.0.0"
           }
         }
       }
@@ -802,15 +802,15 @@
       "integrity": "sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==",
       "dev": true,
       "requires": {
-        "@babel/code-frame": "7.5.5",
-        "@babel/generator": "7.6.3",
-        "@babel/helper-function-name": "7.1.0",
-        "@babel/helper-split-export-declaration": "7.4.4",
-        "@babel/parser": "7.6.3",
-        "@babel/types": "7.6.3",
-        "debug": "4.1.1",
-        "globals": "11.12.0",
-        "lodash": "4.17.15"
+        "@babel/code-frame": "^7.5.5",
+        "@babel/generator": "^7.6.3",
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/helper-split-export-declaration": "^7.4.4",
+        "@babel/parser": "^7.6.3",
+        "@babel/types": "^7.6.3",
+        "debug": "^4.1.0",
+        "globals": "^11.1.0",
+        "lodash": "^4.17.13"
       },
       "dependencies": {
         "@babel/types": {
@@ -819,9 +819,9 @@
           "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
           "dev": true,
           "requires": {
-            "esutils": "2.0.3",
-            "lodash": "4.17.15",
-            "to-fast-properties": "2.0.0"
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.13",
+            "to-fast-properties": "^2.0.0"
           }
         },
         "debug": {
@@ -830,7 +830,7 @@
           "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
           "dev": true,
           "requires": {
-            "ms": "2.1.2"
+            "ms": "^2.1.1"
           }
         },
         "ms": {
@@ -847,9 +847,9 @@
       "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==",
       "dev": true,
       "requires": {
-        "esutils": "2.0.3",
-        "lodash": "4.17.15",
-        "to-fast-properties": "2.0.0"
+        "esutils": "^2.0.2",
+        "lodash": "^4.17.13",
+        "to-fast-properties": "^2.0.0"
       }
     },
     "@fimbul/bifrost": {
@@ -857,10 +857,10 @@
       "resolved": "https://registry.npmjs.org/@fimbul/bifrost/-/bifrost-0.21.0.tgz",
       "integrity": "sha512-ou8VU+nTmOW1jeg+FT+sn+an/M0Xb9G16RucrfhjXGWv1Q97kCoM5CG9Qj7GYOSdu7km72k7nY83Eyr53Bkakg==",
       "requires": {
-        "@fimbul/ymir": "0.21.0",
-        "get-caller-file": "2.0.5",
-        "tslib": "1.10.0",
-        "tsutils": "3.17.1"
+        "@fimbul/ymir": "^0.21.0",
+        "get-caller-file": "^2.0.0",
+        "tslib": "^1.8.1",
+        "tsutils": "^3.5.0"
       },
       "dependencies": {
         "get-caller-file": {
@@ -875,9 +875,9 @@
       "resolved": "https://registry.npmjs.org/@fimbul/ymir/-/ymir-0.21.0.tgz",
       "integrity": "sha512-T/y7WqPsm4n3zhT08EpB5sfdm2Kvw3gurAxr2Lr5dQeLi8ZsMlNT/Jby+ZmuuAAd1PnXYzKp+2SXgIkQIIMCUg==",
       "requires": {
-        "inversify": "5.0.1",
-        "reflect-metadata": "0.1.13",
-        "tslib": "1.10.0"
+        "inversify": "^5.0.0",
+        "reflect-metadata": "^0.1.12",
+        "tslib": "^1.8.1"
       }
     },
     "@hot-loader/react-dom": {
@@ -885,10 +885,10 @@
       "resolved": "https://registry.npmjs.org/@hot-loader/react-dom/-/react-dom-16.10.2.tgz",
       "integrity": "sha512-vbrSDuZMoE1TXiDNAVCSAcIS6UX55Fa9KF0MD0wQgOaOIPZs/C6CtEDUcnNFEwTQ5ciIULcp+96lQlSuANNagA==",
       "requires": {
-        "loose-envify": "1.4.0",
-        "object-assign": "4.1.1",
-        "prop-types": "15.7.2",
-        "scheduler": "0.16.2"
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "prop-types": "^15.6.2",
+        "scheduler": "^0.16.2"
       }
     },
     "@redux-saga/core": {
@@ -896,14 +896,14 @@
       "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.1.1.tgz",
       "integrity": "sha512-WKXfj2cYkP0eh74dE1ueMjVDoGJIkppXiMFgx0buVRkXENeZmRxIjM4lh9LEWWFqay7I/Qkw7+cMossa7xXoAQ==",
       "requires": {
-        "@babel/runtime": "7.6.3",
-        "@redux-saga/deferred": "1.1.0",
-        "@redux-saga/delay-p": "1.1.0",
-        "@redux-saga/is": "1.1.0",
-        "@redux-saga/symbols": "1.1.0",
-        "@redux-saga/types": "1.1.0",
-        "redux": "4.0.4",
-        "typescript-tuple": "2.2.1"
+        "@babel/runtime": "^7.6.0",
+        "@redux-saga/deferred": "^1.1.0",
+        "@redux-saga/delay-p": "^1.1.0",
+        "@redux-saga/is": "^1.1.0",
+        "@redux-saga/symbols": "^1.1.0",
+        "@redux-saga/types": "^1.1.0",
+        "redux": "^4.0.4",
+        "typescript-tuple": "^2.2.1"
       }
     },
     "@redux-saga/deferred": {
@@ -916,7 +916,7 @@
       "resolved": "https://registry.npmjs.org/@redux-saga/delay-p/-/delay-p-1.1.0.tgz",
       "integrity": "sha512-BcRwXs20kKjgiYEwZARkpVoRIe/hHftW3iwPhdeW4/jPyR9gLv/vG8VsJMF5NDEch+/w/mJtdgSubq+wtOS47g==",
       "requires": {
-        "@redux-saga/symbols": "1.1.0"
+        "@redux-saga/symbols": "^1.1.0"
       }
     },
     "@redux-saga/is": {
@@ -924,8 +924,8 @@
       "resolved": "https://registry.npmjs.org/@redux-saga/is/-/is-1.1.0.tgz",
       "integrity": "sha512-0uFXWGSvDCfNBdROHwEVixNhFbI3S+UGBQfcPXQiYL+CjIjyR3DTg2Z+NFH9xzP+H4Oh/yGtTHDhC0GxYp7HQQ==",
       "requires": {
-        "@redux-saga/symbols": "1.1.0",
-        "@redux-saga/types": "1.1.0"
+        "@redux-saga/symbols": "^1.1.0",
+        "@redux-saga/types": "^1.1.0"
       }
     },
     "@redux-saga/symbols": {
@@ -960,9 +960,9 @@
       "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
       "dev": true,
       "requires": {
-        "@types/events": "3.0.0",
-        "@types/minimatch": "3.0.3",
-        "@types/node": "11.13.22"
+        "@types/events": "*",
+        "@types/minimatch": "*",
+        "@types/node": "*"
       }
     },
     "@types/history": {
@@ -1008,7 +1008,7 @@
       "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.26.33.tgz",
       "integrity": "sha512-sUCQmKfAWmlbb6PpFqvndbGgTf0bCcmHLJqMYw8ErVS0UoZTTiz952aFedJhV+JERiVH7poh33358c7p0AAN8A==",
       "requires": {
-        "ts-toolbelt": "4.8.16"
+        "ts-toolbelt": "^4.7.7"
       }
     },
     "@types/react": {
@@ -1016,8 +1016,8 @@
       "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.23.tgz",
       "integrity": "sha512-abkEOIeljniUN9qB5onp++g0EY38h7atnDHxwKUFz1r3VH1+yG1OKi2sNPTyObL40goBmfKFpdii2lEzwLX1cA==",
       "requires": {
-        "@types/prop-types": "15.7.3",
-        "csstype": "2.6.7"
+        "@types/prop-types": "*",
+        "csstype": "^2.2.0"
       }
     },
     "@types/react-router": {
@@ -1026,8 +1026,8 @@
       "integrity": "sha512-euC3SiwDg3NcjFdNmFL8uVuAFTpZJm0WMFUw+4eXMUnxa7M9RGFEG0szt0z+/Zgk4G2k9JBFhaEnY64RBiFmuw==",
       "dev": true,
       "requires": {
-        "@types/history": "4.7.3",
-        "@types/react": "16.8.23"
+        "@types/history": "*",
+        "@types/react": "*"
       }
     },
     "@typescript-eslint/eslint-plugin": {
@@ -1036,10 +1036,10 @@
       "integrity": "sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g==",
       "requires": {
         "@typescript-eslint/experimental-utils": "1.13.0",
-        "eslint-utils": "1.4.2",
-        "functional-red-black-tree": "1.0.1",
-        "regexpp": "2.0.1",
-        "tsutils": "3.17.1"
+        "eslint-utils": "^1.3.1",
+        "functional-red-black-tree": "^1.0.1",
+        "regexpp": "^2.0.1",
+        "tsutils": "^3.7.0"
       }
     },
     "@typescript-eslint/experimental-utils": {
@@ -1047,9 +1047,9 @@
       "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz",
       "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==",
       "requires": {
-        "@types/json-schema": "7.0.3",
+        "@types/json-schema": "^7.0.3",
         "@typescript-eslint/typescript-estree": "1.13.0",
-        "eslint-scope": "4.0.3"
+        "eslint-scope": "^4.0.0"
       }
     },
     "@typescript-eslint/parser": {
@@ -1057,10 +1057,10 @@
       "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.13.0.tgz",
       "integrity": "sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==",
       "requires": {
-        "@types/eslint-visitor-keys": "1.0.0",
+        "@types/eslint-visitor-keys": "^1.0.0",
         "@typescript-eslint/experimental-utils": "1.13.0",
         "@typescript-eslint/typescript-estree": "1.13.0",
-        "eslint-visitor-keys": "1.1.0"
+        "eslint-visitor-keys": "^1.0.0"
       }
     },
     "@typescript-eslint/typescript-estree": {
@@ -1123,7 +1123,7 @@
       "dev": true,
       "requires": {
         "@webassemblyjs/ast": "1.8.5",
-        "mamacro": "0.0.3"
+        "mamacro": "^0.0.3"
       }
     },
     "@webassemblyjs/helper-wasm-bytecode": {
@@ -1150,7 +1150,7 @@
       "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
       "dev": true,
       "requires": {
-        "@xtuc/ieee754": "1.2.0"
+        "@xtuc/ieee754": "^1.2.0"
       }
     },
     "@webassemblyjs/leb128": {
@@ -1271,7 +1271,7 @@
       "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
       "dev": true,
       "requires": {
-        "mime-types": "2.1.24",
+        "mime-types": "~2.1.24",
         "negotiator": "0.6.2"
       }
     },
@@ -1340,10 +1340,10 @@
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
       "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
       "requires": {
-        "fast-deep-equal": "2.0.1",
-        "fast-json-stable-stringify": "2.0.0",
-        "json-schema-traverse": "0.4.1",
-        "uri-js": "4.2.2"
+        "fast-deep-equal": "^2.0.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
       }
     },
     "ajv-errors": {
@@ -1396,7 +1396,7 @@
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
       "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
       "requires": {
-        "color-convert": "1.9.3"
+        "color-convert": "^1.9.0"
       }
     },
     "anymatch": {
@@ -1405,8 +1405,8 @@
       "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
       "dev": true,
       "requires": {
-        "micromatch": "3.1.10",
-        "normalize-path": "2.1.1"
+        "micromatch": "^3.1.4",
+        "normalize-path": "^2.1.1"
       },
       "dependencies": {
         "normalize-path": {
@@ -1415,7 +1415,7 @@
           "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
           "dev": true,
           "requires": {
-            "remove-trailing-separator": "1.1.0"
+            "remove-trailing-separator": "^1.0.1"
           }
         }
       }
@@ -1430,8 +1430,8 @@
       "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
       "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
       "requires": {
-        "delegates": "1.0.0",
-        "readable-stream": "2.3.6"
+        "delegates": "^1.0.0",
+        "readable-stream": "^2.0.6"
       }
     },
     "arg": {
@@ -1445,7 +1445,7 @@
       "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
       "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
       "requires": {
-        "sprintf-js": "1.0.3"
+        "sprintf-js": "~1.0.2"
       }
     },
     "aria-query": {
@@ -1454,7 +1454,7 @@
       "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=",
       "requires": {
         "ast-types-flow": "0.0.7",
-        "commander": "2.20.1"
+        "commander": "^2.11.0"
       }
     },
     "arity-n": {
@@ -1502,8 +1502,8 @@
       "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
       "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
       "requires": {
-        "define-properties": "1.1.3",
-        "es-abstract": "1.15.0"
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.7.0"
       }
     },
     "array-union": {
@@ -1512,7 +1512,7 @@
       "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
       "dev": true,
       "requires": {
-        "array-uniq": "1.0.3"
+        "array-uniq": "^1.0.1"
       }
     },
     "array-uniq": {
@@ -1538,7 +1538,7 @@
       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
       "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
       "requires": {
-        "safer-buffer": "2.1.2"
+        "safer-buffer": "~2.1.0"
       }
     },
     "asn1.js": {
@@ -1546,9 +1546,9 @@
       "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
       "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
       "requires": {
-        "bn.js": "4.11.8",
-        "inherits": "2.0.4",
-        "minimalistic-assert": "1.0.1"
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
       }
     },
     "assert": {
@@ -1556,7 +1556,7 @@
       "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
       "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
       "requires": {
-        "object-assign": "4.1.1",
+        "object-assign": "^4.1.1",
         "util": "0.10.3"
       },
       "dependencies": {
@@ -1601,7 +1601,7 @@
       "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
       "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
       "requires": {
-        "lodash": "4.17.15"
+        "lodash": "^4.17.14"
       }
     },
     "async-each": {
@@ -1638,12 +1638,12 @@
       "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
       "dev": true,
       "requires": {
-        "browserslist": "1.7.7",
-        "caniuse-db": "1.0.30000999",
-        "normalize-range": "0.1.2",
-        "num2fraction": "1.2.2",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "browserslist": "^1.7.6",
+        "caniuse-db": "^1.0.30000634",
+        "normalize-range": "^0.1.2",
+        "num2fraction": "^1.2.2",
+        "postcss": "^5.2.16",
+        "postcss-value-parser": "^3.2.3"
       },
       "dependencies": {
         "browserslist": {
@@ -1652,8 +1652,8 @@
           "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
           "dev": true,
           "requires": {
-            "caniuse-db": "1.0.30000999",
-            "electron-to-chromium": "1.3.280"
+            "caniuse-db": "^1.0.30000639",
+            "electron-to-chromium": "^1.2.7"
           }
         }
       }
@@ -1670,8 +1670,8 @@
       "integrity": "sha512-aHzbT8Zr5Aaj0uQ6Zbf5552ojwTrfc3smOr8QW2ng9iAB6UxGRyYBg3jAvsezICzvLlmFk0g+n3i0px8SUS3Vw==",
       "dev": true,
       "requires": {
-        "autoresponsive-core": "1.0.1",
-        "exenv": "1.2.2"
+        "autoresponsive-core": "^1.0.1",
+        "exenv": "^1.2.0"
       }
     },
     "awesome-typescript-loader": {
@@ -1680,14 +1680,14 @@
       "integrity": "sha512-slv66OAJB8orL+UUaTI3pKlLorwIvS4ARZzYR9iJJyGsEgOqueMfOMdKySWzZ73vIkEe3fcwFgsKMg4d8zyb1g==",
       "dev": true,
       "requires": {
-        "chalk": "2.4.2",
-        "enhanced-resolve": "4.1.1",
-        "loader-utils": "1.2.3",
-        "lodash": "4.17.15",
-        "micromatch": "3.1.10",
-        "mkdirp": "0.5.1",
-        "source-map-support": "0.5.13",
-        "webpack-log": "1.2.0"
+        "chalk": "^2.4.1",
+        "enhanced-resolve": "^4.0.0",
+        "loader-utils": "^1.1.0",
+        "lodash": "^4.17.5",
+        "micromatch": "^3.1.9",
+        "mkdirp": "^0.5.1",
+        "source-map-support": "^0.5.3",
+        "webpack-log": "^1.2.0"
       },
       "dependencies": {
         "enhanced-resolve": {
@@ -1696,9 +1696,9 @@
           "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
           "dev": true,
           "requires": {
-            "graceful-fs": "4.2.2",
-            "memory-fs": "0.5.0",
-            "tapable": "1.1.3"
+            "graceful-fs": "^4.1.2",
+            "memory-fs": "^0.5.0",
+            "tapable": "^1.0.0"
           }
         },
         "memory-fs": {
@@ -1707,8 +1707,8 @@
           "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
           "dev": true,
           "requires": {
-            "errno": "0.1.7",
-            "readable-stream": "2.3.6"
+            "errno": "^0.1.3",
+            "readable-stream": "^2.0.1"
           }
         },
         "tapable": {
@@ -1735,7 +1735,7 @@
       "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==",
       "requires": {
         "follow-redirects": "1.5.10",
-        "is-buffer": "2.0.4"
+        "is-buffer": "^2.0.2"
       }
     },
     "axobject-query": {
@@ -1752,9 +1752,9 @@
       "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
       "dev": true,
       "requires": {
-        "chalk": "1.1.3",
-        "esutils": "2.0.3",
-        "js-tokens": "3.0.2"
+        "chalk": "^1.1.3",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.0.2"
       },
       "dependencies": {
         "ansi-regex": {
@@ -1775,11 +1775,11 @@
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           }
         },
         "js-tokens": {
@@ -1794,7 +1794,7 @@
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
           "dev": true,
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         },
         "supports-color": {
@@ -1811,25 +1811,25 @@
       "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
       "dev": true,
       "requires": {
-        "babel-code-frame": "6.26.0",
-        "babel-generator": "6.26.1",
-        "babel-helpers": "6.24.1",
-        "babel-messages": "6.23.0",
-        "babel-register": "6.26.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0",
-        "babylon": "6.18.0",
-        "convert-source-map": "1.6.0",
-        "debug": "2.6.9",
-        "json5": "0.5.1",
-        "lodash": "4.17.15",
-        "minimatch": "3.0.4",
-        "path-is-absolute": "1.0.1",
-        "private": "0.1.8",
-        "slash": "1.0.0",
-        "source-map": "0.5.7"
+        "babel-code-frame": "^6.26.0",
+        "babel-generator": "^6.26.0",
+        "babel-helpers": "^6.24.1",
+        "babel-messages": "^6.23.0",
+        "babel-register": "^6.26.0",
+        "babel-runtime": "^6.26.0",
+        "babel-template": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "convert-source-map": "^1.5.1",
+        "debug": "^2.6.9",
+        "json5": "^0.5.1",
+        "lodash": "^4.17.4",
+        "minimatch": "^3.0.4",
+        "path-is-absolute": "^1.0.1",
+        "private": "^0.1.8",
+        "slash": "^1.0.0",
+        "source-map": "^0.5.7"
       },
       "dependencies": {
         "debug": {
@@ -1867,12 +1867,12 @@
       "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==",
       "dev": true,
       "requires": {
-        "@babel/code-frame": "7.5.5",
-        "@babel/parser": "7.6.3",
-        "@babel/traverse": "7.6.3",
-        "@babel/types": "7.5.5",
-        "eslint-visitor-keys": "1.1.0",
-        "resolve": "1.12.0"
+        "@babel/code-frame": "^7.0.0",
+        "@babel/parser": "^7.0.0",
+        "@babel/traverse": "^7.0.0",
+        "@babel/types": "^7.0.0",
+        "eslint-visitor-keys": "^1.0.0",
+        "resolve": "^1.12.0"
       }
     },
     "babel-generator": {
@@ -1881,14 +1881,14 @@
       "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
       "dev": true,
       "requires": {
-        "babel-messages": "6.23.0",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "detect-indent": "4.0.0",
-        "jsesc": "1.3.0",
-        "lodash": "4.17.15",
-        "source-map": "0.5.7",
-        "trim-right": "1.0.1"
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "detect-indent": "^4.0.0",
+        "jsesc": "^1.3.0",
+        "lodash": "^4.17.4",
+        "source-map": "^0.5.7",
+        "trim-right": "^1.0.1"
       },
       "dependencies": {
         "jsesc": {
@@ -1911,9 +1911,9 @@
       "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-helper-builder-binary-assignment-operator-visitor": {
@@ -1922,9 +1922,9 @@
       "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
       "dev": true,
       "requires": {
-        "babel-helper-explode-assignable-expression": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-explode-assignable-expression": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-helper-builder-react-jsx": {
@@ -1933,9 +1933,9 @@
       "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "esutils": "2.0.3"
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "esutils": "^2.0.2"
       }
     },
     "babel-helper-call-delegate": {
@@ -1944,10 +1944,10 @@
       "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
       "dev": true,
       "requires": {
-        "babel-helper-hoist-variables": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-hoist-variables": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-helper-define-map": {
@@ -1956,10 +1956,10 @@
       "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
       "dev": true,
       "requires": {
-        "babel-helper-function-name": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "lodash": "4.17.15"
+        "babel-helper-function-name": "^6.24.1",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "lodash": "^4.17.4"
       }
     },
     "babel-helper-explode-assignable-expression": {
@@ -1968,9 +1968,9 @@
       "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-helper-explode-class": {
@@ -1979,10 +1979,10 @@
       "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
       "dev": true,
       "requires": {
-        "babel-helper-bindify-decorators": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-bindify-decorators": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-helper-function-name": {
@@ -1991,11 +1991,11 @@
       "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
       "dev": true,
       "requires": {
-        "babel-helper-get-function-arity": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-get-function-arity": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-helper-get-function-arity": {
@@ -2004,8 +2004,8 @@
       "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-helper-hoist-variables": {
@@ -2014,8 +2014,8 @@
       "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-helper-optimise-call-expression": {
@@ -2024,8 +2024,8 @@
       "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-helper-regex": {
@@ -2034,9 +2034,9 @@
       "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "lodash": "4.17.15"
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "lodash": "^4.17.4"
       }
     },
     "babel-helper-remap-async-to-generator": {
@@ -2045,11 +2045,11 @@
       "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
       "dev": true,
       "requires": {
-        "babel-helper-function-name": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-function-name": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-helper-replace-supers": {
@@ -2058,12 +2058,12 @@
       "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
       "dev": true,
       "requires": {
-        "babel-helper-optimise-call-expression": "6.24.1",
-        "babel-messages": "6.23.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-optimise-call-expression": "^6.24.1",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-helpers": {
@@ -2072,8 +2072,8 @@
       "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
       }
     },
     "babel-loader": {
@@ -2082,9 +2082,9 @@
       "integrity": "sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==",
       "dev": true,
       "requires": {
-        "find-cache-dir": "1.0.0",
-        "loader-utils": "1.2.3",
-        "mkdirp": "0.5.1"
+        "find-cache-dir": "^1.0.0",
+        "loader-utils": "^1.0.2",
+        "mkdirp": "^0.5.1"
       },
       "dependencies": {
         "find-cache-dir": {
@@ -2093,9 +2093,9 @@
           "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
           "dev": true,
           "requires": {
-            "commondir": "1.0.1",
-            "make-dir": "1.3.0",
-            "pkg-dir": "2.0.0"
+            "commondir": "^1.0.1",
+            "make-dir": "^1.0.0",
+            "pkg-dir": "^2.0.0"
           }
         },
         "pkg-dir": {
@@ -2104,7 +2104,7 @@
           "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
           "dev": true,
           "requires": {
-            "find-up": "2.1.0"
+            "find-up": "^2.1.0"
           }
         }
       }
@@ -2115,7 +2115,7 @@
       "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-check-es2015-constants": {
@@ -2124,7 +2124,7 @@
       "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-dynamic-import-node": {
@@ -2133,7 +2133,7 @@
       "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
       "dev": true,
       "requires": {
-        "object.assign": "4.1.0"
+        "object.assign": "^4.1.0"
       }
     },
     "babel-plugin-lodash": {
@@ -2142,11 +2142,11 @@
       "integrity": "sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-imports": "7.0.0",
-        "@babel/types": "7.5.5",
-        "glob": "7.1.4",
-        "lodash": "4.17.15",
-        "require-package-name": "2.0.1"
+        "@babel/helper-module-imports": "^7.0.0-beta.49",
+        "@babel/types": "^7.0.0-beta.49",
+        "glob": "^7.1.1",
+        "lodash": "^4.17.10",
+        "require-package-name": "^2.0.1"
       }
     },
     "babel-plugin-syntax-async-functions": {
@@ -2215,9 +2215,9 @@
       "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
       "dev": true,
       "requires": {
-        "babel-helper-remap-async-to-generator": "6.24.1",
-        "babel-plugin-syntax-async-generators": "6.13.0",
-        "babel-runtime": "6.26.0"
+        "babel-helper-remap-async-to-generator": "^6.24.1",
+        "babel-plugin-syntax-async-generators": "^6.5.0",
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-async-to-generator": {
@@ -2226,9 +2226,9 @@
       "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
       "dev": true,
       "requires": {
-        "babel-helper-remap-async-to-generator": "6.24.1",
-        "babel-plugin-syntax-async-functions": "6.13.0",
-        "babel-runtime": "6.26.0"
+        "babel-helper-remap-async-to-generator": "^6.24.1",
+        "babel-plugin-syntax-async-functions": "^6.8.0",
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-class-properties": {
@@ -2237,10 +2237,10 @@
       "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
       "dev": true,
       "requires": {
-        "babel-helper-function-name": "6.24.1",
-        "babel-plugin-syntax-class-properties": "6.13.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
+        "babel-helper-function-name": "^6.24.1",
+        "babel-plugin-syntax-class-properties": "^6.8.0",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
       }
     },
     "babel-plugin-transform-decorators": {
@@ -2249,11 +2249,11 @@
       "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
       "dev": true,
       "requires": {
-        "babel-helper-explode-class": "6.24.1",
-        "babel-plugin-syntax-decorators": "6.13.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-explode-class": "^6.24.1",
+        "babel-plugin-syntax-decorators": "^6.13.0",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-plugin-transform-es2015-arrow-functions": {
@@ -2262,7 +2262,7 @@
       "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-es2015-block-scoped-functions": {
@@ -2271,7 +2271,7 @@
       "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-es2015-block-scoping": {
@@ -2280,11 +2280,11 @@
       "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0",
-        "lodash": "4.17.15"
+        "babel-runtime": "^6.26.0",
+        "babel-template": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "lodash": "^4.17.4"
       }
     },
     "babel-plugin-transform-es2015-classes": {
@@ -2293,15 +2293,15 @@
       "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
       "dev": true,
       "requires": {
-        "babel-helper-define-map": "6.26.0",
-        "babel-helper-function-name": "6.24.1",
-        "babel-helper-optimise-call-expression": "6.24.1",
-        "babel-helper-replace-supers": "6.24.1",
-        "babel-messages": "6.23.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-define-map": "^6.24.1",
+        "babel-helper-function-name": "^6.24.1",
+        "babel-helper-optimise-call-expression": "^6.24.1",
+        "babel-helper-replace-supers": "^6.24.1",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-plugin-transform-es2015-computed-properties": {
@@ -2310,8 +2310,8 @@
       "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
       }
     },
     "babel-plugin-transform-es2015-destructuring": {
@@ -2320,7 +2320,7 @@
       "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-es2015-duplicate-keys": {
@@ -2329,8 +2329,8 @@
       "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-plugin-transform-es2015-for-of": {
@@ -2339,7 +2339,7 @@
       "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-es2015-function-name": {
@@ -2348,9 +2348,9 @@
       "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
       "dev": true,
       "requires": {
-        "babel-helper-function-name": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-function-name": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-plugin-transform-es2015-literals": {
@@ -2359,7 +2359,7 @@
       "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-es2015-modules-amd": {
@@ -2368,9 +2368,9 @@
       "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
       "dev": true,
       "requires": {
-        "babel-plugin-transform-es2015-modules-commonjs": "6.26.2",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
+        "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
       }
     },
     "babel-plugin-transform-es2015-modules-commonjs": {
@@ -2379,10 +2379,10 @@
       "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
       "dev": true,
       "requires": {
-        "babel-plugin-transform-strict-mode": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-plugin-transform-strict-mode": "^6.24.1",
+        "babel-runtime": "^6.26.0",
+        "babel-template": "^6.26.0",
+        "babel-types": "^6.26.0"
       }
     },
     "babel-plugin-transform-es2015-modules-systemjs": {
@@ -2391,9 +2391,9 @@
       "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
       "dev": true,
       "requires": {
-        "babel-helper-hoist-variables": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
+        "babel-helper-hoist-variables": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
       }
     },
     "babel-plugin-transform-es2015-modules-umd": {
@@ -2402,9 +2402,9 @@
       "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
       "dev": true,
       "requires": {
-        "babel-plugin-transform-es2015-modules-amd": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
+        "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
       }
     },
     "babel-plugin-transform-es2015-object-super": {
@@ -2413,8 +2413,8 @@
       "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
       "dev": true,
       "requires": {
-        "babel-helper-replace-supers": "6.24.1",
-        "babel-runtime": "6.26.0"
+        "babel-helper-replace-supers": "^6.24.1",
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-es2015-parameters": {
@@ -2423,12 +2423,12 @@
       "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
       "dev": true,
       "requires": {
-        "babel-helper-call-delegate": "6.24.1",
-        "babel-helper-get-function-arity": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-call-delegate": "^6.24.1",
+        "babel-helper-get-function-arity": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-plugin-transform-es2015-shorthand-properties": {
@@ -2437,8 +2437,8 @@
       "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-plugin-transform-es2015-spread": {
@@ -2447,7 +2447,7 @@
       "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-es2015-sticky-regex": {
@@ -2456,9 +2456,9 @@
       "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
       "dev": true,
       "requires": {
-        "babel-helper-regex": "6.26.0",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-regex": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-plugin-transform-es2015-template-literals": {
@@ -2467,7 +2467,7 @@
       "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-es2015-typeof-symbol": {
@@ -2476,7 +2476,7 @@
       "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-es2015-unicode-regex": {
@@ -2485,9 +2485,9 @@
       "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
       "dev": true,
       "requires": {
-        "babel-helper-regex": "6.26.0",
-        "babel-runtime": "6.26.0",
-        "regexpu-core": "2.0.0"
+        "babel-helper-regex": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "regexpu-core": "^2.0.0"
       },
       "dependencies": {
         "jsesc": {
@@ -2502,9 +2502,9 @@
           "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
           "dev": true,
           "requires": {
-            "regenerate": "1.4.0",
-            "regjsgen": "0.2.0",
-            "regjsparser": "0.1.5"
+            "regenerate": "^1.2.1",
+            "regjsgen": "^0.2.0",
+            "regjsparser": "^0.1.4"
           }
         },
         "regjsgen": {
@@ -2519,7 +2519,7 @@
           "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
           "dev": true,
           "requires": {
-            "jsesc": "0.5.0"
+            "jsesc": "~0.5.0"
           }
         }
       }
@@ -2530,9 +2530,9 @@
       "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
       "dev": true,
       "requires": {
-        "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
-        "babel-plugin-syntax-exponentiation-operator": "6.13.0",
-        "babel-runtime": "6.26.0"
+        "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1",
+        "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-flow-strip-types": {
@@ -2541,8 +2541,8 @@
       "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-flow": "6.18.0",
-        "babel-runtime": "6.26.0"
+        "babel-plugin-syntax-flow": "^6.18.0",
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-object-rest-spread": {
@@ -2551,8 +2551,8 @@
       "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-object-rest-spread": "6.13.0",
-        "babel-runtime": "6.26.0"
+        "babel-plugin-syntax-object-rest-spread": "^6.8.0",
+        "babel-runtime": "^6.26.0"
       }
     },
     "babel-plugin-transform-react-display-name": {
@@ -2561,7 +2561,7 @@
       "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-react-jsx": {
@@ -2570,9 +2570,9 @@
       "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
       "dev": true,
       "requires": {
-        "babel-helper-builder-react-jsx": "6.26.0",
-        "babel-plugin-syntax-jsx": "6.18.0",
-        "babel-runtime": "6.26.0"
+        "babel-helper-builder-react-jsx": "^6.24.1",
+        "babel-plugin-syntax-jsx": "^6.8.0",
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-react-jsx-self": {
@@ -2581,8 +2581,8 @@
       "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-jsx": "6.18.0",
-        "babel-runtime": "6.26.0"
+        "babel-plugin-syntax-jsx": "^6.8.0",
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-react-jsx-source": {
@@ -2591,8 +2591,8 @@
       "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-jsx": "6.18.0",
-        "babel-runtime": "6.26.0"
+        "babel-plugin-syntax-jsx": "^6.8.0",
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-regenerator": {
@@ -2601,7 +2601,7 @@
       "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
       "dev": true,
       "requires": {
-        "regenerator-transform": "0.10.1"
+        "regenerator-transform": "^0.10.0"
       },
       "dependencies": {
         "regenerator-transform": {
@@ -2610,9 +2610,9 @@
           "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
           "dev": true,
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0",
-            "private": "0.1.8"
+            "babel-runtime": "^6.18.0",
+            "babel-types": "^6.19.0",
+            "private": "^0.1.6"
           }
         }
       }
@@ -2623,7 +2623,7 @@
       "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       }
     },
     "babel-plugin-transform-strict-mode": {
@@ -2632,8 +2632,8 @@
       "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       }
     },
     "babel-preset-env": {
@@ -2642,36 +2642,36 @@
       "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==",
       "dev": true,
       "requires": {
-        "babel-plugin-check-es2015-constants": "6.22.0",
-        "babel-plugin-syntax-trailing-function-commas": "6.22.0",
-        "babel-plugin-transform-async-to-generator": "6.24.1",
-        "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
-        "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
-        "babel-plugin-transform-es2015-block-scoping": "6.26.0",
-        "babel-plugin-transform-es2015-classes": "6.24.1",
-        "babel-plugin-transform-es2015-computed-properties": "6.24.1",
-        "babel-plugin-transform-es2015-destructuring": "6.23.0",
-        "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
-        "babel-plugin-transform-es2015-for-of": "6.23.0",
-        "babel-plugin-transform-es2015-function-name": "6.24.1",
-        "babel-plugin-transform-es2015-literals": "6.22.0",
-        "babel-plugin-transform-es2015-modules-amd": "6.24.1",
-        "babel-plugin-transform-es2015-modules-commonjs": "6.26.2",
-        "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
-        "babel-plugin-transform-es2015-modules-umd": "6.24.1",
-        "babel-plugin-transform-es2015-object-super": "6.24.1",
-        "babel-plugin-transform-es2015-parameters": "6.24.1",
-        "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
-        "babel-plugin-transform-es2015-spread": "6.22.0",
-        "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
-        "babel-plugin-transform-es2015-template-literals": "6.22.0",
-        "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
-        "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
-        "babel-plugin-transform-exponentiation-operator": "6.24.1",
-        "babel-plugin-transform-regenerator": "6.26.0",
-        "browserslist": "3.2.8",
-        "invariant": "2.2.4",
-        "semver": "5.5.0"
+        "babel-plugin-check-es2015-constants": "^6.22.0",
+        "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
+        "babel-plugin-transform-async-to-generator": "^6.22.0",
+        "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+        "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
+        "babel-plugin-transform-es2015-block-scoping": "^6.23.0",
+        "babel-plugin-transform-es2015-classes": "^6.23.0",
+        "babel-plugin-transform-es2015-computed-properties": "^6.22.0",
+        "babel-plugin-transform-es2015-destructuring": "^6.23.0",
+        "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0",
+        "babel-plugin-transform-es2015-for-of": "^6.23.0",
+        "babel-plugin-transform-es2015-function-name": "^6.22.0",
+        "babel-plugin-transform-es2015-literals": "^6.22.0",
+        "babel-plugin-transform-es2015-modules-amd": "^6.22.0",
+        "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0",
+        "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0",
+        "babel-plugin-transform-es2015-modules-umd": "^6.23.0",
+        "babel-plugin-transform-es2015-object-super": "^6.22.0",
+        "babel-plugin-transform-es2015-parameters": "^6.23.0",
+        "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0",
+        "babel-plugin-transform-es2015-spread": "^6.22.0",
+        "babel-plugin-transform-es2015-sticky-regex": "^6.22.0",
+        "babel-plugin-transform-es2015-template-literals": "^6.22.0",
+        "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0",
+        "babel-plugin-transform-es2015-unicode-regex": "^6.22.0",
+        "babel-plugin-transform-exponentiation-operator": "^6.22.0",
+        "babel-plugin-transform-regenerator": "^6.22.0",
+        "browserslist": "^3.2.6",
+        "invariant": "^2.2.2",
+        "semver": "^5.3.0"
       },
       "dependencies": {
         "browserslist": {
@@ -2680,8 +2680,8 @@
           "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==",
           "dev": true,
           "requires": {
-            "caniuse-lite": "1.0.30000999",
-            "electron-to-chromium": "1.3.280"
+            "caniuse-lite": "^1.0.30000844",
+            "electron-to-chromium": "^1.3.47"
           }
         }
       }
@@ -2692,7 +2692,7 @@
       "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
       "dev": true,
       "requires": {
-        "babel-plugin-transform-flow-strip-types": "6.22.0"
+        "babel-plugin-transform-flow-strip-types": "^6.22.0"
       }
     },
     "babel-preset-react": {
@@ -2701,12 +2701,12 @@
       "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-jsx": "6.18.0",
-        "babel-plugin-transform-react-display-name": "6.25.0",
-        "babel-plugin-transform-react-jsx": "6.24.1",
-        "babel-plugin-transform-react-jsx-self": "6.22.0",
-        "babel-plugin-transform-react-jsx-source": "6.22.0",
-        "babel-preset-flow": "6.23.0"
+        "babel-plugin-syntax-jsx": "^6.3.13",
+        "babel-plugin-transform-react-display-name": "^6.23.0",
+        "babel-plugin-transform-react-jsx": "^6.24.1",
+        "babel-plugin-transform-react-jsx-self": "^6.22.0",
+        "babel-plugin-transform-react-jsx-source": "^6.22.0",
+        "babel-preset-flow": "^6.23.0"
       }
     },
     "babel-preset-stage-2": {
@@ -2715,10 +2715,10 @@
       "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-dynamic-import": "6.18.0",
-        "babel-plugin-transform-class-properties": "6.24.1",
-        "babel-plugin-transform-decorators": "6.24.1",
-        "babel-preset-stage-3": "6.24.1"
+        "babel-plugin-syntax-dynamic-import": "^6.18.0",
+        "babel-plugin-transform-class-properties": "^6.24.1",
+        "babel-plugin-transform-decorators": "^6.24.1",
+        "babel-preset-stage-3": "^6.24.1"
       }
     },
     "babel-preset-stage-3": {
@@ -2727,11 +2727,11 @@
       "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-trailing-function-commas": "6.22.0",
-        "babel-plugin-transform-async-generator-functions": "6.24.1",
-        "babel-plugin-transform-async-to-generator": "6.24.1",
-        "babel-plugin-transform-exponentiation-operator": "6.24.1",
-        "babel-plugin-transform-object-rest-spread": "6.26.0"
+        "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
+        "babel-plugin-transform-async-generator-functions": "^6.24.1",
+        "babel-plugin-transform-async-to-generator": "^6.24.1",
+        "babel-plugin-transform-exponentiation-operator": "^6.24.1",
+        "babel-plugin-transform-object-rest-spread": "^6.22.0"
       }
     },
     "babel-register": {
@@ -2740,13 +2740,13 @@
       "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
       "dev": true,
       "requires": {
-        "babel-core": "6.26.3",
-        "babel-runtime": "6.26.0",
-        "core-js": "2.6.9",
-        "home-or-tmp": "2.0.0",
-        "lodash": "4.17.15",
-        "mkdirp": "0.5.1",
-        "source-map-support": "0.4.18"
+        "babel-core": "^6.26.0",
+        "babel-runtime": "^6.26.0",
+        "core-js": "^2.5.0",
+        "home-or-tmp": "^2.0.0",
+        "lodash": "^4.17.4",
+        "mkdirp": "^0.5.1",
+        "source-map-support": "^0.4.15"
       },
       "dependencies": {
         "source-map": {
@@ -2761,7 +2761,7 @@
           "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
           "dev": true,
           "requires": {
-            "source-map": "0.5.7"
+            "source-map": "^0.5.6"
           }
         }
       }
@@ -2771,8 +2771,8 @@
       "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
       "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
       "requires": {
-        "core-js": "2.6.9",
-        "regenerator-runtime": "0.11.1"
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
       }
     },
     "babel-template": {
@@ -2781,11 +2781,11 @@
       "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0",
-        "babylon": "6.18.0",
-        "lodash": "4.17.15"
+        "babel-runtime": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "lodash": "^4.17.4"
       }
     },
     "babel-traverse": {
@@ -2794,15 +2794,15 @@
       "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
       "dev": true,
       "requires": {
-        "babel-code-frame": "6.26.0",
-        "babel-messages": "6.23.0",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "babylon": "6.18.0",
-        "debug": "2.6.9",
-        "globals": "9.18.0",
-        "invariant": "2.2.4",
-        "lodash": "4.17.15"
+        "babel-code-frame": "^6.26.0",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "debug": "^2.6.8",
+        "globals": "^9.18.0",
+        "invariant": "^2.2.2",
+        "lodash": "^4.17.4"
       },
       "dependencies": {
         "debug": {
@@ -2828,10 +2828,10 @@
       "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "esutils": "2.0.3",
-        "lodash": "4.17.15",
-        "to-fast-properties": "1.0.3"
+        "babel-runtime": "^6.26.0",
+        "esutils": "^2.0.2",
+        "lodash": "^4.17.4",
+        "to-fast-properties": "^1.0.3"
       },
       "dependencies": {
         "to-fast-properties": {
@@ -2859,13 +2859,13 @@
       "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
       "dev": true,
       "requires": {
-        "cache-base": "1.0.1",
-        "class-utils": "0.3.6",
-        "component-emitter": "1.3.0",
-        "define-property": "1.0.0",
-        "isobject": "3.0.1",
-        "mixin-deep": "1.3.2",
-        "pascalcase": "0.1.1"
+        "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"
       },
       "dependencies": {
         "define-property": {
@@ -2874,7 +2874,7 @@
           "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "1.0.2"
+            "is-descriptor": "^1.0.0"
           }
         },
         "is-accessor-descriptor": {
@@ -2883,7 +2883,7 @@
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
@@ -2892,7 +2892,7 @@
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
@@ -2901,9 +2901,9 @@
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         }
       }
@@ -2929,7 +2929,7 @@
       "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
       "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
       "requires": {
-        "tweetnacl": "0.14.5"
+        "tweetnacl": "^0.14.3"
       }
     },
     "big.js": {
@@ -2948,7 +2948,7 @@
       "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
       "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
       "requires": {
-        "inherits": "2.0.4"
+        "inherits": "~2.0.0"
       }
     },
     "bluebird": {
@@ -2969,15 +2969,15 @@
       "dev": true,
       "requires": {
         "bytes": "3.1.0",
-        "content-type": "1.0.4",
+        "content-type": "~1.0.4",
         "debug": "2.6.9",
-        "depd": "1.1.2",
+        "depd": "~1.1.2",
         "http-errors": "1.7.2",
         "iconv-lite": "0.4.24",
-        "on-finished": "2.3.0",
+        "on-finished": "~2.3.0",
         "qs": "6.7.0",
         "raw-body": "2.4.0",
-        "type-is": "1.6.18"
+        "type-is": "~1.6.17"
       },
       "dependencies": {
         "bytes": {
@@ -3001,10 +3001,10 @@
           "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
           "dev": true,
           "requires": {
-            "depd": "1.1.2",
+            "depd": "~1.1.2",
             "inherits": "2.0.3",
             "setprototypeof": "1.1.1",
-            "statuses": "1.5.0",
+            "statuses": ">= 1.5.0 < 2",
             "toidentifier": "1.0.0"
           }
         },
@@ -3034,12 +3034,12 @@
       "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
       "dev": true,
       "requires": {
-        "array-flatten": "2.1.2",
-        "deep-equal": "1.1.0",
-        "dns-equal": "1.0.0",
-        "dns-txt": "2.0.2",
-        "multicast-dns": "6.2.3",
-        "multicast-dns-service-types": "1.1.0"
+        "array-flatten": "^2.1.0",
+        "deep-equal": "^1.0.1",
+        "dns-equal": "^1.0.0",
+        "dns-txt": "^2.0.2",
+        "multicast-dns": "^6.0.1",
+        "multicast-dns-service-types": "^1.1.0"
       }
     },
     "boolbase": {
@@ -3053,7 +3053,7 @@
       "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
       "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
       "requires": {
-        "hoek": "2.16.3"
+        "hoek": "2.x.x"
       }
     },
     "bowser": {
@@ -3066,7 +3066,7 @@
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "requires": {
-        "balanced-match": "1.0.0",
+        "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
       }
     },
@@ -3076,16 +3076,16 @@
       "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
       "dev": true,
       "requires": {
-        "arr-flatten": "1.1.0",
-        "array-unique": "0.3.2",
-        "extend-shallow": "2.0.1",
-        "fill-range": "4.0.0",
-        "isobject": "3.0.1",
-        "repeat-element": "1.1.3",
-        "snapdragon": "0.8.2",
-        "snapdragon-node": "2.1.1",
-        "split-string": "3.1.0",
-        "to-regex": "3.0.2"
+        "arr-flatten": "^1.1.0",
+        "array-unique": "^0.3.2",
+        "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"
       },
       "dependencies": {
         "extend-shallow": {
@@ -3094,7 +3094,7 @@
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "is-extendable": "0.1.1"
+            "is-extendable": "^0.1.0"
           }
         }
       }
@@ -3109,12 +3109,12 @@
       "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
       "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
       "requires": {
-        "buffer-xor": "1.0.3",
-        "cipher-base": "1.0.4",
-        "create-hash": "1.2.0",
-        "evp_bytestokey": "1.0.3",
-        "inherits": "2.0.4",
-        "safe-buffer": "5.2.0"
+        "buffer-xor": "^1.0.3",
+        "cipher-base": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.3",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "browserify-cipher": {
@@ -3122,9 +3122,9 @@
       "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
       "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
       "requires": {
-        "browserify-aes": "1.2.0",
-        "browserify-des": "1.0.2",
-        "evp_bytestokey": "1.0.3"
+        "browserify-aes": "^1.0.4",
+        "browserify-des": "^1.0.0",
+        "evp_bytestokey": "^1.0.0"
       }
     },
     "browserify-des": {
@@ -3132,10 +3132,10 @@
       "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
       "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
       "requires": {
-        "cipher-base": "1.0.4",
-        "des.js": "1.0.0",
-        "inherits": "2.0.4",
-        "safe-buffer": "5.2.0"
+        "cipher-base": "^1.0.1",
+        "des.js": "^1.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
       }
     },
     "browserify-rsa": {
@@ -3143,8 +3143,8 @@
       "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
       "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
       "requires": {
-        "bn.js": "4.11.8",
-        "randombytes": "2.1.0"
+        "bn.js": "^4.1.0",
+        "randombytes": "^2.0.1"
       }
     },
     "browserify-sign": {
@@ -3152,13 +3152,13 @@
       "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
       "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
       "requires": {
-        "bn.js": "4.11.8",
-        "browserify-rsa": "4.0.1",
-        "create-hash": "1.2.0",
-        "create-hmac": "1.1.7",
-        "elliptic": "6.5.1",
-        "inherits": "2.0.4",
-        "parse-asn1": "5.1.5"
+        "bn.js": "^4.1.1",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.2",
+        "elliptic": "^6.0.0",
+        "inherits": "^2.0.1",
+        "parse-asn1": "^5.0.0"
       }
     },
     "browserify-zlib": {
@@ -3166,7 +3166,7 @@
       "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
       "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
       "requires": {
-        "pako": "1.0.10"
+        "pako": "~1.0.5"
       }
     },
     "browserslist": {
@@ -3175,9 +3175,9 @@
       "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==",
       "dev": true,
       "requires": {
-        "caniuse-lite": "1.0.30000999",
-        "electron-to-chromium": "1.3.280",
-        "node-releases": "1.1.35"
+        "caniuse-lite": "^1.0.30000989",
+        "electron-to-chromium": "^1.3.247",
+        "node-releases": "^1.1.29"
       }
     },
     "buffer": {
@@ -3185,9 +3185,9 @@
       "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
       "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
       "requires": {
-        "base64-js": "1.3.1",
-        "ieee754": "1.1.13",
-        "isarray": "1.0.0"
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4",
+        "isarray": "^1.0.0"
       }
     },
     "buffer-from": {
@@ -3229,19 +3229,19 @@
       "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
       "dev": true,
       "requires": {
-        "bluebird": "3.7.0",
-        "chownr": "1.1.3",
-        "glob": "7.1.4",
-        "graceful-fs": "4.2.2",
-        "lru-cache": "4.1.5",
-        "mississippi": "2.0.0",
-        "mkdirp": "0.5.1",
-        "move-concurrently": "1.0.1",
-        "promise-inflight": "1.0.1",
-        "rimraf": "2.7.1",
-        "ssri": "5.3.0",
-        "unique-filename": "1.1.1",
-        "y18n": "4.0.0"
+        "bluebird": "^3.5.1",
+        "chownr": "^1.0.1",
+        "glob": "^7.1.2",
+        "graceful-fs": "^4.1.11",
+        "lru-cache": "^4.1.1",
+        "mississippi": "^2.0.0",
+        "mkdirp": "^0.5.1",
+        "move-concurrently": "^1.0.1",
+        "promise-inflight": "^1.0.1",
+        "rimraf": "^2.6.2",
+        "ssri": "^5.2.4",
+        "unique-filename": "^1.1.0",
+        "y18n": "^4.0.0"
       },
       "dependencies": {
         "y18n": {
@@ -3258,15 +3258,15 @@
       "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
       "dev": true,
       "requires": {
-        "collection-visit": "1.0.0",
-        "component-emitter": "1.3.0",
-        "get-value": "2.0.6",
-        "has-value": "1.0.0",
-        "isobject": "3.0.1",
-        "set-value": "2.0.1",
-        "to-object-path": "0.3.0",
-        "union-value": "1.0.1",
-        "unset-value": "1.0.0"
+        "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"
       }
     },
     "caller-callsite": {
@@ -3275,7 +3275,7 @@
       "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
       "dev": true,
       "requires": {
-        "callsites": "2.0.0"
+        "callsites": "^2.0.0"
       },
       "dependencies": {
         "callsites": {
@@ -3292,7 +3292,7 @@
       "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
       "dev": true,
       "requires": {
-        "caller-callsite": "2.0.0"
+        "caller-callsite": "^2.0.0"
       }
     },
     "callsites": {
@@ -3306,8 +3306,8 @@
       "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
       "dev": true,
       "requires": {
-        "no-case": "2.3.2",
-        "upper-case": "1.1.3"
+        "no-case": "^2.2.0",
+        "upper-case": "^1.1.1"
       }
     },
     "camelcase": {
@@ -3320,8 +3320,8 @@
       "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
       "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
       "requires": {
-        "camelcase": "2.1.1",
-        "map-obj": "1.0.1"
+        "camelcase": "^2.0.0",
+        "map-obj": "^1.0.0"
       }
     },
     "caniuse-api": {
@@ -3330,10 +3330,10 @@
       "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
       "dev": true,
       "requires": {
-        "browserslist": "1.7.7",
-        "caniuse-db": "1.0.30000999",
-        "lodash.memoize": "4.1.2",
-        "lodash.uniq": "4.5.0"
+        "browserslist": "^1.3.6",
+        "caniuse-db": "^1.0.30000529",
+        "lodash.memoize": "^4.1.2",
+        "lodash.uniq": "^4.5.0"
       },
       "dependencies": {
         "browserslist": {
@@ -3342,8 +3342,8 @@
           "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
           "dev": true,
           "requires": {
-            "caniuse-db": "1.0.30000999",
-            "electron-to-chromium": "1.3.280"
+            "caniuse-db": "^1.0.30000639",
+            "electron-to-chromium": "^1.2.7"
           }
         }
       }
@@ -3375,9 +3375,9 @@
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
       "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
       "requires": {
-        "ansi-styles": "3.2.1",
-        "escape-string-regexp": "1.0.5",
-        "supports-color": "5.5.0"
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
       }
     },
     "chardet": {
@@ -3391,18 +3391,18 @@
       "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
       "dev": true,
       "requires": {
-        "anymatch": "2.0.0",
-        "async-each": "1.0.3",
-        "braces": "2.3.2",
-        "fsevents": "1.2.9",
-        "glob-parent": "3.1.0",
-        "inherits": "2.0.4",
-        "is-binary-path": "1.0.1",
-        "is-glob": "4.0.1",
-        "normalize-path": "3.0.0",
-        "path-is-absolute": "1.0.1",
-        "readdirp": "2.2.1",
-        "upath": "1.2.0"
+        "anymatch": "^2.0.0",
+        "async-each": "^1.0.1",
+        "braces": "^2.3.2",
+        "fsevents": "^1.2.7",
+        "glob-parent": "^3.1.0",
+        "inherits": "^2.0.3",
+        "is-binary-path": "^1.0.0",
+        "is-glob": "^4.0.0",
+        "normalize-path": "^3.0.0",
+        "path-is-absolute": "^1.0.0",
+        "readdirp": "^2.2.1",
+        "upath": "^1.1.1"
       }
     },
     "chownr": {
@@ -3417,7 +3417,7 @@
       "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
       "dev": true,
       "requires": {
-        "tslib": "1.10.0"
+        "tslib": "^1.9.0"
       }
     },
     "cipher-base": {
@@ -3425,8 +3425,8 @@
       "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
       "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
       "requires": {
-        "inherits": "2.0.4",
-        "safe-buffer": "5.2.0"
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "clap": {
@@ -3435,7 +3435,7 @@
       "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
       "dev": true,
       "requires": {
-        "chalk": "1.1.3"
+        "chalk": "^1.1.3"
       },
       "dependencies": {
         "ansi-regex": {
@@ -3456,11 +3456,11 @@
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           }
         },
         "strip-ansi": {
@@ -3469,7 +3469,7 @@
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
           "dev": true,
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         },
         "supports-color": {
@@ -3486,10 +3486,10 @@
       "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
       "dev": true,
       "requires": {
-        "arr-union": "3.1.0",
-        "define-property": "0.2.5",
-        "isobject": "3.0.1",
-        "static-extend": "0.1.2"
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
       },
       "dependencies": {
         "define-property": {
@@ -3498,13 +3498,14 @@
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "0.1.6"
+            "is-descriptor": "^0.1.0"
           }
         }
       }
     },
     "classie": {
-      "version": "github:eiriklv/classie#da1d3019904433872a8656d3cd69fc41d69c477a"
+      "version": "github:eiriklv/classie#da1d3019904433872a8656d3cd69fc41d69c477a",
+      "from": "github:eiriklv/classie"
     },
     "classnames": {
       "version": "2.2.6",
@@ -3517,7 +3518,7 @@
       "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==",
       "dev": true,
       "requires": {
-        "source-map": "0.6.1"
+        "source-map": "~0.6.0"
       }
     },
     "clean-webpack-plugin": {
@@ -3525,7 +3526,7 @@
       "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz",
       "integrity": "sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA==",
       "requires": {
-        "rimraf": "2.7.1"
+        "rimraf": "^2.6.1"
       }
     },
     "cli-cursor": {
@@ -3533,7 +3534,7 @@
       "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
       "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
       "requires": {
-        "restore-cursor": "2.0.0"
+        "restore-cursor": "^2.0.0"
       }
     },
     "cli-width": {
@@ -3546,9 +3547,9 @@
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
       "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
       "requires": {
-        "string-width": "1.0.2",
-        "strip-ansi": "3.0.1",
-        "wrap-ansi": "2.1.0"
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wrap-ansi": "^2.0.0"
       },
       "dependencies": {
         "ansi-regex": {
@@ -3561,7 +3562,7 @@
           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
           "requires": {
-            "number-is-nan": "1.0.1"
+            "number-is-nan": "^1.0.0"
           }
         },
         "string-width": {
@@ -3569,9 +3570,9 @@
           "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
           "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
-            "strip-ansi": "3.0.1"
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
           }
         },
         "strip-ansi": {
@@ -3579,7 +3580,7 @@
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         }
       }
@@ -3594,9 +3595,9 @@
       "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
       "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
       "requires": {
-        "is-plain-object": "2.0.4",
-        "kind-of": "6.0.2",
-        "shallow-clone": "3.0.1"
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.2",
+        "shallow-clone": "^3.0.0"
       }
     },
     "co": {
@@ -3611,7 +3612,7 @@
       "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
       "dev": true,
       "requires": {
-        "q": "1.5.1"
+        "q": "^1.1.2"
       }
     },
     "code-point-at": {
@@ -3625,8 +3626,8 @@
       "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
       "dev": true,
       "requires": {
-        "map-visit": "1.0.0",
-        "object-visit": "1.0.1"
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
       }
     },
     "color": {
@@ -3635,9 +3636,9 @@
       "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
       "dev": true,
       "requires": {
-        "clone": "1.0.4",
-        "color-convert": "1.9.3",
-        "color-string": "0.3.0"
+        "clone": "^1.0.2",
+        "color-convert": "^1.3.0",
+        "color-string": "^0.3.0"
       },
       "dependencies": {
         "clone": {
@@ -3667,7 +3668,7 @@
       "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
       "dev": true,
       "requires": {
-        "color-name": "1.1.3"
+        "color-name": "^1.0.0"
       }
     },
     "colormin": {
@@ -3676,9 +3677,9 @@
       "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
       "dev": true,
       "requires": {
-        "color": "0.11.4",
+        "color": "^0.11.0",
         "css-color-names": "0.0.4",
-        "has": "1.0.3"
+        "has": "^1.0.1"
       }
     },
     "colors": {
@@ -3692,7 +3693,7 @@
       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
       "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
       "requires": {
-        "delayed-stream": "1.0.0"
+        "delayed-stream": "~1.0.0"
       }
     },
     "commander": {
@@ -3717,7 +3718,7 @@
       "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=",
       "dev": true,
       "requires": {
-        "arity-n": "1.0.4"
+        "arity-n": "^1.0.4"
       }
     },
     "compressible": {
@@ -3726,7 +3727,7 @@
       "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==",
       "dev": true,
       "requires": {
-        "mime-db": "1.40.0"
+        "mime-db": ">= 1.40.0 < 2"
       }
     },
     "compression": {
@@ -3735,13 +3736,13 @@
       "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
       "dev": true,
       "requires": {
-        "accepts": "1.3.7",
+        "accepts": "~1.3.5",
         "bytes": "3.0.0",
-        "compressible": "2.0.17",
+        "compressible": "~2.0.16",
         "debug": "2.6.9",
-        "on-headers": "1.0.2",
+        "on-headers": "~1.0.2",
         "safe-buffer": "5.1.2",
-        "vary": "1.1.2"
+        "vary": "~1.1.2"
       },
       "dependencies": {
         "debug": {
@@ -3777,10 +3778,10 @@
       "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
       "dev": true,
       "requires": {
-        "buffer-from": "1.1.1",
-        "inherits": "2.0.4",
-        "readable-stream": "2.3.6",
-        "typedarray": "0.0.6"
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
       }
     },
     "config": {
@@ -3788,7 +3789,7 @@
       "resolved": "https://registry.npmjs.org/config/-/config-1.31.0.tgz",
       "integrity": "sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA==",
       "requires": {
-        "json5": "1.0.1"
+        "json5": "^1.0.1"
       }
     },
     "confusing-browser-globals": {
@@ -3807,9 +3808,9 @@
       "resolved": "https://registry.npmjs.org/connected-react-router/-/connected-react-router-6.5.2.tgz",
       "integrity": "sha512-qzsLPZCofSI80fwy+HgxtEgSGS4ndYUUZAWaw1dqaOGPLKX/FVwIOEb7q+hjHdnZ4v5pKZcNv5GG4urjujIoyA==",
       "requires": {
-        "immutable": "3.8.2",
-        "prop-types": "15.7.2",
-        "seamless-immutable": "7.1.4"
+        "immutable": "^3.8.1",
+        "prop-types": "^15.7.2",
+        "seamless-immutable": "^7.1.3"
       }
     },
     "console-browserify": {
@@ -3817,7 +3818,7 @@
       "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
       "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
       "requires": {
-        "date-now": "0.1.4"
+        "date-now": "^0.1.4"
       }
     },
     "console-control-strings": {
@@ -3864,7 +3865,7 @@
       "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
       "dev": true,
       "requires": {
-        "safe-buffer": "5.1.2"
+        "safe-buffer": "~5.1.1"
       },
       "dependencies": {
         "safe-buffer": {
@@ -3893,12 +3894,12 @@
       "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
       "dev": true,
       "requires": {
-        "aproba": "1.2.0",
-        "fs-write-stream-atomic": "1.0.10",
-        "iferr": "0.1.5",
-        "mkdirp": "0.5.1",
-        "rimraf": "2.7.1",
-        "run-queue": "1.0.3"
+        "aproba": "^1.1.1",
+        "fs-write-stream-atomic": "^1.0.8",
+        "iferr": "^0.1.5",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.0"
       }
     },
     "copy-descriptor": {
@@ -3918,8 +3919,8 @@
       "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==",
       "dev": true,
       "requires": {
-        "browserslist": "4.7.0",
-        "semver": "6.3.0"
+        "browserslist": "^4.6.6",
+        "semver": "^6.3.0"
       },
       "dependencies": {
         "semver": {
@@ -3941,10 +3942,10 @@
       "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
       "dev": true,
       "requires": {
-        "import-fresh": "2.0.0",
-        "is-directory": "0.3.1",
-        "js-yaml": "3.13.1",
-        "parse-json": "4.0.0"
+        "import-fresh": "^2.0.0",
+        "is-directory": "^0.3.1",
+        "js-yaml": "^3.13.1",
+        "parse-json": "^4.0.0"
       },
       "dependencies": {
         "import-fresh": {
@@ -3953,8 +3954,8 @@
           "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
           "dev": true,
           "requires": {
-            "caller-path": "2.0.0",
-            "resolve-from": "3.0.0"
+            "caller-path": "^2.0.0",
+            "resolve-from": "^3.0.0"
           }
         },
         "parse-json": {
@@ -3963,8 +3964,8 @@
           "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
           "dev": true,
           "requires": {
-            "error-ex": "1.3.2",
-            "json-parse-better-errors": "1.0.2"
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
           }
         },
         "resolve-from": {
@@ -3980,8 +3981,8 @@
       "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
       "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
       "requires": {
-        "bn.js": "4.11.8",
-        "elliptic": "6.5.1"
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.0.0"
       }
     },
     "create-hash": {
@@ -3989,11 +3990,11 @@
       "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
       "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
       "requires": {
-        "cipher-base": "1.0.4",
-        "inherits": "2.0.4",
-        "md5.js": "1.3.5",
-        "ripemd160": "2.0.2",
-        "sha.js": "2.4.11"
+        "cipher-base": "^1.0.1",
+        "inherits": "^2.0.1",
+        "md5.js": "^1.3.4",
+        "ripemd160": "^2.0.1",
+        "sha.js": "^2.4.0"
       }
     },
     "create-hmac": {
@@ -4001,12 +4002,12 @@
       "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
       "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
       "requires": {
-        "cipher-base": "1.0.4",
-        "create-hash": "1.2.0",
-        "inherits": "2.0.4",
-        "ripemd160": "2.0.2",
-        "safe-buffer": "5.2.0",
-        "sha.js": "2.4.11"
+        "cipher-base": "^1.0.3",
+        "create-hash": "^1.1.0",
+        "inherits": "^2.0.1",
+        "ripemd160": "^2.0.0",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
       }
     },
     "cross-spawn": {
@@ -4014,11 +4015,11 @@
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
       "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
       "requires": {
-        "nice-try": "1.0.5",
-        "path-key": "2.0.1",
-        "semver": "5.5.0",
-        "shebang-command": "1.2.0",
-        "which": "1.3.1"
+        "nice-try": "^1.0.4",
+        "path-key": "^2.0.1",
+        "semver": "^5.5.0",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
       }
     },
     "cryptiles": {
@@ -4027,7 +4028,7 @@
       "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
       "optional": true,
       "requires": {
-        "boom": "2.10.1"
+        "boom": "2.x.x"
       }
     },
     "crypto-browserify": {
@@ -4035,17 +4036,17 @@
       "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
       "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
       "requires": {
-        "browserify-cipher": "1.0.1",
-        "browserify-sign": "4.0.4",
-        "create-ecdh": "4.0.3",
-        "create-hash": "1.2.0",
-        "create-hmac": "1.1.7",
-        "diffie-hellman": "5.0.3",
-        "inherits": "2.0.4",
-        "pbkdf2": "3.0.17",
-        "public-encrypt": "4.0.3",
-        "randombytes": "2.1.0",
-        "randomfill": "1.0.4"
+        "browserify-cipher": "^1.0.0",
+        "browserify-sign": "^4.0.0",
+        "create-ecdh": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.0",
+        "diffie-hellman": "^5.0.0",
+        "inherits": "^2.0.1",
+        "pbkdf2": "^3.0.3",
+        "public-encrypt": "^4.0.0",
+        "randombytes": "^2.0.0",
+        "randomfill": "^1.0.3"
       }
     },
     "css": {
@@ -4054,10 +4055,10 @@
       "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.4",
-        "source-map": "0.6.1",
-        "source-map-resolve": "0.5.2",
-        "urix": "0.1.0"
+        "inherits": "^2.0.3",
+        "source-map": "^0.6.1",
+        "source-map-resolve": "^0.5.2",
+        "urix": "^0.1.0"
       }
     },
     "css-color-names": {
@@ -4072,8 +4073,8 @@
       "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
       "dev": true,
       "requires": {
-        "postcss": "7.0.18",
-        "timsort": "0.3.0"
+        "postcss": "^7.0.1",
+        "timsort": "^0.3.0"
       },
       "dependencies": {
         "postcss": {
@@ -4082,9 +4083,9 @@
           "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "6.1.0"
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
           }
         },
         "supports-color": {
@@ -4093,7 +4094,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
@@ -4103,8 +4104,8 @@
       "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz",
       "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==",
       "requires": {
-        "hyphenate-style-name": "1.0.3",
-        "isobject": "3.0.1"
+        "hyphenate-style-name": "^1.0.2",
+        "isobject": "^3.0.1"
       }
     },
     "css-loader": {
@@ -4113,20 +4114,20 @@
       "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==",
       "dev": true,
       "requires": {
-        "babel-code-frame": "6.26.0",
-        "css-selector-tokenizer": "0.7.1",
-        "cssnano": "3.10.0",
-        "icss-utils": "2.1.0",
-        "loader-utils": "1.2.3",
-        "lodash.camelcase": "4.3.0",
-        "object-assign": "4.1.1",
-        "postcss": "5.2.18",
-        "postcss-modules-extract-imports": "1.2.1",
-        "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.1",
-        "source-list-map": "2.0.1"
+        "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": {
@@ -4135,10 +4136,10 @@
       "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
       "dev": true,
       "requires": {
-        "boolbase": "1.0.0",
-        "css-what": "2.1.3",
+        "boolbase": "~1.0.0",
+        "css-what": "2.1",
         "domutils": "1.5.1",
-        "nth-check": "1.0.2"
+        "nth-check": "~1.0.1"
       }
     },
     "css-select-base-adapter": {
@@ -4153,9 +4154,9 @@
       "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==",
       "dev": true,
       "requires": {
-        "cssesc": "0.1.0",
-        "fastparse": "1.1.2",
-        "regexpu-core": "1.0.0"
+        "cssesc": "^0.1.0",
+        "fastparse": "^1.1.1",
+        "regexpu-core": "^1.0.0"
       },
       "dependencies": {
         "jsesc": {
@@ -4170,9 +4171,9 @@
           "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
           "dev": true,
           "requires": {
-            "regenerate": "1.4.0",
-            "regjsgen": "0.2.0",
-            "regjsparser": "0.1.5"
+            "regenerate": "^1.2.1",
+            "regjsgen": "^0.2.0",
+            "regjsparser": "^0.1.4"
           }
         },
         "regjsgen": {
@@ -4187,7 +4188,7 @@
           "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
           "dev": true,
           "requires": {
-            "jsesc": "0.5.0"
+            "jsesc": "~0.5.0"
           }
         }
       }
@@ -4199,7 +4200,7 @@
       "dev": true,
       "requires": {
         "mdn-data": "2.0.4",
-        "source-map": "0.5.7"
+        "source-map": "^0.5.3"
       },
       "dependencies": {
         "source-map": {
@@ -4234,38 +4235,38 @@
       "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
       "dev": true,
       "requires": {
-        "autoprefixer": "6.7.7",
-        "decamelize": "1.2.0",
-        "defined": "1.0.0",
-        "has": "1.0.3",
-        "object-assign": "4.1.1",
-        "postcss": "5.2.18",
-        "postcss-calc": "5.3.1",
-        "postcss-colormin": "2.2.2",
-        "postcss-convert-values": "2.6.1",
-        "postcss-discard-comments": "2.0.4",
-        "postcss-discard-duplicates": "2.1.0",
-        "postcss-discard-empty": "2.1.0",
-        "postcss-discard-overridden": "0.1.1",
-        "postcss-discard-unused": "2.2.3",
-        "postcss-filter-plugins": "2.0.3",
-        "postcss-merge-idents": "2.1.7",
-        "postcss-merge-longhand": "2.0.2",
-        "postcss-merge-rules": "2.1.2",
-        "postcss-minify-font-values": "1.0.5",
-        "postcss-minify-gradients": "1.0.5",
-        "postcss-minify-params": "1.2.2",
-        "postcss-minify-selectors": "2.1.1",
-        "postcss-normalize-charset": "1.1.1",
-        "postcss-normalize-url": "3.0.8",
-        "postcss-ordered-values": "2.2.3",
-        "postcss-reduce-idents": "2.4.0",
-        "postcss-reduce-initial": "1.0.1",
-        "postcss-reduce-transforms": "1.0.4",
-        "postcss-svgo": "2.1.6",
-        "postcss-unique-selectors": "2.0.2",
-        "postcss-value-parser": "3.3.1",
-        "postcss-zindex": "2.2.0"
+        "autoprefixer": "^6.3.1",
+        "decamelize": "^1.1.2",
+        "defined": "^1.0.0",
+        "has": "^1.0.1",
+        "object-assign": "^4.0.1",
+        "postcss": "^5.0.14",
+        "postcss-calc": "^5.2.0",
+        "postcss-colormin": "^2.1.8",
+        "postcss-convert-values": "^2.3.4",
+        "postcss-discard-comments": "^2.0.4",
+        "postcss-discard-duplicates": "^2.0.1",
+        "postcss-discard-empty": "^2.0.1",
+        "postcss-discard-overridden": "^0.1.1",
+        "postcss-discard-unused": "^2.2.1",
+        "postcss-filter-plugins": "^2.0.0",
+        "postcss-merge-idents": "^2.1.5",
+        "postcss-merge-longhand": "^2.0.1",
+        "postcss-merge-rules": "^2.0.3",
+        "postcss-minify-font-values": "^1.0.2",
+        "postcss-minify-gradients": "^1.0.1",
+        "postcss-minify-params": "^1.0.4",
+        "postcss-minify-selectors": "^2.0.4",
+        "postcss-normalize-charset": "^1.1.0",
+        "postcss-normalize-url": "^3.0.7",
+        "postcss-ordered-values": "^2.1.0",
+        "postcss-reduce-idents": "^2.2.2",
+        "postcss-reduce-initial": "^1.0.0",
+        "postcss-reduce-transforms": "^1.0.3",
+        "postcss-svgo": "^2.1.1",
+        "postcss-unique-selectors": "^2.0.2",
+        "postcss-value-parser": "^3.2.3",
+        "postcss-zindex": "^2.0.1"
       }
     },
     "cssnano-preset-default": {
@@ -4274,36 +4275,36 @@
       "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
       "dev": true,
       "requires": {
-        "css-declaration-sorter": "4.0.1",
-        "cssnano-util-raw-cache": "4.0.1",
-        "postcss": "7.0.18",
-        "postcss-calc": "7.0.1",
-        "postcss-colormin": "4.0.3",
-        "postcss-convert-values": "4.0.1",
-        "postcss-discard-comments": "4.0.2",
-        "postcss-discard-duplicates": "4.0.2",
-        "postcss-discard-empty": "4.0.1",
-        "postcss-discard-overridden": "4.0.1",
-        "postcss-merge-longhand": "4.0.11",
-        "postcss-merge-rules": "4.0.3",
-        "postcss-minify-font-values": "4.0.2",
-        "postcss-minify-gradients": "4.0.2",
-        "postcss-minify-params": "4.0.2",
-        "postcss-minify-selectors": "4.0.2",
-        "postcss-normalize-charset": "4.0.1",
-        "postcss-normalize-display-values": "4.0.2",
-        "postcss-normalize-positions": "4.0.2",
-        "postcss-normalize-repeat-style": "4.0.2",
-        "postcss-normalize-string": "4.0.2",
-        "postcss-normalize-timing-functions": "4.0.2",
-        "postcss-normalize-unicode": "4.0.1",
-        "postcss-normalize-url": "4.0.1",
-        "postcss-normalize-whitespace": "4.0.2",
-        "postcss-ordered-values": "4.1.2",
-        "postcss-reduce-initial": "4.0.3",
-        "postcss-reduce-transforms": "4.0.2",
-        "postcss-svgo": "4.0.2",
-        "postcss-unique-selectors": "4.0.1"
+        "css-declaration-sorter": "^4.0.1",
+        "cssnano-util-raw-cache": "^4.0.1",
+        "postcss": "^7.0.0",
+        "postcss-calc": "^7.0.1",
+        "postcss-colormin": "^4.0.3",
+        "postcss-convert-values": "^4.0.1",
+        "postcss-discard-comments": "^4.0.2",
+        "postcss-discard-duplicates": "^4.0.2",
+        "postcss-discard-empty": "^4.0.1",
+        "postcss-discard-overridden": "^4.0.1",
+        "postcss-merge-longhand": "^4.0.11",
+        "postcss-merge-rules": "^4.0.3",
+        "postcss-minify-font-values": "^4.0.2",
+        "postcss-minify-gradients": "^4.0.2",
+        "postcss-minify-params": "^4.0.2",
+        "postcss-minify-selectors": "^4.0.2",
+        "postcss-normalize-charset": "^4.0.1",
+        "postcss-normalize-display-values": "^4.0.2",
+        "postcss-normalize-positions": "^4.0.2",
+        "postcss-normalize-repeat-style": "^4.0.2",
+        "postcss-normalize-string": "^4.0.2",
+        "postcss-normalize-timing-functions": "^4.0.2",
+        "postcss-normalize-unicode": "^4.0.1",
+        "postcss-normalize-url": "^4.0.1",
+        "postcss-normalize-whitespace": "^4.0.2",
+        "postcss-ordered-values": "^4.1.2",
+        "postcss-reduce-initial": "^4.0.3",
+        "postcss-reduce-transforms": "^4.0.2",
+        "postcss-svgo": "^4.0.2",
+        "postcss-unique-selectors": "^4.0.1"
       },
       "dependencies": {
         "caniuse-api": {
@@ -4312,10 +4313,10 @@
           "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
           "dev": true,
           "requires": {
-            "browserslist": "4.7.0",
-            "caniuse-lite": "1.0.30000999",
-            "lodash.memoize": "4.1.2",
-            "lodash.uniq": "4.5.0"
+            "browserslist": "^4.0.0",
+            "caniuse-lite": "^1.0.0",
+            "lodash.memoize": "^4.1.2",
+            "lodash.uniq": "^4.5.0"
           }
         },
         "coa": {
@@ -4324,9 +4325,9 @@
           "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
           "dev": true,
           "requires": {
-            "@types/q": "1.5.2",
-            "chalk": "2.4.2",
-            "q": "1.5.1"
+            "@types/q": "^1.5.1",
+            "chalk": "^2.4.1",
+            "q": "^1.1.2"
           }
         },
         "color": {
@@ -4335,8 +4336,8 @@
           "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==",
           "dev": true,
           "requires": {
-            "color-convert": "1.9.3",
-            "color-string": "1.5.3"
+            "color-convert": "^1.9.1",
+            "color-string": "^1.5.2"
           }
         },
         "color-string": {
@@ -4345,8 +4346,8 @@
           "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
           "dev": true,
           "requires": {
-            "color-name": "1.1.3",
-            "simple-swizzle": "0.2.2"
+            "color-name": "^1.0.0",
+            "simple-swizzle": "^0.2.2"
           }
         },
         "css-select": {
@@ -4355,10 +4356,10 @@
           "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==",
           "dev": true,
           "requires": {
-            "boolbase": "1.0.0",
-            "css-what": "2.1.3",
-            "domutils": "1.7.0",
-            "nth-check": "1.0.2"
+            "boolbase": "^1.0.0",
+            "css-what": "^2.1.2",
+            "domutils": "^1.7.0",
+            "nth-check": "^1.0.2"
           }
         },
         "cssesc": {
@@ -4382,8 +4383,8 @@
               "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==",
               "dev": true,
               "requires": {
-                "mdn-data": "1.1.4",
-                "source-map": "0.5.7"
+                "mdn-data": "~1.1.0",
+                "source-map": "^0.5.3"
               }
             },
             "source-map": {
@@ -4400,8 +4401,8 @@
           "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
           "dev": true,
           "requires": {
-            "dom-serializer": "0.2.1",
-            "domelementtype": "1.3.1"
+            "dom-serializer": "0",
+            "domelementtype": "1"
           }
         },
         "is-svg": {
@@ -4410,7 +4411,7 @@
           "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
           "dev": true,
           "requires": {
-            "html-comment-regex": "1.1.2"
+            "html-comment-regex": "^1.1.0"
           }
         },
         "mdn-data": {
@@ -4431,9 +4432,9 @@
           "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "6.1.0"
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
           }
         },
         "postcss-calc": {
@@ -4442,10 +4443,10 @@
           "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==",
           "dev": true,
           "requires": {
-            "css-unit-converter": "1.1.1",
-            "postcss": "7.0.18",
-            "postcss-selector-parser": "5.0.0",
-            "postcss-value-parser": "3.3.1"
+            "css-unit-converter": "^1.1.1",
+            "postcss": "^7.0.5",
+            "postcss-selector-parser": "^5.0.0-rc.4",
+            "postcss-value-parser": "^3.3.1"
           }
         },
         "postcss-colormin": {
@@ -4454,11 +4455,11 @@
           "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
           "dev": true,
           "requires": {
-            "browserslist": "4.7.0",
-            "color": "3.1.2",
-            "has": "1.0.3",
-            "postcss": "7.0.18",
-            "postcss-value-parser": "3.3.1"
+            "browserslist": "^4.0.0",
+            "color": "^3.0.0",
+            "has": "^1.0.0",
+            "postcss": "^7.0.0",
+            "postcss-value-parser": "^3.0.0"
           }
         },
         "postcss-convert-values": {
@@ -4467,8 +4468,8 @@
           "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
           "dev": true,
           "requires": {
-            "postcss": "7.0.18",
-            "postcss-value-parser": "3.3.1"
+            "postcss": "^7.0.0",
+            "postcss-value-parser": "^3.0.0"
           }
         },
         "postcss-discard-comments": {
@@ -4477,7 +4478,7 @@
           "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
           "dev": true,
           "requires": {
-            "postcss": "7.0.18"
+            "postcss": "^7.0.0"
           }
         },
         "postcss-discard-duplicates": {
@@ -4486,7 +4487,7 @@
           "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
           "dev": true,
           "requires": {
-            "postcss": "7.0.18"
+            "postcss": "^7.0.0"
           }
         },
         "postcss-discard-empty": {
@@ -4495,7 +4496,7 @@
           "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
           "dev": true,
           "requires": {
-            "postcss": "7.0.18"
+            "postcss": "^7.0.0"
           }
         },
         "postcss-discard-overridden": {
@@ -4504,7 +4505,7 @@
           "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
           "dev": true,
           "requires": {
-            "postcss": "7.0.18"
+            "postcss": "^7.0.0"
           }
         },
         "postcss-merge-longhand": {
@@ -4514,9 +4515,9 @@
           "dev": true,
           "requires": {
             "css-color-names": "0.0.4",
-            "postcss": "7.0.18",
-            "postcss-value-parser": "3.3.1",
-            "stylehacks": "4.0.3"
+            "postcss": "^7.0.0",
+            "postcss-value-parser": "^3.0.0",
+            "stylehacks": "^4.0.0"
           }
         },
         "postcss-merge-rules": {
@@ -4525,12 +4526,12 @@
           "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
           "dev": true,
           "requires": {
-            "browserslist": "4.7.0",
-            "caniuse-api": "3.0.0",
-            "cssnano-util-same-parent": "4.0.1",
-            "postcss": "7.0.18",
-            "postcss-selector-parser": "3.1.1",
-            "vendors": "1.0.3"
+            "browserslist": "^4.0.0",
+            "caniuse-api": "^3.0.0",
+            "cssnano-util-same-parent": "^4.0.0",
+            "postcss": "^7.0.0",
+            "postcss-selector-parser": "^3.0.0",
+            "vendors": "^1.0.0"
           },
           "dependencies": {
             "postcss-selector-parser": {
@@ -4539,9 +4540,9 @@
               "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
               "dev": true,
               "requires": {
-                "dot-prop": "4.2.0",
-                "indexes-of": "1.0.1",
-                "uniq": "1.0.1"
+                "dot-prop": "^4.1.1",
+                "indexes-of": "^1.0.1",
+                "uniq": "^1.0.1"
               }
             }
           }
@@ -4552,8 +4553,8 @@
           "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
           "dev": true,
           "requires": {
-            "postcss": "7.0.18",
-            "postcss-value-parser": "3.3.1"
+            "postcss": "^7.0.0",
+            "postcss-value-parser": "^3.0.0"
           }
         },
         "postcss-minify-gradients": {
@@ -4562,10 +4563,10 @@
           "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
           "dev": true,
           "requires": {
-            "cssnano-util-get-arguments": "4.0.0",
-            "is-color-stop": "1.1.0",
-            "postcss": "7.0.18",
-            "postcss-value-parser": "3.3.1"
+            "cssnano-util-get-arguments": "^4.0.0",
+            "is-color-stop": "^1.0.0",
+            "postcss": "^7.0.0",
+            "postcss-value-parser": "^3.0.0"
           }
         },
         "postcss-minify-params": {
@@ -4574,12 +4575,12 @@
           "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
           "dev": true,
           "requires": {
-            "alphanum-sort": "1.0.2",
-            "browserslist": "4.7.0",
-            "cssnano-util-get-arguments": "4.0.0",
-            "postcss": "7.0.18",
-            "postcss-value-parser": "3.3.1",
-            "uniqs": "2.0.0"
+            "alphanum-sort": "^1.0.0",
+            "browserslist": "^4.0.0",
+            "cssnano-util-get-arguments": "^4.0.0",
+            "postcss": "^7.0.0",
+            "postcss-value-parser": "^3.0.0",
+            "uniqs": "^2.0.0"
           }
         },
         "postcss-minify-selectors": {
@@ -4588,10 +4589,10 @@
           "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
           "dev": true,
           "requires": {
-            "alphanum-sort": "1.0.2",
-            "has": "1.0.3",
-            "postcss": "7.0.18",
-            "postcss-selector-parser": "3.1.1"
+            "alphanum-sort": "^1.0.0",
+            "has": "^1.0.0",
+            "postcss": "^7.0.0",
+            "postcss-selector-parser": "^3.0.0"
           },
           "dependencies": {
             "postcss-selector-parser": {
@@ -4600,9 +4601,9 @@
               "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
               "dev": true,
               "requires": {
-                "dot-prop": "4.2.0",
-                "indexes-of": "1.0.1",
-                "uniq": "1.0.1"
+                "dot-prop": "^4.1.1",
+                "indexes-of": "^1.0.1",
+                "uniq": "^1.0.1"
               }
             }
           }
@@ -4613,7 +4614,7 @@
           "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
           "dev": true,
           "requires": {
-            "postcss": "7.0.18"
+            "postcss": "^7.0.0"
           }
         },
         "postcss-normalize-url": {
@@ -4622,10 +4623,10 @@
           "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
           "dev": true,
           "requires": {
-            "is-absolute-url": "2.1.0",
-            "normalize-url": "3.3.0",
-            "postcss": "7.0.18",
-            "postcss-value-parser": "3.3.1"
+            "is-absolute-url": "^2.0.0",
+            "normalize-url": "^3.0.0",
+            "postcss": "^7.0.0",
+            "postcss-value-parser": "^3.0.0"
           }
         },
         "postcss-ordered-values": {
@@ -4634,9 +4635,9 @@
           "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
           "dev": true,
           "requires": {
-            "cssnano-util-get-arguments": "4.0.0",
-            "postcss": "7.0.18",
-            "postcss-value-parser": "3.3.1"
+            "cssnano-util-get-arguments": "^4.0.0",
+            "postcss": "^7.0.0",
+            "postcss-value-parser": "^3.0.0"
           }
         },
         "postcss-reduce-initial": {
@@ -4645,10 +4646,10 @@
           "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
           "dev": true,
           "requires": {
-            "browserslist": "4.7.0",
-            "caniuse-api": "3.0.0",
-            "has": "1.0.3",
-            "postcss": "7.0.18"
+            "browserslist": "^4.0.0",
+            "caniuse-api": "^3.0.0",
+            "has": "^1.0.0",
+            "postcss": "^7.0.0"
           }
         },
         "postcss-reduce-transforms": {
@@ -4657,10 +4658,10 @@
           "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
           "dev": true,
           "requires": {
-            "cssnano-util-get-match": "4.0.0",
-            "has": "1.0.3",
-            "postcss": "7.0.18",
-            "postcss-value-parser": "3.3.1"
+            "cssnano-util-get-match": "^4.0.0",
+            "has": "^1.0.0",
+            "postcss": "^7.0.0",
+            "postcss-value-parser": "^3.0.0"
           }
         },
         "postcss-selector-parser": {
@@ -4669,9 +4670,9 @@
           "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
           "dev": true,
           "requires": {
-            "cssesc": "2.0.0",
-            "indexes-of": "1.0.1",
-            "uniq": "1.0.1"
+            "cssesc": "^2.0.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
           }
         },
         "postcss-svgo": {
@@ -4680,10 +4681,10 @@
           "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
           "dev": true,
           "requires": {
-            "is-svg": "3.0.0",
-            "postcss": "7.0.18",
-            "postcss-value-parser": "3.3.1",
-            "svgo": "1.3.0"
+            "is-svg": "^3.0.0",
+            "postcss": "^7.0.0",
+            "postcss-value-parser": "^3.0.0",
+            "svgo": "^1.0.0"
           }
         },
         "postcss-unique-selectors": {
@@ -4692,9 +4693,9 @@
           "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
           "dev": true,
           "requires": {
-            "alphanum-sort": "1.0.2",
-            "postcss": "7.0.18",
-            "uniqs": "2.0.0"
+            "alphanum-sort": "^1.0.0",
+            "postcss": "^7.0.0",
+            "uniqs": "^2.0.0"
           }
         },
         "supports-color": {
@@ -4703,7 +4704,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         },
         "svgo": {
@@ -4712,19 +4713,19 @@
           "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "coa": "2.0.2",
-            "css-select": "2.0.2",
-            "css-select-base-adapter": "0.1.1",
+            "chalk": "^2.4.1",
+            "coa": "^2.0.2",
+            "css-select": "^2.0.0",
+            "css-select-base-adapter": "^0.1.1",
             "css-tree": "1.0.0-alpha.33",
-            "csso": "3.5.1",
-            "js-yaml": "3.13.1",
-            "mkdirp": "0.5.1",
-            "object.values": "1.1.0",
-            "sax": "1.2.4",
-            "stable": "0.1.8",
-            "unquote": "1.1.1",
-            "util.promisify": "1.0.0"
+            "csso": "^3.5.1",
+            "js-yaml": "^3.13.1",
+            "mkdirp": "~0.5.1",
+            "object.values": "^1.1.0",
+            "sax": "~1.2.4",
+            "stable": "^0.1.8",
+            "unquote": "~1.1.1",
+            "util.promisify": "~1.0.0"
           }
         }
       }
@@ -4747,7 +4748,7 @@
       "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
       "dev": true,
       "requires": {
-        "postcss": "7.0.18"
+        "postcss": "^7.0.0"
       },
       "dependencies": {
         "postcss": {
@@ -4756,9 +4757,9 @@
           "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "6.1.0"
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
           }
         },
         "supports-color": {
@@ -4767,7 +4768,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
@@ -4784,8 +4785,8 @@
       "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
       "dev": true,
       "requires": {
-        "clap": "1.2.3",
-        "source-map": "0.5.7"
+        "clap": "^1.0.9",
+        "source-map": "^0.5.3"
       },
       "dependencies": {
         "source-map": {
@@ -4806,7 +4807,7 @@
       "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
       "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
       "requires": {
-        "array-find-index": "1.0.2"
+        "array-find-index": "^1.0.1"
       }
     },
     "cyclist": {
@@ -4821,8 +4822,8 @@
       "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
       "dev": true,
       "requires": {
-        "es5-ext": "0.10.51",
-        "type": "1.2.0"
+        "es5-ext": "^0.10.50",
+        "type": "^1.0.1"
       }
     },
     "damerau-levenshtein": {
@@ -4835,7 +4836,7 @@
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
       "requires": {
-        "assert-plus": "1.0.0"
+        "assert-plus": "^1.0.0"
       }
     },
     "date-fns": {
@@ -4873,12 +4874,12 @@
       "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==",
       "dev": true,
       "requires": {
-        "is-arguments": "1.0.4",
-        "is-date-object": "1.0.1",
-        "is-regex": "1.0.4",
-        "object-is": "1.0.1",
-        "object-keys": "1.1.1",
-        "regexp.prototype.flags": "1.2.0"
+        "is-arguments": "^1.0.4",
+        "is-date-object": "^1.0.1",
+        "is-regex": "^1.0.4",
+        "object-is": "^1.0.1",
+        "object-keys": "^1.1.1",
+        "regexp.prototype.flags": "^1.2.0"
       }
     },
     "deep-is": {
@@ -4892,8 +4893,8 @@
       "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
       "dev": true,
       "requires": {
-        "execa": "1.0.0",
-        "ip-regex": "2.1.0"
+        "execa": "^1.0.0",
+        "ip-regex": "^2.1.0"
       }
     },
     "define-properties": {
@@ -4901,7 +4902,7 @@
       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
       "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
       "requires": {
-        "object-keys": "1.1.1"
+        "object-keys": "^1.0.12"
       }
     },
     "define-property": {
@@ -4910,8 +4911,8 @@
       "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
       "dev": true,
       "requires": {
-        "is-descriptor": "1.0.2",
-        "isobject": "3.0.1"
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
       },
       "dependencies": {
         "is-accessor-descriptor": {
@@ -4920,7 +4921,7 @@
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
@@ -4929,7 +4930,7 @@
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
@@ -4938,9 +4939,9 @@
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         }
       }
@@ -4957,13 +4958,13 @@
       "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
       "dev": true,
       "requires": {
-        "@types/glob": "7.1.1",
-        "globby": "6.1.0",
-        "is-path-cwd": "2.2.0",
-        "is-path-in-cwd": "2.1.0",
-        "p-map": "2.1.0",
-        "pify": "4.0.1",
-        "rimraf": "2.7.1"
+        "@types/glob": "^7.1.1",
+        "globby": "^6.1.0",
+        "is-path-cwd": "^2.0.0",
+        "is-path-in-cwd": "^2.0.0",
+        "p-map": "^2.0.0",
+        "pify": "^4.0.1",
+        "rimraf": "^2.6.3"
       },
       "dependencies": {
         "pify": {
@@ -4994,12 +4995,13 @@
       "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
       "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
       "requires": {
-        "inherits": "2.0.4",
-        "minimalistic-assert": "1.0.1"
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
       }
     },
     "desandro-get-style-property": {
-      "version": "github:eiriklv/get-style-property#a5a74ad48d96c7d5ddcf652e9fa5d4283af37823"
+      "version": "github:eiriklv/get-style-property#a5a74ad48d96c7d5ddcf652e9fa5d4283af37823",
+      "from": "github:eiriklv/get-style-property"
     },
     "destroy": {
       "version": "1.0.4",
@@ -5019,7 +5021,7 @@
       "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
       "dev": true,
       "requires": {
-        "repeating": "2.0.1"
+        "repeating": "^2.0.0"
       }
     },
     "detect-node": {
@@ -5038,9 +5040,9 @@
       "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
       "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
       "requires": {
-        "bn.js": "4.11.8",
-        "miller-rabin": "4.0.1",
-        "randombytes": "2.1.0"
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
       }
     },
     "dns-equal": {
@@ -5055,8 +5057,8 @@
       "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
       "dev": true,
       "requires": {
-        "ip": "1.1.5",
-        "safe-buffer": "5.2.0"
+        "ip": "^1.1.0",
+        "safe-buffer": "^5.0.1"
       }
     },
     "dns-txt": {
@@ -5065,17 +5067,19 @@
       "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
       "dev": true,
       "requires": {
-        "buffer-indexof": "1.1.1"
+        "buffer-indexof": "^1.0.0"
       }
     },
     "doc-ready": {
       "version": "github:eiriklv/doc-ready#31c2481101af5dab33311fea4c7fc684b58fa8ad",
+      "from": "github:eiriklv/doc-ready",
       "requires": {
         "eventie": "github:eiriklv/eventie#c9d290c6aa57712257dc8c0b6bf21c9374190a3c"
       },
       "dependencies": {
         "eventie": {
-          "version": "github:eiriklv/eventie#c9d290c6aa57712257dc8c0b6bf21c9374190a3c"
+          "version": "github:eiriklv/eventie#c9d290c6aa57712257dc8c0b6bf21c9374190a3c",
+          "from": "github:eiriklv/eventie"
         }
       }
     },
@@ -5084,7 +5088,7 @@
       "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
       "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
       "requires": {
-        "esutils": "2.0.3"
+        "esutils": "^2.0.2"
       }
     },
     "dom-converter": {
@@ -5093,7 +5097,7 @@
       "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
       "dev": true,
       "requires": {
-        "utila": "0.4.0"
+        "utila": "~0.4"
       }
     },
     "dom-css": {
@@ -5111,7 +5115,7 @@
       "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
       "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
       "requires": {
-        "@babel/runtime": "7.6.3"
+        "@babel/runtime": "^7.1.2"
       }
     },
     "dom-serializer": {
@@ -5120,8 +5124,8 @@
       "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==",
       "dev": true,
       "requires": {
-        "domelementtype": "2.0.1",
-        "entities": "2.0.0"
+        "domelementtype": "^2.0.1",
+        "entities": "^2.0.0"
       },
       "dependencies": {
         "domelementtype": {
@@ -5154,7 +5158,7 @@
       "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
       "dev": true,
       "requires": {
-        "domelementtype": "1.3.1"
+        "domelementtype": "1"
       }
     },
     "domutils": {
@@ -5163,8 +5167,8 @@
       "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
       "dev": true,
       "requires": {
-        "dom-serializer": "0.2.1",
-        "domelementtype": "1.3.1"
+        "dom-serializer": "0",
+        "domelementtype": "1"
       }
     },
     "dot-prop": {
@@ -5173,7 +5177,7 @@
       "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
       "dev": true,
       "requires": {
-        "is-obj": "1.0.1"
+        "is-obj": "^1.0.0"
       }
     },
     "dotenv": {
@@ -5186,7 +5190,7 @@
       "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-1.0.2.tgz",
       "integrity": "sha512-iXFvHtXl/hZPiFj++1hBg4lbKwGM+t/GlvELDnRtOFdjXyWP7mubkVr+eZGWG62kdsbulXAef6v/j6kiWc/xGA==",
       "requires": {
-        "dotenv": "6.2.0"
+        "dotenv": "^6.2.0"
       },
       "dependencies": {
         "dotenv": {
@@ -5201,7 +5205,7 @@
       "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-1.7.0.tgz",
       "integrity": "sha512-wwNtOBW/6gLQSkb8p43y0Wts970A3xtNiG/mpwj9MLUhtPCQG6i+/DSXXoNN7fbPCU/vQ7JjwGmgOeGZSSZnsw==",
       "requires": {
-        "dotenv-defaults": "1.0.2"
+        "dotenv-defaults": "^1.0.2"
       }
     },
     "duplexify": {
@@ -5210,10 +5214,10 @@
       "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
       "dev": true,
       "requires": {
-        "end-of-stream": "1.4.4",
-        "inherits": "2.0.4",
-        "readable-stream": "2.3.6",
-        "stream-shift": "1.0.0"
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
       }
     },
     "easy-css-transform-builder": {
@@ -5221,7 +5225,7 @@
       "resolved": "https://registry.npmjs.org/easy-css-transform-builder/-/easy-css-transform-builder-0.0.2.tgz",
       "integrity": "sha1-pUFmenkZ4X9n2CsR08tV/dVDMCI=",
       "requires": {
-        "invariant": "2.2.4"
+        "invariant": "^2.2.2"
       }
     },
     "ecc-jsbn": {
@@ -5229,8 +5233,8 @@
       "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
       "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
       "requires": {
-        "jsbn": "0.1.1",
-        "safer-buffer": "2.1.2"
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
       }
     },
     "ee-first": {
@@ -5250,7 +5254,7 @@
       "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.1.15.tgz",
       "integrity": "sha512-16/5avDegXlUxytGgaumhjyQoM6hpp5j3+L79sYq5hlXfTNRy5WMMuTVWkZU3egp/CokCmTmvf18P3KeB57Iog==",
       "requires": {
-        "batch-processor": "1.0.0"
+        "batch-processor": "^1.0.0"
       }
     },
     "elliptic": {
@@ -5258,13 +5262,13 @@
       "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz",
       "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==",
       "requires": {
-        "bn.js": "4.11.8",
-        "brorand": "1.1.0",
-        "hash.js": "1.1.7",
-        "hmac-drbg": "1.0.1",
-        "inherits": "2.0.4",
-        "minimalistic-assert": "1.0.1",
-        "minimalistic-crypto-utils": "1.0.1"
+        "bn.js": "^4.4.0",
+        "brorand": "^1.0.1",
+        "hash.js": "^1.0.0",
+        "hmac-drbg": "^1.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.0"
       }
     },
     "emoji-regex": {
@@ -5289,7 +5293,7 @@
       "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
       "dev": true,
       "requires": {
-        "once": "1.4.0"
+        "once": "^1.4.0"
       }
     },
     "enhanced-resolve": {
@@ -5297,9 +5301,9 @@
       "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz",
       "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=",
       "requires": {
-        "graceful-fs": "4.2.2",
-        "memory-fs": "0.2.0",
-        "tapable": "0.1.10"
+        "graceful-fs": "^4.1.2",
+        "memory-fs": "^0.2.0",
+        "tapable": "^0.1.8"
       }
     },
     "entities": {
@@ -5313,7 +5317,7 @@
       "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
       "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
       "requires": {
-        "prr": "1.0.1"
+        "prr": "~1.0.1"
       }
     },
     "error-ex": {
@@ -5321,7 +5325,7 @@
       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
       "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
       "requires": {
-        "is-arrayish": "0.2.1"
+        "is-arrayish": "^0.2.1"
       }
     },
     "es-abstract": {
@@ -5329,16 +5333,16 @@
       "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz",
       "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==",
       "requires": {
-        "es-to-primitive": "1.2.0",
-        "function-bind": "1.1.1",
-        "has": "1.0.3",
-        "has-symbols": "1.0.0",
-        "is-callable": "1.1.4",
-        "is-regex": "1.0.4",
-        "object-inspect": "1.6.0",
-        "object-keys": "1.1.1",
-        "string.prototype.trimleft": "2.1.0",
-        "string.prototype.trimright": "2.1.0"
+        "es-to-primitive": "^1.2.0",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "has-symbols": "^1.0.0",
+        "is-callable": "^1.1.4",
+        "is-regex": "^1.0.4",
+        "object-inspect": "^1.6.0",
+        "object-keys": "^1.1.1",
+        "string.prototype.trimleft": "^2.1.0",
+        "string.prototype.trimright": "^2.1.0"
       }
     },
     "es-to-primitive": {
@@ -5346,9 +5350,9 @@
       "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
       "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
       "requires": {
-        "is-callable": "1.1.4",
-        "is-date-object": "1.0.1",
-        "is-symbol": "1.0.2"
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
       }
     },
     "es5-ext": {
@@ -5357,9 +5361,9 @@
       "integrity": "sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==",
       "dev": true,
       "requires": {
-        "es6-iterator": "2.0.3",
-        "es6-symbol": "3.1.2",
-        "next-tick": "1.0.0"
+        "es6-iterator": "~2.0.3",
+        "es6-symbol": "~3.1.1",
+        "next-tick": "^1.0.0"
       }
     },
     "es6-iterator": {
@@ -5368,9 +5372,9 @@
       "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
       "dev": true,
       "requires": {
-        "d": "1.0.1",
-        "es5-ext": "0.10.51",
-        "es6-symbol": "3.1.2"
+        "d": "1",
+        "es5-ext": "^0.10.35",
+        "es6-symbol": "^3.1.1"
       }
     },
     "es6-symbol": {
@@ -5379,8 +5383,8 @@
       "integrity": "sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==",
       "dev": true,
       "requires": {
-        "d": "1.0.1",
-        "es5-ext": "0.10.51"
+        "d": "^1.0.1",
+        "es5-ext": "^0.10.51"
       }
     },
     "escape-html": {
@@ -5399,42 +5403,42 @@
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
       "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
       "requires": {
-        "@babel/code-frame": "7.5.5",
-        "ajv": "6.10.2",
-        "chalk": "2.4.2",
-        "cross-spawn": "6.0.5",
-        "debug": "4.1.1",
-        "doctrine": "3.0.0",
-        "eslint-scope": "4.0.3",
-        "eslint-utils": "1.4.2",
-        "eslint-visitor-keys": "1.1.0",
-        "espree": "5.0.1",
-        "esquery": "1.0.1",
-        "esutils": "2.0.3",
-        "file-entry-cache": "5.0.1",
-        "functional-red-black-tree": "1.0.1",
-        "glob": "7.1.4",
-        "globals": "11.12.0",
-        "ignore": "4.0.6",
-        "import-fresh": "3.1.0",
-        "imurmurhash": "0.1.4",
-        "inquirer": "6.5.2",
-        "js-yaml": "3.13.1",
-        "json-stable-stringify-without-jsonify": "1.0.1",
-        "levn": "0.3.0",
-        "lodash": "4.17.15",
-        "minimatch": "3.0.4",
-        "mkdirp": "0.5.1",
-        "natural-compare": "1.4.0",
-        "optionator": "0.8.2",
-        "path-is-inside": "1.0.2",
-        "progress": "2.0.3",
-        "regexpp": "2.0.1",
-        "semver": "5.7.1",
-        "strip-ansi": "4.0.0",
-        "strip-json-comments": "2.0.1",
-        "table": "5.4.6",
-        "text-table": "0.2.0"
+        "@babel/code-frame": "^7.0.0",
+        "ajv": "^6.9.1",
+        "chalk": "^2.1.0",
+        "cross-spawn": "^6.0.5",
+        "debug": "^4.0.1",
+        "doctrine": "^3.0.0",
+        "eslint-scope": "^4.0.3",
+        "eslint-utils": "^1.3.1",
+        "eslint-visitor-keys": "^1.0.0",
+        "espree": "^5.0.1",
+        "esquery": "^1.0.1",
+        "esutils": "^2.0.2",
+        "file-entry-cache": "^5.0.1",
+        "functional-red-black-tree": "^1.0.1",
+        "glob": "^7.1.2",
+        "globals": "^11.7.0",
+        "ignore": "^4.0.6",
+        "import-fresh": "^3.0.0",
+        "imurmurhash": "^0.1.4",
+        "inquirer": "^6.2.2",
+        "js-yaml": "^3.13.0",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.3.0",
+        "lodash": "^4.17.11",
+        "minimatch": "^3.0.4",
+        "mkdirp": "^0.5.1",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.8.2",
+        "path-is-inside": "^1.0.2",
+        "progress": "^2.0.0",
+        "regexpp": "^2.0.1",
+        "semver": "^5.5.1",
+        "strip-ansi": "^4.0.0",
+        "strip-json-comments": "^2.0.1",
+        "table": "^5.2.3",
+        "text-table": "^0.2.0"
       },
       "dependencies": {
         "debug": {
@@ -5442,7 +5446,7 @@
           "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
           "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
           "requires": {
-            "ms": "2.1.2"
+            "ms": "^2.1.1"
           }
         },
         "ms": {
@@ -5462,9 +5466,9 @@
       "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-17.1.1.tgz",
       "integrity": "sha512-xCu//8a/aWqagKljt+1/qAM62BYZeNq04HmdevG5yUGWpja0I/xhqd6GdLRch5oetEGFiJAnvtGuTEAese53Qg==",
       "requires": {
-        "eslint-config-airbnb-base": "13.2.0",
-        "object.assign": "4.1.0",
-        "object.entries": "1.1.0"
+        "eslint-config-airbnb-base": "^13.2.0",
+        "object.assign": "^4.1.0",
+        "object.entries": "^1.1.0"
       }
     },
     "eslint-config-airbnb-base": {
@@ -5472,9 +5476,9 @@
       "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz",
       "integrity": "sha512-1mg/7eoB4AUeB0X1c/ho4vb2gYkNH8Trr/EgCT/aGmKhhG+F6vF5s8+iRBlWAzFIAphxIdp3YfEKgEl0f9Xg+w==",
       "requires": {
-        "confusing-browser-globals": "1.0.9",
-        "object.assign": "4.1.0",
-        "object.entries": "1.1.0"
+        "confusing-browser-globals": "^1.0.5",
+        "object.assign": "^4.1.0",
+        "object.entries": "^1.1.0"
       }
     },
     "eslint-config-prettier": {
@@ -5482,7 +5486,7 @@
       "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.4.0.tgz",
       "integrity": "sha512-YrKucoFdc7SEko5Sxe4r6ixqXPDP1tunGw91POeZTTRKItf/AMFYt/YLEQtZMkR2LVpAVhcAcZgcWpm1oGPW7w==",
       "requires": {
-        "get-stdin": "6.0.0"
+        "get-stdin": "^6.0.0"
       }
     },
     "eslint-import-resolver-babel-module": {
@@ -5490,8 +5494,8 @@
       "resolved": "https://registry.npmjs.org/eslint-import-resolver-babel-module/-/eslint-import-resolver-babel-module-4.0.0.tgz",
       "integrity": "sha512-aPj0+pG0H3HCaMD9eRDYEzPdMyKrLE2oNhAzTXd2w86ZBe3s7drSrrPwVTfzO1CBp13FGk8S84oRmZHZvSo0mA==",
       "requires": {
-        "pkg-up": "2.0.0",
-        "resolve": "1.12.0"
+        "pkg-up": "^2.0.0",
+        "resolve": "^1.4.0"
       }
     },
     "eslint-import-resolver-node": {
@@ -5499,8 +5503,8 @@
       "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
       "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
       "requires": {
-        "debug": "2.6.9",
-        "resolve": "1.12.0"
+        "debug": "^2.6.9",
+        "resolve": "^1.5.0"
       },
       "dependencies": {
         "debug": {
@@ -5518,9 +5522,9 @@
       "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-1.1.1.tgz",
       "integrity": "sha512-jqSfumQ+H5y3FUJ6NjRkbOQSUOlbBucGTN3ELymOtcDBbPjVdm/luvJuCfCaIXGh8sEF26ma1qVdtDgl9ndhUg==",
       "requires": {
-        "debug": "4.1.1",
-        "resolve": "1.12.0",
-        "tsconfig-paths": "3.9.0"
+        "debug": "^4.0.1",
+        "resolve": "^1.4.0",
+        "tsconfig-paths": "^3.6.0"
       },
       "dependencies": {
         "debug": {
@@ -5528,7 +5532,7 @@
           "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
           "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
           "requires": {
-            "ms": "2.1.2"
+            "ms": "^2.1.1"
           }
         },
         "ms": {
@@ -5543,17 +5547,17 @@
       "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.9.0.tgz",
       "integrity": "sha1-IxzhV4rVEk2leZ8Cm9M9KBN2I+M=",
       "requires": {
-        "array-find": "1.0.0",
-        "debug": "2.6.9",
-        "enhanced-resolve": "0.9.1",
-        "find-root": "1.1.0",
-        "has": "1.0.3",
-        "interpret": "1.2.0",
-        "is-absolute": "0.2.6",
-        "lodash.get": "4.4.2",
-        "node-libs-browser": "2.2.1",
-        "resolve": "1.12.0",
-        "semver": "5.5.0"
+        "array-find": "^1.0.0",
+        "debug": "^2.6.8",
+        "enhanced-resolve": "~0.9.0",
+        "find-root": "^1.1.0",
+        "has": "^1.0.1",
+        "interpret": "^1.0.0",
+        "is-absolute": "^0.2.3",
+        "lodash.get": "^4.4.2",
+        "node-libs-browser": "^1.0.0 || ^2.0.0",
+        "resolve": "^1.4.0",
+        "semver": "^5.3.0"
       },
       "dependencies": {
         "debug": {
@@ -5571,11 +5575,11 @@
       "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz",
       "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
       "requires": {
-        "loader-fs-cache": "1.0.2",
-        "loader-utils": "1.2.3",
-        "object-assign": "4.1.1",
-        "object-hash": "1.3.1",
-        "rimraf": "2.7.1"
+        "loader-fs-cache": "^1.0.0",
+        "loader-utils": "^1.0.2",
+        "object-assign": "^4.0.1",
+        "object-hash": "^1.1.4",
+        "rimraf": "^2.6.1"
       }
     },
     "eslint-module-utils": {
@@ -5583,8 +5587,8 @@
       "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz",
       "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==",
       "requires": {
-        "debug": "2.6.9",
-        "pkg-dir": "2.0.0"
+        "debug": "^2.6.8",
+        "pkg-dir": "^2.0.0"
       },
       "dependencies": {
         "debug": {
@@ -5600,7 +5604,7 @@
           "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
           "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
           "requires": {
-            "find-up": "2.1.0"
+            "find-up": "^2.1.0"
           }
         }
       }
@@ -5610,7 +5614,7 @@
       "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz",
       "integrity": "sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w==",
       "requires": {
-        "eslint-rule-composer": "0.3.0"
+        "eslint-rule-composer": "^0.3.0"
       }
     },
     "eslint-plugin-import": {
@@ -5618,17 +5622,17 @@
       "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz",
       "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==",
       "requires": {
-        "array-includes": "3.0.3",
-        "contains-path": "0.1.0",
-        "debug": "2.6.9",
+        "array-includes": "^3.0.3",
+        "contains-path": "^0.1.0",
+        "debug": "^2.6.9",
         "doctrine": "1.5.0",
-        "eslint-import-resolver-node": "0.3.2",
-        "eslint-module-utils": "2.4.1",
-        "has": "1.0.3",
-        "minimatch": "3.0.4",
-        "object.values": "1.1.0",
-        "read-pkg-up": "2.0.0",
-        "resolve": "1.12.0"
+        "eslint-import-resolver-node": "^0.3.2",
+        "eslint-module-utils": "^2.4.0",
+        "has": "^1.0.3",
+        "minimatch": "^3.0.4",
+        "object.values": "^1.1.0",
+        "read-pkg-up": "^2.0.0",
+        "resolve": "^1.11.0"
       },
       "dependencies": {
         "debug": {
@@ -5644,8 +5648,8 @@
           "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
           "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
           "requires": {
-            "esutils": "2.0.3",
-            "isarray": "1.0.0"
+            "esutils": "^2.0.2",
+            "isarray": "^1.0.0"
           }
         }
       }
@@ -5655,15 +5659,15 @@
       "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz",
       "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==",
       "requires": {
-        "@babel/runtime": "7.6.3",
-        "aria-query": "3.0.0",
-        "array-includes": "3.0.3",
-        "ast-types-flow": "0.0.7",
-        "axobject-query": "2.0.2",
-        "damerau-levenshtein": "1.0.5",
-        "emoji-regex": "7.0.3",
-        "has": "1.0.3",
-        "jsx-ast-utils": "2.2.1"
+        "@babel/runtime": "^7.4.5",
+        "aria-query": "^3.0.0",
+        "array-includes": "^3.0.3",
+        "ast-types-flow": "^0.0.7",
+        "axobject-query": "^2.0.2",
+        "damerau-levenshtein": "^1.0.4",
+        "emoji-regex": "^7.0.2",
+        "has": "^1.0.3",
+        "jsx-ast-utils": "^2.2.1"
       }
     },
     "eslint-plugin-prettier": {
@@ -5671,7 +5675,7 @@
       "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz",
       "integrity": "sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA==",
       "requires": {
-        "prettier-linter-helpers": "1.0.0"
+        "prettier-linter-helpers": "^1.0.0"
       }
     },
     "eslint-plugin-react": {
@@ -5679,15 +5683,15 @@
       "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.16.0.tgz",
       "integrity": "sha512-GacBAATewhhptbK3/vTP09CbFrgUJmBSaaRcWdbQLFvUZy9yVcQxigBNHGPU/KE2AyHpzj3AWXpxoMTsIDiHug==",
       "requires": {
-        "array-includes": "3.0.3",
-        "doctrine": "2.1.0",
-        "has": "1.0.3",
-        "jsx-ast-utils": "2.2.1",
-        "object.entries": "1.1.0",
-        "object.fromentries": "2.0.1",
-        "object.values": "1.1.0",
-        "prop-types": "15.7.2",
-        "resolve": "1.12.0"
+        "array-includes": "^3.0.3",
+        "doctrine": "^2.1.0",
+        "has": "^1.0.3",
+        "jsx-ast-utils": "^2.2.1",
+        "object.entries": "^1.1.0",
+        "object.fromentries": "^2.0.0",
+        "object.values": "^1.1.0",
+        "prop-types": "^15.7.2",
+        "resolve": "^1.12.0"
       },
       "dependencies": {
         "doctrine": {
@@ -5695,7 +5699,7 @@
           "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
           "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
           "requires": {
-            "esutils": "2.0.3"
+            "esutils": "^2.0.2"
           }
         }
       }
@@ -5715,8 +5719,8 @@
       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
       "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
       "requires": {
-        "esrecurse": "4.2.1",
-        "estraverse": "4.3.0"
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
       }
     },
     "eslint-utils": {
@@ -5724,7 +5728,7 @@
       "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz",
       "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==",
       "requires": {
-        "eslint-visitor-keys": "1.1.0"
+        "eslint-visitor-keys": "^1.0.0"
       }
     },
     "eslint-visitor-keys": {
@@ -5737,9 +5741,9 @@
       "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
       "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
       "requires": {
-        "acorn": "6.3.0",
-        "acorn-jsx": "5.0.2",
-        "eslint-visitor-keys": "1.1.0"
+        "acorn": "^6.0.7",
+        "acorn-jsx": "^5.0.0",
+        "eslint-visitor-keys": "^1.0.0"
       }
     },
     "esprima": {
@@ -5752,7 +5756,7 @@
       "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
       "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
       "requires": {
-        "estraverse": "4.3.0"
+        "estraverse": "^4.0.0"
       }
     },
     "esrecurse": {
@@ -5760,7 +5764,7 @@
       "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
       "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
       "requires": {
-        "estraverse": "4.3.0"
+        "estraverse": "^4.1.0"
       }
     },
     "estraverse": {
@@ -5785,7 +5789,8 @@
       "integrity": "sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q=="
     },
     "eventemitter": {
-      "version": "github:braznaavtrav/EventEmitter#7169056a2f8b3b55d78ab1b85bad39277e7e88b2"
+      "version": "github:braznaavtrav/EventEmitter#7169056a2f8b3b55d78ab1b85bad39277e7e88b2",
+      "from": "github:braznaavtrav/EventEmitter"
     },
     "eventemitter3": {
       "version": "4.0.0",
@@ -5809,7 +5814,7 @@
       "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
       "dev": true,
       "requires": {
-        "original": "1.0.2"
+        "original": "^1.0.0"
       }
     },
     "evp_bytestokey": {
@@ -5817,8 +5822,8 @@
       "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
       "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
       "requires": {
-        "md5.js": "1.3.5",
-        "safe-buffer": "5.2.0"
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
       }
     },
     "execa": {
@@ -5827,13 +5832,13 @@
       "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
       "dev": true,
       "requires": {
-        "cross-spawn": "6.0.5",
-        "get-stream": "4.1.0",
-        "is-stream": "1.1.0",
-        "npm-run-path": "2.0.2",
-        "p-finally": "1.0.0",
-        "signal-exit": "3.0.2",
-        "strip-eof": "1.0.0"
+        "cross-spawn": "^6.0.0",
+        "get-stream": "^4.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
       }
     },
     "exenv": {
@@ -5847,13 +5852,13 @@
       "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
       "dev": true,
       "requires": {
-        "debug": "2.6.9",
-        "define-property": "0.2.5",
-        "extend-shallow": "2.0.1",
-        "posix-character-classes": "0.1.1",
-        "regex-not": "1.0.2",
-        "snapdragon": "0.8.2",
-        "to-regex": "3.0.2"
+        "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"
       },
       "dependencies": {
         "debug": {
@@ -5871,7 +5876,7 @@
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "0.1.6"
+            "is-descriptor": "^0.1.0"
           }
         },
         "extend-shallow": {
@@ -5880,7 +5885,7 @@
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "is-extendable": "0.1.1"
+            "is-extendable": "^0.1.0"
           }
         }
       }
@@ -5891,7 +5896,7 @@
       "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
       "dev": true,
       "requires": {
-        "homedir-polyfill": "1.0.3"
+        "homedir-polyfill": "^1.0.1"
       }
     },
     "express": {
@@ -5900,36 +5905,36 @@
       "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
       "dev": true,
       "requires": {
-        "accepts": "1.3.7",
+        "accepts": "~1.3.7",
         "array-flatten": "1.1.1",
         "body-parser": "1.19.0",
         "content-disposition": "0.5.3",
-        "content-type": "1.0.4",
+        "content-type": "~1.0.4",
         "cookie": "0.4.0",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
-        "depd": "1.1.2",
-        "encodeurl": "1.0.2",
-        "escape-html": "1.0.3",
-        "etag": "1.8.1",
-        "finalhandler": "1.1.2",
+        "depd": "~1.1.2",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "~1.1.2",
         "fresh": "0.5.2",
         "merge-descriptors": "1.0.1",
-        "methods": "1.1.2",
-        "on-finished": "2.3.0",
-        "parseurl": "1.3.3",
+        "methods": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.3",
         "path-to-regexp": "0.1.7",
-        "proxy-addr": "2.0.5",
+        "proxy-addr": "~2.0.5",
         "qs": "6.7.0",
-        "range-parser": "1.2.1",
+        "range-parser": "~1.2.1",
         "safe-buffer": "5.1.2",
         "send": "0.17.1",
         "serve-static": "1.14.1",
         "setprototypeof": "1.1.1",
-        "statuses": "1.5.0",
-        "type-is": "1.6.18",
+        "statuses": "~1.5.0",
+        "type-is": "~1.6.18",
         "utils-merge": "1.0.1",
-        "vary": "1.1.2"
+        "vary": "~1.1.2"
       },
       "dependencies": {
         "array-flatten": {
@@ -5984,8 +5989,8 @@
       "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
       "dev": true,
       "requires": {
-        "assign-symbols": "1.0.0",
-        "is-extendable": "1.0.1"
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
       },
       "dependencies": {
         "is-extendable": {
@@ -5994,7 +5999,7 @@
           "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
           "dev": true,
           "requires": {
-            "is-plain-object": "2.0.4"
+            "is-plain-object": "^2.0.4"
           }
         }
       }
@@ -6004,9 +6009,9 @@
       "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
       "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
       "requires": {
-        "chardet": "0.7.0",
-        "iconv-lite": "0.4.24",
-        "tmp": "0.0.33"
+        "chardet": "^0.7.0",
+        "iconv-lite": "^0.4.24",
+        "tmp": "^0.0.33"
       }
     },
     "extglob": {
@@ -6015,14 +6020,14 @@
       "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
       "dev": true,
       "requires": {
-        "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.2",
-        "snapdragon": "0.8.2",
-        "to-regex": "3.0.2"
+        "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"
       },
       "dependencies": {
         "define-property": {
@@ -6031,7 +6036,7 @@
           "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "1.0.2"
+            "is-descriptor": "^1.0.0"
           }
         },
         "extend-shallow": {
@@ -6040,7 +6045,7 @@
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "is-extendable": "0.1.1"
+            "is-extendable": "^0.1.0"
           }
         },
         "is-accessor-descriptor": {
@@ -6049,7 +6054,7 @@
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
@@ -6058,7 +6063,7 @@
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
@@ -6067,9 +6072,9 @@
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         }
       }
@@ -6111,7 +6116,7 @@
       "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
       "dev": true,
       "requires": {
-        "websocket-driver": "0.7.3"
+        "websocket-driver": ">=0.5.1"
       }
     },
     "figgy-pudding": {
@@ -6125,7 +6130,7 @@
       "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
       "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
       "requires": {
-        "escape-string-regexp": "1.0.5"
+        "escape-string-regexp": "^1.0.5"
       }
     },
     "file-entry-cache": {
@@ -6133,7 +6138,7 @@
       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
       "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
       "requires": {
-        "flat-cache": "2.0.1"
+        "flat-cache": "^2.0.1"
       }
     },
     "file-loader": {
@@ -6142,8 +6147,8 @@
       "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.2.3",
-        "schema-utils": "0.4.7"
+        "loader-utils": "^1.0.2",
+        "schema-utils": "^0.4.5"
       }
     },
     "fill-range": {
@@ -6152,10 +6157,10 @@
       "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
       "dev": true,
       "requires": {
-        "extend-shallow": "2.0.1",
-        "is-number": "3.0.0",
-        "repeat-string": "1.6.1",
-        "to-regex-range": "2.1.1"
+        "extend-shallow": "^2.0.1",
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1",
+        "to-regex-range": "^2.1.0"
       },
       "dependencies": {
         "extend-shallow": {
@@ -6164,7 +6169,7 @@
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "is-extendable": "0.1.1"
+            "is-extendable": "^0.1.0"
           }
         }
       }
@@ -6176,12 +6181,12 @@
       "dev": true,
       "requires": {
         "debug": "2.6.9",
-        "encodeurl": "1.0.2",
-        "escape-html": "1.0.3",
-        "on-finished": "2.3.0",
-        "parseurl": "1.3.3",
-        "statuses": "1.5.0",
-        "unpipe": "1.0.0"
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.3",
+        "statuses": "~1.5.0",
+        "unpipe": "~1.0.0"
       },
       "dependencies": {
         "debug": {
@@ -6200,9 +6205,9 @@
       "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
       "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
       "requires": {
-        "commondir": "1.0.1",
-        "mkdirp": "0.5.1",
-        "pkg-dir": "1.0.0"
+        "commondir": "^1.0.1",
+        "mkdirp": "^0.5.1",
+        "pkg-dir": "^1.0.0"
       }
     },
     "find-root": {
@@ -6215,7 +6220,7 @@
       "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
       "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
       "requires": {
-        "locate-path": "2.0.0"
+        "locate-path": "^2.0.0"
       }
     },
     "findup-sync": {
@@ -6224,10 +6229,10 @@
       "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
       "dev": true,
       "requires": {
-        "detect-file": "1.0.0",
-        "is-glob": "4.0.1",
-        "micromatch": "3.1.10",
-        "resolve-dir": "1.0.1"
+        "detect-file": "^1.0.0",
+        "is-glob": "^4.0.0",
+        "micromatch": "^3.0.4",
+        "resolve-dir": "^1.0.1"
       }
     },
     "flat-cache": {
@@ -6235,7 +6240,7 @@
       "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
       "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
       "requires": {
-        "flatted": "2.0.1",
+        "flatted": "^2.0.0",
         "rimraf": "2.6.3",
         "write": "1.0.3"
       },
@@ -6245,7 +6250,7 @@
           "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
           "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
           "requires": {
-            "glob": "7.1.4"
+            "glob": "^7.1.3"
           }
         }
       }
@@ -6272,8 +6277,8 @@
       "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.4",
-        "readable-stream": "2.3.6"
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.3.6"
       }
     },
     "follow-redirects": {
@@ -6281,7 +6286,7 @@
       "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
       "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
       "requires": {
-        "debug": "3.1.0"
+        "debug": "=3.1.0"
       }
     },
     "for-in": {
@@ -6300,9 +6305,9 @@
       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
       "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
       "requires": {
-        "asynckit": "0.4.0",
-        "combined-stream": "1.0.8",
-        "mime-types": "2.1.24"
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.6",
+        "mime-types": "^2.1.12"
       }
     },
     "forwarded": {
@@ -6317,7 +6322,7 @@
       "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
       "dev": true,
       "requires": {
-        "map-cache": "0.2.2"
+        "map-cache": "^0.2.2"
       }
     },
     "fresh": {
@@ -6332,8 +6337,8 @@
       "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.4",
-        "readable-stream": "2.3.6"
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
       }
     },
     "fs-readdir-recursive": {
@@ -6348,10 +6353,10 @@
       "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.2.2",
-        "iferr": "0.1.5",
-        "imurmurhash": "0.1.4",
-        "readable-stream": "2.3.6"
+        "graceful-fs": "^4.1.2",
+        "iferr": "^0.1.5",
+        "imurmurhash": "^0.1.4",
+        "readable-stream": "1 || 2"
       }
     },
     "fs.realpath": {
@@ -6366,8 +6371,8 @@
       "dev": true,
       "optional": true,
       "requires": {
-        "nan": "2.14.0",
-        "node-pre-gyp": "0.12.0"
+        "nan": "^2.12.1",
+        "node-pre-gyp": "^0.12.0"
       },
       "dependencies": {
         "abbrev": {
@@ -6393,8 +6398,8 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "delegates": "1.0.0",
-            "readable-stream": "2.3.6"
+            "delegates": "^1.0.0",
+            "readable-stream": "^2.0.6"
           }
         },
         "balanced-match": {
@@ -6407,7 +6412,7 @@
           "bundled": true,
           "dev": true,
           "requires": {
-            "balanced-match": "1.0.0",
+            "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
           }
         },
@@ -6444,7 +6449,7 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "ms": "2.1.1"
+            "ms": "^2.1.1"
           }
         },
         "deep-extend": {
@@ -6471,7 +6476,7 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "minipass": "2.3.5"
+            "minipass": "^2.2.1"
           }
         },
         "fs.realpath": {
@@ -6486,14 +6491,14 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "aproba": "1.2.0",
-            "console-control-strings": "1.1.0",
-            "has-unicode": "2.0.1",
-            "object-assign": "4.1.1",
-            "signal-exit": "3.0.2",
-            "string-width": "1.0.2",
-            "strip-ansi": "3.0.1",
-            "wide-align": "1.1.3"
+            "aproba": "^1.0.3",
+            "console-control-strings": "^1.0.0",
+            "has-unicode": "^2.0.0",
+            "object-assign": "^4.1.0",
+            "signal-exit": "^3.0.0",
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wide-align": "^1.1.0"
           }
         },
         "glob": {
@@ -6502,12 +6507,12 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "has-unicode": {
@@ -6522,7 +6527,7 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "safer-buffer": "2.1.2"
+            "safer-buffer": ">= 2.1.2 < 3"
           }
         },
         "ignore-walk": {
@@ -6531,7 +6536,7 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "minimatch": "3.0.4"
+            "minimatch": "^3.0.4"
           }
         },
         "inflight": {
@@ -6540,8 +6545,8 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "once": "1.4.0",
-            "wrappy": "1.0.2"
+            "once": "^1.3.0",
+            "wrappy": "1"
           }
         },
         "inherits": {
@@ -6560,7 +6565,7 @@
           "bundled": true,
           "dev": true,
           "requires": {
-            "number-is-nan": "1.0.1"
+            "number-is-nan": "^1.0.0"
           }
         },
         "isarray": {
@@ -6574,7 +6579,7 @@
           "bundled": true,
           "dev": true,
           "requires": {
-            "brace-expansion": "1.1.11"
+            "brace-expansion": "^1.1.7"
           }
         },
         "minimist": {
@@ -6587,8 +6592,8 @@
           "bundled": true,
           "dev": true,
           "requires": {
-            "safe-buffer": "5.1.2",
-            "yallist": "3.0.3"
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.0"
           }
         },
         "minizlib": {
@@ -6597,7 +6602,7 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "minipass": "2.3.5"
+            "minipass": "^2.2.1"
           }
         },
         "mkdirp": {
@@ -6620,9 +6625,9 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "debug": "4.1.1",
-            "iconv-lite": "0.4.24",
-            "sax": "1.2.4"
+            "debug": "^4.1.0",
+            "iconv-lite": "^0.4.4",
+            "sax": "^1.2.4"
           }
         },
         "node-pre-gyp": {
@@ -6631,16 +6636,16 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "detect-libc": "1.0.3",
-            "mkdirp": "0.5.1",
-            "needle": "2.3.0",
-            "nopt": "4.0.1",
-            "npm-packlist": "1.4.1",
-            "npmlog": "4.1.2",
-            "rc": "1.2.8",
-            "rimraf": "2.6.3",
-            "semver": "5.7.0",
-            "tar": "4.4.8"
+            "detect-libc": "^1.0.2",
+            "mkdirp": "^0.5.1",
+            "needle": "^2.2.1",
+            "nopt": "^4.0.1",
+            "npm-packlist": "^1.1.6",
+            "npmlog": "^4.0.2",
+            "rc": "^1.2.7",
+            "rimraf": "^2.6.1",
+            "semver": "^5.3.0",
+            "tar": "^4"
           }
         },
         "nopt": {
@@ -6649,8 +6654,8 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "abbrev": "1.1.1",
-            "osenv": "0.1.5"
+            "abbrev": "1",
+            "osenv": "^0.1.4"
           }
         },
         "npm-bundled": {
@@ -6665,8 +6670,8 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "ignore-walk": "3.0.1",
-            "npm-bundled": "1.0.6"
+            "ignore-walk": "^3.0.1",
+            "npm-bundled": "^1.0.1"
           }
         },
         "npmlog": {
@@ -6675,10 +6680,10 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "are-we-there-yet": "1.1.5",
-            "console-control-strings": "1.1.0",
-            "gauge": "2.7.4",
-            "set-blocking": "2.0.0"
+            "are-we-there-yet": "~1.1.2",
+            "console-control-strings": "~1.1.0",
+            "gauge": "~2.7.3",
+            "set-blocking": "~2.0.0"
           }
         },
         "number-is-nan": {
@@ -6697,7 +6702,7 @@
           "bundled": true,
           "dev": true,
           "requires": {
-            "wrappy": "1.0.2"
+            "wrappy": "1"
           }
         },
         "os-homedir": {
@@ -6718,8 +6723,8 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "os-homedir": "1.0.2",
-            "os-tmpdir": "1.0.2"
+            "os-homedir": "^1.0.0",
+            "os-tmpdir": "^1.0.0"
           }
         },
         "path-is-absolute": {
@@ -6740,10 +6745,10 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "deep-extend": "0.6.0",
-            "ini": "1.3.5",
-            "minimist": "1.2.0",
-            "strip-json-comments": "2.0.1"
+            "deep-extend": "^0.6.0",
+            "ini": "~1.3.0",
+            "minimist": "^1.2.0",
+            "strip-json-comments": "~2.0.1"
           },
           "dependencies": {
             "minimist": {
@@ -6760,13 +6765,13 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.2",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
           }
         },
         "rimraf": {
@@ -6775,7 +6780,7 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "glob": "7.1.3"
+            "glob": "^7.1.3"
           }
         },
         "safe-buffer": {
@@ -6818,9 +6823,9 @@
           "bundled": true,
           "dev": true,
           "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
-            "strip-ansi": "3.0.1"
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
           }
         },
         "string_decoder": {
@@ -6829,7 +6834,7 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "safe-buffer": "5.1.2"
+            "safe-buffer": "~5.1.0"
           }
         },
         "strip-ansi": {
@@ -6837,7 +6842,7 @@
           "bundled": true,
           "dev": true,
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         },
         "strip-json-comments": {
@@ -6852,13 +6857,13 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "chownr": "1.1.1",
-            "fs-minipass": "1.2.5",
-            "minipass": "2.3.5",
-            "minizlib": "1.2.1",
-            "mkdirp": "0.5.1",
-            "safe-buffer": "5.1.2",
-            "yallist": "3.0.3"
+            "chownr": "^1.1.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.3.4",
+            "minizlib": "^1.1.1",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.2"
           }
         },
         "util-deprecate": {
@@ -6873,7 +6878,7 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "string-width": "1.0.2"
+            "string-width": "^1.0.2 || 2"
           }
         },
         "wrappy": {
@@ -6893,10 +6898,10 @@
       "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
       "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
       "requires": {
-        "graceful-fs": "4.2.2",
-        "inherits": "2.0.4",
-        "mkdirp": "0.5.1",
-        "rimraf": "2.7.1"
+        "graceful-fs": "^4.1.2",
+        "inherits": "~2.0.0",
+        "mkdirp": ">=0.5 0",
+        "rimraf": "2"
       }
     },
     "function-bind": {
@@ -6914,14 +6919,14 @@
       "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
       "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
       "requires": {
-        "aproba": "1.2.0",
-        "console-control-strings": "1.1.0",
-        "has-unicode": "2.0.1",
-        "object-assign": "4.1.1",
-        "signal-exit": "3.0.2",
-        "string-width": "1.0.2",
-        "strip-ansi": "3.0.1",
-        "wide-align": "1.1.3"
+        "aproba": "^1.0.3",
+        "console-control-strings": "^1.0.0",
+        "has-unicode": "^2.0.0",
+        "object-assign": "^4.1.0",
+        "signal-exit": "^3.0.0",
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wide-align": "^1.1.0"
       },
       "dependencies": {
         "ansi-regex": {
@@ -6934,7 +6939,7 @@
           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
           "requires": {
-            "number-is-nan": "1.0.1"
+            "number-is-nan": "^1.0.0"
           }
         },
         "string-width": {
@@ -6942,9 +6947,9 @@
           "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
           "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
-            "strip-ansi": "3.0.1"
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
           }
         },
         "strip-ansi": {
@@ -6952,7 +6957,7 @@
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         }
       }
@@ -6962,7 +6967,7 @@
       "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
       "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
       "requires": {
-        "globule": "1.2.1"
+        "globule": "^1.0.0"
       }
     },
     "get-caller-file": {
@@ -6972,6 +6977,7 @@
     },
     "get-size": {
       "version": "github:eiriklv/get-size#c1ebd019815fc6247c094c17a41b61d0e8191b08",
+      "from": "github:eiriklv/get-size",
       "requires": {
         "desandro-get-style-property": "github:eiriklv/get-style-property#a5a74ad48d96c7d5ddcf652e9fa5d4283af37823"
       }
@@ -6987,7 +6993,7 @@
       "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
       "dev": true,
       "requires": {
-        "pump": "3.0.0"
+        "pump": "^3.0.0"
       },
       "dependencies": {
         "pump": {
@@ -6996,8 +7002,8 @@
           "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
           "dev": true,
           "requires": {
-            "end-of-stream": "1.4.4",
-            "once": "1.4.0"
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
           }
         }
       }
@@ -7013,7 +7019,7 @@
       "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
       "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
       "requires": {
-        "assert-plus": "1.0.0"
+        "assert-plus": "^1.0.0"
       }
     },
     "glob": {
@@ -7021,12 +7027,12 @@
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
       "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
       "requires": {
-        "fs.realpath": "1.0.0",
-        "inflight": "1.0.6",
-        "inherits": "2.0.4",
-        "minimatch": "3.0.4",
-        "once": "1.4.0",
-        "path-is-absolute": "1.0.1"
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
       }
     },
     "glob-parent": {
@@ -7035,8 +7041,8 @@
       "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
       "dev": true,
       "requires": {
-        "is-glob": "3.1.0",
-        "path-dirname": "1.0.2"
+        "is-glob": "^3.1.0",
+        "path-dirname": "^1.0.0"
       },
       "dependencies": {
         "is-glob": {
@@ -7045,7 +7051,7 @@
           "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
           "dev": true,
           "requires": {
-            "is-extglob": "2.1.1"
+            "is-extglob": "^2.1.0"
           }
         }
       }
@@ -7055,8 +7061,8 @@
       "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
       "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
       "requires": {
-        "min-document": "2.19.0",
-        "process": "0.11.10"
+        "min-document": "^2.19.0",
+        "process": "^0.11.10"
       }
     },
     "global-modules": {
@@ -7065,7 +7071,7 @@
       "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
       "dev": true,
       "requires": {
-        "global-prefix": "3.0.0"
+        "global-prefix": "^3.0.0"
       },
       "dependencies": {
         "global-prefix": {
@@ -7074,9 +7080,9 @@
           "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
           "dev": true,
           "requires": {
-            "ini": "1.3.5",
-            "kind-of": "6.0.2",
-            "which": "1.3.1"
+            "ini": "^1.3.5",
+            "kind-of": "^6.0.2",
+            "which": "^1.3.1"
           }
         }
       }
@@ -7087,11 +7093,11 @@
       "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
       "dev": true,
       "requires": {
-        "expand-tilde": "2.0.2",
-        "homedir-polyfill": "1.0.3",
-        "ini": "1.3.5",
-        "is-windows": "1.0.2",
-        "which": "1.3.1"
+        "expand-tilde": "^2.0.2",
+        "homedir-polyfill": "^1.0.1",
+        "ini": "^1.3.4",
+        "is-windows": "^1.0.1",
+        "which": "^1.2.14"
       },
       "dependencies": {
         "is-windows": {
@@ -7113,11 +7119,11 @@
       "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
       "dev": true,
       "requires": {
-        "array-union": "1.0.2",
-        "glob": "7.1.4",
-        "object-assign": "4.1.1",
-        "pify": "2.3.0",
-        "pinkie-promise": "2.0.1"
+        "array-union": "^1.0.1",
+        "glob": "^7.0.3",
+        "object-assign": "^4.0.1",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0"
       }
     },
     "globule": {
@@ -7125,9 +7131,9 @@
       "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
       "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
       "requires": {
-        "glob": "7.1.4",
-        "lodash": "4.17.15",
-        "minimatch": "3.0.4"
+        "glob": "~7.1.1",
+        "lodash": "~4.17.10",
+        "minimatch": "~3.0.2"
       }
     },
     "graceful-fs": {
@@ -7151,8 +7157,8 @@
       "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
       "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
       "requires": {
-        "ajv": "6.10.2",
-        "har-schema": "2.0.0"
+        "ajv": "^6.5.5",
+        "har-schema": "^2.0.0"
       }
     },
     "harmony-reflect": {
@@ -7166,7 +7172,7 @@
       "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
       "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
       "requires": {
-        "function-bind": "1.1.1"
+        "function-bind": "^1.1.1"
       }
     },
     "has-ansi": {
@@ -7174,7 +7180,7 @@
       "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
       "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
       "requires": {
-        "ansi-regex": "2.1.1"
+        "ansi-regex": "^2.0.0"
       },
       "dependencies": {
         "ansi-regex": {
@@ -7205,9 +7211,9 @@
       "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
       "dev": true,
       "requires": {
-        "get-value": "2.0.6",
-        "has-values": "1.0.0",
-        "isobject": "3.0.1"
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
       }
     },
     "has-values": {
@@ -7216,8 +7222,8 @@
       "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
       "dev": true,
       "requires": {
-        "is-number": "3.0.0",
-        "kind-of": "4.0.0"
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
       },
       "dependencies": {
         "is-buffer": {
@@ -7232,7 +7238,7 @@
           "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
           "dev": true,
           "requires": {
-            "is-buffer": "1.1.6"
+            "is-buffer": "^1.1.5"
           }
         }
       }
@@ -7242,8 +7248,8 @@
       "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
       "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
       "requires": {
-        "inherits": "2.0.4",
-        "safe-buffer": "5.2.0"
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "hash.js": {
@@ -7251,8 +7257,8 @@
       "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
       "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
       "requires": {
-        "inherits": "2.0.4",
-        "minimalistic-assert": "1.0.1"
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
       }
     },
     "hawk": {
@@ -7261,10 +7267,10 @@
       "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
       "optional": true,
       "requires": {
-        "boom": "2.10.1",
-        "cryptiles": "2.0.5",
-        "hoek": "2.16.3",
-        "sntp": "1.0.9"
+        "boom": "2.x.x",
+        "cryptiles": "2.x.x",
+        "hoek": "2.x.x",
+        "sntp": "1.x.x"
       }
     },
     "he": {
@@ -7284,12 +7290,12 @@
       "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
       "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
       "requires": {
-        "@babel/runtime": "7.6.3",
-        "loose-envify": "1.4.0",
-        "resolve-pathname": "3.0.0",
-        "tiny-invariant": "1.0.6",
-        "tiny-warning": "1.0.3",
-        "value-equal": "1.0.1"
+        "@babel/runtime": "^7.1.2",
+        "loose-envify": "^1.2.0",
+        "resolve-pathname": "^3.0.0",
+        "tiny-invariant": "^1.0.2",
+        "tiny-warning": "^1.0.0",
+        "value-equal": "^1.0.1"
       }
     },
     "hmac-drbg": {
@@ -7297,9 +7303,9 @@
       "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
       "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
       "requires": {
-        "hash.js": "1.1.7",
-        "minimalistic-assert": "1.0.1",
-        "minimalistic-crypto-utils": "1.0.1"
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
       }
     },
     "hoek": {
@@ -7312,7 +7318,7 @@
       "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz",
       "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
       "requires": {
-        "react-is": "16.10.2"
+        "react-is": "^16.7.0"
       }
     },
     "home-or-tmp": {
@@ -7321,8 +7327,8 @@
       "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
       "dev": true,
       "requires": {
-        "os-homedir": "1.0.2",
-        "os-tmpdir": "1.0.2"
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.1"
       }
     },
     "homedir-polyfill": {
@@ -7331,7 +7337,7 @@
       "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
       "dev": true,
       "requires": {
-        "parse-passwd": "1.0.0"
+        "parse-passwd": "^1.0.0"
       }
     },
     "hosted-git-info": {
@@ -7345,10 +7351,10 @@
       "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.4",
-        "obuf": "1.1.2",
-        "readable-stream": "2.3.6",
-        "wbuf": "1.7.3"
+        "inherits": "^2.0.1",
+        "obuf": "^1.0.0",
+        "readable-stream": "^2.0.1",
+        "wbuf": "^1.1.0"
       }
     },
     "hsl-regex": {
@@ -7381,13 +7387,13 @@
       "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
       "dev": true,
       "requires": {
-        "camel-case": "3.0.0",
-        "clean-css": "4.2.1",
-        "commander": "2.17.1",
-        "he": "1.2.0",
-        "param-case": "2.1.1",
-        "relateurl": "0.2.7",
-        "uglify-js": "3.4.10"
+        "camel-case": "3.0.x",
+        "clean-css": "4.2.x",
+        "commander": "2.17.x",
+        "he": "1.2.x",
+        "param-case": "2.1.x",
+        "relateurl": "0.2.x",
+        "uglify-js": "3.4.x"
       },
       "dependencies": {
         "commander": {
@@ -7404,12 +7410,12 @@
       "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
       "dev": true,
       "requires": {
-        "html-minifier": "3.5.21",
-        "loader-utils": "0.2.17",
-        "lodash": "4.17.15",
-        "pretty-error": "2.1.1",
-        "tapable": "1.1.3",
-        "toposort": "1.0.7",
+        "html-minifier": "^3.2.3",
+        "loader-utils": "^0.2.16",
+        "lodash": "^4.17.3",
+        "pretty-error": "^2.0.2",
+        "tapable": "^1.0.0",
+        "toposort": "^1.0.0",
         "util.promisify": "1.0.0"
       },
       "dependencies": {
@@ -7431,10 +7437,10 @@
           "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
           "dev": true,
           "requires": {
-            "big.js": "3.2.0",
-            "emojis-list": "2.1.0",
-            "json5": "0.5.1",
-            "object-assign": "4.1.1"
+            "big.js": "^3.1.3",
+            "emojis-list": "^2.0.0",
+            "json5": "^0.5.0",
+            "object-assign": "^4.0.1"
           }
         },
         "tapable": {
@@ -7451,12 +7457,12 @@
       "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
       "dev": true,
       "requires": {
-        "domelementtype": "1.3.1",
-        "domhandler": "2.4.2",
-        "domutils": "1.5.1",
-        "entities": "1.1.2",
-        "inherits": "2.0.4",
-        "readable-stream": "3.4.0"
+        "domelementtype": "^1.3.1",
+        "domhandler": "^2.3.0",
+        "domutils": "^1.5.1",
+        "entities": "^1.1.1",
+        "inherits": "^2.0.1",
+        "readable-stream": "^3.1.1"
       },
       "dependencies": {
         "entities": {
@@ -7471,9 +7477,9 @@
           "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
           "dev": true,
           "requires": {
-            "inherits": "2.0.4",
-            "string_decoder": "1.3.0",
-            "util-deprecate": "1.0.2"
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
           }
         }
       }
@@ -7489,10 +7495,10 @@
       "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
       "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
       "requires": {
-        "depd": "1.1.2",
+        "depd": "~1.1.2",
         "inherits": "2.0.3",
         "setprototypeof": "1.1.0",
-        "statuses": "1.5.0"
+        "statuses": ">= 1.4.0 < 2"
       },
       "dependencies": {
         "inherits": {
@@ -7514,9 +7520,9 @@
       "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==",
       "dev": true,
       "requires": {
-        "eventemitter3": "4.0.0",
-        "follow-redirects": "1.5.10",
-        "requires-port": "1.0.0"
+        "eventemitter3": "^4.0.0",
+        "follow-redirects": "^1.0.0",
+        "requires-port": "^1.0.0"
       }
     },
     "http-proxy-middleware": {
@@ -7525,10 +7531,10 @@
       "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
       "dev": true,
       "requires": {
-        "http-proxy": "1.18.0",
-        "is-glob": "4.0.1",
-        "lodash": "4.17.15",
-        "micromatch": "3.1.10"
+        "http-proxy": "^1.17.0",
+        "is-glob": "^4.0.0",
+        "lodash": "^4.17.11",
+        "micromatch": "^3.1.10"
       }
     },
     "http-signature": {
@@ -7536,9 +7542,9 @@
       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
       "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
       "requires": {
-        "assert-plus": "1.0.0",
-        "jsprim": "1.4.1",
-        "sshpk": "1.16.1"
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
       }
     },
     "https-browserify": {
@@ -7556,7 +7562,7 @@
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
       "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
       "requires": {
-        "safer-buffer": "2.1.2"
+        "safer-buffer": ">= 2.1.2 < 3"
       }
     },
     "icss-replace-symbols": {
@@ -7571,7 +7577,7 @@
       "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
       "dev": true,
       "requires": {
-        "postcss": "6.0.23"
+        "postcss": "^6.0.1"
       },
       "dependencies": {
         "postcss": {
@@ -7580,9 +7586,9 @@
           "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "5.5.0"
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.4.0"
           }
         }
       }
@@ -7593,7 +7599,7 @@
       "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=",
       "dev": true,
       "requires": {
-        "harmony-reflect": "1.6.1"
+        "harmony-reflect": "^1.4.6"
       }
     },
     "ieee754": {
@@ -7620,9 +7626,10 @@
     },
     "imagesloaded": {
       "version": "github:eiriklv/imagesloaded#04535a148206e58790927e133f24ca199163b995",
+      "from": "github:eiriklv/imagesloaded",
       "requires": {
-        "eventie": "1.0.6",
-        "wolfy87-eventemitter": "4.3.0"
+        "eventie": ">=1.0.4 <2",
+        "wolfy87-eventemitter": "4.x"
       }
     },
     "immutable": {
@@ -7635,8 +7642,8 @@
       "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz",
       "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==",
       "requires": {
-        "parent-module": "1.0.1",
-        "resolve-from": "4.0.0"
+        "parent-module": "^1.0.0",
+        "resolve-from": "^4.0.0"
       }
     },
     "import-local": {
@@ -7645,8 +7652,8 @@
       "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
       "dev": true,
       "requires": {
-        "pkg-dir": "3.0.0",
-        "resolve-cwd": "2.0.0"
+        "pkg-dir": "^3.0.0",
+        "resolve-cwd": "^2.0.0"
       },
       "dependencies": {
         "find-up": {
@@ -7655,7 +7662,7 @@
           "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
           "dev": true,
           "requires": {
-            "locate-path": "3.0.0"
+            "locate-path": "^3.0.0"
           }
         },
         "locate-path": {
@@ -7664,8 +7671,8 @@
           "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
           "dev": true,
           "requires": {
-            "p-locate": "3.0.0",
-            "path-exists": "3.0.0"
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
           }
         },
         "p-limit": {
@@ -7674,7 +7681,7 @@
           "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
           "dev": true,
           "requires": {
-            "p-try": "2.2.0"
+            "p-try": "^2.0.0"
           }
         },
         "p-locate": {
@@ -7683,7 +7690,7 @@
           "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
           "dev": true,
           "requires": {
-            "p-limit": "2.2.1"
+            "p-limit": "^2.0.0"
           }
         },
         "p-try": {
@@ -7698,7 +7705,7 @@
           "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
           "dev": true,
           "requires": {
-            "find-up": "3.0.0"
+            "find-up": "^3.0.0"
           }
         }
       }
@@ -7718,7 +7725,7 @@
       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
       "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
       "requires": {
-        "repeating": "2.0.1"
+        "repeating": "^2.0.0"
       }
     },
     "indexes-of": {
@@ -7738,8 +7745,8 @@
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
       "requires": {
-        "once": "1.4.0",
-        "wrappy": "1.0.2"
+        "once": "^1.3.0",
+        "wrappy": "1"
       }
     },
     "inherits": {
@@ -7758,8 +7765,8 @@
       "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz",
       "integrity": "sha1-hVG45bTVcyROZqNLBPfTIHaitTQ=",
       "requires": {
-        "bowser": "1.9.4",
-        "css-in-js-utils": "2.0.1"
+        "bowser": "^1.7.3",
+        "css-in-js-utils": "^2.0.0"
       }
     },
     "inquirer": {
@@ -7767,19 +7774,19 @@
       "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
       "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
       "requires": {
-        "ansi-escapes": "3.2.0",
-        "chalk": "2.4.2",
-        "cli-cursor": "2.1.0",
-        "cli-width": "2.2.0",
-        "external-editor": "3.1.0",
-        "figures": "2.0.0",
-        "lodash": "4.17.15",
+        "ansi-escapes": "^3.2.0",
+        "chalk": "^2.4.2",
+        "cli-cursor": "^2.1.0",
+        "cli-width": "^2.0.0",
+        "external-editor": "^3.0.3",
+        "figures": "^2.0.0",
+        "lodash": "^4.17.12",
         "mute-stream": "0.0.7",
-        "run-async": "2.3.0",
-        "rxjs": "6.5.3",
-        "string-width": "2.1.1",
-        "strip-ansi": "5.2.0",
-        "through": "2.3.8"
+        "run-async": "^2.2.0",
+        "rxjs": "^6.4.0",
+        "string-width": "^2.1.0",
+        "strip-ansi": "^5.1.0",
+        "through": "^2.3.6"
       },
       "dependencies": {
         "ansi-regex": {
@@ -7792,7 +7799,7 @@
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
           "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
           "requires": {
-            "ansi-regex": "4.1.0"
+            "ansi-regex": "^4.1.0"
           }
         }
       }
@@ -7803,8 +7810,8 @@
       "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
       "dev": true,
       "requires": {
-        "default-gateway": "4.2.0",
-        "ipaddr.js": "1.9.0"
+        "default-gateway": "^4.2.0",
+        "ipaddr.js": "^1.9.0"
       }
     },
     "interpret": {
@@ -7817,7 +7824,7 @@
       "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
       "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
       "requires": {
-        "loose-envify": "1.4.0"
+        "loose-envify": "^1.0.0"
       }
     },
     "inversify": {
@@ -7858,8 +7865,8 @@
       "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz",
       "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=",
       "requires": {
-        "is-relative": "0.2.1",
-        "is-windows": "0.2.0"
+        "is-relative": "^0.2.1",
+        "is-windows": "^0.2.0"
       }
     },
     "is-absolute-url": {
@@ -7874,7 +7881,7 @@
       "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.0.2"
       },
       "dependencies": {
         "is-buffer": {
@@ -7889,7 +7896,7 @@
           "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
           "dev": true,
           "requires": {
-            "is-buffer": "1.1.6"
+            "is-buffer": "^1.1.5"
           }
         }
       }
@@ -7911,7 +7918,7 @@
       "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
       "dev": true,
       "requires": {
-        "binary-extensions": "1.13.1"
+        "binary-extensions": "^1.0.0"
       }
     },
     "is-buffer": {
@@ -7930,12 +7937,12 @@
       "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
       "dev": true,
       "requires": {
-        "css-color-names": "0.0.4",
-        "hex-color-regex": "1.1.0",
-        "hsl-regex": "1.0.0",
-        "hsla-regex": "1.0.0",
-        "rgb-regex": "1.0.1",
-        "rgba-regex": "1.0.0"
+        "css-color-names": "^0.0.4",
+        "hex-color-regex": "^1.1.0",
+        "hsl-regex": "^1.0.0",
+        "hsla-regex": "^1.0.0",
+        "rgb-regex": "^1.0.1",
+        "rgba-regex": "^1.0.0"
       }
     },
     "is-data-descriptor": {
@@ -7944,7 +7951,7 @@
       "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.0.2"
       },
       "dependencies": {
         "is-buffer": {
@@ -7959,7 +7966,7 @@
           "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
           "dev": true,
           "requires": {
-            "is-buffer": "1.1.6"
+            "is-buffer": "^1.1.5"
           }
         }
       }
@@ -7975,9 +7982,9 @@
       "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
       "dev": true,
       "requires": {
-        "is-accessor-descriptor": "0.1.6",
-        "is-data-descriptor": "0.1.4",
-        "kind-of": "5.1.0"
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
       },
       "dependencies": {
         "kind-of": {
@@ -8011,7 +8018,7 @@
       "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
       "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
       "requires": {
-        "number-is-nan": "1.0.1"
+        "number-is-nan": "^1.0.0"
       }
     },
     "is-fullwidth-code-point": {
@@ -8025,7 +8032,7 @@
       "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
       "dev": true,
       "requires": {
-        "is-extglob": "2.1.1"
+        "is-extglob": "^2.1.1"
       }
     },
     "is-number": {
@@ -8034,7 +8041,7 @@
       "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.0.2"
       },
       "dependencies": {
         "is-buffer": {
@@ -8049,7 +8056,7 @@
           "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
           "dev": true,
           "requires": {
-            "is-buffer": "1.1.6"
+            "is-buffer": "^1.1.5"
           }
         }
       }
@@ -8072,7 +8079,7 @@
       "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
       "dev": true,
       "requires": {
-        "is-path-inside": "2.1.0"
+        "is-path-inside": "^2.1.0"
       }
     },
     "is-path-inside": {
@@ -8081,7 +8088,7 @@
       "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
       "dev": true,
       "requires": {
-        "path-is-inside": "1.0.2"
+        "path-is-inside": "^1.0.2"
       }
     },
     "is-plain-obj": {
@@ -8095,7 +8102,7 @@
       "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
       "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
       "requires": {
-        "isobject": "3.0.1"
+        "isobject": "^3.0.1"
       }
     },
     "is-promise": {
@@ -8108,7 +8115,7 @@
       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
       "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
       "requires": {
-        "has": "1.0.3"
+        "has": "^1.0.1"
       }
     },
     "is-relative": {
@@ -8116,7 +8123,7 @@
       "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz",
       "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=",
       "requires": {
-        "is-unc-path": "0.1.2"
+        "is-unc-path": "^0.1.1"
       }
     },
     "is-resolvable": {
@@ -8137,7 +8144,7 @@
       "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
       "dev": true,
       "requires": {
-        "html-comment-regex": "1.1.2"
+        "html-comment-regex": "^1.1.0"
       }
     },
     "is-symbol": {
@@ -8145,7 +8152,7 @@
       "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
       "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
       "requires": {
-        "has-symbols": "1.0.0"
+        "has-symbols": "^1.0.0"
       }
     },
     "is-typedarray": {
@@ -8158,7 +8165,7 @@
       "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz",
       "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=",
       "requires": {
-        "unc-path-regex": "0.1.2"
+        "unc-path-regex": "^0.1.0"
       }
     },
     "is-utf8": {
@@ -8218,8 +8225,8 @@
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
       "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
       "requires": {
-        "argparse": "1.0.10",
-        "esprima": "4.0.1"
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
       }
     },
     "jsbn": {
@@ -8255,7 +8262,7 @@
       "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
       "optional": true,
       "requires": {
-        "jsonify": "0.0.0"
+        "jsonify": "~0.0.0"
       }
     },
     "json-stable-stringify-without-jsonify": {
@@ -8279,7 +8286,7 @@
       "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
       "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
       "requires": {
-        "minimist": "1.2.0"
+        "minimist": "^1.2.0"
       },
       "dependencies": {
         "minimist": {
@@ -8311,8 +8318,8 @@
       "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz",
       "integrity": "sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==",
       "requires": {
-        "array-includes": "3.0.3",
-        "object.assign": "4.1.0"
+        "array-includes": "^3.0.3",
+        "object.assign": "^4.1.0"
       }
     },
     "killable": {
@@ -8332,8 +8339,8 @@
       "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==",
       "dev": true,
       "requires": {
-        "lodash": "4.17.15",
-        "webpack-sources": "1.4.3"
+        "lodash": "^4.17.5",
+        "webpack-sources": "^1.1.0"
       }
     },
     "lcid": {
@@ -8341,7 +8348,7 @@
       "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
       "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
       "requires": {
-        "invert-kv": "1.0.0"
+        "invert-kv": "^1.0.0"
       }
     },
     "less": {
@@ -8349,15 +8356,15 @@
       "resolved": "https://registry.npmjs.org/less/-/less-3.10.3.tgz",
       "integrity": "sha512-vz32vqfgmoxF1h3K4J+yKCtajH0PWmjkIFgbs5d78E/c/e+UQTnI+lWK+1eQRE95PXM2mC3rJlLSSP9VQHnaow==",
       "requires": {
-        "clone": "2.1.2",
-        "errno": "0.1.7",
-        "graceful-fs": "4.2.2",
-        "image-size": "0.5.5",
-        "mime": "1.6.0",
-        "mkdirp": "0.5.1",
-        "promise": "7.3.1",
-        "request": "2.88.0",
-        "source-map": "0.6.1"
+        "clone": "^2.1.2",
+        "errno": "^0.1.1",
+        "graceful-fs": "^4.1.2",
+        "image-size": "~0.5.0",
+        "mime": "^1.4.1",
+        "mkdirp": "^0.5.0",
+        "promise": "^7.1.1",
+        "request": "^2.83.0",
+        "source-map": "~0.6.0"
       }
     },
     "less-loader": {
@@ -8366,9 +8373,9 @@
       "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==",
       "dev": true,
       "requires": {
-        "clone": "2.1.2",
-        "loader-utils": "1.2.3",
-        "pify": "3.0.0"
+        "clone": "^2.1.1",
+        "loader-utils": "^1.1.0",
+        "pify": "^3.0.0"
       },
       "dependencies": {
         "pify": {
@@ -8384,9 +8391,9 @@
       "resolved": "https://registry.npmjs.org/less-middleware/-/less-middleware-2.2.1.tgz",
       "integrity": "sha512-1fDsyifwRGObMmqaZhkTDAmVnvgpZmdf6ZTSCbVv9vt+xhlzOz5TDNlLCbITsusEB3d0OKOEadwN9ic3PyOWCg==",
       "requires": {
-        "less": "2.7.3",
-        "mkdirp": "0.5.1",
-        "node.extend": "2.0.2"
+        "less": "~2.7.1",
+        "mkdirp": "~0.5.1",
+        "node.extend": "~2.0.0"
       },
       "dependencies": {
         "ajv": {
@@ -8395,8 +8402,8 @@
           "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
           "optional": true,
           "requires": {
-            "co": "4.6.0",
-            "json-stable-stringify": "1.0.1"
+            "co": "^4.6.0",
+            "json-stable-stringify": "^1.0.1"
           }
         },
         "assert-plus": {
@@ -8417,9 +8424,9 @@
           "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
           "optional": true,
           "requires": {
-            "asynckit": "0.4.0",
-            "combined-stream": "1.0.8",
-            "mime-types": "2.1.24"
+            "asynckit": "^0.4.0",
+            "combined-stream": "^1.0.5",
+            "mime-types": "^2.1.12"
           }
         },
         "har-schema": {
@@ -8434,8 +8441,8 @@
           "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
           "optional": true,
           "requires": {
-            "ajv": "4.11.8",
-            "har-schema": "1.0.5"
+            "ajv": "^4.9.1",
+            "har-schema": "^1.0.5"
           }
         },
         "http-signature": {
@@ -8444,9 +8451,9 @@
           "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
           "optional": true,
           "requires": {
-            "assert-plus": "0.2.0",
-            "jsprim": "1.4.1",
-            "sshpk": "1.16.1"
+            "assert-plus": "^0.2.0",
+            "jsprim": "^1.2.2",
+            "sshpk": "^1.7.0"
           }
         },
         "less": {
@@ -8454,14 +8461,14 @@
           "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz",
           "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==",
           "requires": {
-            "errno": "0.1.7",
-            "graceful-fs": "4.2.2",
-            "image-size": "0.5.5",
-            "mime": "1.6.0",
-            "mkdirp": "0.5.1",
-            "promise": "7.3.1",
+            "errno": "^0.1.1",
+            "graceful-fs": "^4.1.2",
+            "image-size": "~0.5.0",
+            "mime": "^1.2.11",
+            "mkdirp": "^0.5.0",
+            "promise": "^7.1.1",
             "request": "2.81.0",
-            "source-map": "0.5.7"
+            "source-map": "^0.5.3"
           }
         },
         "oauth-sign": {
@@ -8494,28 +8501,28 @@
           "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
           "optional": true,
           "requires": {
-            "aws-sign2": "0.6.0",
-            "aws4": "1.8.0",
-            "caseless": "0.12.0",
-            "combined-stream": "1.0.8",
-            "extend": "3.0.2",
-            "forever-agent": "0.6.1",
-            "form-data": "2.1.4",
-            "har-validator": "4.2.1",
-            "hawk": "3.1.3",
-            "http-signature": "1.1.1",
-            "is-typedarray": "1.0.0",
-            "isstream": "0.1.2",
-            "json-stringify-safe": "5.0.1",
-            "mime-types": "2.1.24",
-            "oauth-sign": "0.8.2",
-            "performance-now": "0.2.0",
-            "qs": "6.4.0",
-            "safe-buffer": "5.2.0",
-            "stringstream": "0.0.6",
-            "tough-cookie": "2.3.4",
-            "tunnel-agent": "0.6.0",
-            "uuid": "3.3.3"
+            "aws-sign2": "~0.6.0",
+            "aws4": "^1.2.1",
+            "caseless": "~0.12.0",
+            "combined-stream": "~1.0.5",
+            "extend": "~3.0.0",
+            "forever-agent": "~0.6.1",
+            "form-data": "~2.1.1",
+            "har-validator": "~4.2.1",
+            "hawk": "~3.1.3",
+            "http-signature": "~1.1.0",
+            "is-typedarray": "~1.0.0",
+            "isstream": "~0.1.2",
+            "json-stringify-safe": "~5.0.1",
+            "mime-types": "~2.1.7",
+            "oauth-sign": "~0.8.1",
+            "performance-now": "^0.2.0",
+            "qs": "~6.4.0",
+            "safe-buffer": "^5.0.1",
+            "stringstream": "~0.0.4",
+            "tough-cookie": "~2.3.0",
+            "tunnel-agent": "^0.6.0",
+            "uuid": "^3.0.0"
           }
         },
         "source-map": {
@@ -8530,7 +8537,7 @@
           "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
           "optional": true,
           "requires": {
-            "punycode": "1.4.1"
+            "punycode": "^1.4.1"
           }
         }
       }
@@ -8540,8 +8547,8 @@
       "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
       "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
       "requires": {
-        "prelude-ls": "1.1.2",
-        "type-check": "0.3.2"
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
       }
     },
     "line-height": {
@@ -8549,7 +8556,7 @@
       "resolved": "https://registry.npmjs.org/line-height/-/line-height-0.1.1.tgz",
       "integrity": "sha1-6GcF+/Cm9QYHrtZVANadstnbN+I=",
       "requires": {
-        "computed-style": "0.1.4"
+        "computed-style": "~0.1.3"
       }
     },
     "load-json-file": {
@@ -8557,10 +8564,10 @@
       "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
       "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
       "requires": {
-        "graceful-fs": "4.2.2",
-        "parse-json": "2.2.0",
-        "pify": "2.3.0",
-        "strip-bom": "3.0.0"
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^2.2.0",
+        "pify": "^2.0.0",
+        "strip-bom": "^3.0.0"
       }
     },
     "loader-fs-cache": {
@@ -8568,7 +8575,7 @@
       "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz",
       "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==",
       "requires": {
-        "find-cache-dir": "0.1.1",
+        "find-cache-dir": "^0.1.1",
         "mkdirp": "0.5.1"
       }
     },
@@ -8583,9 +8590,9 @@
       "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
       "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
       "requires": {
-        "big.js": "5.2.2",
-        "emojis-list": "2.1.0",
-        "json5": "1.0.1"
+        "big.js": "^5.2.2",
+        "emojis-list": "^2.0.0",
+        "json5": "^1.0.1"
       }
     },
     "locate-path": {
@@ -8593,8 +8600,8 @@
       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
       "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
       "requires": {
-        "p-locate": "2.0.0",
-        "path-exists": "3.0.0"
+        "p-locate": "^2.0.0",
+        "path-exists": "^3.0.0"
       }
     },
     "lodash": {
@@ -8641,7 +8648,7 @@
       "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
       "dev": true,
       "requires": {
-        "chalk": "2.4.2"
+        "chalk": "^2.0.1"
       }
     },
     "loglevel": {
@@ -8656,8 +8663,8 @@
       "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==",
       "dev": true,
       "requires": {
-        "es6-symbol": "3.1.2",
-        "object.assign": "4.1.0"
+        "es6-symbol": "^3.1.1",
+        "object.assign": "^4.1.0"
       }
     },
     "loose-envify": {
@@ -8665,7 +8672,7 @@
       "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
       "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
       "requires": {
-        "js-tokens": "4.0.0"
+        "js-tokens": "^3.0.0 || ^4.0.0"
       }
     },
     "loud-rejection": {
@@ -8673,8 +8680,8 @@
       "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
       "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
       "requires": {
-        "currently-unhandled": "0.4.1",
-        "signal-exit": "3.0.2"
+        "currently-unhandled": "^0.4.1",
+        "signal-exit": "^3.0.0"
       }
     },
     "lower-case": {
@@ -8688,8 +8695,8 @@
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
       "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
       "requires": {
-        "pseudomap": "1.0.2",
-        "yallist": "2.1.2"
+        "pseudomap": "^1.0.2",
+        "yallist": "^2.1.2"
       }
     },
     "make-dir": {
@@ -8698,7 +8705,7 @@
       "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
       "dev": true,
       "requires": {
-        "pify": "3.0.0"
+        "pify": "^3.0.0"
       },
       "dependencies": {
         "pify": {
@@ -8727,7 +8734,7 @@
       "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
       "dev": true,
       "requires": {
-        "p-defer": "1.0.0"
+        "p-defer": "^1.0.0"
       }
     },
     "map-cache": {
@@ -8747,11 +8754,12 @@
       "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
       "dev": true,
       "requires": {
-        "object-visit": "1.0.1"
+        "object-visit": "^1.0.0"
       }
     },
     "matches-selector": {
-      "version": "github:desandro/matches-selector#082376f4bbe7ff8c5c6bb258ec43259c9a80a7c3"
+      "version": "github:desandro/matches-selector#082376f4bbe7ff8c5c6bb258ec43259c9a80a7c3",
+      "from": "github:desandro/matches-selector#v1.0.3"
     },
     "math-expression-evaluator": {
       "version": "1.2.17",
@@ -8764,9 +8772,9 @@
       "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
       "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
       "requires": {
-        "hash-base": "3.0.4",
-        "inherits": "2.0.4",
-        "safe-buffer": "5.2.0"
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
       }
     },
     "mdn-data": {
@@ -8787,9 +8795,9 @@
       "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
       "dev": true,
       "requires": {
-        "map-age-cleaner": "0.1.3",
-        "mimic-fn": "2.1.0",
-        "p-is-promise": "2.1.0"
+        "map-age-cleaner": "^0.1.1",
+        "mimic-fn": "^2.0.0",
+        "p-is-promise": "^2.0.0"
       },
       "dependencies": {
         "mimic-fn": {
@@ -8810,16 +8818,16 @@
       "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
       "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
       "requires": {
-        "camelcase-keys": "2.1.0",
-        "decamelize": "1.2.0",
-        "loud-rejection": "1.6.0",
-        "map-obj": "1.0.1",
-        "minimist": "1.2.0",
-        "normalize-package-data": "2.5.0",
-        "object-assign": "4.1.1",
-        "read-pkg-up": "1.0.1",
-        "redent": "1.0.0",
-        "trim-newlines": "1.0.0"
+        "camelcase-keys": "^2.0.0",
+        "decamelize": "^1.1.2",
+        "loud-rejection": "^1.0.0",
+        "map-obj": "^1.0.1",
+        "minimist": "^1.1.3",
+        "normalize-package-data": "^2.3.4",
+        "object-assign": "^4.0.1",
+        "read-pkg-up": "^1.0.1",
+        "redent": "^1.0.0",
+        "trim-newlines": "^1.0.0"
       },
       "dependencies": {
         "find-up": {
@@ -8827,8 +8835,8 @@
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
           "requires": {
-            "path-exists": "2.1.0",
-            "pinkie-promise": "2.0.1"
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "load-json-file": {
@@ -8836,11 +8844,11 @@
           "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
           "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
           "requires": {
-            "graceful-fs": "4.2.2",
-            "parse-json": "2.2.0",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1",
-            "strip-bom": "2.0.0"
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "strip-bom": "^2.0.0"
           }
         },
         "minimist": {
@@ -8853,7 +8861,7 @@
           "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
           "requires": {
-            "pinkie-promise": "2.0.1"
+            "pinkie-promise": "^2.0.0"
           }
         },
         "path-type": {
@@ -8861,9 +8869,9 @@
           "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
           "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
           "requires": {
-            "graceful-fs": "4.2.2",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1"
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "read-pkg": {
@@ -8871,9 +8879,9 @@
           "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
           "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
           "requires": {
-            "load-json-file": "1.1.0",
-            "normalize-package-data": "2.5.0",
-            "path-type": "1.1.0"
+            "load-json-file": "^1.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^1.0.0"
           }
         },
         "read-pkg-up": {
@@ -8881,8 +8889,8 @@
           "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
           "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
           "requires": {
-            "find-up": "1.1.2",
-            "read-pkg": "1.1.0"
+            "find-up": "^1.0.0",
+            "read-pkg": "^1.0.0"
           }
         },
         "strip-bom": {
@@ -8890,7 +8898,7 @@
           "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
           "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
           "requires": {
-            "is-utf8": "0.2.1"
+            "is-utf8": "^0.2.0"
           }
         }
       }
@@ -8913,19 +8921,19 @@
       "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
       "dev": true,
       "requires": {
-        "arr-diff": "4.0.0",
-        "array-unique": "0.3.2",
-        "braces": "2.3.2",
-        "define-property": "2.0.2",
-        "extend-shallow": "3.0.2",
-        "extglob": "2.0.4",
-        "fragment-cache": "0.2.1",
-        "kind-of": "6.0.2",
-        "nanomatch": "1.2.13",
-        "object.pick": "1.3.0",
-        "regex-not": "1.0.2",
-        "snapdragon": "0.8.2",
-        "to-regex": "3.0.2"
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "braces": "^2.3.1",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "extglob": "^2.0.4",
+        "fragment-cache": "^0.2.1",
+        "kind-of": "^6.0.2",
+        "nanomatch": "^1.2.9",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.2"
       }
     },
     "miller-rabin": {
@@ -8933,8 +8941,8 @@
       "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
       "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
       "requires": {
-        "bn.js": "4.11.8",
-        "brorand": "1.1.0"
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
       }
     },
     "mime": {
@@ -8965,7 +8973,7 @@
       "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
       "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
       "requires": {
-        "dom-walk": "0.1.1"
+        "dom-walk": "^0.1.0"
       }
     },
     "mini-css-extract-plugin": {
@@ -8974,9 +8982,9 @@
       "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.2.3",
-        "schema-utils": "1.0.0",
-        "webpack-sources": "1.4.3"
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^1.0.0",
+        "webpack-sources": "^1.1.0"
       },
       "dependencies": {
         "schema-utils": {
@@ -8985,9 +8993,9 @@
           "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
           "dev": true,
           "requires": {
-            "ajv": "6.10.2",
-            "ajv-errors": "1.0.1",
-            "ajv-keywords": "3.4.1"
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
           }
         }
       }
@@ -9007,7 +9015,7 @@
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
       "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
       "requires": {
-        "brace-expansion": "1.1.11"
+        "brace-expansion": "^1.1.7"
       }
     },
     "minimist": {
@@ -9021,16 +9029,16 @@
       "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
       "dev": true,
       "requires": {
-        "concat-stream": "1.6.2",
-        "duplexify": "3.7.1",
-        "end-of-stream": "1.4.4",
-        "flush-write-stream": "1.1.1",
-        "from2": "2.3.0",
-        "parallel-transform": "1.2.0",
-        "pump": "2.0.1",
-        "pumpify": "1.5.1",
-        "stream-each": "1.2.3",
-        "through2": "2.0.5"
+        "concat-stream": "^1.5.0",
+        "duplexify": "^3.4.2",
+        "end-of-stream": "^1.1.0",
+        "flush-write-stream": "^1.0.0",
+        "from2": "^2.1.0",
+        "parallel-transform": "^1.1.0",
+        "pump": "^2.0.1",
+        "pumpify": "^1.3.3",
+        "stream-each": "^1.1.0",
+        "through2": "^2.0.0"
       }
     },
     "mixin-deep": {
@@ -9039,8 +9047,8 @@
       "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
       "dev": true,
       "requires": {
-        "for-in": "1.0.2",
-        "is-extendable": "1.0.1"
+        "for-in": "^1.0.2",
+        "is-extendable": "^1.0.1"
       },
       "dependencies": {
         "is-extendable": {
@@ -9049,7 +9057,7 @@
           "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
           "dev": true,
           "requires": {
-            "is-plain-object": "2.0.4"
+            "is-plain-object": "^2.0.4"
           }
         }
       }
@@ -9068,12 +9076,12 @@
       "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
       "dev": true,
       "requires": {
-        "aproba": "1.2.0",
-        "copy-concurrently": "1.0.5",
-        "fs-write-stream-atomic": "1.0.10",
-        "mkdirp": "0.5.1",
-        "rimraf": "2.7.1",
-        "run-queue": "1.0.3"
+        "aproba": "^1.1.1",
+        "copy-concurrently": "^1.0.0",
+        "fs-write-stream-atomic": "^1.0.8",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.3"
       }
     },
     "ms": {
@@ -9087,8 +9095,8 @@
       "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
       "dev": true,
       "requires": {
-        "dns-packet": "1.3.1",
-        "thunky": "1.0.3"
+        "dns-packet": "^1.3.1",
+        "thunky": "^1.0.2"
       }
     },
     "multicast-dns-service-types": {
@@ -9113,17 +9121,17 @@
       "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
       "dev": true,
       "requires": {
-        "arr-diff": "4.0.0",
-        "array-unique": "0.3.2",
-        "define-property": "2.0.2",
-        "extend-shallow": "3.0.2",
-        "fragment-cache": "0.2.1",
-        "is-windows": "1.0.2",
-        "kind-of": "6.0.2",
-        "object.pick": "1.3.0",
-        "regex-not": "1.0.2",
-        "snapdragon": "0.8.2",
-        "to-regex": "3.0.2"
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "fragment-cache": "^0.2.1",
+        "is-windows": "^1.0.2",
+        "kind-of": "^6.0.2",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
       },
       "dependencies": {
         "is-windows": {
@@ -9167,7 +9175,7 @@
       "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
       "dev": true,
       "requires": {
-        "lower-case": "1.1.4"
+        "lower-case": "^1.1.1"
       }
     },
     "node-forge": {
@@ -9181,18 +9189,18 @@
       "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
       "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
       "requires": {
-        "fstream": "1.0.12",
-        "glob": "7.1.4",
-        "graceful-fs": "4.2.2",
-        "mkdirp": "0.5.1",
-        "nopt": "3.0.6",
-        "npmlog": "4.1.2",
-        "osenv": "0.1.5",
-        "request": "2.88.0",
-        "rimraf": "2.7.1",
-        "semver": "5.3.0",
-        "tar": "2.2.2",
-        "which": "1.3.1"
+        "fstream": "^1.0.0",
+        "glob": "^7.0.3",
+        "graceful-fs": "^4.1.2",
+        "mkdirp": "^0.5.0",
+        "nopt": "2 || 3",
+        "npmlog": "0 || 1 || 2 || 3 || 4",
+        "osenv": "0",
+        "request": "^2.87.0",
+        "rimraf": "2",
+        "semver": "~5.3.0",
+        "tar": "^2.0.0",
+        "which": "1"
       },
       "dependencies": {
         "semver": {
@@ -9207,29 +9215,29 @@
       "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
       "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
       "requires": {
-        "assert": "1.5.0",
-        "browserify-zlib": "0.2.0",
-        "buffer": "4.9.1",
-        "console-browserify": "1.1.0",
-        "constants-browserify": "1.0.0",
-        "crypto-browserify": "3.12.0",
-        "domain-browser": "1.2.0",
-        "events": "3.0.0",
-        "https-browserify": "1.0.0",
-        "os-browserify": "0.3.0",
+        "assert": "^1.1.1",
+        "browserify-zlib": "^0.2.0",
+        "buffer": "^4.3.0",
+        "console-browserify": "^1.1.0",
+        "constants-browserify": "^1.0.0",
+        "crypto-browserify": "^3.11.0",
+        "domain-browser": "^1.1.1",
+        "events": "^3.0.0",
+        "https-browserify": "^1.0.0",
+        "os-browserify": "^0.3.0",
         "path-browserify": "0.0.1",
-        "process": "0.11.10",
-        "punycode": "1.4.1",
-        "querystring-es3": "0.2.1",
-        "readable-stream": "2.3.6",
-        "stream-browserify": "2.0.2",
-        "stream-http": "2.8.3",
-        "string_decoder": "1.3.0",
-        "timers-browserify": "2.0.11",
+        "process": "^0.11.10",
+        "punycode": "^1.2.4",
+        "querystring-es3": "^0.2.0",
+        "readable-stream": "^2.3.3",
+        "stream-browserify": "^2.0.1",
+        "stream-http": "^2.7.2",
+        "string_decoder": "^1.0.0",
+        "timers-browserify": "^2.0.4",
         "tty-browserify": "0.0.0",
-        "url": "0.11.0",
-        "util": "0.11.1",
-        "vm-browserify": "1.1.0"
+        "url": "^0.11.0",
+        "util": "^0.11.0",
+        "vm-browserify": "^1.0.1"
       },
       "dependencies": {
         "punycode": {
@@ -9245,7 +9253,7 @@
       "integrity": "sha512-JGcM/wndCN/2elJlU0IGdVEJQQnJwsLbgPCFd2pY7V0mxf17bZ0Gb/lgOtL29ZQhvEX5shnVhxQyZz3ex94N8w==",
       "dev": true,
       "requires": {
-        "semver": "6.3.0"
+        "semver": "^6.3.0"
       },
       "dependencies": {
         "semver": {
@@ -9261,23 +9269,23 @@
       "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz",
       "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==",
       "requires": {
-        "async-foreach": "0.1.3",
-        "chalk": "1.1.3",
-        "cross-spawn": "3.0.1",
-        "gaze": "1.1.3",
-        "get-stdin": "4.0.1",
-        "glob": "7.1.4",
-        "in-publish": "2.0.0",
-        "lodash": "4.17.15",
-        "meow": "3.7.0",
-        "mkdirp": "0.5.1",
-        "nan": "2.14.0",
-        "node-gyp": "3.8.0",
-        "npmlog": "4.1.2",
-        "request": "2.88.0",
-        "sass-graph": "2.2.4",
-        "stdout-stream": "1.4.1",
-        "true-case-path": "1.0.3"
+        "async-foreach": "^0.1.3",
+        "chalk": "^1.1.1",
+        "cross-spawn": "^3.0.0",
+        "gaze": "^1.0.0",
+        "get-stdin": "^4.0.1",
+        "glob": "^7.0.3",
+        "in-publish": "^2.0.0",
+        "lodash": "^4.17.11",
+        "meow": "^3.7.0",
+        "mkdirp": "^0.5.1",
+        "nan": "^2.13.2",
+        "node-gyp": "^3.8.0",
+        "npmlog": "^4.0.0",
+        "request": "^2.88.0",
+        "sass-graph": "^2.2.4",
+        "stdout-stream": "^1.4.0",
+        "true-case-path": "^1.0.2"
       },
       "dependencies": {
         "ansi-regex": {
@@ -9295,11 +9303,11 @@
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           }
         },
         "cross-spawn": {
@@ -9307,8 +9315,8 @@
           "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
           "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
           "requires": {
-            "lru-cache": "4.1.5",
-            "which": "1.3.1"
+            "lru-cache": "^4.0.1",
+            "which": "^1.2.9"
           }
         },
         "get-stdin": {
@@ -9321,7 +9329,7 @@
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         },
         "supports-color": {
@@ -9336,8 +9344,8 @@
       "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.2.tgz",
       "integrity": "sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ==",
       "requires": {
-        "has": "1.0.3",
-        "is": "3.3.0"
+        "has": "^1.0.3",
+        "is": "^3.2.1"
       }
     },
     "nopt": {
@@ -9345,7 +9353,7 @@
       "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
       "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
       "requires": {
-        "abbrev": "1.1.1"
+        "abbrev": "1"
       }
     },
     "normalize-package-data": {
@@ -9353,10 +9361,10 @@
       "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
       "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
       "requires": {
-        "hosted-git-info": "2.8.5",
-        "resolve": "1.12.0",
-        "semver": "5.5.0",
-        "validate-npm-package-license": "3.0.4"
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
       }
     },
     "normalize-path": {
@@ -9377,10 +9385,10 @@
       "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
       "dev": true,
       "requires": {
-        "object-assign": "4.1.1",
-        "prepend-http": "1.0.4",
-        "query-string": "4.3.4",
-        "sort-keys": "1.1.2"
+        "object-assign": "^4.0.1",
+        "prepend-http": "^1.0.0",
+        "query-string": "^4.1.0",
+        "sort-keys": "^1.0.0"
       }
     },
     "npm-run-path": {
@@ -9389,7 +9397,7 @@
       "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
       "dev": true,
       "requires": {
-        "path-key": "2.0.1"
+        "path-key": "^2.0.0"
       }
     },
     "npmlog": {
@@ -9397,10 +9405,10 @@
       "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
       "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
       "requires": {
-        "are-we-there-yet": "1.1.5",
-        "console-control-strings": "1.1.0",
-        "gauge": "2.7.4",
-        "set-blocking": "2.0.0"
+        "are-we-there-yet": "~1.1.2",
+        "console-control-strings": "~1.1.0",
+        "gauge": "~2.7.3",
+        "set-blocking": "~2.0.0"
       }
     },
     "nth-check": {
@@ -9409,7 +9417,7 @@
       "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
       "dev": true,
       "requires": {
-        "boolbase": "1.0.0"
+        "boolbase": "~1.0.0"
       }
     },
     "num2fraction": {
@@ -9439,9 +9447,9 @@
       "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
       "dev": true,
       "requires": {
-        "copy-descriptor": "0.1.1",
-        "define-property": "0.2.5",
-        "kind-of": "3.2.2"
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
       },
       "dependencies": {
         "define-property": {
@@ -9450,7 +9458,7 @@
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "0.1.6"
+            "is-descriptor": "^0.1.0"
           }
         },
         "is-buffer": {
@@ -9465,7 +9473,7 @@
           "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
           "dev": true,
           "requires": {
-            "is-buffer": "1.1.6"
+            "is-buffer": "^1.1.5"
           }
         }
       }
@@ -9503,7 +9511,7 @@
       "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
       "dev": true,
       "requires": {
-        "isobject": "3.0.1"
+        "isobject": "^3.0.0"
       }
     },
     "object.assign": {
@@ -9511,10 +9519,10 @@
       "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
       "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
       "requires": {
-        "define-properties": "1.1.3",
-        "function-bind": "1.1.1",
-        "has-symbols": "1.0.0",
-        "object-keys": "1.1.1"
+        "define-properties": "^1.1.2",
+        "function-bind": "^1.1.1",
+        "has-symbols": "^1.0.0",
+        "object-keys": "^1.0.11"
       }
     },
     "object.entries": {
@@ -9522,10 +9530,10 @@
       "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz",
       "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==",
       "requires": {
-        "define-properties": "1.1.3",
-        "es-abstract": "1.15.0",
-        "function-bind": "1.1.1",
-        "has": "1.0.3"
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.12.0",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3"
       }
     },
     "object.fromentries": {
@@ -9533,10 +9541,10 @@
       "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.1.tgz",
       "integrity": "sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA==",
       "requires": {
-        "define-properties": "1.1.3",
-        "es-abstract": "1.15.0",
-        "function-bind": "1.1.1",
-        "has": "1.0.3"
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.15.0",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3"
       }
     },
     "object.getownpropertydescriptors": {
@@ -9545,8 +9553,8 @@
       "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
       "dev": true,
       "requires": {
-        "define-properties": "1.1.3",
-        "es-abstract": "1.15.0"
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.5.1"
       }
     },
     "object.pick": {
@@ -9555,7 +9563,7 @@
       "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
       "dev": true,
       "requires": {
-        "isobject": "3.0.1"
+        "isobject": "^3.0.1"
       }
     },
     "object.values": {
@@ -9563,10 +9571,10 @@
       "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
       "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
       "requires": {
-        "define-properties": "1.1.3",
-        "es-abstract": "1.15.0",
-        "function-bind": "1.1.1",
-        "has": "1.0.3"
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.12.0",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3"
       }
     },
     "obuf": {
@@ -9595,7 +9603,7 @@
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
       "requires": {
-        "wrappy": "1.0.2"
+        "wrappy": "1"
       }
     },
     "onetime": {
@@ -9603,7 +9611,7 @@
       "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
       "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
       "requires": {
-        "mimic-fn": "1.2.0"
+        "mimic-fn": "^1.0.0"
       }
     },
     "opn": {
@@ -9612,7 +9620,7 @@
       "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
       "dev": true,
       "requires": {
-        "is-wsl": "1.1.0"
+        "is-wsl": "^1.1.0"
       }
     },
     "optimize-css-assets-webpack-plugin": {
@@ -9621,8 +9629,8 @@
       "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==",
       "dev": true,
       "requires": {
-        "cssnano": "4.1.10",
-        "last-call-webpack-plugin": "3.0.0"
+        "cssnano": "^4.1.10",
+        "last-call-webpack-plugin": "^3.0.0"
       },
       "dependencies": {
         "cssnano": {
@@ -9631,10 +9639,10 @@
           "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
           "dev": true,
           "requires": {
-            "cosmiconfig": "5.2.1",
-            "cssnano-preset-default": "4.0.7",
-            "is-resolvable": "1.1.0",
-            "postcss": "7.0.18"
+            "cosmiconfig": "^5.0.0",
+            "cssnano-preset-default": "^4.0.7",
+            "is-resolvable": "^1.0.0",
+            "postcss": "^7.0.0"
           }
         },
         "postcss": {
@@ -9643,9 +9651,9 @@
           "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "6.1.0"
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
           }
         },
         "supports-color": {
@@ -9654,7 +9662,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
@@ -9664,12 +9672,12 @@
       "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
       "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
       "requires": {
-        "deep-is": "0.1.3",
-        "fast-levenshtein": "2.0.6",
-        "levn": "0.3.0",
-        "prelude-ls": "1.1.2",
-        "type-check": "0.3.2",
-        "wordwrap": "1.0.0"
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.4",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "wordwrap": "~1.0.0"
       }
     },
     "original": {
@@ -9678,7 +9686,7 @@
       "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
       "dev": true,
       "requires": {
-        "url-parse": "1.4.7"
+        "url-parse": "^1.4.3"
       }
     },
     "os-browserify": {
@@ -9696,7 +9704,7 @@
       "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
       "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
       "requires": {
-        "lcid": "1.0.0"
+        "lcid": "^1.0.0"
       }
     },
     "os-tmpdir": {
@@ -9709,12 +9717,13 @@
       "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
       "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
       "requires": {
-        "os-homedir": "1.0.2",
-        "os-tmpdir": "1.0.2"
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.0"
       }
     },
     "outlayer": {
       "version": "github:eiriklv/outlayer#aea1c8239d30ccc1d3664ca3fff2f6d4b20fb812",
+      "from": "github:eiriklv/outlayer",
       "requires": {
         "desandro-get-style-property": "github:eiriklv/get-style-property#a5a74ad48d96c7d5ddcf652e9fa5d4283af37823",
         "doc-ready": "github:eiriklv/doc-ready#31c2481101af5dab33311fea4c7fc684b58fa8ad",
@@ -9725,7 +9734,8 @@
       },
       "dependencies": {
         "eventie": {
-          "version": "github:eiriklv/eventie#c9d290c6aa57712257dc8c0b6bf21c9374190a3c"
+          "version": "github:eiriklv/eventie#c9d290c6aa57712257dc8c0b6bf21c9374190a3c",
+          "from": "github:eiriklv/eventie"
         }
       }
     },
@@ -9735,9 +9745,9 @@
       "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.2.2",
-        "is-plain-obj": "1.1.0",
-        "mkdirp": "0.5.1"
+        "graceful-fs": "^4.1.11",
+        "is-plain-obj": "^1.1.0",
+        "mkdirp": "^0.5.1"
       }
     },
     "p-defer": {
@@ -9763,7 +9773,7 @@
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
       "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
       "requires": {
-        "p-try": "1.0.0"
+        "p-try": "^1.0.0"
       }
     },
     "p-locate": {
@@ -9771,7 +9781,7 @@
       "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
       "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
       "requires": {
-        "p-limit": "1.3.0"
+        "p-limit": "^1.1.0"
       }
     },
     "p-map": {
@@ -9786,7 +9796,7 @@
       "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
       "dev": true,
       "requires": {
-        "retry": "0.12.0"
+        "retry": "^0.12.0"
       }
     },
     "p-try": {
@@ -9796,6 +9806,7 @@
     },
     "packery": {
       "version": "github:eiriklv/packery#8e812a0a16575ef923f5e72efcea85aadc6fea67",
+      "from": "github:eiriklv/packery",
       "requires": {
         "classie": "github:eiriklv/classie#da1d3019904433872a8656d3cd69fc41d69c477a",
         "desandro-get-style-property": "github:eiriklv/get-style-property#a5a74ad48d96c7d5ddcf652e9fa5d4283af37823",
@@ -9814,9 +9825,9 @@
       "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
       "dev": true,
       "requires": {
-        "cyclist": "1.0.1",
-        "inherits": "2.0.4",
-        "readable-stream": "2.3.6"
+        "cyclist": "^1.0.1",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
       }
     },
     "param-case": {
@@ -9825,7 +9836,7 @@
       "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
       "dev": true,
       "requires": {
-        "no-case": "2.3.2"
+        "no-case": "^2.2.0"
       }
     },
     "parent-module": {
@@ -9833,7 +9844,7 @@
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
       "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
       "requires": {
-        "callsites": "3.1.0"
+        "callsites": "^3.0.0"
       }
     },
     "parse-asn1": {
@@ -9841,12 +9852,12 @@
       "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
       "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
       "requires": {
-        "asn1.js": "4.10.1",
-        "browserify-aes": "1.2.0",
-        "create-hash": "1.2.0",
-        "evp_bytestokey": "1.0.3",
-        "pbkdf2": "3.0.17",
-        "safe-buffer": "5.2.0"
+        "asn1.js": "^4.0.0",
+        "browserify-aes": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.0",
+        "pbkdf2": "^3.0.3",
+        "safe-buffer": "^5.1.1"
       }
     },
     "parse-json": {
@@ -9854,7 +9865,7 @@
       "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
       "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
       "requires": {
-        "error-ex": "1.3.2"
+        "error-ex": "^1.2.0"
       }
     },
     "parse-passwd": {
@@ -9881,8 +9892,8 @@
       "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
       "dev": true,
       "requires": {
-        "process": "0.11.10",
-        "util": "0.10.4"
+        "process": "^0.11.1",
+        "util": "^0.10.3"
       },
       "dependencies": {
         "inherits": {
@@ -9958,7 +9969,7 @@
       "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
       "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
       "requires": {
-        "pify": "2.3.0"
+        "pify": "^2.0.0"
       }
     },
     "pbkdf2": {
@@ -9966,11 +9977,11 @@
       "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
       "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
       "requires": {
-        "create-hash": "1.2.0",
-        "create-hmac": "1.1.7",
-        "ripemd160": "2.0.2",
-        "safe-buffer": "5.2.0",
-        "sha.js": "2.4.11"
+        "create-hash": "^1.1.2",
+        "create-hmac": "^1.1.4",
+        "ripemd160": "^2.0.1",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
       }
     },
     "performance-now": {
@@ -9993,7 +10004,7 @@
       "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
       "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
       "requires": {
-        "pinkie": "2.0.4"
+        "pinkie": "^2.0.0"
       }
     },
     "pkg-dir": {
@@ -10001,7 +10012,7 @@
       "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
       "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
       "requires": {
-        "find-up": "1.1.2"
+        "find-up": "^1.0.0"
       },
       "dependencies": {
         "find-up": {
@@ -10009,8 +10020,8 @@
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
           "requires": {
-            "path-exists": "2.1.0",
-            "pinkie-promise": "2.0.1"
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "path-exists": {
@@ -10018,7 +10029,7 @@
           "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
           "requires": {
-            "pinkie-promise": "2.0.1"
+            "pinkie-promise": "^2.0.0"
           }
         }
       }
@@ -10028,7 +10039,7 @@
       "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
       "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
       "requires": {
-        "find-up": "2.1.0"
+        "find-up": "^2.1.0"
       }
     },
     "portfinder": {
@@ -10037,9 +10048,9 @@
       "integrity": "sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg==",
       "dev": true,
       "requires": {
-        "async": "1.5.2",
-        "debug": "2.6.9",
-        "mkdirp": "0.5.1"
+        "async": "^1.5.2",
+        "debug": "^2.2.0",
+        "mkdirp": "0.5.x"
       },
       "dependencies": {
         "async": {
@@ -10071,10 +10082,10 @@
       "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
       "dev": true,
       "requires": {
-        "chalk": "1.1.3",
-        "js-base64": "2.5.1",
-        "source-map": "0.5.7",
-        "supports-color": "3.2.3"
+        "chalk": "^1.1.3",
+        "js-base64": "^2.1.9",
+        "source-map": "^0.5.6",
+        "supports-color": "^3.2.3"
       },
       "dependencies": {
         "ansi-regex": {
@@ -10095,11 +10106,11 @@
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -10128,7 +10139,7 @@
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
           "dev": true,
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         },
         "supports-color": {
@@ -10137,7 +10148,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -10148,9 +10159,9 @@
       "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18",
-        "postcss-message-helpers": "2.0.0",
-        "reduce-css-calc": "1.3.0"
+        "postcss": "^5.0.2",
+        "postcss-message-helpers": "^2.0.0",
+        "reduce-css-calc": "^1.2.6"
       }
     },
     "postcss-colormin": {
@@ -10159,9 +10170,9 @@
       "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
       "dev": true,
       "requires": {
-        "colormin": "1.1.2",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "colormin": "^1.0.5",
+        "postcss": "^5.0.13",
+        "postcss-value-parser": "^3.2.3"
       }
     },
     "postcss-convert-values": {
@@ -10170,8 +10181,8 @@
       "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "postcss": "^5.0.11",
+        "postcss-value-parser": "^3.1.2"
       }
     },
     "postcss-discard-comments": {
@@ -10180,7 +10191,7 @@
       "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.14"
       }
     },
     "postcss-discard-duplicates": {
@@ -10189,7 +10200,7 @@
       "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.4"
       }
     },
     "postcss-discard-empty": {
@@ -10198,7 +10209,7 @@
       "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.14"
       }
     },
     "postcss-discard-overridden": {
@@ -10207,7 +10218,7 @@
       "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.16"
       }
     },
     "postcss-discard-unused": {
@@ -10216,8 +10227,8 @@
       "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18",
-        "uniqs": "2.0.0"
+        "postcss": "^5.0.14",
+        "uniqs": "^2.0.0"
       }
     },
     "postcss-filter-plugins": {
@@ -10226,7 +10237,7 @@
       "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.4"
       }
     },
     "postcss-merge-idents": {
@@ -10235,9 +10246,9 @@
       "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
       "dev": true,
       "requires": {
-        "has": "1.0.3",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "has": "^1.0.1",
+        "postcss": "^5.0.10",
+        "postcss-value-parser": "^3.1.1"
       }
     },
     "postcss-merge-longhand": {
@@ -10246,7 +10257,7 @@
       "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.4"
       }
     },
     "postcss-merge-rules": {
@@ -10255,11 +10266,11 @@
       "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
       "dev": true,
       "requires": {
-        "browserslist": "1.7.7",
-        "caniuse-api": "1.6.1",
-        "postcss": "5.2.18",
-        "postcss-selector-parser": "2.2.3",
-        "vendors": "1.0.3"
+        "browserslist": "^1.5.2",
+        "caniuse-api": "^1.5.2",
+        "postcss": "^5.0.4",
+        "postcss-selector-parser": "^2.2.2",
+        "vendors": "^1.0.0"
       },
       "dependencies": {
         "browserslist": {
@@ -10268,8 +10279,8 @@
           "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
           "dev": true,
           "requires": {
-            "caniuse-db": "1.0.30000999",
-            "electron-to-chromium": "1.3.280"
+            "caniuse-db": "^1.0.30000639",
+            "electron-to-chromium": "^1.2.7"
           }
         }
       }
@@ -10286,9 +10297,9 @@
       "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
       "dev": true,
       "requires": {
-        "object-assign": "4.1.1",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "object-assign": "^4.0.1",
+        "postcss": "^5.0.4",
+        "postcss-value-parser": "^3.0.2"
       }
     },
     "postcss-minify-gradients": {
@@ -10297,8 +10308,8 @@
       "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "postcss": "^5.0.12",
+        "postcss-value-parser": "^3.3.0"
       }
     },
     "postcss-minify-params": {
@@ -10307,10 +10318,10 @@
       "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
       "dev": true,
       "requires": {
-        "alphanum-sort": "1.0.2",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1",
-        "uniqs": "2.0.0"
+        "alphanum-sort": "^1.0.1",
+        "postcss": "^5.0.2",
+        "postcss-value-parser": "^3.0.2",
+        "uniqs": "^2.0.0"
       }
     },
     "postcss-minify-selectors": {
@@ -10319,10 +10330,10 @@
       "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
       "dev": true,
       "requires": {
-        "alphanum-sort": "1.0.2",
-        "has": "1.0.3",
-        "postcss": "5.2.18",
-        "postcss-selector-parser": "2.2.3"
+        "alphanum-sort": "^1.0.2",
+        "has": "^1.0.1",
+        "postcss": "^5.0.14",
+        "postcss-selector-parser": "^2.0.0"
       }
     },
     "postcss-modules-extract-imports": {
@@ -10331,7 +10342,7 @@
       "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==",
       "dev": true,
       "requires": {
-        "postcss": "6.0.23"
+        "postcss": "^6.0.1"
       },
       "dependencies": {
         "postcss": {
@@ -10340,9 +10351,9 @@
           "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "5.5.0"
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.4.0"
           }
         }
       }
@@ -10353,8 +10364,8 @@
       "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
       "dev": true,
       "requires": {
-        "css-selector-tokenizer": "0.7.1",
-        "postcss": "6.0.23"
+        "css-selector-tokenizer": "^0.7.0",
+        "postcss": "^6.0.1"
       },
       "dependencies": {
         "postcss": {
@@ -10363,9 +10374,9 @@
           "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "5.5.0"
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.4.0"
           }
         }
       }
@@ -10376,8 +10387,8 @@
       "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
       "dev": true,
       "requires": {
-        "css-selector-tokenizer": "0.7.1",
-        "postcss": "6.0.23"
+        "css-selector-tokenizer": "^0.7.0",
+        "postcss": "^6.0.1"
       },
       "dependencies": {
         "postcss": {
@@ -10386,9 +10397,9 @@
           "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "5.5.0"
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.4.0"
           }
         }
       }
@@ -10399,8 +10410,8 @@
       "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
       "dev": true,
       "requires": {
-        "icss-replace-symbols": "1.1.0",
-        "postcss": "6.0.23"
+        "icss-replace-symbols": "^1.1.0",
+        "postcss": "^6.0.1"
       },
       "dependencies": {
         "postcss": {
@@ -10409,9 +10420,9 @@
           "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "5.5.0"
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.4.0"
           }
         }
       }
@@ -10422,7 +10433,7 @@
       "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.5"
       }
     },
     "postcss-normalize-display-values": {
@@ -10431,9 +10442,9 @@
       "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
       "dev": true,
       "requires": {
-        "cssnano-util-get-match": "4.0.0",
-        "postcss": "7.0.18",
-        "postcss-value-parser": "3.3.1"
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
       },
       "dependencies": {
         "postcss": {
@@ -10442,9 +10453,9 @@
           "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "6.1.0"
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
           }
         },
         "supports-color": {
@@ -10453,7 +10464,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
@@ -10464,10 +10475,10 @@
       "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
       "dev": true,
       "requires": {
-        "cssnano-util-get-arguments": "4.0.0",
-        "has": "1.0.3",
-        "postcss": "7.0.18",
-        "postcss-value-parser": "3.3.1"
+        "cssnano-util-get-arguments": "^4.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
       },
       "dependencies": {
         "postcss": {
@@ -10476,9 +10487,9 @@
           "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "6.1.0"
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
           }
         },
         "supports-color": {
@@ -10487,7 +10498,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
@@ -10498,10 +10509,10 @@
       "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
       "dev": true,
       "requires": {
-        "cssnano-util-get-arguments": "4.0.0",
-        "cssnano-util-get-match": "4.0.0",
-        "postcss": "7.0.18",
-        "postcss-value-parser": "3.3.1"
+        "cssnano-util-get-arguments": "^4.0.0",
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
       },
       "dependencies": {
         "postcss": {
@@ -10510,9 +10521,9 @@
           "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "6.1.0"
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
           }
         },
         "supports-color": {
@@ -10521,7 +10532,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
@@ -10532,9 +10543,9 @@
       "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
       "dev": true,
       "requires": {
-        "has": "1.0.3",
-        "postcss": "7.0.18",
-        "postcss-value-parser": "3.3.1"
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
       },
       "dependencies": {
         "postcss": {
@@ -10543,9 +10554,9 @@
           "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "6.1.0"
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
           }
         },
         "supports-color": {
@@ -10554,7 +10565,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
@@ -10565,9 +10576,9 @@
       "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
       "dev": true,
       "requires": {
-        "cssnano-util-get-match": "4.0.0",
-        "postcss": "7.0.18",
-        "postcss-value-parser": "3.3.1"
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
       },
       "dependencies": {
         "postcss": {
@@ -10576,9 +10587,9 @@
           "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "6.1.0"
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
           }
         },
         "supports-color": {
@@ -10587,7 +10598,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
@@ -10598,9 +10609,9 @@
       "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
       "dev": true,
       "requires": {
-        "browserslist": "4.7.0",
-        "postcss": "7.0.18",
-        "postcss-value-parser": "3.3.1"
+        "browserslist": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
       },
       "dependencies": {
         "postcss": {
@@ -10609,9 +10620,9 @@
           "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "6.1.0"
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
           }
         },
         "supports-color": {
@@ -10620,7 +10631,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
@@ -10631,10 +10642,10 @@
       "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
       "dev": true,
       "requires": {
-        "is-absolute-url": "2.1.0",
-        "normalize-url": "1.9.1",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "is-absolute-url": "^2.0.0",
+        "normalize-url": "^1.4.0",
+        "postcss": "^5.0.14",
+        "postcss-value-parser": "^3.2.3"
       }
     },
     "postcss-normalize-whitespace": {
@@ -10643,8 +10654,8 @@
       "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
       "dev": true,
       "requires": {
-        "postcss": "7.0.18",
-        "postcss-value-parser": "3.3.1"
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
       },
       "dependencies": {
         "postcss": {
@@ -10653,9 +10664,9 @@
           "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "6.1.0"
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
           }
         },
         "supports-color": {
@@ -10664,7 +10675,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
@@ -10675,8 +10686,8 @@
       "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "postcss": "^5.0.4",
+        "postcss-value-parser": "^3.0.1"
       }
     },
     "postcss-reduce-idents": {
@@ -10685,8 +10696,8 @@
       "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "postcss": "^5.0.4",
+        "postcss-value-parser": "^3.0.2"
       }
     },
     "postcss-reduce-initial": {
@@ -10695,7 +10706,7 @@
       "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.4"
       }
     },
     "postcss-reduce-transforms": {
@@ -10704,9 +10715,9 @@
       "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
       "dev": true,
       "requires": {
-        "has": "1.0.3",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "has": "^1.0.1",
+        "postcss": "^5.0.8",
+        "postcss-value-parser": "^3.0.1"
       }
     },
     "postcss-selector-parser": {
@@ -10715,9 +10726,9 @@
       "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
       "dev": true,
       "requires": {
-        "flatten": "1.0.2",
-        "indexes-of": "1.0.1",
-        "uniq": "1.0.1"
+        "flatten": "^1.0.2",
+        "indexes-of": "^1.0.1",
+        "uniq": "^1.0.1"
       }
     },
     "postcss-svgo": {
@@ -10726,10 +10737,10 @@
       "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
       "dev": true,
       "requires": {
-        "is-svg": "2.1.0",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1",
-        "svgo": "0.7.2"
+        "is-svg": "^2.0.0",
+        "postcss": "^5.0.14",
+        "postcss-value-parser": "^3.2.3",
+        "svgo": "^0.7.0"
       }
     },
     "postcss-unique-selectors": {
@@ -10738,9 +10749,9 @@
       "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
       "dev": true,
       "requires": {
-        "alphanum-sort": "1.0.2",
-        "postcss": "5.2.18",
-        "uniqs": "2.0.0"
+        "alphanum-sort": "^1.0.1",
+        "postcss": "^5.0.4",
+        "uniqs": "^2.0.0"
       }
     },
     "postcss-value-parser": {
@@ -10755,9 +10766,9 @@
       "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
       "dev": true,
       "requires": {
-        "has": "1.0.3",
-        "postcss": "5.2.18",
-        "uniqs": "2.0.0"
+        "has": "^1.0.1",
+        "postcss": "^5.0.4",
+        "uniqs": "^2.0.0"
       }
     },
     "prefix-style": {
@@ -10787,7 +10798,7 @@
       "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
       "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
       "requires": {
-        "fast-diff": "1.2.0"
+        "fast-diff": "^1.1.2"
       }
     },
     "pretty-error": {
@@ -10796,8 +10807,8 @@
       "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
       "dev": true,
       "requires": {
-        "renderkid": "2.0.3",
-        "utila": "0.4.0"
+        "renderkid": "^2.0.1",
+        "utila": "~0.4"
       }
     },
     "private": {
@@ -10827,7 +10838,7 @@
       "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
       "optional": true,
       "requires": {
-        "asap": "2.0.6"
+        "asap": "~2.0.3"
       }
     },
     "promise-inflight": {
@@ -10841,9 +10852,9 @@
       "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
       "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
       "requires": {
-        "loose-envify": "1.4.0",
-        "object-assign": "4.1.1",
-        "react-is": "16.10.2"
+        "loose-envify": "^1.4.0",
+        "object-assign": "^4.1.1",
+        "react-is": "^16.8.1"
       }
     },
     "proxy-addr": {
@@ -10852,7 +10863,7 @@
       "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
       "dev": true,
       "requires": {
-        "forwarded": "0.1.2",
+        "forwarded": "~0.1.2",
         "ipaddr.js": "1.9.0"
       }
     },
@@ -10876,12 +10887,12 @@
       "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
       "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
       "requires": {
-        "bn.js": "4.11.8",
-        "browserify-rsa": "4.0.1",
-        "create-hash": "1.2.0",
-        "parse-asn1": "5.1.5",
-        "randombytes": "2.1.0",
-        "safe-buffer": "5.2.0"
+        "bn.js": "^4.1.0",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "parse-asn1": "^5.0.0",
+        "randombytes": "^2.0.1",
+        "safe-buffer": "^5.1.2"
       }
     },
     "pump": {
@@ -10890,8 +10901,8 @@
       "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
       "dev": true,
       "requires": {
-        "end-of-stream": "1.4.4",
-        "once": "1.4.0"
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
       }
     },
     "pumpify": {
@@ -10900,9 +10911,9 @@
       "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
       "dev": true,
       "requires": {
-        "duplexify": "3.7.1",
-        "inherits": "2.0.4",
-        "pump": "2.0.1"
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "pump": "^2.0.0"
       }
     },
     "punycode": {
@@ -10927,8 +10938,8 @@
       "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
       "dev": true,
       "requires": {
-        "object-assign": "4.1.1",
-        "strict-uri-encode": "1.1.0"
+        "object-assign": "^4.1.0",
+        "strict-uri-encode": "^1.0.0"
       }
     },
     "querystring": {
@@ -10952,7 +10963,7 @@
       "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
       "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
       "requires": {
-        "performance-now": "2.1.0"
+        "performance-now": "^2.1.0"
       }
     },
     "raleway-cyrillic": {
@@ -10970,7 +10981,7 @@
       "resolved": "https://registry.npmjs.org/ramdasauce/-/ramdasauce-2.1.3.tgz",
       "integrity": "sha512-Ml3CPim4SKwmg5g9UI77lnRSeKr/kQw7YhQ6rfdMcBYy6DMlwmkEwQqjygJ3OhxPR+NfFfpjKl3Tf8GXckaqqg==",
       "requires": {
-        "ramda": "0.24.1"
+        "ramda": "^0.24.1"
       },
       "dependencies": {
         "ramda": {
@@ -10985,7 +10996,7 @@
       "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
       "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
       "requires": {
-        "safe-buffer": "5.2.0"
+        "safe-buffer": "^5.1.0"
       }
     },
     "randomfill": {
@@ -10993,8 +11004,8 @@
       "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
       "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
       "requires": {
-        "randombytes": "2.1.0",
-        "safe-buffer": "5.2.0"
+        "randombytes": "^2.0.5",
+        "safe-buffer": "^5.1.0"
       }
     },
     "range-parser": {
@@ -11027,10 +11038,10 @@
           "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
           "dev": true,
           "requires": {
-            "depd": "1.1.2",
+            "depd": "~1.1.2",
             "inherits": "2.0.3",
             "setprototypeof": "1.1.1",
-            "statuses": "1.5.0",
+            "statuses": ">= 1.5.0 < 2",
             "toidentifier": "1.0.0"
           }
         },
@@ -11053,10 +11064,10 @@
       "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz",
       "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==",
       "requires": {
-        "loose-envify": "1.4.0",
-        "object-assign": "4.1.1",
-        "prop-types": "15.7.2",
-        "scheduler": "0.13.6"
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "prop-types": "^15.6.2",
+        "scheduler": "^0.13.6"
       },
       "dependencies": {
         "scheduler": {
@@ -11064,8 +11075,8 @@
           "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz",
           "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==",
           "requires": {
-            "loose-envify": "1.4.0",
-            "object-assign": "4.1.1"
+            "loose-envify": "^1.1.0",
+            "object-assign": "^4.1.1"
           }
         }
       }
@@ -11075,10 +11086,10 @@
       "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.10.2.tgz",
       "integrity": "sha512-kWGDcH3ItJK4+6Pl9DZB16BXYAZyrYQItU4OMy0jAkv5aNqc+mAKb4TpFtAteI6TJZu+9ZlNhaeNQSVQDHJzkw==",
       "requires": {
-        "loose-envify": "1.4.0",
-        "object-assign": "4.1.1",
-        "prop-types": "15.7.2",
-        "scheduler": "0.16.2"
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "prop-types": "^15.6.2",
+        "scheduler": "^0.16.2"
       }
     },
     "react-draggable": {
@@ -11086,8 +11097,8 @@
       "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-3.3.2.tgz",
       "integrity": "sha512-oaz8a6enjbPtx5qb0oDWxtDNuybOylvto1QLydsXgKmwT7e3GXC2eMVDwEMIUYJIFqVG72XpOv673UuuAq6LhA==",
       "requires": {
-        "classnames": "2.2.6",
-        "prop-types": "15.7.2"
+        "classnames": "^2.2.5",
+        "prop-types": "^15.6.0"
       }
     },
     "react-grid-layout": {
@@ -11095,11 +11106,11 @@
       "resolved": "https://registry.npmjs.org/react-grid-layout/-/react-grid-layout-0.16.6.tgz",
       "integrity": "sha512-h2EsYgsqcESLJeevQSJsEKp8hhh+phOlXDJoMhlV2e7T3VWQL+S6iCF3iD/LK19r4oyRyOMDEir0KV+eLXrAyw==",
       "requires": {
-        "classnames": "2.2.6",
-        "lodash.isequal": "4.5.0",
-        "prop-types": "15.7.2",
-        "react-draggable": "3.3.2",
-        "react-resizable": "1.8.0"
+        "classnames": "2.x",
+        "lodash.isequal": "^4.0.0",
+        "prop-types": "15.x",
+        "react-draggable": "3.x",
+        "react-resizable": "1.x"
       }
     },
     "react-hot-loader": {
@@ -11107,14 +11118,14 @@
       "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.15.tgz",
       "integrity": "sha512-sgkN6g+tgPE6xZzD0Ysqll7KUFYJbMX0DrczT5OxD6S7hZlSnmqSC3ceudwCkiDd65ZTtm+Ayk4Y9k5xxCvpOw==",
       "requires": {
-        "fast-levenshtein": "2.0.6",
-        "global": "4.4.0",
-        "hoist-non-react-statics": "3.3.0",
-        "loader-utils": "1.2.3",
-        "prop-types": "15.7.2",
-        "react-lifecycles-compat": "3.0.4",
-        "shallowequal": "1.1.0",
-        "source-map": "0.7.3"
+        "fast-levenshtein": "^2.0.6",
+        "global": "^4.3.0",
+        "hoist-non-react-statics": "^3.3.0",
+        "loader-utils": "^1.1.0",
+        "prop-types": "^15.6.1",
+        "react-lifecycles-compat": "^3.0.4",
+        "shallowequal": "^1.1.0",
+        "source-map": "^0.7.3"
       },
       "dependencies": {
         "source-map": {
@@ -11134,7 +11145,7 @@
       "resolved": "https://registry.npmjs.org/react-layout-pack/-/react-layout-pack-0.2.3.tgz",
       "integrity": "sha1-/Bw/1EsX8u55l9xzrJuKRRvf3bQ=",
       "requires": {
-        "in-publish": "2.0.0"
+        "in-publish": "^2.0.0"
       }
     },
     "react-lifecycles-compat": {
@@ -11147,9 +11158,9 @@
       "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz",
       "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==",
       "requires": {
-        "performance-now": "0.2.0",
-        "prop-types": "15.7.2",
-        "raf": "3.4.1"
+        "performance-now": "^0.2.0",
+        "prop-types": "^15.5.8",
+        "raf": "^3.1.0"
       },
       "dependencies": {
         "performance-now": {
@@ -11173,12 +11184,12 @@
       "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-6.0.1.tgz",
       "integrity": "sha512-T52I52Kxhbqy/6TEfBv85rQSDz6+Y28V/pf52vDWs1YRXG19mcFOGfHnY2HsNFHyhP+ST34Aih98fvt6tqwVcQ==",
       "requires": {
-        "@babel/runtime": "7.6.3",
-        "hoist-non-react-statics": "3.3.0",
-        "invariant": "2.2.4",
-        "loose-envify": "1.4.0",
-        "prop-types": "15.7.2",
-        "react-is": "16.10.2"
+        "@babel/runtime": "^7.3.1",
+        "hoist-non-react-statics": "^3.3.0",
+        "invariant": "^2.2.4",
+        "loose-envify": "^1.4.0",
+        "prop-types": "^15.7.2",
+        "react-is": "^16.8.2"
       }
     },
     "react-resizable": {
@@ -11186,8 +11197,8 @@
       "resolved": "https://registry.npmjs.org/react-resizable/-/react-resizable-1.8.0.tgz",
       "integrity": "sha512-lfYlCelPyUL8GLYd4SgFtZOrFY8XpxpDwXjgGHLiLM2aMv7mEkBT8Jn5MUV1TCinF5mIro4CMezfnniAZEkGvg==",
       "requires": {
-        "prop-types": "15.7.2",
-        "react-draggable": "3.3.2"
+        "prop-types": "15.x",
+        "react-draggable": "^3.0.3"
       }
     },
     "react-router": {
@@ -11195,13 +11206,13 @@
       "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz",
       "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==",
       "requires": {
-        "history": "4.10.1",
-        "hoist-non-react-statics": "2.5.5",
-        "invariant": "2.2.4",
-        "loose-envify": "1.4.0",
-        "path-to-regexp": "1.7.0",
-        "prop-types": "15.7.2",
-        "warning": "4.0.3"
+        "history": "^4.7.2",
+        "hoist-non-react-statics": "^2.5.0",
+        "invariant": "^2.2.4",
+        "loose-envify": "^1.3.1",
+        "path-to-regexp": "^1.7.0",
+        "prop-types": "^15.6.1",
+        "warning": "^4.0.1"
       },
       "dependencies": {
         "hoist-non-react-statics": {
@@ -11216,12 +11227,12 @@
       "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz",
       "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==",
       "requires": {
-        "history": "4.10.1",
-        "invariant": "2.2.4",
-        "loose-envify": "1.4.0",
-        "prop-types": "15.7.2",
-        "react-router": "4.3.1",
-        "warning": "4.0.3"
+        "history": "^4.7.2",
+        "invariant": "^2.2.4",
+        "loose-envify": "^1.3.1",
+        "prop-types": "^15.6.1",
+        "react-router": "^4.3.1",
+        "warning": "^4.0.1"
       }
     },
     "react-scrollbar": {
@@ -11229,9 +11240,9 @@
       "resolved": "https://registry.npmjs.org/react-scrollbar/-/react-scrollbar-0.5.6.tgz",
       "integrity": "sha512-TsSLsuovOlxmfTxY9bRjRUfQjycvfs73L4gz7yE+2D8Qs7U3zhwbGS0lj0JScCDipcyn7EX66LsaI00cU3aRSQ==",
       "requires": {
-        "config": "1.31.0",
-        "line-height": "0.1.1",
-        "react-motion": "0.5.2"
+        "config": "^1.24.0",
+        "line-height": "^0.1.1",
+        "react-motion": "^0.5.2"
       }
     },
     "react-sizeme": {
@@ -11239,10 +11250,10 @@
       "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-2.6.7.tgz",
       "integrity": "sha512-xCjPoBP5jmeW58TxIkcviMZqabZis7tTvDFWf0/Wa5XCgVWQTIe74NQBes2N1Kmp64GRLkpm60BaP0kk+v8aCQ==",
       "requires": {
-        "element-resize-detector": "1.1.15",
-        "invariant": "2.2.4",
-        "shallowequal": "1.1.0",
-        "throttle-debounce": "2.1.0"
+        "element-resize-detector": "^1.1.15",
+        "invariant": "^2.2.4",
+        "shallowequal": "^1.1.0",
+        "throttle-debounce": "^2.1.0"
       }
     },
     "react-sortable-hoc": {
@@ -11250,9 +11261,9 @@
       "resolved": "https://registry.npmjs.org/react-sortable-hoc/-/react-sortable-hoc-1.10.1.tgz",
       "integrity": "sha512-eVyv5rrK6qY9bG60bboRY78In7OpdRRg+hxp4QMLIjC/UJaFSU7exTYd0764GtXvBqh+b+faYGzren5/ffRYKw==",
       "requires": {
-        "@babel/runtime": "7.6.3",
-        "invariant": "2.2.4",
-        "prop-types": "15.7.2"
+        "@babel/runtime": "^7.2.0",
+        "invariant": "^2.2.4",
+        "prop-types": "^15.5.7"
       }
     },
     "react-stack-grid": {
@@ -11260,15 +11271,15 @@
       "resolved": "https://registry.npmjs.org/react-stack-grid/-/react-stack-grid-0.7.1.tgz",
       "integrity": "sha512-Fw7qMt5Rd9wQpNCnvK4Gi+ry/nL5rKfzP2hGsw5/DZxArEMk60VoDLy68Uskq09l6wk7qb2w7P2+lNzSd9mYEw==",
       "requires": {
-        "easy-css-transform-builder": "0.0.2",
-        "exenv": "1.2.2",
-        "imagesloaded": "4.1.4",
-        "inline-style-prefixer": "3.0.8",
-        "invariant": "2.2.4",
-        "prop-types": "15.7.2",
-        "react-sizeme": "2.6.7",
-        "react-transition-group": "1.2.1",
-        "shallowequal": "1.1.0"
+        "easy-css-transform-builder": "^0.0.2",
+        "exenv": "^1.2.1",
+        "imagesloaded": "^4.1.1",
+        "inline-style-prefixer": "^3.0.6",
+        "invariant": "^2.2.2",
+        "prop-types": "^15.5.10",
+        "react-sizeme": "^2.2.0",
+        "react-transition-group": "^1.2.0",
+        "shallowequal": "^1.0.1"
       },
       "dependencies": {
         "imagesloaded": {
@@ -11276,7 +11287,7 @@
           "resolved": "https://registry.npmjs.org/imagesloaded/-/imagesloaded-4.1.4.tgz",
           "integrity": "sha512-ltiBVcYpc/TYTF5nolkMNsnREHW+ICvfQ3Yla2Sgr71YFwQ86bDwV9hgpFhFtrGPuwEx5+LqOHIrdXBdoWwwsA==",
           "requires": {
-            "ev-emitter": "1.1.1"
+            "ev-emitter": "^1.0.0"
           }
         }
       }
@@ -11286,11 +11297,11 @@
       "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-1.2.1.tgz",
       "integrity": "sha512-CWaL3laCmgAFdxdKbhhps+c0HRGF4c+hdM4H23+FI1QBNUyx/AMeIJGWorehPNSaKnQNOAxL7PQmqMu78CDj3Q==",
       "requires": {
-        "chain-function": "1.0.1",
-        "dom-helpers": "3.4.0",
-        "loose-envify": "1.4.0",
-        "prop-types": "15.7.2",
-        "warning": "3.0.0"
+        "chain-function": "^1.0.0",
+        "dom-helpers": "^3.2.0",
+        "loose-envify": "^1.3.1",
+        "prop-types": "^15.5.6",
+        "warning": "^3.0.0"
       },
       "dependencies": {
         "warning": {
@@ -11298,7 +11309,7 @@
           "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
           "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
           "requires": {
-            "loose-envify": "1.4.0"
+            "loose-envify": "^1.0.0"
           }
         }
       }
@@ -11308,9 +11319,9 @@
       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
       "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
       "requires": {
-        "load-json-file": "2.0.0",
-        "normalize-package-data": "2.5.0",
-        "path-type": "2.0.0"
+        "load-json-file": "^2.0.0",
+        "normalize-package-data": "^2.3.2",
+        "path-type": "^2.0.0"
       }
     },
     "read-pkg-up": {
@@ -11318,8 +11329,8 @@
       "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
       "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
       "requires": {
-        "find-up": "2.1.0",
-        "read-pkg": "2.0.0"
+        "find-up": "^2.0.0",
+        "read-pkg": "^2.0.0"
       }
     },
     "readable-stream": {
@@ -11327,13 +11338,13 @@
       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
       "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
       "requires": {
-        "core-util-is": "1.0.2",
-        "inherits": "2.0.4",
-        "isarray": "1.0.0",
-        "process-nextick-args": "2.0.1",
-        "safe-buffer": "5.1.2",
-        "string_decoder": "1.1.1",
-        "util-deprecate": "1.0.2"
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
       },
       "dependencies": {
         "safe-buffer": {
@@ -11346,7 +11357,7 @@
           "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
           "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
           "requires": {
-            "safe-buffer": "5.1.2"
+            "safe-buffer": "~5.1.0"
           }
         }
       }
@@ -11357,9 +11368,9 @@
       "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.2.2",
-        "micromatch": "3.1.10",
-        "readable-stream": "2.3.6"
+        "graceful-fs": "^4.1.11",
+        "micromatch": "^3.1.10",
+        "readable-stream": "^2.0.2"
       }
     },
     "redent": {
@@ -11367,8 +11378,8 @@
       "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
       "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
       "requires": {
-        "indent-string": "2.1.0",
-        "strip-indent": "1.0.1"
+        "indent-string": "^2.1.0",
+        "strip-indent": "^1.0.1"
       }
     },
     "reduce-css-calc": {
@@ -11377,9 +11388,9 @@
       "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
       "dev": true,
       "requires": {
-        "balanced-match": "0.4.2",
-        "math-expression-evaluator": "1.2.17",
-        "reduce-function-call": "1.0.3"
+        "balanced-match": "^0.4.2",
+        "math-expression-evaluator": "^1.2.14",
+        "reduce-function-call": "^1.0.1"
       },
       "dependencies": {
         "balanced-match": {
@@ -11396,7 +11407,7 @@
       "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==",
       "dev": true,
       "requires": {
-        "balanced-match": "1.0.0"
+        "balanced-match": "^1.0.0"
       }
     },
     "redux": {
@@ -11404,8 +11415,8 @@
       "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.4.tgz",
       "integrity": "sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q==",
       "requires": {
-        "loose-envify": "1.4.0",
-        "symbol-observable": "1.2.0"
+        "loose-envify": "^1.4.0",
+        "symbol-observable": "^1.2.0"
       }
     },
     "redux-persist": {
@@ -11418,7 +11429,7 @@
       "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.1.1.tgz",
       "integrity": "sha512-guSnGJ/uEF8yL8Mn4aNa7HxRGCpVUALCkec9iTTD0fOhQqkF6bRQkBLeS+7/cAH3nFnr299bi/DOurTi1apcCA==",
       "requires": {
-        "@redux-saga/core": "1.1.1"
+        "@redux-saga/core": "^1.1.1"
       }
     },
     "reduxsauce": {
@@ -11426,8 +11437,8 @@
       "resolved": "https://registry.npmjs.org/reduxsauce/-/reduxsauce-1.1.0.tgz",
       "integrity": "sha512-INjuCTmDntZqUfJFPy6qRAdSYnR16d1jH7H0TDqZW+0RA3QqOo3YK05TG07Ssh7zlxHT+eeZPojHkb2R/O6moQ==",
       "requires": {
-        "ramda": "0.24.1",
-        "ramdasauce": "2.1.3"
+        "ramda": "^0.24.1",
+        "ramdasauce": "^2.0.0"
       },
       "dependencies": {
         "ramda": {
@@ -11454,7 +11465,7 @@
       "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==",
       "dev": true,
       "requires": {
-        "regenerate": "1.4.0"
+        "regenerate": "^1.4.0"
       }
     },
     "regenerator-runtime": {
@@ -11468,7 +11479,7 @@
       "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==",
       "dev": true,
       "requires": {
-        "private": "0.1.8"
+        "private": "^0.1.6"
       }
     },
     "regex-not": {
@@ -11477,8 +11488,8 @@
       "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
       "dev": true,
       "requires": {
-        "extend-shallow": "3.0.2",
-        "safe-regex": "1.1.0"
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
       }
     },
     "regex-parser": {
@@ -11493,7 +11504,7 @@
       "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==",
       "dev": true,
       "requires": {
-        "define-properties": "1.1.3"
+        "define-properties": "^1.1.2"
       }
     },
     "regexpp": {
@@ -11507,12 +11518,12 @@
       "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==",
       "dev": true,
       "requires": {
-        "regenerate": "1.4.0",
-        "regenerate-unicode-properties": "8.1.0",
-        "regjsgen": "0.5.0",
-        "regjsparser": "0.6.0",
-        "unicode-match-property-ecmascript": "1.0.4",
-        "unicode-match-property-value-ecmascript": "1.1.0"
+        "regenerate": "^1.4.0",
+        "regenerate-unicode-properties": "^8.1.0",
+        "regjsgen": "^0.5.0",
+        "regjsparser": "^0.6.0",
+        "unicode-match-property-ecmascript": "^1.0.4",
+        "unicode-match-property-value-ecmascript": "^1.1.0"
       }
     },
     "regjsgen": {
@@ -11527,7 +11538,7 @@
       "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
       "dev": true,
       "requires": {
-        "jsesc": "0.5.0"
+        "jsesc": "~0.5.0"
       },
       "dependencies": {
         "jsesc": {
@@ -11556,11 +11567,11 @@
       "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==",
       "dev": true,
       "requires": {
-        "css-select": "1.2.0",
-        "dom-converter": "0.2.0",
-        "htmlparser2": "3.10.1",
-        "strip-ansi": "3.0.1",
-        "utila": "0.4.0"
+        "css-select": "^1.1.0",
+        "dom-converter": "^0.2",
+        "htmlparser2": "^3.3.0",
+        "strip-ansi": "^3.0.0",
+        "utila": "^0.4.0"
       },
       "dependencies": {
         "ansi-regex": {
@@ -11575,7 +11586,7 @@
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
           "dev": true,
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         }
       }
@@ -11597,7 +11608,7 @@
       "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
       "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
       "requires": {
-        "is-finite": "1.0.2"
+        "is-finite": "^1.0.0"
       }
     },
     "request": {
@@ -11605,26 +11616,26 @@
       "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
       "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
       "requires": {
-        "aws-sign2": "0.7.0",
-        "aws4": "1.8.0",
-        "caseless": "0.12.0",
-        "combined-stream": "1.0.8",
-        "extend": "3.0.2",
-        "forever-agent": "0.6.1",
-        "form-data": "2.3.3",
-        "har-validator": "5.1.3",
-        "http-signature": "1.2.0",
-        "is-typedarray": "1.0.0",
-        "isstream": "0.1.2",
-        "json-stringify-safe": "5.0.1",
-        "mime-types": "2.1.24",
-        "oauth-sign": "0.9.0",
-        "performance-now": "2.1.0",
-        "qs": "6.5.2",
-        "safe-buffer": "5.2.0",
-        "tough-cookie": "2.4.3",
-        "tunnel-agent": "0.6.0",
-        "uuid": "3.3.3"
+        "aws-sign2": "~0.7.0",
+        "aws4": "^1.8.0",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.6",
+        "extend": "~3.0.2",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.3.2",
+        "har-validator": "~5.1.0",
+        "http-signature": "~1.2.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.19",
+        "oauth-sign": "~0.9.0",
+        "performance-now": "^2.1.0",
+        "qs": "~6.5.2",
+        "safe-buffer": "^5.1.2",
+        "tough-cookie": "~2.4.3",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.3.2"
       }
     },
     "require-directory": {
@@ -11654,7 +11665,7 @@
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
       "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
       "requires": {
-        "path-parse": "1.0.6"
+        "path-parse": "^1.0.6"
       }
     },
     "resolve-cwd": {
@@ -11663,7 +11674,7 @@
       "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
       "dev": true,
       "requires": {
-        "resolve-from": "3.0.0"
+        "resolve-from": "^3.0.0"
       },
       "dependencies": {
         "resolve-from": {
@@ -11680,8 +11691,8 @@
       "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
       "dev": true,
       "requires": {
-        "expand-tilde": "2.0.2",
-        "global-modules": "1.0.0"
+        "expand-tilde": "^2.0.0",
+        "global-modules": "^1.0.0"
       },
       "dependencies": {
         "global-modules": {
@@ -11690,9 +11701,9 @@
           "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
           "dev": true,
           "requires": {
-            "global-prefix": "1.0.2",
-            "is-windows": "1.0.2",
-            "resolve-dir": "1.0.1"
+            "global-prefix": "^1.0.1",
+            "is-windows": "^1.0.1",
+            "resolve-dir": "^1.0.0"
           }
         },
         "is-windows": {
@@ -11749,9 +11760,9 @@
           "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "6.1.0"
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
           }
         },
         "supports-color": {
@@ -11760,7 +11771,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
@@ -11770,8 +11781,8 @@
       "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
       "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
       "requires": {
-        "onetime": "2.0.1",
-        "signal-exit": "3.0.2"
+        "onetime": "^2.0.0",
+        "signal-exit": "^3.0.2"
       }
     },
     "ret": {
@@ -11792,8 +11803,8 @@
       "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=",
       "dev": true,
       "requires": {
-        "convert-source-map": "0.3.5",
-        "css": "2.2.4"
+        "convert-source-map": "^0.3.3",
+        "css": "^2.0.0"
       },
       "dependencies": {
         "convert-source-map": {
@@ -11827,7 +11838,7 @@
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
       "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
       "requires": {
-        "glob": "7.1.4"
+        "glob": "^7.1.3"
       }
     },
     "ripemd160": {
@@ -11835,8 +11846,8 @@
       "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
       "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
       "requires": {
-        "hash-base": "3.0.4",
-        "inherits": "2.0.4"
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
       }
     },
     "run-async": {
@@ -11844,7 +11855,7 @@
       "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
       "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
       "requires": {
-        "is-promise": "2.1.0"
+        "is-promise": "^2.1.0"
       }
     },
     "run-queue": {
@@ -11853,7 +11864,7 @@
       "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
       "dev": true,
       "requires": {
-        "aproba": "1.2.0"
+        "aproba": "^1.1.1"
       }
     },
     "rxjs": {
@@ -11861,7 +11872,7 @@
       "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
       "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
       "requires": {
-        "tslib": "1.10.0"
+        "tslib": "^1.9.0"
       }
     },
     "safe-buffer": {
@@ -11875,7 +11886,7 @@
       "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
       "dev": true,
       "requires": {
-        "ret": "0.1.15"
+        "ret": "~0.1.10"
       }
     },
     "safer-buffer": {
@@ -11888,10 +11899,10 @@
       "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
       "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
       "requires": {
-        "glob": "7.1.4",
-        "lodash": "4.17.15",
-        "scss-tokenizer": "0.2.3",
-        "yargs": "7.1.0"
+        "glob": "^7.0.0",
+        "lodash": "^4.0.0",
+        "scss-tokenizer": "^0.2.3",
+        "yargs": "^7.0.0"
       }
     },
     "sass-loader": {
@@ -11899,11 +11910,11 @@
       "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.3.1.tgz",
       "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==",
       "requires": {
-        "clone-deep": "4.0.1",
-        "loader-utils": "1.2.3",
-        "neo-async": "2.6.1",
-        "pify": "4.0.1",
-        "semver": "6.3.0"
+        "clone-deep": "^4.0.1",
+        "loader-utils": "^1.0.1",
+        "neo-async": "^2.5.0",
+        "pify": "^4.0.1",
+        "semver": "^6.3.0"
       },
       "dependencies": {
         "pify": {
@@ -11923,10 +11934,10 @@
       "resolved": "https://registry.npmjs.org/sass-resources-loader/-/sass-resources-loader-2.0.1.tgz",
       "integrity": "sha512-UsjQWm01xglINC1kPidYwKOBBzOElVupm9RwtOkRlY0hPA4GKi2KFsn4BZypRD1kudaXgUnGnfbiVOE7c+ybAg==",
       "requires": {
-        "async": "2.6.3",
-        "chalk": "1.1.3",
-        "glob": "7.1.4",
-        "loader-utils": "1.2.3"
+        "async": "^2.1.4",
+        "chalk": "^1.1.3",
+        "glob": "^7.1.1",
+        "loader-utils": "^1.0.4"
       },
       "dependencies": {
         "ansi-regex": {
@@ -11944,11 +11955,11 @@
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           }
         },
         "strip-ansi": {
@@ -11956,7 +11967,7 @@
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         },
         "supports-color": {
@@ -11977,8 +11988,8 @@
       "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.16.2.tgz",
       "integrity": "sha512-BqYVWqwz6s1wZMhjFvLfVR5WXP7ZY32M/wYPo04CcuPM7XZEbV2TBNW7Z0UkguPTl0dWMA59VbNXxK6q+pHItg==",
       "requires": {
-        "loose-envify": "1.4.0",
-        "object-assign": "4.1.1"
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1"
       }
     },
     "schema-utils": {
@@ -11987,8 +11998,8 @@
       "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
       "dev": true,
       "requires": {
-        "ajv": "6.10.2",
-        "ajv-keywords": "3.4.1"
+        "ajv": "^6.1.0",
+        "ajv-keywords": "^3.1.0"
       }
     },
     "scrypt": {
@@ -11996,7 +12007,7 @@
       "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz",
       "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=",
       "requires": {
-        "nan": "2.14.0"
+        "nan": "^2.0.8"
       }
     },
     "scss-tokenizer": {
@@ -12004,8 +12015,8 @@
       "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
       "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
       "requires": {
-        "js-base64": "2.5.1",
-        "source-map": "0.4.4"
+        "js-base64": "^2.1.8",
+        "source-map": "^0.4.2"
       },
       "dependencies": {
         "source-map": {
@@ -12013,7 +12024,7 @@
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
           "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
           "requires": {
-            "amdefine": "1.0.1"
+            "amdefine": ">=0.0.4"
           }
         }
       }
@@ -12050,18 +12061,18 @@
       "dev": true,
       "requires": {
         "debug": "2.6.9",
-        "depd": "1.1.2",
-        "destroy": "1.0.4",
-        "encodeurl": "1.0.2",
-        "escape-html": "1.0.3",
-        "etag": "1.8.1",
+        "depd": "~1.1.2",
+        "destroy": "~1.0.4",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
         "fresh": "0.5.2",
-        "http-errors": "1.7.3",
+        "http-errors": "~1.7.2",
         "mime": "1.6.0",
         "ms": "2.1.1",
-        "on-finished": "2.3.0",
-        "range-parser": "1.2.1",
-        "statuses": "1.5.0"
+        "on-finished": "~2.3.0",
+        "range-parser": "~1.2.1",
+        "statuses": "~1.5.0"
       },
       "dependencies": {
         "debug": {
@@ -12087,10 +12098,10 @@
           "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
           "dev": true,
           "requires": {
-            "depd": "1.1.2",
+            "depd": "~1.1.2",
             "inherits": "2.0.4",
             "setprototypeof": "1.1.1",
-            "statuses": "1.5.0",
+            "statuses": ">= 1.5.0 < 2",
             "toidentifier": "1.0.0"
           }
         },
@@ -12120,13 +12131,13 @@
       "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
       "dev": true,
       "requires": {
-        "accepts": "1.3.7",
+        "accepts": "~1.3.4",
         "batch": "0.6.1",
         "debug": "2.6.9",
-        "escape-html": "1.0.3",
-        "http-errors": "1.6.3",
-        "mime-types": "2.1.24",
-        "parseurl": "1.3.3"
+        "escape-html": "~1.0.3",
+        "http-errors": "~1.6.2",
+        "mime-types": "~2.1.17",
+        "parseurl": "~1.3.2"
       },
       "dependencies": {
         "debug": {
@@ -12146,9 +12157,9 @@
       "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
       "dev": true,
       "requires": {
-        "encodeurl": "1.0.2",
-        "escape-html": "1.0.3",
-        "parseurl": "1.3.3",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
         "send": "0.17.1"
       }
     },
@@ -12163,10 +12174,10 @@
       "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
       "dev": true,
       "requires": {
-        "extend-shallow": "2.0.1",
-        "is-extendable": "0.1.1",
-        "is-plain-object": "2.0.4",
-        "split-string": "3.1.0"
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^3.0.1"
       },
       "dependencies": {
         "extend-shallow": {
@@ -12175,7 +12186,7 @@
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "is-extendable": "0.1.1"
+            "is-extendable": "^0.1.0"
           }
         }
       }
@@ -12195,8 +12206,8 @@
       "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
       "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
       "requires": {
-        "inherits": "2.0.4",
-        "safe-buffer": "5.2.0"
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "shallow-clone": {
@@ -12204,7 +12215,7 @@
       "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
       "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
       "requires": {
-        "kind-of": "6.0.2"
+        "kind-of": "^6.0.2"
       }
     },
     "shallowequal": {
@@ -12217,7 +12228,7 @@
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
       "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
       "requires": {
-        "shebang-regex": "1.0.0"
+        "shebang-regex": "^1.0.0"
       }
     },
     "shebang-regex": {
@@ -12236,7 +12247,7 @@
       "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
       "dev": true,
       "requires": {
-        "is-arrayish": "0.3.2"
+        "is-arrayish": "^0.3.1"
       },
       "dependencies": {
         "is-arrayish": {
@@ -12258,9 +12269,9 @@
       "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
       "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
       "requires": {
-        "ansi-styles": "3.2.1",
-        "astral-regex": "1.0.0",
-        "is-fullwidth-code-point": "2.0.0"
+        "ansi-styles": "^3.2.0",
+        "astral-regex": "^1.0.0",
+        "is-fullwidth-code-point": "^2.0.0"
       }
     },
     "snapdragon": {
@@ -12269,14 +12280,14 @@
       "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
       "dev": true,
       "requires": {
-        "base": "0.11.2",
-        "debug": "2.6.9",
-        "define-property": "0.2.5",
-        "extend-shallow": "2.0.1",
-        "map-cache": "0.2.2",
-        "source-map": "0.5.7",
-        "source-map-resolve": "0.5.2",
-        "use": "3.1.1"
+        "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": "^3.1.0"
       },
       "dependencies": {
         "debug": {
@@ -12294,7 +12305,7 @@
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "0.1.6"
+            "is-descriptor": "^0.1.0"
           }
         },
         "extend-shallow": {
@@ -12303,7 +12314,7 @@
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "is-extendable": "0.1.1"
+            "is-extendable": "^0.1.0"
           }
         },
         "source-map": {
@@ -12320,9 +12331,9 @@
       "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
       "dev": true,
       "requires": {
-        "define-property": "1.0.0",
-        "isobject": "3.0.1",
-        "snapdragon-util": "3.0.1"
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^3.0.1"
       },
       "dependencies": {
         "define-property": {
@@ -12331,7 +12342,7 @@
           "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "1.0.2"
+            "is-descriptor": "^1.0.0"
           }
         },
         "is-accessor-descriptor": {
@@ -12340,7 +12351,7 @@
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
@@ -12349,7 +12360,7 @@
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
@@ -12358,9 +12369,9 @@
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         }
       }
@@ -12371,7 +12382,7 @@
       "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.2.0"
       },
       "dependencies": {
         "is-buffer": {
@@ -12386,7 +12397,7 @@
           "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
           "dev": true,
           "requires": {
-            "is-buffer": "1.1.6"
+            "is-buffer": "^1.1.5"
           }
         }
       }
@@ -12397,7 +12408,7 @@
       "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
       "optional": true,
       "requires": {
-        "hoek": "2.16.3"
+        "hoek": "2.x.x"
       }
     },
     "sockjs": {
@@ -12406,8 +12417,8 @@
       "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
       "dev": true,
       "requires": {
-        "faye-websocket": "0.10.0",
-        "uuid": "3.3.3"
+        "faye-websocket": "^0.10.0",
+        "uuid": "^3.0.1"
       }
     },
     "sockjs-client": {
@@ -12416,12 +12427,12 @@
       "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
       "dev": true,
       "requires": {
-        "debug": "3.2.6",
-        "eventsource": "1.0.7",
-        "faye-websocket": "0.11.3",
-        "inherits": "2.0.4",
-        "json3": "3.3.3",
-        "url-parse": "1.4.7"
+        "debug": "^3.2.5",
+        "eventsource": "^1.0.7",
+        "faye-websocket": "~0.11.1",
+        "inherits": "^2.0.3",
+        "json3": "^3.3.2",
+        "url-parse": "^1.4.3"
       },
       "dependencies": {
         "debug": {
@@ -12430,7 +12441,7 @@
           "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
           "dev": true,
           "requires": {
-            "ms": "2.1.2"
+            "ms": "^2.1.1"
           }
         },
         "faye-websocket": {
@@ -12439,7 +12450,7 @@
           "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
           "dev": true,
           "requires": {
-            "websocket-driver": "0.7.3"
+            "websocket-driver": ">=0.5.1"
           }
         },
         "ms": {
@@ -12456,7 +12467,7 @@
       "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
       "dev": true,
       "requires": {
-        "is-plain-obj": "1.1.0"
+        "is-plain-obj": "^1.0.0"
       }
     },
     "source-list-map": {
@@ -12476,11 +12487,11 @@
       "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
       "dev": true,
       "requires": {
-        "atob": "2.1.2",
-        "decode-uri-component": "0.2.0",
-        "resolve-url": "0.2.1",
-        "source-map-url": "0.4.0",
-        "urix": "0.1.0"
+        "atob": "^2.1.1",
+        "decode-uri-component": "^0.2.0",
+        "resolve-url": "^0.2.1",
+        "source-map-url": "^0.4.0",
+        "urix": "^0.1.0"
       }
     },
     "source-map-support": {
@@ -12489,8 +12500,8 @@
       "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
       "dev": true,
       "requires": {
-        "buffer-from": "1.1.1",
-        "source-map": "0.6.1"
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
       }
     },
     "source-map-url": {
@@ -12504,8 +12515,8 @@
       "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
       "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
       "requires": {
-        "spdx-expression-parse": "3.0.0",
-        "spdx-license-ids": "3.0.5"
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
       }
     },
     "spdx-exceptions": {
@@ -12518,8 +12529,8 @@
       "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
       "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
       "requires": {
-        "spdx-exceptions": "2.2.0",
-        "spdx-license-ids": "3.0.5"
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
       }
     },
     "spdx-license-ids": {
@@ -12533,11 +12544,11 @@
       "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==",
       "dev": true,
       "requires": {
-        "debug": "4.1.1",
-        "handle-thing": "2.0.0",
-        "http-deceiver": "1.2.7",
-        "select-hose": "2.0.0",
-        "spdy-transport": "3.0.0"
+        "debug": "^4.1.0",
+        "handle-thing": "^2.0.0",
+        "http-deceiver": "^1.2.7",
+        "select-hose": "^2.0.0",
+        "spdy-transport": "^3.0.0"
       },
       "dependencies": {
         "debug": {
@@ -12546,7 +12557,7 @@
           "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
           "dev": true,
           "requires": {
-            "ms": "2.1.2"
+            "ms": "^2.1.1"
           }
         },
         "ms": {
@@ -12563,12 +12574,12 @@
       "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
       "dev": true,
       "requires": {
-        "debug": "4.1.1",
-        "detect-node": "2.0.4",
-        "hpack.js": "2.1.6",
-        "obuf": "1.1.2",
-        "readable-stream": "3.4.0",
-        "wbuf": "1.7.3"
+        "debug": "^4.1.0",
+        "detect-node": "^2.0.4",
+        "hpack.js": "^2.1.6",
+        "obuf": "^1.1.2",
+        "readable-stream": "^3.0.6",
+        "wbuf": "^1.7.3"
       },
       "dependencies": {
         "debug": {
@@ -12577,7 +12588,7 @@
           "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
           "dev": true,
           "requires": {
-            "ms": "2.1.2"
+            "ms": "^2.1.1"
           }
         },
         "ms": {
@@ -12592,9 +12603,9 @@
           "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
           "dev": true,
           "requires": {
-            "inherits": "2.0.4",
-            "string_decoder": "1.3.0",
-            "util-deprecate": "1.0.2"
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
           }
         }
       }
@@ -12605,7 +12616,7 @@
       "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
       "dev": true,
       "requires": {
-        "extend-shallow": "3.0.2"
+        "extend-shallow": "^3.0.0"
       }
     },
     "sprintf-js": {
@@ -12618,15 +12629,15 @@
       "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
       "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
       "requires": {
-        "asn1": "0.2.4",
-        "assert-plus": "1.0.0",
-        "bcrypt-pbkdf": "1.0.2",
-        "dashdash": "1.14.1",
-        "ecc-jsbn": "0.1.2",
-        "getpass": "0.1.7",
-        "jsbn": "0.1.1",
-        "safer-buffer": "2.1.2",
-        "tweetnacl": "0.14.5"
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.0.2",
+        "tweetnacl": "~0.14.0"
       }
     },
     "ssri": {
@@ -12635,7 +12646,7 @@
       "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
       "dev": true,
       "requires": {
-        "safe-buffer": "5.2.0"
+        "safe-buffer": "^5.1.1"
       }
     },
     "stable": {
@@ -12650,8 +12661,8 @@
       "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
       "dev": true,
       "requires": {
-        "define-property": "0.2.5",
-        "object-copy": "0.1.0"
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
       },
       "dependencies": {
         "define-property": {
@@ -12660,7 +12671,7 @@
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "0.1.6"
+            "is-descriptor": "^0.1.0"
           }
         }
       }
@@ -12675,16 +12686,21 @@
       "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
       "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
       "requires": {
-        "readable-stream": "2.3.6"
+        "readable-stream": "^2.0.1"
       }
     },
+    "sticky-sidebar": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/sticky-sidebar/-/sticky-sidebar-3.3.1.tgz",
+      "integrity": "sha1-FCv2tkwrQW5LcH6/jwm4taUEOHc="
+    },
     "stream-browserify": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
       "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
       "requires": {
-        "inherits": "2.0.4",
-        "readable-stream": "2.3.6"
+        "inherits": "~2.0.1",
+        "readable-stream": "^2.0.2"
       }
     },
     "stream-each": {
@@ -12693,8 +12709,8 @@
       "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
       "dev": true,
       "requires": {
-        "end-of-stream": "1.4.4",
-        "stream-shift": "1.0.0"
+        "end-of-stream": "^1.1.0",
+        "stream-shift": "^1.0.0"
       }
     },
     "stream-http": {
@@ -12702,11 +12718,11 @@
       "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
       "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
       "requires": {
-        "builtin-status-codes": "3.0.0",
-        "inherits": "2.0.4",
-        "readable-stream": "2.3.6",
-        "to-arraybuffer": "1.0.1",
-        "xtend": "4.0.2"
+        "builtin-status-codes": "^3.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.3.6",
+        "to-arraybuffer": "^1.0.0",
+        "xtend": "^4.0.0"
       }
     },
     "stream-shift": {
@@ -12726,8 +12742,8 @@
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
       "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
       "requires": {
-        "is-fullwidth-code-point": "2.0.0",
-        "strip-ansi": "4.0.0"
+        "is-fullwidth-code-point": "^2.0.0",
+        "strip-ansi": "^4.0.0"
       }
     },
     "string.prototype.trimleft": {
@@ -12735,8 +12751,8 @@
       "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
       "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
       "requires": {
-        "define-properties": "1.1.3",
-        "function-bind": "1.1.1"
+        "define-properties": "^1.1.3",
+        "function-bind": "^1.1.1"
       }
     },
     "string.prototype.trimright": {
@@ -12744,8 +12760,8 @@
       "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
       "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
       "requires": {
-        "define-properties": "1.1.3",
-        "function-bind": "1.1.1"
+        "define-properties": "^1.1.3",
+        "function-bind": "^1.1.1"
       }
     },
     "string_decoder": {
@@ -12753,7 +12769,7 @@
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
       "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
       "requires": {
-        "safe-buffer": "5.2.0"
+        "safe-buffer": "~5.2.0"
       }
     },
     "stringstream": {
@@ -12767,7 +12783,7 @@
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
       "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
       "requires": {
-        "ansi-regex": "3.0.0"
+        "ansi-regex": "^3.0.0"
       }
     },
     "strip-bom": {
@@ -12786,7 +12802,7 @@
       "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
       "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
       "requires": {
-        "get-stdin": "4.0.1"
+        "get-stdin": "^4.0.1"
       },
       "dependencies": {
         "get-stdin": {
@@ -12807,8 +12823,8 @@
       "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.2.3",
-        "schema-utils": "0.4.7"
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^0.4.5"
       }
     },
     "stylehacks": {
@@ -12817,9 +12833,9 @@
       "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==",
       "dev": true,
       "requires": {
-        "browserslist": "4.7.0",
-        "postcss": "7.0.18",
-        "postcss-selector-parser": "3.1.1"
+        "browserslist": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-selector-parser": "^3.0.0"
       },
       "dependencies": {
         "postcss": {
@@ -12828,9 +12844,9 @@
           "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.2",
-            "source-map": "0.6.1",
-            "supports-color": "6.1.0"
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
           }
         },
         "postcss-selector-parser": {
@@ -12839,9 +12855,9 @@
           "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
           "dev": true,
           "requires": {
-            "dot-prop": "4.2.0",
-            "indexes-of": "1.0.1",
-            "uniq": "1.0.1"
+            "dot-prop": "^4.1.1",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
           }
         },
         "supports-color": {
@@ -12850,7 +12866,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         }
       }
@@ -12860,7 +12876,7 @@
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
       "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
       "requires": {
-        "has-flag": "3.0.0"
+        "has-flag": "^3.0.0"
       }
     },
     "svgo": {
@@ -12869,13 +12885,13 @@
       "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
       "dev": true,
       "requires": {
-        "coa": "1.0.4",
-        "colors": "1.1.2",
-        "csso": "2.3.2",
-        "js-yaml": "3.7.0",
-        "mkdirp": "0.5.1",
-        "sax": "1.2.4",
-        "whet.extend": "0.9.9"
+        "coa": "~1.0.1",
+        "colors": "~1.1.2",
+        "csso": "~2.3.1",
+        "js-yaml": "~3.7.0",
+        "mkdirp": "~0.5.1",
+        "sax": "~1.2.1",
+        "whet.extend": "~0.9.9"
       },
       "dependencies": {
         "esprima": {
@@ -12890,8 +12906,8 @@
           "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
           "dev": true,
           "requires": {
-            "argparse": "1.0.10",
-            "esprima": "2.7.3"
+            "argparse": "^1.0.7",
+            "esprima": "^2.6.0"
           }
         }
       }
@@ -12906,10 +12922,10 @@
       "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
       "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
       "requires": {
-        "ajv": "6.10.2",
-        "lodash": "4.17.15",
-        "slice-ansi": "2.1.0",
-        "string-width": "3.1.0"
+        "ajv": "^6.10.2",
+        "lodash": "^4.17.14",
+        "slice-ansi": "^2.1.0",
+        "string-width": "^3.0.0"
       },
       "dependencies": {
         "ansi-regex": {
@@ -12922,9 +12938,9 @@
           "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
           "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
           "requires": {
-            "emoji-regex": "7.0.3",
-            "is-fullwidth-code-point": "2.0.0",
-            "strip-ansi": "5.2.0"
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
           }
         },
         "strip-ansi": {
@@ -12932,7 +12948,7 @@
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
           "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
           "requires": {
-            "ansi-regex": "4.1.0"
+            "ansi-regex": "^4.1.0"
           }
         }
       }
@@ -12947,9 +12963,9 @@
       "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
       "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
       "requires": {
-        "block-stream": "0.0.9",
-        "fstream": "1.0.12",
-        "inherits": "2.0.4"
+        "block-stream": "*",
+        "fstream": "^1.0.12",
+        "inherits": "2"
       }
     },
     "terser": {
@@ -12958,9 +12974,9 @@
       "integrity": "sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA==",
       "dev": true,
       "requires": {
-        "commander": "2.20.1",
-        "source-map": "0.6.1",
-        "source-map-support": "0.5.13"
+        "commander": "^2.20.0",
+        "source-map": "~0.6.1",
+        "source-map-support": "~0.5.12"
       }
     },
     "terser-webpack-plugin": {
@@ -12969,15 +12985,15 @@
       "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==",
       "dev": true,
       "requires": {
-        "cacache": "12.0.3",
-        "find-cache-dir": "2.1.0",
-        "is-wsl": "1.1.0",
-        "schema-utils": "1.0.0",
-        "serialize-javascript": "1.9.1",
-        "source-map": "0.6.1",
-        "terser": "4.3.9",
-        "webpack-sources": "1.4.3",
-        "worker-farm": "1.7.0"
+        "cacache": "^12.0.2",
+        "find-cache-dir": "^2.1.0",
+        "is-wsl": "^1.1.0",
+        "schema-utils": "^1.0.0",
+        "serialize-javascript": "^1.7.0",
+        "source-map": "^0.6.1",
+        "terser": "^4.1.2",
+        "webpack-sources": "^1.4.0",
+        "worker-farm": "^1.7.0"
       },
       "dependencies": {
         "cacache": {
@@ -12986,21 +13002,21 @@
           "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
           "dev": true,
           "requires": {
-            "bluebird": "3.7.0",
-            "chownr": "1.1.3",
-            "figgy-pudding": "3.5.1",
-            "glob": "7.1.4",
-            "graceful-fs": "4.2.2",
-            "infer-owner": "1.0.4",
-            "lru-cache": "5.1.1",
-            "mississippi": "3.0.0",
-            "mkdirp": "0.5.1",
-            "move-concurrently": "1.0.1",
-            "promise-inflight": "1.0.1",
-            "rimraf": "2.7.1",
-            "ssri": "6.0.1",
-            "unique-filename": "1.1.1",
-            "y18n": "4.0.0"
+            "bluebird": "^3.5.5",
+            "chownr": "^1.1.1",
+            "figgy-pudding": "^3.5.1",
+            "glob": "^7.1.4",
+            "graceful-fs": "^4.1.15",
+            "infer-owner": "^1.0.3",
+            "lru-cache": "^5.1.1",
+            "mississippi": "^3.0.0",
+            "mkdirp": "^0.5.1",
+            "move-concurrently": "^1.0.1",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^2.6.3",
+            "ssri": "^6.0.1",
+            "unique-filename": "^1.1.1",
+            "y18n": "^4.0.0"
           }
         },
         "find-cache-dir": {
@@ -13009,9 +13025,9 @@
           "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
           "dev": true,
           "requires": {
-            "commondir": "1.0.1",
-            "make-dir": "2.1.0",
-            "pkg-dir": "3.0.0"
+            "commondir": "^1.0.1",
+            "make-dir": "^2.0.0",
+            "pkg-dir": "^3.0.0"
           }
         },
         "find-up": {
@@ -13020,7 +13036,7 @@
           "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
           "dev": true,
           "requires": {
-            "locate-path": "3.0.0"
+            "locate-path": "^3.0.0"
           }
         },
         "locate-path": {
@@ -13029,8 +13045,8 @@
           "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
           "dev": true,
           "requires": {
-            "p-locate": "3.0.0",
-            "path-exists": "3.0.0"
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
           }
         },
         "lru-cache": {
@@ -13039,7 +13055,7 @@
           "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
           "dev": true,
           "requires": {
-            "yallist": "3.1.1"
+            "yallist": "^3.0.2"
           }
         },
         "make-dir": {
@@ -13048,8 +13064,8 @@
           "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
           "dev": true,
           "requires": {
-            "pify": "4.0.1",
-            "semver": "5.7.1"
+            "pify": "^4.0.1",
+            "semver": "^5.6.0"
           }
         },
         "mississippi": {
@@ -13058,16 +13074,16 @@
           "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
           "dev": true,
           "requires": {
-            "concat-stream": "1.6.2",
-            "duplexify": "3.7.1",
-            "end-of-stream": "1.4.4",
-            "flush-write-stream": "1.1.1",
-            "from2": "2.3.0",
-            "parallel-transform": "1.2.0",
-            "pump": "3.0.0",
-            "pumpify": "1.5.1",
-            "stream-each": "1.2.3",
-            "through2": "2.0.5"
+            "concat-stream": "^1.5.0",
+            "duplexify": "^3.4.2",
+            "end-of-stream": "^1.1.0",
+            "flush-write-stream": "^1.0.0",
+            "from2": "^2.1.0",
+            "parallel-transform": "^1.1.0",
+            "pump": "^3.0.0",
+            "pumpify": "^1.3.3",
+            "stream-each": "^1.1.0",
+            "through2": "^2.0.0"
           }
         },
         "p-limit": {
@@ -13076,7 +13092,7 @@
           "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
           "dev": true,
           "requires": {
-            "p-try": "2.2.0"
+            "p-try": "^2.0.0"
           }
         },
         "p-locate": {
@@ -13085,7 +13101,7 @@
           "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
           "dev": true,
           "requires": {
-            "p-limit": "2.2.1"
+            "p-limit": "^2.0.0"
           }
         },
         "p-try": {
@@ -13106,7 +13122,7 @@
           "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
           "dev": true,
           "requires": {
-            "find-up": "3.0.0"
+            "find-up": "^3.0.0"
           }
         },
         "pump": {
@@ -13115,8 +13131,8 @@
           "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
           "dev": true,
           "requires": {
-            "end-of-stream": "1.4.4",
-            "once": "1.4.0"
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
           }
         },
         "schema-utils": {
@@ -13125,9 +13141,9 @@
           "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
           "dev": true,
           "requires": {
-            "ajv": "6.10.2",
-            "ajv-errors": "1.0.1",
-            "ajv-keywords": "3.4.1"
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
           }
         },
         "semver": {
@@ -13142,7 +13158,7 @@
           "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
           "dev": true,
           "requires": {
-            "figgy-pudding": "3.5.1"
+            "figgy-pudding": "^3.5.1"
           }
         },
         "y18n": {
@@ -13180,8 +13196,8 @@
       "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
       "dev": true,
       "requires": {
-        "readable-stream": "2.3.6",
-        "xtend": "4.0.2"
+        "readable-stream": "~2.3.6",
+        "xtend": "~4.0.1"
       }
     },
     "thunky": {
@@ -13195,7 +13211,7 @@
       "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
       "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
       "requires": {
-        "setimmediate": "1.0.5"
+        "setimmediate": "^1.0.4"
       }
     },
     "timsort": {
@@ -13219,7 +13235,7 @@
       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
       "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
       "requires": {
-        "os-tmpdir": "1.0.2"
+        "os-tmpdir": "~1.0.2"
       }
     },
     "to-arraybuffer": {
@@ -13232,7 +13248,7 @@
       "resolved": "https://registry.npmjs.org/to-camel-case/-/to-camel-case-1.0.0.tgz",
       "integrity": "sha1-GlYFSy+daWKYzmamCJcyK29CPkY=",
       "requires": {
-        "to-space-case": "1.0.0"
+        "to-space-case": "^1.0.0"
       }
     },
     "to-fast-properties": {
@@ -13252,7 +13268,7 @@
       "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.0.2"
       },
       "dependencies": {
         "is-buffer": {
@@ -13267,7 +13283,7 @@
           "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
           "dev": true,
           "requires": {
-            "is-buffer": "1.1.6"
+            "is-buffer": "^1.1.5"
           }
         }
       }
@@ -13278,10 +13294,10 @@
       "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
       "dev": true,
       "requires": {
-        "define-property": "2.0.2",
-        "extend-shallow": "3.0.2",
-        "regex-not": "1.0.2",
-        "safe-regex": "1.1.0"
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "regex-not": "^1.0.2",
+        "safe-regex": "^1.1.0"
       }
     },
     "to-regex-range": {
@@ -13290,8 +13306,8 @@
       "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
       "dev": true,
       "requires": {
-        "is-number": "3.0.0",
-        "repeat-string": "1.6.1"
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
       }
     },
     "to-space-case": {
@@ -13299,7 +13315,7 @@
       "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz",
       "integrity": "sha1-sFLar7Gysp3HcM6gFj5ewOvJ/Bc=",
       "requires": {
-        "to-no-case": "1.0.2"
+        "to-no-case": "^1.0.0"
       }
     },
     "toidentifier": {
@@ -13319,8 +13335,8 @@
       "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
       "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
       "requires": {
-        "psl": "1.4.0",
-        "punycode": "1.4.1"
+        "psl": "^1.1.24",
+        "punycode": "^1.4.1"
       },
       "dependencies": {
         "punycode": {
@@ -13346,7 +13362,7 @@
       "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
       "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
       "requires": {
-        "glob": "7.1.4"
+        "glob": "^7.1.2"
       }
     },
     "ts-node": {
@@ -13355,11 +13371,11 @@
       "integrity": "sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw==",
       "dev": true,
       "requires": {
-        "arg": "4.1.1",
-        "diff": "4.0.1",
-        "make-error": "1.3.5",
-        "source-map-support": "0.5.13",
-        "yn": "3.1.1"
+        "arg": "^4.1.0",
+        "diff": "^4.0.1",
+        "make-error": "^1.1.1",
+        "source-map-support": "^0.5.6",
+        "yn": "^3.0.0"
       }
     },
     "ts-toolbelt": {
@@ -13372,10 +13388,10 @@
       "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz",
       "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==",
       "requires": {
-        "@types/json5": "0.0.29",
-        "json5": "1.0.1",
-        "minimist": "1.2.0",
-        "strip-bom": "3.0.0"
+        "@types/json5": "^0.0.29",
+        "json5": "^1.0.1",
+        "minimist": "^1.2.0",
+        "strip-bom": "^3.0.0"
       },
       "dependencies": {
         "minimist": {
@@ -13395,19 +13411,19 @@
       "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.0.tgz",
       "integrity": "sha512-2vqIvkMHbnx8acMogAERQ/IuINOq6DFqgF8/VDvhEkBqQh/x6SP0Y+OHnKth9/ZcHQSroOZwUQSN18v8KKF0/g==",
       "requires": {
-        "@babel/code-frame": "7.5.5",
-        "builtin-modules": "1.1.1",
-        "chalk": "2.4.2",
-        "commander": "2.20.1",
-        "diff": "4.0.1",
-        "glob": "7.1.4",
-        "js-yaml": "3.13.1",
-        "minimatch": "3.0.4",
-        "mkdirp": "0.5.1",
-        "resolve": "1.12.0",
-        "semver": "5.5.0",
-        "tslib": "1.10.0",
-        "tsutils": "2.29.0"
+        "@babel/code-frame": "^7.0.0",
+        "builtin-modules": "^1.1.1",
+        "chalk": "^2.3.0",
+        "commander": "^2.12.1",
+        "diff": "^4.0.1",
+        "glob": "^7.1.1",
+        "js-yaml": "^3.13.1",
+        "minimatch": "^3.0.4",
+        "mkdirp": "^0.5.1",
+        "resolve": "^1.3.2",
+        "semver": "^5.3.0",
+        "tslib": "^1.8.0",
+        "tsutils": "^2.29.0"
       },
       "dependencies": {
         "tsutils": {
@@ -13415,7 +13431,7 @@
           "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
           "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
           "requires": {
-            "tslib": "1.10.0"
+            "tslib": "^1.8.1"
           }
         }
       }
@@ -13425,9 +13441,9 @@
       "resolved": "https://registry.npmjs.org/tslint-config-airbnb/-/tslint-config-airbnb-5.11.2.tgz",
       "integrity": "sha512-mUpHPTeeCFx8XARGG/kzYP4dPSOgoCqNiYbGHh09qTH8q+Y1ghsOgaeZKYYQT7IyxMos523z/QBaiv2zKNBcow==",
       "requires": {
-        "tslint-consistent-codestyle": "1.16.0",
-        "tslint-eslint-rules": "5.4.0",
-        "tslint-microsoft-contrib": "5.2.1"
+        "tslint-consistent-codestyle": "^1.14.1",
+        "tslint-eslint-rules": "^5.4.0",
+        "tslint-microsoft-contrib": "~5.2.1"
       }
     },
     "tslint-consistent-codestyle": {
@@ -13435,9 +13451,9 @@
       "resolved": "https://registry.npmjs.org/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.16.0.tgz",
       "integrity": "sha512-ebR/xHyMEuU36hGNOgCfjGBNYxBPixf0yU1Yoo6s3BrpBRFccjPOmIVaVvQsWAUAMdmfzHOCihVkcaMfimqvHw==",
       "requires": {
-        "@fimbul/bifrost": "0.21.0",
-        "tslib": "1.10.0",
-        "tsutils": "2.29.0"
+        "@fimbul/bifrost": "^0.21.0",
+        "tslib": "^1.7.1",
+        "tsutils": "^2.29.0"
       },
       "dependencies": {
         "tsutils": {
@@ -13445,7 +13461,7 @@
           "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
           "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
           "requires": {
-            "tslib": "1.10.0"
+            "tslib": "^1.8.1"
           }
         }
       }
@@ -13457,7 +13473,7 @@
       "requires": {
         "doctrine": "0.7.2",
         "tslib": "1.9.0",
-        "tsutils": "3.17.1"
+        "tsutils": "^3.0.0"
       },
       "dependencies": {
         "doctrine": {
@@ -13465,7 +13481,7 @@
           "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz",
           "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=",
           "requires": {
-            "esutils": "1.1.6",
+            "esutils": "^1.1.6",
             "isarray": "0.0.1"
           }
         },
@@ -13491,7 +13507,7 @@
       "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz",
       "integrity": "sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA==",
       "requires": {
-        "tsutils": "2.28.0"
+        "tsutils": "^2.27.2 <2.29.0"
       },
       "dependencies": {
         "tsutils": {
@@ -13499,7 +13515,7 @@
           "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz",
           "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==",
           "requires": {
-            "tslib": "1.10.0"
+            "tslib": "^1.8.1"
           }
         }
       }
@@ -13509,7 +13525,7 @@
       "resolved": "https://registry.npmjs.org/tslint-react/-/tslint-react-4.1.0.tgz",
       "integrity": "sha512-Y7CbFn09X7Mpg6rc7t/WPbmjx9xPI8p1RsQyiGCLWgDR6sh3+IBSlT+bEkc0PSZcWwClOkqq2wPsID8Vep6szQ==",
       "requires": {
-        "tsutils": "3.17.1"
+        "tsutils": "^3.9.1"
       }
     },
     "tslint-react-hooks": {
@@ -13522,7 +13538,7 @@
       "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
       "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
       "requires": {
-        "tslib": "1.10.0"
+        "tslib": "^1.8.1"
       }
     },
     "tt-react-custom-scrollbars": {
@@ -13530,9 +13546,9 @@
       "resolved": "https://registry.npmjs.org/tt-react-custom-scrollbars/-/tt-react-custom-scrollbars-4.2.1-tt2.tgz",
       "integrity": "sha512-gMEVHHOClNJXM1d/p4PrLdXtCU2JzWRtcZdzUkXgck8sgzkxwFwSDNc3scnTk21sSKG2GSgf7G54sboXwsMVlg==",
       "requires": {
-        "dom-css": "2.1.0",
-        "prop-types": "15.7.2",
-        "raf": "3.4.1"
+        "dom-css": "^2.0.0",
+        "prop-types": "^15.5.10",
+        "raf": "^3.1.0"
       }
     },
     "tty-browserify": {
@@ -13545,7 +13561,7 @@
       "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
       "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
       "requires": {
-        "safe-buffer": "5.2.0"
+        "safe-buffer": "^5.0.1"
       }
     },
     "tweetnacl": {
@@ -13564,7 +13580,7 @@
       "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
       "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
       "requires": {
-        "prelude-ls": "1.1.2"
+        "prelude-ls": "~1.1.2"
       }
     },
     "type-is": {
@@ -13574,7 +13590,7 @@
       "dev": true,
       "requires": {
         "media-typer": "0.3.0",
-        "mime-types": "2.1.24"
+        "mime-types": "~2.1.24"
       }
     },
     "typedarray": {
@@ -13594,7 +13610,7 @@
       "resolved": "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz",
       "integrity": "sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==",
       "requires": {
-        "typescript-logic": "0.0.0"
+        "typescript-logic": "^0.0.0"
       }
     },
     "typescript-logic": {
@@ -13607,7 +13623,7 @@
       "resolved": "https://registry.npmjs.org/typescript-tuple/-/typescript-tuple-2.2.1.tgz",
       "integrity": "sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==",
       "requires": {
-        "typescript-compare": "0.0.2"
+        "typescript-compare": "^0.0.2"
       }
     },
     "uglify-js": {
@@ -13616,8 +13632,8 @@
       "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
       "dev": true,
       "requires": {
-        "commander": "2.19.0",
-        "source-map": "0.6.1"
+        "commander": "~2.19.0",
+        "source-map": "~0.6.1"
       },
       "dependencies": {
         "commander": {
@@ -13634,14 +13650,14 @@
       "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==",
       "dev": true,
       "requires": {
-        "cacache": "10.0.4",
-        "find-cache-dir": "1.0.0",
-        "schema-utils": "0.4.7",
-        "serialize-javascript": "1.9.1",
-        "source-map": "0.6.1",
-        "uglify-es": "3.3.9",
-        "webpack-sources": "1.4.3",
-        "worker-farm": "1.7.0"
+        "cacache": "^10.0.4",
+        "find-cache-dir": "^1.0.0",
+        "schema-utils": "^0.4.5",
+        "serialize-javascript": "^1.4.0",
+        "source-map": "^0.6.1",
+        "uglify-es": "^3.3.4",
+        "webpack-sources": "^1.1.0",
+        "worker-farm": "^1.5.2"
       },
       "dependencies": {
         "commander": {
@@ -13656,9 +13672,9 @@
           "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
           "dev": true,
           "requires": {
-            "commondir": "1.0.1",
-            "make-dir": "1.3.0",
-            "pkg-dir": "2.0.0"
+            "commondir": "^1.0.1",
+            "make-dir": "^1.0.0",
+            "pkg-dir": "^2.0.0"
           }
         },
         "pkg-dir": {
@@ -13667,7 +13683,7 @@
           "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
           "dev": true,
           "requires": {
-            "find-up": "2.1.0"
+            "find-up": "^2.1.0"
           }
         },
         "uglify-es": {
@@ -13676,8 +13692,8 @@
           "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
           "dev": true,
           "requires": {
-            "commander": "2.13.0",
-            "source-map": "0.6.1"
+            "commander": "~2.13.0",
+            "source-map": "~0.6.1"
           }
         }
       }
@@ -13699,8 +13715,8 @@
       "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
       "dev": true,
       "requires": {
-        "unicode-canonical-property-names-ecmascript": "1.0.4",
-        "unicode-property-aliases-ecmascript": "1.0.5"
+        "unicode-canonical-property-names-ecmascript": "^1.0.4",
+        "unicode-property-aliases-ecmascript": "^1.0.4"
       }
     },
     "unicode-match-property-value-ecmascript": {
@@ -13721,10 +13737,10 @@
       "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
       "dev": true,
       "requires": {
-        "arr-union": "3.1.0",
-        "get-value": "2.0.6",
-        "is-extendable": "0.1.1",
-        "set-value": "2.0.1"
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^2.0.1"
       }
     },
     "uniq": {
@@ -13745,7 +13761,7 @@
       "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
       "dev": true,
       "requires": {
-        "unique-slug": "2.0.2"
+        "unique-slug": "^2.0.0"
       }
     },
     "unique-slug": {
@@ -13754,7 +13770,7 @@
       "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
       "dev": true,
       "requires": {
-        "imurmurhash": "0.1.4"
+        "imurmurhash": "^0.1.4"
       }
     },
     "unpipe": {
@@ -13775,8 +13791,8 @@
       "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
       "dev": true,
       "requires": {
-        "has-value": "0.3.1",
-        "isobject": "3.0.1"
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
       },
       "dependencies": {
         "has-value": {
@@ -13785,9 +13801,9 @@
           "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
           "dev": true,
           "requires": {
-            "get-value": "2.0.6",
-            "has-values": "0.1.4",
-            "isobject": "2.1.0"
+            "get-value": "^2.0.3",
+            "has-values": "^0.1.4",
+            "isobject": "^2.0.0"
           },
           "dependencies": {
             "isobject": {
@@ -13826,7 +13842,7 @@
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
       "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
       "requires": {
-        "punycode": "2.1.1"
+        "punycode": "^2.1.0"
       }
     },
     "urix": {
@@ -13857,8 +13873,8 @@
       "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
       "dev": true,
       "requires": {
-        "querystringify": "2.1.1",
-        "requires-port": "1.0.0"
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
       }
     },
     "use": {
@@ -13893,8 +13909,8 @@
       "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
       "dev": true,
       "requires": {
-        "define-properties": "1.1.3",
-        "object.getownpropertydescriptors": "2.0.3"
+        "define-properties": "^1.1.2",
+        "object.getownpropertydescriptors": "^2.0.3"
       }
     },
     "utila": {
@@ -13930,8 +13946,8 @@
       "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
       "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
       "requires": {
-        "spdx-correct": "3.1.0",
-        "spdx-expression-parse": "3.0.0"
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
       }
     },
     "value-equal": {
@@ -13956,9 +13972,9 @@
       "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
       "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
       "requires": {
-        "assert-plus": "1.0.0",
+        "assert-plus": "^1.0.0",
         "core-util-is": "1.0.2",
-        "extsprintf": "1.3.0"
+        "extsprintf": "^1.2.0"
       }
     },
     "vm-browserify": {
@@ -13971,7 +13987,7 @@
       "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
       "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
       "requires": {
-        "loose-envify": "1.4.0"
+        "loose-envify": "^1.0.0"
       }
     },
     "watchpack": {
@@ -13980,9 +13996,9 @@
       "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
       "dev": true,
       "requires": {
-        "chokidar": "2.1.8",
-        "graceful-fs": "4.2.2",
-        "neo-async": "2.6.1"
+        "chokidar": "^2.0.2",
+        "graceful-fs": "^4.1.2",
+        "neo-async": "^2.5.0"
       }
     },
     "wbuf": {
@@ -13991,7 +14007,7 @@
       "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
       "dev": true,
       "requires": {
-        "minimalistic-assert": "1.0.1"
+        "minimalistic-assert": "^1.0.0"
       }
     },
     "webpack": {
@@ -14004,25 +14020,25 @@
         "@webassemblyjs/helper-module-context": "1.8.5",
         "@webassemblyjs/wasm-edit": "1.8.5",
         "@webassemblyjs/wasm-parser": "1.8.5",
-        "acorn": "6.3.0",
-        "ajv": "6.10.2",
-        "ajv-keywords": "3.4.1",
-        "chrome-trace-event": "1.0.2",
-        "enhanced-resolve": "4.1.1",
-        "eslint-scope": "4.0.3",
-        "json-parse-better-errors": "1.0.2",
-        "loader-runner": "2.4.0",
-        "loader-utils": "1.2.3",
-        "memory-fs": "0.4.1",
-        "micromatch": "3.1.10",
-        "mkdirp": "0.5.1",
-        "neo-async": "2.6.1",
-        "node-libs-browser": "2.2.1",
-        "schema-utils": "1.0.0",
-        "tapable": "1.1.3",
-        "terser-webpack-plugin": "1.4.1",
-        "watchpack": "1.6.0",
-        "webpack-sources": "1.4.3"
+        "acorn": "^6.2.1",
+        "ajv": "^6.10.2",
+        "ajv-keywords": "^3.4.1",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^4.1.0",
+        "eslint-scope": "^4.0.3",
+        "json-parse-better-errors": "^1.0.2",
+        "loader-runner": "^2.4.0",
+        "loader-utils": "^1.2.3",
+        "memory-fs": "^0.4.1",
+        "micromatch": "^3.1.10",
+        "mkdirp": "^0.5.1",
+        "neo-async": "^2.6.1",
+        "node-libs-browser": "^2.2.1",
+        "schema-utils": "^1.0.0",
+        "tapable": "^1.1.3",
+        "terser-webpack-plugin": "^1.4.1",
+        "watchpack": "^1.6.0",
+        "webpack-sources": "^1.4.1"
       },
       "dependencies": {
         "enhanced-resolve": {
@@ -14031,9 +14047,9 @@
           "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
           "dev": true,
           "requires": {
-            "graceful-fs": "4.2.2",
-            "memory-fs": "0.5.0",
-            "tapable": "1.1.3"
+            "graceful-fs": "^4.1.2",
+            "memory-fs": "^0.5.0",
+            "tapable": "^1.0.0"
           },
           "dependencies": {
             "memory-fs": {
@@ -14042,8 +14058,8 @@
               "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
               "dev": true,
               "requires": {
-                "errno": "0.1.7",
-                "readable-stream": "2.3.6"
+                "errno": "^0.1.3",
+                "readable-stream": "^2.0.1"
               }
             }
           }
@@ -14054,8 +14070,8 @@
           "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
           "dev": true,
           "requires": {
-            "errno": "0.1.7",
-            "readable-stream": "2.3.6"
+            "errno": "^0.1.3",
+            "readable-stream": "^2.0.1"
           }
         },
         "schema-utils": {
@@ -14064,9 +14080,9 @@
           "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
           "dev": true,
           "requires": {
-            "ajv": "6.10.2",
-            "ajv-errors": "1.0.1",
-            "ajv-keywords": "3.4.1"
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
           }
         },
         "tapable": {
@@ -14114,9 +14130,9 @@
           "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
           "dev": true,
           "requires": {
-            "string-width": "3.1.0",
-            "strip-ansi": "5.2.0",
-            "wrap-ansi": "5.1.0"
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
           }
         },
         "enhanced-resolve": {
@@ -14125,9 +14141,9 @@
           "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
           "dev": true,
           "requires": {
-            "graceful-fs": "4.2.2",
-            "memory-fs": "0.4.1",
-            "tapable": "1.1.3"
+            "graceful-fs": "^4.1.2",
+            "memory-fs": "^0.4.0",
+            "tapable": "^1.0.0"
           }
         },
         "find-up": {
@@ -14136,7 +14152,7 @@
           "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
           "dev": true,
           "requires": {
-            "locate-path": "3.0.0"
+            "locate-path": "^3.0.0"
           }
         },
         "get-caller-file": {
@@ -14157,7 +14173,7 @@
           "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
           "dev": true,
           "requires": {
-            "invert-kv": "2.0.0"
+            "invert-kv": "^2.0.0"
           }
         },
         "locate-path": {
@@ -14166,8 +14182,8 @@
           "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
           "dev": true,
           "requires": {
-            "p-locate": "3.0.0",
-            "path-exists": "3.0.0"
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
           }
         },
         "memory-fs": {
@@ -14176,8 +14192,8 @@
           "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
           "dev": true,
           "requires": {
-            "errno": "0.1.7",
-            "readable-stream": "2.3.6"
+            "errno": "^0.1.3",
+            "readable-stream": "^2.0.1"
           }
         },
         "os-locale": {
@@ -14186,9 +14202,9 @@
           "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
           "dev": true,
           "requires": {
-            "execa": "1.0.0",
-            "lcid": "2.0.0",
-            "mem": "4.3.0"
+            "execa": "^1.0.0",
+            "lcid": "^2.0.0",
+            "mem": "^4.0.0"
           }
         },
         "p-limit": {
@@ -14197,7 +14213,7 @@
           "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
           "dev": true,
           "requires": {
-            "p-try": "2.2.0"
+            "p-try": "^2.0.0"
           }
         },
         "p-locate": {
@@ -14206,7 +14222,7 @@
           "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
           "dev": true,
           "requires": {
-            "p-limit": "2.2.1"
+            "p-limit": "^2.0.0"
           }
         },
         "p-try": {
@@ -14227,9 +14243,9 @@
           "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
           "dev": true,
           "requires": {
-            "emoji-regex": "7.0.3",
-            "is-fullwidth-code-point": "2.0.0",
-            "strip-ansi": "5.2.0"
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
           }
         },
         "strip-ansi": {
@@ -14238,7 +14254,7 @@
           "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
           "dev": true,
           "requires": {
-            "ansi-regex": "4.1.0"
+            "ansi-regex": "^4.1.0"
           }
         },
         "supports-color": {
@@ -14247,7 +14263,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         },
         "tapable": {
@@ -14268,9 +14284,9 @@
           "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
           "dev": true,
           "requires": {
-            "ansi-styles": "3.2.1",
-            "string-width": "3.1.0",
-            "strip-ansi": "5.2.0"
+            "ansi-styles": "^3.2.0",
+            "string-width": "^3.0.0",
+            "strip-ansi": "^5.0.0"
           }
         },
         "y18n": {
@@ -14285,17 +14301,17 @@
           "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
           "dev": true,
           "requires": {
-            "cliui": "5.0.0",
-            "find-up": "3.0.0",
-            "get-caller-file": "2.0.5",
-            "os-locale": "3.1.0",
-            "require-directory": "2.1.1",
-            "require-main-filename": "2.0.0",
-            "set-blocking": "2.0.0",
-            "string-width": "3.1.0",
-            "which-module": "2.0.0",
-            "y18n": "4.0.0",
-            "yargs-parser": "13.1.1"
+            "cliui": "^5.0.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^2.0.1",
+            "os-locale": "^3.1.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^3.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^13.1.0"
           }
         },
         "yargs-parser": {
@@ -14304,8 +14320,8 @@
           "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
           "dev": true,
           "requires": {
-            "camelcase": "5.3.1",
-            "decamelize": "1.2.0"
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
           }
         }
       }
@@ -14316,11 +14332,11 @@
       "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==",
       "dev": true,
       "requires": {
-        "memory-fs": "0.4.1",
-        "mime": "2.4.4",
-        "mkdirp": "0.5.1",
-        "range-parser": "1.2.1",
-        "webpack-log": "2.0.0"
+        "memory-fs": "^0.4.1",
+        "mime": "^2.4.4",
+        "mkdirp": "^0.5.1",
+        "range-parser": "^1.2.1",
+        "webpack-log": "^2.0.0"
       },
       "dependencies": {
         "memory-fs": {
@@ -14329,8 +14345,8 @@
           "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
           "dev": true,
           "requires": {
-            "errno": "0.1.7",
-            "readable-stream": "2.3.6"
+            "errno": "^0.1.3",
+            "readable-stream": "^2.0.1"
           }
         },
         "mime": {
@@ -14345,8 +14361,8 @@
           "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
           "dev": true,
           "requires": {
-            "ansi-colors": "3.2.4",
-            "uuid": "3.3.3"
+            "ansi-colors": "^3.0.0",
+            "uuid": "^3.3.2"
           }
         }
       }
@@ -14358,37 +14374,37 @@
       "dev": true,
       "requires": {
         "ansi-html": "0.0.7",
-        "bonjour": "3.5.0",
-        "chokidar": "2.1.8",
-        "compression": "1.7.4",
-        "connect-history-api-fallback": "1.6.0",
-        "debug": "4.1.1",
-        "del": "4.1.1",
-        "express": "4.17.1",
-        "html-entities": "1.2.1",
+        "bonjour": "^3.5.0",
+        "chokidar": "^2.1.8",
+        "compression": "^1.7.4",
+        "connect-history-api-fallback": "^1.6.0",
+        "debug": "^4.1.1",
+        "del": "^4.1.1",
+        "express": "^4.17.1",
+        "html-entities": "^1.2.1",
         "http-proxy-middleware": "0.19.1",
-        "import-local": "2.0.0",
-        "internal-ip": "4.3.0",
-        "ip": "1.1.5",
-        "is-absolute-url": "3.0.3",
-        "killable": "1.0.1",
-        "loglevel": "1.6.4",
-        "opn": "5.5.0",
-        "p-retry": "3.0.1",
-        "portfinder": "1.0.24",
-        "schema-utils": "1.0.0",
-        "selfsigned": "1.10.7",
-        "semver": "6.3.0",
-        "serve-index": "1.9.1",
+        "import-local": "^2.0.0",
+        "internal-ip": "^4.3.0",
+        "ip": "^1.1.5",
+        "is-absolute-url": "^3.0.3",
+        "killable": "^1.0.1",
+        "loglevel": "^1.6.4",
+        "opn": "^5.5.0",
+        "p-retry": "^3.0.1",
+        "portfinder": "^1.0.24",
+        "schema-utils": "^1.0.0",
+        "selfsigned": "^1.10.7",
+        "semver": "^6.3.0",
+        "serve-index": "^1.9.1",
         "sockjs": "0.3.19",
         "sockjs-client": "1.4.0",
-        "spdy": "4.0.1",
-        "strip-ansi": "3.0.1",
-        "supports-color": "6.1.0",
-        "url": "0.11.0",
-        "webpack-dev-middleware": "3.7.2",
-        "webpack-log": "2.0.0",
-        "ws": "6.2.1",
+        "spdy": "^4.0.1",
+        "strip-ansi": "^3.0.1",
+        "supports-color": "^6.1.0",
+        "url": "^0.11.0",
+        "webpack-dev-middleware": "^3.7.2",
+        "webpack-log": "^2.0.0",
+        "ws": "^6.2.1",
         "yargs": "12.0.5"
       },
       "dependencies": {
@@ -14410,9 +14426,9 @@
           "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
           "dev": true,
           "requires": {
-            "string-width": "2.1.1",
-            "strip-ansi": "4.0.0",
-            "wrap-ansi": "2.1.0"
+            "string-width": "^2.1.1",
+            "strip-ansi": "^4.0.0",
+            "wrap-ansi": "^2.0.0"
           },
           "dependencies": {
             "ansi-regex": {
@@ -14427,7 +14443,7 @@
               "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
               "dev": true,
               "requires": {
-                "ansi-regex": "3.0.0"
+                "ansi-regex": "^3.0.0"
               }
             }
           }
@@ -14438,7 +14454,7 @@
           "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
           "dev": true,
           "requires": {
-            "ms": "2.1.2"
+            "ms": "^2.1.1"
           }
         },
         "find-up": {
@@ -14447,7 +14463,7 @@
           "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
           "dev": true,
           "requires": {
-            "locate-path": "3.0.0"
+            "locate-path": "^3.0.0"
           }
         },
         "invert-kv": {
@@ -14468,7 +14484,7 @@
           "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
           "dev": true,
           "requires": {
-            "invert-kv": "2.0.0"
+            "invert-kv": "^2.0.0"
           }
         },
         "locate-path": {
@@ -14477,8 +14493,8 @@
           "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
           "dev": true,
           "requires": {
-            "p-locate": "3.0.0",
-            "path-exists": "3.0.0"
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
           }
         },
         "ms": {
@@ -14493,9 +14509,9 @@
           "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
           "dev": true,
           "requires": {
-            "execa": "1.0.0",
-            "lcid": "2.0.0",
-            "mem": "4.3.0"
+            "execa": "^1.0.0",
+            "lcid": "^2.0.0",
+            "mem": "^4.0.0"
           }
         },
         "p-limit": {
@@ -14504,7 +14520,7 @@
           "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
           "dev": true,
           "requires": {
-            "p-try": "2.2.0"
+            "p-try": "^2.0.0"
           }
         },
         "p-locate": {
@@ -14513,7 +14529,7 @@
           "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
           "dev": true,
           "requires": {
-            "p-limit": "2.2.1"
+            "p-limit": "^2.0.0"
           }
         },
         "p-try": {
@@ -14528,9 +14544,9 @@
           "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
           "dev": true,
           "requires": {
-            "ajv": "6.10.2",
-            "ajv-errors": "1.0.1",
-            "ajv-keywords": "3.4.1"
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
           }
         },
         "semver": {
@@ -14545,7 +14561,7 @@
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
           "dev": true,
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         },
         "supports-color": {
@@ -14554,7 +14570,7 @@
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
           "dev": true,
           "requires": {
-            "has-flag": "3.0.0"
+            "has-flag": "^3.0.0"
           }
         },
         "webpack-log": {
@@ -14563,8 +14579,8 @@
           "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
           "dev": true,
           "requires": {
-            "ansi-colors": "3.2.4",
-            "uuid": "3.3.3"
+            "ansi-colors": "^3.0.0",
+            "uuid": "^3.3.2"
           }
         },
         "which-module": {
@@ -14579,18 +14595,18 @@
           "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
           "dev": true,
           "requires": {
-            "cliui": "4.1.0",
-            "decamelize": "1.2.0",
-            "find-up": "3.0.0",
-            "get-caller-file": "1.0.3",
-            "os-locale": "3.1.0",
-            "require-directory": "2.1.1",
-            "require-main-filename": "1.0.1",
-            "set-blocking": "2.0.0",
-            "string-width": "2.1.1",
-            "which-module": "2.0.0",
-            "y18n": "3.2.1",
-            "yargs-parser": "11.1.1"
+            "cliui": "^4.0.0",
+            "decamelize": "^1.2.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^3.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 || ^4.0.0",
+            "yargs-parser": "^11.1.1"
           }
         },
         "yargs-parser": {
@@ -14599,8 +14615,8 @@
           "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
           "dev": true,
           "requires": {
-            "camelcase": "5.3.1",
-            "decamelize": "1.2.0"
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
           }
         }
       }
@@ -14611,10 +14627,10 @@
       "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==",
       "dev": true,
       "requires": {
-        "chalk": "2.4.2",
-        "log-symbols": "2.2.0",
-        "loglevelnext": "1.0.5",
-        "uuid": "3.3.3"
+        "chalk": "^2.1.0",
+        "log-symbols": "^2.1.0",
+        "loglevelnext": "^1.0.1",
+        "uuid": "^3.1.0"
       }
     },
     "webpack-sources": {
@@ -14623,8 +14639,8 @@
       "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
       "dev": true,
       "requires": {
-        "source-list-map": "2.0.1",
-        "source-map": "0.6.1"
+        "source-list-map": "^2.0.0",
+        "source-map": "~0.6.1"
       }
     },
     "websocket-driver": {
@@ -14633,9 +14649,9 @@
       "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
       "dev": true,
       "requires": {
-        "http-parser-js": "0.4.10",
-        "safe-buffer": "5.2.0",
-        "websocket-extensions": "0.1.3"
+        "http-parser-js": ">=0.4.0 <0.4.11",
+        "safe-buffer": ">=5.1.0",
+        "websocket-extensions": ">=0.1.1"
       }
     },
     "websocket-extensions": {
@@ -14655,7 +14671,7 @@
       "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
       "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
       "requires": {
-        "isexe": "2.0.0"
+        "isexe": "^2.0.0"
       }
     },
     "which-module": {
@@ -14668,7 +14684,7 @@
       "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
       "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
       "requires": {
-        "string-width": "2.1.1"
+        "string-width": "^1.0.2 || 2"
       }
     },
     "wolfy87-eventemitter": {
@@ -14687,7 +14703,7 @@
       "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
       "dev": true,
       "requires": {
-        "errno": "0.1.7"
+        "errno": "~0.1.7"
       }
     },
     "wrap-ansi": {
@@ -14695,8 +14711,8 @@
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
       "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
       "requires": {
-        "string-width": "1.0.2",
-        "strip-ansi": "3.0.1"
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1"
       },
       "dependencies": {
         "ansi-regex": {
@@ -14709,7 +14725,7 @@
           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
           "requires": {
-            "number-is-nan": "1.0.1"
+            "number-is-nan": "^1.0.0"
           }
         },
         "string-width": {
@@ -14717,9 +14733,9 @@
           "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
           "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
-            "strip-ansi": "3.0.1"
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
           }
         },
         "strip-ansi": {
@@ -14727,7 +14743,7 @@
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         }
       }
@@ -14742,7 +14758,7 @@
       "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
       "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
       "requires": {
-        "mkdirp": "0.5.1"
+        "mkdirp": "^0.5.1"
       }
     },
     "ws": {
@@ -14751,7 +14767,7 @@
       "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
       "dev": true,
       "requires": {
-        "async-limiter": "1.0.1"
+        "async-limiter": "~1.0.0"
       }
     },
     "xtend": {
@@ -14774,19 +14790,19 @@
       "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
       "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
       "requires": {
-        "camelcase": "3.0.0",
-        "cliui": "3.2.0",
-        "decamelize": "1.2.0",
-        "get-caller-file": "1.0.3",
-        "os-locale": "1.4.0",
-        "read-pkg-up": "1.0.1",
-        "require-directory": "2.1.1",
-        "require-main-filename": "1.0.1",
-        "set-blocking": "2.0.0",
-        "string-width": "1.0.2",
-        "which-module": "1.0.0",
-        "y18n": "3.2.1",
-        "yargs-parser": "5.0.0"
+        "camelcase": "^3.0.0",
+        "cliui": "^3.2.0",
+        "decamelize": "^1.1.1",
+        "get-caller-file": "^1.0.1",
+        "os-locale": "^1.4.0",
+        "read-pkg-up": "^1.0.1",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^1.0.1",
+        "set-blocking": "^2.0.0",
+        "string-width": "^1.0.2",
+        "which-module": "^1.0.0",
+        "y18n": "^3.2.1",
+        "yargs-parser": "^5.0.0"
       },
       "dependencies": {
         "ansi-regex": {
@@ -14804,8 +14820,8 @@
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
           "requires": {
-            "path-exists": "2.1.0",
-            "pinkie-promise": "2.0.1"
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "is-fullwidth-code-point": {
@@ -14813,7 +14829,7 @@
           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
           "requires": {
-            "number-is-nan": "1.0.1"
+            "number-is-nan": "^1.0.0"
           }
         },
         "load-json-file": {
@@ -14821,11 +14837,11 @@
           "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
           "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
           "requires": {
-            "graceful-fs": "4.2.2",
-            "parse-json": "2.2.0",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1",
-            "strip-bom": "2.0.0"
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "strip-bom": "^2.0.0"
           }
         },
         "path-exists": {
@@ -14833,7 +14849,7 @@
           "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
           "requires": {
-            "pinkie-promise": "2.0.1"
+            "pinkie-promise": "^2.0.0"
           }
         },
         "path-type": {
@@ -14841,9 +14857,9 @@
           "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
           "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
           "requires": {
-            "graceful-fs": "4.2.2",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1"
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "read-pkg": {
@@ -14851,9 +14867,9 @@
           "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
           "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
           "requires": {
-            "load-json-file": "1.1.0",
-            "normalize-package-data": "2.5.0",
-            "path-type": "1.1.0"
+            "load-json-file": "^1.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^1.0.0"
           }
         },
         "read-pkg-up": {
@@ -14861,8 +14877,8 @@
           "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
           "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
           "requires": {
-            "find-up": "1.1.2",
-            "read-pkg": "1.1.0"
+            "find-up": "^1.0.0",
+            "read-pkg": "^1.0.0"
           }
         },
         "string-width": {
@@ -14870,9 +14886,9 @@
           "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
           "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
-            "strip-ansi": "3.0.1"
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
           }
         },
         "strip-ansi": {
@@ -14880,7 +14896,7 @@
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         },
         "strip-bom": {
@@ -14888,7 +14904,7 @@
           "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
           "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
           "requires": {
-            "is-utf8": "0.2.1"
+            "is-utf8": "^0.2.0"
           }
         }
       }
@@ -14898,7 +14914,7 @@
       "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
       "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
       "requires": {
-        "camelcase": "3.0.0"
+        "camelcase": "^3.0.0"
       },
       "dependencies": {
         "camelcase": {
diff --git a/package.json b/package.json
index a055da27..9d36ae1e 100644
--- a/package.json
+++ b/package.json
@@ -104,6 +104,7 @@
     "sass-loader": "^7.3.1",
     "sass-resources-loader": "^2.0.0",
     "scrypt": "^6.0.3",
+    "sticky-sidebar": "^3.3.1",
     "throttle-debounce": "^2.1.0",
     "tslint": "^5.20.0",
     "tslint-config-airbnb": "^5.11.2",
diff --git a/src/components/input/Button/index.tsx b/src/components/input/Button/index.tsx
index af33a097..6020680f 100644
--- a/src/components/input/Button/index.tsx
+++ b/src/components/input/Button/index.tsx
@@ -1,5 +1,5 @@
 import classnames from 'classnames';
-import React, { ButtonHTMLAttributes, DetailedHTMLProps, FC, createElement } from 'react';
+import React, { ButtonHTMLAttributes, DetailedHTMLProps, FC, createElement, memo } from 'react';
 import * as styles from './styles.scss';
 import { Icon } from '~/components/input/Icon';
 import { IIcon } from '~/redux/types';
@@ -22,46 +22,48 @@ type IButtonProps = DetailedHTMLProps<
   iconOnly?: boolean;
 };
 
-const Button: FC<IButtonProps> = ({
-  className = '',
-  size = 'normal',
-  iconLeft,
-  iconRight,
-  children,
-  seamless = false,
-  transparent = false,
-  non_submitting = false,
-  red = false,
-  grey = false,
-  is_loading,
-  title,
-  stretchy,
-  disabled,
-  iconOnly,
-  ...props
-}) =>
-  createElement(
-    seamless || non_submitting ? 'div' : 'button',
-    {
-      className: classnames(styles.button, className, styles[size], {
-        red,
-        grey,
-        seamless,
-        transparent,
-        disabled,
-        is_loading,
-        stretchy,
-        icon: ((iconLeft || iconRight) && !title && !children) || iconOnly,
-        has_icon_left: !!iconLeft,
-        has_icon_right: !!iconRight,
-      }),
-      ...props,
-    },
-    [
-      iconLeft && <Icon icon={iconLeft} size={20} key={0} />,
-      title ? <span>{title}</span> : children || null,
-      iconRight && <Icon icon={iconRight} size={20} key={2} />,
-    ]
-  );
+const Button: FC<IButtonProps> = memo(
+  ({
+    className = '',
+    size = 'normal',
+    iconLeft,
+    iconRight,
+    children,
+    seamless = false,
+    transparent = false,
+    non_submitting = false,
+    red = false,
+    grey = false,
+    is_loading,
+    title,
+    stretchy,
+    disabled,
+    iconOnly,
+    ...props
+  }) =>
+    createElement(
+      seamless || non_submitting ? 'div' : 'button',
+      {
+        className: classnames(styles.button, className, styles[size], {
+          red,
+          grey,
+          seamless,
+          transparent,
+          disabled,
+          is_loading,
+          stretchy,
+          icon: ((iconLeft || iconRight) && !title && !children) || iconOnly,
+          has_icon_left: !!iconLeft,
+          has_icon_right: !!iconRight,
+        }),
+        ...props,
+      },
+      [
+        iconLeft && <Icon icon={iconLeft} size={20} key={0} />,
+        title ? <span>{title}</span> : children || null,
+        iconRight && <Icon icon={iconRight} size={20} key={2} />,
+      ]
+    )
+);
 
 export { Button };
diff --git a/src/components/node/NodeComments/index.tsx b/src/components/node/NodeComments/index.tsx
index ab9982ba..c038a405 100644
--- a/src/components/node/NodeComments/index.tsx
+++ b/src/components/node/NodeComments/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC, useMemo } from 'react';
+import React, { FC, useMemo, memo } from 'react';
 import { Comment } from '../Comment';
 import { Filler } from '~/components/containers/Filler';
 
@@ -10,7 +10,7 @@ interface IProps {
   comments?: IComment[];
 }
 
-const NodeComments: FC<IProps> = ({ comments }) => {
+const NodeComments: FC<IProps> = memo(({ comments }) => {
   const groupped: ICommentGroup[] = useMemo(() => comments.reduce(groupCommentsByUser, []), [
     comments,
   ]);
@@ -24,6 +24,6 @@ const NodeComments: FC<IProps> = ({ comments }) => {
       <Filler />
     </div>
   );
-};
+});
 
 export { NodeComments };
diff --git a/src/components/node/NodePanel/index.tsx b/src/components/node/NodePanel/index.tsx
index e3494792..ff862110 100644
--- a/src/components/node/NodePanel/index.tsx
+++ b/src/components/node/NodePanel/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC, useCallback, useEffect, useRef, useState } from 'react';
+import React, { FC, useCallback, useEffect, useRef, useState, memo } from 'react';
 import * as styles from './styles.scss';
 import { INode } from '~/redux/types';
 import { createPortal } from 'react-dom';
@@ -14,7 +14,7 @@ interface IProps {
   onLike: () => void;
 }
 
-const NodePanel: FC<IProps> = ({ node, layout, can_edit, can_like, onEdit, onLike }) => {
+const NodePanel: FC<IProps> = memo(({ node, layout, can_edit, can_like, onEdit, onLike }) => {
   const [stack, setStack] = useState(false);
 
   const ref = useRef(null);
@@ -64,6 +64,6 @@ const NodePanel: FC<IProps> = ({ node, layout, can_edit, can_like, onEdit, onLik
       )}
     </div>
   );
-};
+});
 
 export { NodePanel };
diff --git a/src/components/node/NodeTags/index.tsx b/src/components/node/NodeTags/index.tsx
index 3e153572..6c541051 100644
--- a/src/components/node/NodeTags/index.tsx
+++ b/src/components/node/NodeTags/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC } from 'react';
+import React, { FC, memo } from 'react';
 import { Tags } from '../Tags';
 import { ITag } from '~/redux/types';
 
@@ -8,8 +8,8 @@ interface IProps {
   onChange?: (tags: string[]) => void;
 }
 
-const NodeTags: FC<IProps> = ({ is_editable, tags, onChange }) => (
+const NodeTags: FC<IProps> = memo(({ is_editable, tags, onChange }) => (
   <Tags tags={tags} is_editable={is_editable} onTagsChange={onChange} />
-);
+));
 
 export { NodeTags };
diff --git a/src/containers/node/NodeLayout/index.tsx b/src/containers/node/NodeLayout/index.tsx
index 43da34de..7bae3e15 100644
--- a/src/containers/node/NodeLayout/index.tsx
+++ b/src/containers/node/NodeLayout/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC, createElement, useEffect, useCallback, useState, useMemo } from 'react';
+import React, { FC, createElement, useEffect, useCallback, useState, useMemo, memo } from 'react';
 import { RouteComponentProps } from 'react-router';
 import { connect } from 'react-redux';
 import { canEditNode, canLikeNode } from '~/utils/node';
@@ -35,97 +35,99 @@ type IProps = ReturnType<typeof mapStateToProps> &
   typeof mapDispatchToProps &
   RouteComponentProps<{ id: string }> & {};
 
-const NodeLayoutUnconnected: FC<IProps> = ({
-  match: {
-    params: { id },
-  },
-  node: { is_loading, is_loading_comments, comments = [], current: node, current_cover_image },
-  user,
-  user: { is_user },
-  nodeLoadNode,
-  nodeUpdateTags,
-  nodeEdit,
-  nodeLike,
-  nodeSetCoverImage,
-}) => {
-  const [layout, setLayout] = useState({});
-
-  const updateLayout = useCallback(() => setLayout({}), []);
-
-  useEffect(() => {
-    if (is_loading) return;
-    nodeLoadNode(parseInt(id, 10), null);
-  }, [nodeLoadNode, id]);
-
-  const onTagsChange = useCallback(
-    (tags: string[]) => {
-      nodeUpdateTags(node.id, tags);
+const NodeLayoutUnconnected: FC<IProps> = memo(
+  ({
+    match: {
+      params: { id },
     },
-    [node, nodeUpdateTags]
-  );
+    node: { is_loading, is_loading_comments, comments = [], current: node, current_cover_image },
+    user,
+    user: { is_user },
+    nodeLoadNode,
+    nodeUpdateTags,
+    nodeEdit,
+    nodeLike,
+    nodeSetCoverImage,
+  }) => {
+    const [layout, setLayout] = useState({});
 
-  const can_edit = useMemo(() => canEditNode(node, user), [node, user]);
-  const can_like = useMemo(() => canLikeNode(node, user), [node, user]);
+    const updateLayout = useCallback(() => setLayout({}), []);
 
-  const block = node && node.type && NODE_COMPONENTS[node.type];
-  const inline_block = node && node.type && NODE_INLINES[node.type];
+    useEffect(() => {
+      if (is_loading) return;
+      nodeLoadNode(parseInt(id, 10), null);
+    }, [nodeLoadNode, id]);
 
-  const onEdit = useCallback(() => nodeEdit(node.id), [nodeEdit, node]);
-  const onLike = useCallback(() => nodeLike(node.id), [nodeLike, node]);
+    const onTagsChange = useCallback(
+      (tags: string[]) => {
+        nodeUpdateTags(node.id, tags);
+      },
+      [node, nodeUpdateTags]
+    );
 
-  useEffect(() => {
-    if (!node.cover) return;
-    nodeSetCoverImage(node.cover);
-    return () => nodeSetCoverImage(null);
-  }, [nodeSetCoverImage, node.cover]);
+    const can_edit = useMemo(() => canEditNode(node, user), [node, user]);
+    const can_like = useMemo(() => canLikeNode(node, user), [node, user]);
 
-  return (
-    <Card className={styles.node} seamless>
-      {block && createElement(block, { node, is_loading, updateLayout, layout })}
+    const block = node && node.type && NODE_COMPONENTS[node.type];
+    const inline_block = node && node.type && NODE_INLINES[node.type];
 
-      <NodePanel
-        node={node}
-        layout={layout}
-        can_edit={can_edit}
-        can_like={can_like}
-        onEdit={onEdit}
-        onLike={onLike}
-      />
+    const onEdit = useCallback(() => nodeEdit(node.id), [nodeEdit, node]);
+    const onLike = useCallback(() => nodeLike(node.id), [nodeLike, node]);
 
-      <Group>
-        <Padder>
-          <Group horizontal className={styles.content}>
-            <Group className={styles.comments}>
-              {inline_block && (
-                <div className={styles.inline_block}>
-                  {createElement(inline_block, { node, is_loading, updateLayout, layout })}
-                </div>
-              )}
+    useEffect(() => {
+      if (!node.cover) return;
+      nodeSetCoverImage(node.cover);
+      return () => nodeSetCoverImage(null);
+    }, [nodeSetCoverImage, node.cover]);
 
-              {is_loading_comments || !comments.length ? (
-                <NodeNoComments is_loading={is_loading_comments} />
-              ) : (
-                <NodeComments comments={comments} />
-              )}
+    return (
+      <Card className={styles.node} seamless>
+        {block && createElement(block, { node, is_loading, updateLayout, layout })}
 
-              {is_user && <CommentForm id={0} />}
-            </Group>
+        <NodePanel
+          node={node}
+          layout={layout}
+          can_edit={can_edit}
+          can_like={can_like}
+          onEdit={onEdit}
+          onLike={onLike}
+        />
 
-            <div className={styles.panel}>
-              <Group style={{ flex: 1, minWidth: 0 }}>
-                <NodeTags is_editable={is_user} tags={node.tags} onChange={onTagsChange} />
+        <Group>
+          <Padder>
+            <Group horizontal className={styles.content}>
+              <Group className={styles.comments}>
+                {inline_block && (
+                  <div className={styles.inline_block}>
+                    {createElement(inline_block, { node, is_loading, updateLayout, layout })}
+                  </div>
+                )}
 
-                <NodeRelated title="First album" />
+                {is_loading_comments || !comments.length ? (
+                  <NodeNoComments is_loading={is_loading_comments} />
+                ) : (
+                  <NodeComments comments={comments} />
+                )}
 
-                <NodeRelated title="Second album" />
+                {is_user && <CommentForm id={0} />}
               </Group>
-            </div>
-          </Group>
-        </Padder>
-      </Group>
-    </Card>
-  );
-};
+
+              <div className={styles.panel}>
+                <Group style={{ flex: 1, minWidth: 0 }}>
+                  <NodeTags is_editable={is_user} tags={node.tags} onChange={onTagsChange} />
+
+                  <NodeRelated title="First album" />
+
+                  <NodeRelated title="Second album" />
+                </Group>
+              </div>
+            </Group>
+          </Padder>
+        </Group>
+      </Card>
+    );
+  }
+);
 
 const NodeLayout = connect(
   mapStateToProps,

From f169de370a52b998abd00442720192087a5e97e6 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 10:42:25 +0700
Subject: [PATCH 66/99] optimized scrolls

---
 .../containers/BlurWrapper/styles.scss        |   6 +-
 .../containers/CommentWrapper/styles.scss     |   1 +
 src/components/containers/PageCover/index.tsx |   7 +-
 .../containers/PageCover/styles.scss          |   1 +
 .../EditorUploadCoverButton/styles.scss       |   1 +
 src/components/flow/Cell/styles.scss          |   1 +
 .../flow/HeroPlaceholder/style.scss           |   4 +-
 src/components/main/Header/index.tsx          |   6 +-
 src/components/media/AudioPlayer/index.tsx    | 127 ++++++++++--------
 src/components/node/Comment/index.tsx         |  47 +++----
 src/components/node/CommentContent/index.tsx  |   6 +-
 .../node/NodeAudioImageBlock/styles.scss      |   1 +
 12 files changed, 110 insertions(+), 98 deletions(-)

diff --git a/src/components/containers/BlurWrapper/styles.scss b/src/components/containers/BlurWrapper/styles.scss
index 253b89c5..b081deff 100644
--- a/src/components/containers/BlurWrapper/styles.scss
+++ b/src/components/containers/BlurWrapper/styles.scss
@@ -1,7 +1,7 @@
 .blur {
   filter: blur(0);
   transition: filter 0.25s;
-  max-height: 100vh;
-  width: 100vw;
-  overflow: visible auto;
+  // max-height: 100vh;
+  // width: 100vw;
+  // overflow: visible auto;
 }
diff --git a/src/components/containers/CommentWrapper/styles.scss b/src/components/containers/CommentWrapper/styles.scss
index 42897f16..4a8c3e24 100644
--- a/src/components/containers/CommentWrapper/styles.scss
+++ b/src/components/containers/CommentWrapper/styles.scss
@@ -55,6 +55,7 @@
   border-radius: $panel_radius 0 0 $panel_radius;
   background-size: cover;
   flex: 0 0 $comment_height;
+  will-change: transform;
 
   @include tablet {
     height: 32px;
diff --git a/src/components/containers/PageCover/index.tsx b/src/components/containers/PageCover/index.tsx
index c461a2a8..cf4d05dc 100644
--- a/src/components/containers/PageCover/index.tsx
+++ b/src/components/containers/PageCover/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC } from 'react';
+import React, { FC, memo } from 'react';
 import * as styles from './styles.scss';
 import { createPortal } from 'react-dom';
 import { selectNode } from '~/redux/node/selectors';
@@ -10,7 +10,7 @@ const mapStateToProps = state => pick(['current_cover_image'], selectNode(state)
 
 type IProps = ReturnType<typeof mapStateToProps> & {};
 
-const PageCoverUnconnected: FC<IProps> = ({ current_cover_image }) =>
+const PageCoverUnconnected: FC<IProps> = memo(({ current_cover_image }) =>
   current_cover_image
     ? createPortal(
         <div
@@ -19,7 +19,8 @@ const PageCoverUnconnected: FC<IProps> = ({ current_cover_image }) =>
         />,
         document.body
       )
-    : null;
+    : null
+);
 
 const PageCover = connect(mapStateToProps)(PageCoverUnconnected);
 export { PageCover };
diff --git a/src/components/containers/PageCover/styles.scss b/src/components/containers/PageCover/styles.scss
index 2816ba7b..3081fccd 100644
--- a/src/components/containers/PageCover/styles.scss
+++ b/src/components/containers/PageCover/styles.scss
@@ -17,6 +17,7 @@
   width: 100%;
   height: 100%;
   animation: fadeIn 2s;
+  will-change: transform, opacity;
 
   &::after {
     content: ' ';
diff --git a/src/components/editors/EditorUploadCoverButton/styles.scss b/src/components/editors/EditorUploadCoverButton/styles.scss
index ccb396ec..18237537 100644
--- a/src/components/editors/EditorUploadCoverButton/styles.scss
+++ b/src/components/editors/EditorUploadCoverButton/styles.scss
@@ -50,6 +50,7 @@
   border-radius: ($upload_button_height / 2) !important;
   background: 50% 50% no-repeat;
   background-size: cover;
+  will-change: transform;
   display: flex;
   align-items: center;
   flex-direction: row;
diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index f9b20df7..6ea16ac5 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -110,6 +110,7 @@
   border-radius: $cell_radius + 2px;
   opacity: 0;
   transition: opacity 0.5s;
+  will-change: transform;
 
   & > img {
     opacity: 0;
diff --git a/src/components/flow/HeroPlaceholder/style.scss b/src/components/flow/HeroPlaceholder/style.scss
index ae7a9405..9d180bb9 100644
--- a/src/components/flow/HeroPlaceholder/style.scss
+++ b/src/components/flow/HeroPlaceholder/style.scss
@@ -1,9 +1,11 @@
 .container {
   height: 280px;
   width: 100%;
-  background: transparentize(white, 0.9) url("http://37.192.131.144/hero/photos/photo-20140527-1639766.jpg") no-repeat 50% 30%;
+  background: transparentize(white, 0.9)
+    url('http://37.192.131.144/hero/photos/photo-20140527-1639766.jpg') no-repeat 50% 30%;
   background-size: cover;
   opacity: 0.7;
+  will-change: transform;
   //box-shadow: white 0 0 0 1px;
   //border-radius: $panel_radius $panel_radius 0 0;
 }
diff --git a/src/components/main/Header/index.tsx b/src/components/main/Header/index.tsx
index 7f1476c7..89b3aef7 100644
--- a/src/components/main/Header/index.tsx
+++ b/src/components/main/Header/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC, useCallback } from 'react';
+import React, { FC, useCallback, memo } from 'react';
 import { connect } from 'react-redux';
 import { push as historyPush } from 'connected-react-router';
 import { Link } from 'react-router-dom';
@@ -25,7 +25,7 @@ const mapDispatchToProps = {
 
 type IProps = ReturnType<typeof mapStateToProps> & typeof mapDispatchToProps & {};
 
-const HeaderUnconnected: FC<IProps> = ({ user: { username, is_user, photo }, showDialog }) => {
+const HeaderUnconnected: FC<IProps> = memo(({ user: { username, is_user, photo }, showDialog }) => {
   const onLogin = useCallback(() => showDialog(DIALOGS.LOGIN), [showDialog]);
 
   return (
@@ -54,7 +54,7 @@ const HeaderUnconnected: FC<IProps> = ({ user: { username, is_user, photo }, sho
       )}
     </div>
   );
-};
+});
 
 const Header = connect(
   mapStateToProps,
diff --git a/src/components/media/AudioPlayer/index.tsx b/src/components/media/AudioPlayer/index.tsx
index 5dcbf462..c5079e63 100644
--- a/src/components/media/AudioPlayer/index.tsx
+++ b/src/components/media/AudioPlayer/index.tsx
@@ -1,4 +1,4 @@
-import React, { useCallback, useState, useEffect } from 'react';
+import React, { useCallback, useState, useEffect, memo } from 'react';
 import { connect } from 'react-redux';
 import { selectPlayer } from '~/redux/player/selectors';
 import * as PLAYER_ACTIONS from '~/redux/player/actions';
@@ -25,76 +25,85 @@ type Props = ReturnType<typeof mapStateToProps> &
     file: IFile;
   };
 
-const AudioPlayerUnconnected = ({
-  file,
-  player: { file: current, status },
+const AudioPlayerUnconnected = memo(
+  ({
+    file,
+    player: { file: current, status },
+    playerSetFileAndPlay,
+    playerPlay,
+    playerPause,
+    playerSeek,
+  }: Props) => {
+    const [playing, setPlaying] = useState(false);
+    const [progress, setProgress] = useState<IPlayerProgress>({
+      progress: 0,
+      current: 0,
+      total: 0,
+    });
 
-  playerSetFileAndPlay,
-  playerPlay,
-  playerPause,
-  playerSeek,
-}: Props) => {
-  const [playing, setPlaying] = useState(false);
-  const [progress, setProgress] = useState<IPlayerProgress>({ progress: 0, current: 0, total: 0 });
+    const onPlay = useCallback(() => {
+      if (current && current.id === file.id) {
+        if (status === PLAYER_STATES.PLAYING) return playerPause();
+        return playerPlay();
+      }
 
-  const onPlay = useCallback(() => {
-    if (current && current.id === file.id) {
-      if (status === PLAYER_STATES.PLAYING) return playerPause();
-      return playerPlay();
-    }
+      playerSetFileAndPlay(file);
+    }, [file, current, status, playerPlay, playerPause, playerSetFileAndPlay]);
 
-    playerSetFileAndPlay(file);
-  }, [file, current, status, playerPlay, playerPause, playerSetFileAndPlay]);
+    const onProgress = useCallback(
+      ({ detail }: { detail: IPlayerProgress }) => {
+        if (!detail || !detail.total) return;
+        setProgress(detail);
+      },
+      [setProgress]
+    );
 
-  const onProgress = useCallback(
-    ({ detail }: { detail: IPlayerProgress }) => {
-      if (!detail || !detail.total) return;
-      setProgress(detail);
-    },
-    [setProgress]
-  );
+    const onSeek = useCallback(
+      event => {
+        event.stopPropagation();
+        const { clientX, target } = event;
+        const { left, width } = target.getBoundingClientRect();
+        playerSeek((clientX - left) / width);
+      },
+      [playerSeek]
+    );
 
-  const onSeek = useCallback(
-    event => {
-      event.stopPropagation();
-      const { clientX, target } = event;
-      const { left, width } = target.getBoundingClientRect();
-      playerSeek((clientX - left) / width);
-    },
-    [playerSeek]
-  );
+    useEffect(() => {
+      const active = current && current.id === file.id;
+      setPlaying(current && current.id === file.id);
 
-  useEffect(() => {
-    const active = current && current.id === file.id;
-    setPlaying(current && current.id === file.id);
+      if (active) Player.on('playprogress', onProgress);
 
-    if (active) Player.on('playprogress', onProgress);
+      return () => {
+        if (active) Player.off('playprogress', onProgress);
+      };
+    }, [file, current, setPlaying, onProgress]);
 
-    return () => {
-      if (active) Player.off('playprogress', onProgress);
-    };
-  }, [file, current, setPlaying, onProgress]);
+    const title =
+      file.metadata &&
+      (file.metadata.title ||
+        [file.metadata.id3artist, file.metadata.id3title].filter(el => !!el).join(' - '));
 
-  const title =
-    file.metadata &&
-    (file.metadata.title ||
-      [file.metadata.id3artist, file.metadata.id3title].filter(el => !!el).join(' - '));
+    return (
+      <div onClick={onPlay} className={classNames(styles.wrap, { playing })}>
+        <div className={styles.playpause}>
+          {playing && status === PLAYER_STATES.PLAYING ? (
+            <Icon icon="pause" />
+          ) : (
+            <Icon icon="play" />
+          )}
+        </div>
+        <div className={styles.content}>
+          <div className={styles.title}>{title || 'Unknown'}</div>
 
-  return (
-    <div onClick={onPlay} className={classNames(styles.wrap, { playing })}>
-      <div className={styles.playpause}>
-        {playing && status === PLAYER_STATES.PLAYING ? <Icon icon="pause" /> : <Icon icon="play" />}
-      </div>
-      <div className={styles.content}>
-        <div className={styles.title}>{title || 'Unknown'}</div>
-
-        <div className={styles.progress} onClick={onSeek}>
-          <div className={styles.bar} style={{ width: `${progress.progress}%` }} />
+          <div className={styles.progress} onClick={onSeek}>
+            <div className={styles.bar} style={{ width: `${progress.progress}%` }} />
+          </div>
         </div>
       </div>
-    </div>
-  );
-};
+    );
+  }
+);
 
 export const AudioPlayer = connect(
   mapStateToProps,
diff --git a/src/components/node/Comment/index.tsx b/src/components/node/Comment/index.tsx
index e3b1f3b0..52298ba0 100644
--- a/src/components/node/Comment/index.tsx
+++ b/src/components/node/Comment/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC, HTMLAttributes } from 'react';
+import React, { FC, HTMLAttributes, memo } from 'react';
 import { CommentWrapper } from '~/components/containers/CommentWrapper';
 import { ICommentGroup } from '~/redux/types';
 import { getURL } from '~/utils/dom';
@@ -12,30 +12,25 @@ type IProps = HTMLAttributes<HTMLDivElement> & {
   is_same?: boolean;
 };
 
-const Comment: FC<IProps> = ({
-  comment_group,
-  is_empty,
-  is_same,
-  is_loading,
-  className,
-  ...props
-}) => {
-  return (
-    <CommentWrapper
-      className={className}
-      is_empty={is_empty}
-      is_loading={is_loading}
-      user={comment_group.user}
-      is_same={is_same}
-      {...props}
-    >
-      <div className={styles.wrap}>
-        {comment_group.comments.map(comment => (
-          <CommentContent comment={comment} key={comment.id} />
-        ))}
-      </div>
-    </CommentWrapper>
-  );
-};
+const Comment: FC<IProps> = memo(
+  ({ comment_group, is_empty, is_same, is_loading, className, ...props }) => {
+    return (
+      <CommentWrapper
+        className={className}
+        is_empty={is_empty}
+        is_loading={is_loading}
+        user={comment_group.user}
+        is_same={is_same}
+        {...props}
+      >
+        <div className={styles.wrap}>
+          {comment_group.comments.map(comment => (
+            <CommentContent comment={comment} key={comment.id} />
+          ))}
+        </div>
+      </CommentWrapper>
+    );
+  }
+);
 
 export { Comment };
diff --git a/src/components/node/CommentContent/index.tsx b/src/components/node/CommentContent/index.tsx
index ed4503cc..cbba18a2 100644
--- a/src/components/node/CommentContent/index.tsx
+++ b/src/components/node/CommentContent/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC, useMemo } from 'react';
+import React, { FC, useMemo, memo } from 'react';
 import { IComment, IFile } from '~/redux/types';
 import path from 'ramda/es/path';
 import { formatCommentText, getURL, getPrettyDate } from '~/utils/dom';
@@ -15,7 +15,7 @@ interface IProps {
   comment: IComment;
 }
 
-const CommentContent: FC<IProps> = ({ comment }) => {
+const CommentContent: FC<IProps> = memo(({ comment }) => {
   const groupped = useMemo<Record<keyof typeof UPLOAD_TYPES, IFile[]>>(
     () =>
       reduce(
@@ -68,7 +68,7 @@ const CommentContent: FC<IProps> = ({ comment }) => {
       )}
     </>
   );
-};
+});
 
 export { CommentContent };
 
diff --git a/src/components/node/NodeAudioImageBlock/styles.scss b/src/components/node/NodeAudioImageBlock/styles.scss
index 8d235c9e..34c81e8a 100644
--- a/src/components/node/NodeAudioImageBlock/styles.scss
+++ b/src/components/node/NodeAudioImageBlock/styles.scss
@@ -29,4 +29,5 @@
   background: no-repeat 50% 30%;
   background-size: cover;
   z-index: 1;
+  will-change: transform;
 }

From 34e449dd15558c9289a308d2234d1b03af4ddcfc Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 11:19:24 +0700
Subject: [PATCH 67/99] like animation

---
 .../node/NodeImageSlideBlock/styles.scss      |  1 +
 src/components/node/NodePanelInner/index.tsx  | 12 ++++---
 .../node/NodePanelInner/styles.scss           | 36 +++++++++++++++++++
 src/sprites/Sprites.tsx                       |  5 +++
 4 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/src/components/node/NodeImageSlideBlock/styles.scss b/src/components/node/NodeImageSlideBlock/styles.scss
index 4824443b..69a5f869 100644
--- a/src/components/node/NodeImageSlideBlock/styles.scss
+++ b/src/components/node/NodeImageSlideBlock/styles.scss
@@ -16,6 +16,7 @@
   position: relative;
   overflow: hidden;
   user-select: none;
+  will-change: transform, height;
 
   .image {
     max-height: 960px;
diff --git a/src/components/node/NodePanelInner/index.tsx b/src/components/node/NodePanelInner/index.tsx
index 3364f0f8..92719751 100644
--- a/src/components/node/NodePanelInner/index.tsx
+++ b/src/components/node/NodePanelInner/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC, useCallback, useEffect, useRef, useState } from 'react';
+import React, { FC } from 'react';
 import * as styles from './styles.scss';
 import { Group } from '~/components/containers/Group';
 import { Filler } from '~/components/containers/Filler';
@@ -17,7 +17,7 @@ interface IProps {
 }
 
 const NodePanelInner: FC<IProps> = ({
-  node: { title, user },
+  node: { title, user, is_liked },
   stack,
   can_edit,
   can_like,
@@ -41,8 +41,12 @@ const NodePanelInner: FC<IProps> = ({
             </div>
           )}
           {can_like && (
-            <div>
-              <Icon icon="heart" size={24} onClick={onLike} />
+            <div className={classNames(styles.like, { is_liked })}>
+              {is_liked ? (
+                <Icon icon="heart_full" size={24} onClick={onLike} />
+              ) : (
+                <Icon icon="heart" size={24} onClick={onLike} />
+              )}
             </div>
           )}
         </div>
diff --git a/src/components/node/NodePanelInner/styles.scss b/src/components/node/NodePanelInner/styles.scss
index 133cb699..f79e771a 100644
--- a/src/components/node/NodePanelInner/styles.scss
+++ b/src/components/node/NodePanelInner/styles.scss
@@ -124,3 +124,39 @@
 
 .sep {
 }
+
+@keyframes pulse {
+  0% {
+    transform: scale(1);
+  }
+
+  45% {
+    transform: scale(1);
+  }
+
+  60% {
+    transform: scale(1.25);
+  }
+
+  75% {
+    transform: scale(1);
+  }
+
+  90% {
+    transform: scale(1.25);
+  }
+
+  100% {
+    transform: scale(1);
+  }
+}
+
+.like {
+  transition: fill, stroke 0.25s;
+  will-change: transform;
+
+  &:hover {
+    fill: $red;
+    animation: pulse 0.75s infinite;
+  }
+}
diff --git a/src/sprites/Sprites.tsx b/src/sprites/Sprites.tsx
index c4631a4f..391f9a54 100644
--- a/src/sprites/Sprites.tsx
+++ b/src/sprites/Sprites.tsx
@@ -49,6 +49,11 @@ const Sprites: FC<{}> = () => (
       <path d="M16.5 3c-1.74 0-3.41.81-4.5 2.09C10.91 3.81 9.24 3 7.5 3 4.42 3 2 5.42 2 8.5c0 3.78 3.4 6.86 8.55 11.54L12 21.35l1.45-1.32C18.6 15.36 22 12.28 22 8.5 22 5.42 19.58 3 16.5 3zm-4.4 15.55l-.1.1-.1-.1C7.14 14.24 4 11.39 4 8.5 4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96 5 16.5 5c2 0 3.5 1.5 3.5 3.5 0 2.89-3.14 5.74-7.9 10.05z" />
     </g>
 
+    <g id="heart_full" stroke="none">
+      <path fill="none" d="M0 0h24v24H0V0z" />
+      <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
+    </g>
+
     <g id="edit" stroke="none">
       <path fill="none" d="M0 0h24v24H0V0z" />
       <path d="M14.06 9.02l.92.92L5.92 19H5v-.92l9.06-9.06M17.66 3c-.25 0-.51.1-.7.29l-1.83 1.83 3.75 3.75 1.83-1.83c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29zm-3.6 3.19L3 17.25V21h3.75L17.81 9.94l-3.75-3.75z" />

From fea0a37457e8938c14a561fd04d5ab8e356d1a3b Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 11:35:04 +0700
Subject: [PATCH 68/99] node liking

---
 .../node/NodePanelInner/styles.scss           | 10 ++++-
 src/constants/api.ts                          |  1 +
 src/redux/node/api.ts                         | 11 +++++
 src/redux/node/sagas.ts                       | 45 ++++++++++++++++++-
 4 files changed, 64 insertions(+), 3 deletions(-)

diff --git a/src/components/node/NodePanelInner/styles.scss b/src/components/node/NodePanelInner/styles.scss
index f79e771a..58358e10 100644
--- a/src/components/node/NodePanelInner/styles.scss
+++ b/src/components/node/NodePanelInner/styles.scss
@@ -135,7 +135,7 @@
   }
 
   60% {
-    transform: scale(1.25);
+    transform: scale(1.4);
   }
 
   75% {
@@ -143,7 +143,7 @@
   }
 
   90% {
-    transform: scale(1.25);
+    transform: scale(1.4);
   }
 
   100% {
@@ -155,6 +155,12 @@
   transition: fill, stroke 0.25s;
   will-change: transform;
 
+  &:global(.is_liked) {
+    svg {
+      fill: $red;
+    }
+  }
+
   &:hover {
     fill: $red;
     animation: pulse 0.75s infinite;
diff --git a/src/constants/api.ts b/src/constants/api.ts
index 21637064..9fcc0800 100644
--- a/src/constants/api.ts
+++ b/src/constants/api.ts
@@ -14,5 +14,6 @@ export const API = {
 
     COMMENT: (id: INode['id']) => `/node/${id}/comment`,
     UPDATE_TAGS: (id: INode['id']) => `/node/${id}/tags`,
+    POST_LIKE: (id: INode['id']) => `/node/${id}/like`,
   },
 };
diff --git a/src/redux/node/api.ts b/src/redux/node/api.ts
index e8f6da65..1ca5da81 100644
--- a/src/redux/node/api.ts
+++ b/src/redux/node/api.ts
@@ -75,3 +75,14 @@ export const updateNodeTags = ({
     .post(API.NODE.UPDATE_TAGS(id), { tags }, configWithToken(access))
     .then(resultMiddleware)
     .catch(errorMiddleware);
+
+export const postNodeLike = ({
+  id,
+  access,
+}: ReturnType<typeof nodeUpdateTags> & { access: string }): Promise<
+  IResultWithStatus<{ is_liked: INode['is_liked'] }>
+> =>
+  api
+    .post(API.NODE.POST_LIKE(id), {}, configWithToken(access))
+    .then(resultMiddleware)
+    .catch(errorMiddleware);
diff --git a/src/redux/node/sagas.ts b/src/redux/node/sagas.ts
index 2749d7fc..854ad486 100644
--- a/src/redux/node/sagas.ts
+++ b/src/redux/node/sagas.ts
@@ -18,8 +18,16 @@ import {
   nodeCreate,
   nodeSetEditor,
   nodeEdit,
+  nodeLike,
 } from './actions';
-import { postNode, getNode, postNodeComment, getNodeComments, updateNodeTags } from './api';
+import {
+  postNode,
+  getNode,
+  postNodeComment,
+  getNodeComments,
+  updateNodeTags,
+  postNodeLike,
+} from './api';
 import { reqWrapper } from '../auth/sagas';
 import { flowSetNodes } from '../flow/actions';
 import { ERRORS } from '~/constants/errors';
@@ -29,6 +37,23 @@ import { URLS } from '~/constants/urls';
 import { selectNode } from './selectors';
 import { IResultWithStatus, INode } from '../types';
 import { NODE_EDITOR_DIALOGS, DIALOGS } from '../modal/constants';
+import { INodeState } from './reducer';
+import { IFlowState } from '../flow/reducer';
+
+function* updateNodeEverythere(node) {
+  const {
+    current: { id },
+  }: INodeState = yield select(selectNode);
+  const flow_nodes: IFlowState['nodes'] = yield select(selectFlowNodes);
+
+  if (id === node.id) {
+    yield put(nodeSetCurrent(node));
+  }
+
+  yield put(
+    flowSetNodes(flow_nodes.map(flow_node => (flow_node.id === node.id ? node : flow_node)))
+  );
+}
 
 function* onNodeSave({ node }: ReturnType<typeof nodeSave>) {
   yield put(nodeSetSaveErrors({}));
@@ -153,6 +178,23 @@ function* onEditSaga({ id }: ReturnType<typeof nodeEdit>) {
 
   yield put(nodeSetEditor(node));
   yield put(modalShowDialog(NODE_EDITOR_DIALOGS[node.type]));
+
+  return true;
+}
+
+function* onLikeSaga({ id }: ReturnType<typeof nodeLike>) {
+  const {
+    current,
+    current: { is_liked },
+  } = yield select(selectNode);
+
+  yield call(updateNodeEverythere, { ...current, is_liked: !is_liked });
+
+  const { data, error } = yield call(reqWrapper, postNodeLike, { id });
+
+  if (!error || data.is_liked === !is_liked) return; // ok and matches
+
+  yield call(updateNodeEverythere, { ...current, is_liked });
 }
 
 export default function* nodeSaga() {
@@ -162,4 +204,5 @@ export default function* nodeSaga() {
   yield takeLatest(NODE_ACTIONS.UPDATE_TAGS, onUpdateTags);
   yield takeLatest(NODE_ACTIONS.CREATE, onCreateSaga);
   yield takeLatest(NODE_ACTIONS.EDIT, onEditSaga);
+  yield takeLatest(NODE_ACTIONS.LIKE, onLikeSaga);
 }

From a1dbb6bdfa31c061f4456a89c81beaaba33debde Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 11:38:03 +0700
Subject: [PATCH 69/99] the flow is squared now

---
 src/components/flow/FlowGrid/styles.scss | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/components/flow/FlowGrid/styles.scss b/src/components/flow/FlowGrid/styles.scss
index bda06973..be508db9 100644
--- a/src/components/flow/FlowGrid/styles.scss
+++ b/src/components/flow/FlowGrid/styles.scss
@@ -16,18 +16,24 @@ $cols: $content_width / $cell;
 
   @media (max-width: $cell * 5) {
     grid-template-columns: repeat(4, 1fr);
+    grid-auto-rows: 25vw;
   }
 
   @media (max-width: $cell * 4) {
     grid-template-columns: repeat(3, 1fr);
+    grid-auto-rows: 33vw;
   }
 
   @media (max-width: $cell * 3) {
     grid-template-columns: repeat(2, 1fr);
+    grid-auto-rows: 50vw;
   }
 
   @media (max-width: $cell * 2) {
     grid-template-columns: repeat(1, 1fr);
+    grid-auto-rows: 75vw;
+    grid-column-gap: $gap;
+    grid-row-gap: $gap;
   }
 }
 

From c49dbb344ddb291be247cf303ea9cb877dbb32c0 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 11:46:08 +0700
Subject: [PATCH 70/99] added is_heroic

---
 src/components/containers/BlurWrapper/styles.scss |  1 +
 src/redux/node/constants.ts                       | 14 ++++++++++----
 src/redux/types.ts                                |  1 +
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/components/containers/BlurWrapper/styles.scss b/src/components/containers/BlurWrapper/styles.scss
index b081deff..113865fb 100644
--- a/src/components/containers/BlurWrapper/styles.scss
+++ b/src/components/containers/BlurWrapper/styles.scss
@@ -1,6 +1,7 @@
 .blur {
   filter: blur(0);
   transition: filter 0.25s;
+  will-change: filter;
   // max-height: 100vh;
   // width: 100vw;
   // overflow: visible auto;
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index 74026ed5..d964e2fc 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -12,6 +12,7 @@ import { AudioEditor } from '~/components/editors/AudioEditor';
 import { EditorImageUploadButton } from '~/components/editors/EditorImageUploadButton';
 import { EditorAudioUploadButton } from '~/components/editors/EditorAudioUploadButton';
 import { EditorUploadCoverButton } from '~/components/editors/EditorUploadCoverButton';
+import { Filler } from '~/components/containers/Filler';
 
 const prefix = 'NODE.';
 export const NODE_ACTIONS = {
@@ -100,10 +101,15 @@ export const NODE_EDITORS = {
 };
 
 export const NODE_PANEL_COMPONENTS = {
-  [NODE_TYPES.TEXT]: [EditorUploadCoverButton],
-  [NODE_TYPES.VIDEO]: [EditorUploadCoverButton],
-  [NODE_TYPES.IMAGE]: [EditorImageUploadButton, EditorUploadCoverButton],
-  [NODE_TYPES.AUDIO]: [EditorAudioUploadButton, EditorImageUploadButton, EditorUploadCoverButton],
+  [NODE_TYPES.TEXT]: [Filler, EditorUploadCoverButton],
+  [NODE_TYPES.VIDEO]: [Filler, EditorUploadCoverButton],
+  [NODE_TYPES.IMAGE]: [EditorImageUploadButton, Filler, EditorUploadCoverButton],
+  [NODE_TYPES.AUDIO]: [
+    EditorAudioUploadButton,
+    EditorImageUploadButton,
+    Filler,
+    EditorUploadCoverButton,
+  ],
 };
 
 export const NODE_EDITOR_DATA: Record<
diff --git a/src/redux/types.ts b/src/redux/types.ts
index cd9e592a..b7b98a2c 100644
--- a/src/redux/types.ts
+++ b/src/redux/types.ts
@@ -120,6 +120,7 @@ export interface INode {
   thumbnail?: string;
   description?: string;
   is_liked?: boolean;
+  is_heroic?: boolean;
 
   options: {
     flow: {

From 6b5638b44ecaccd782d7986599b6999f13dee552 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 12:02:35 +0700
Subject: [PATCH 71/99] added nodes heroize button

---
 src/components/node/NodePanel/index.tsx       | 90 ++++++++++---------
 src/components/node/NodePanelInner/index.tsx  | 17 +++-
 .../node/NodePanelInner/styles.scss           | 15 ++++
 src/constants/api.ts                          |  1 +
 src/containers/node/NodeLayout/index.tsx      | 13 ++-
 src/redux/node/actions.ts                     |  5 ++
 src/redux/node/api.ts                         | 15 +++-
 src/redux/node/constants.ts                   |  1 +
 src/redux/node/sagas.ts                       | 17 ++++
 src/sprites/Sprites.tsx                       | 10 +++
 src/utils/node.ts                             |  3 +
 11 files changed, 140 insertions(+), 47 deletions(-)

diff --git a/src/components/node/NodePanel/index.tsx b/src/components/node/NodePanel/index.tsx
index ff862110..ba745934 100644
--- a/src/components/node/NodePanel/index.tsx
+++ b/src/components/node/NodePanel/index.tsx
@@ -3,67 +3,77 @@ import * as styles from './styles.scss';
 import { INode } from '~/redux/types';
 import { createPortal } from 'react-dom';
 import { NodePanelInner } from '~/components/node/NodePanelInner';
+import pick from 'ramda/es/pick';
 
 interface IProps {
-  node: INode;
+  node: Partial<INode>;
   layout: {};
 
   can_edit: boolean;
   can_like: boolean;
+  can_star: boolean;
+
   onEdit: () => void;
   onLike: () => void;
+  onStar: () => void;
 }
 
-const NodePanel: FC<IProps> = memo(({ node, layout, can_edit, can_like, onEdit, onLike }) => {
-  const [stack, setStack] = useState(false);
+const NodePanel: FC<IProps> = memo(
+  ({ node, layout, can_edit, can_like, can_star, onEdit, onLike, onStar }) => {
+    const [stack, setStack] = useState(false);
 
-  const ref = useRef(null);
-  const getPlace = useCallback(() => {
-    if (!ref.current) return;
+    const ref = useRef(null);
+    const getPlace = useCallback(() => {
+      if (!ref.current) return;
 
-    const { offsetTop } = ref.current;
-    const { height } = ref.current.getBoundingClientRect();
-    const { scrollY, innerHeight } = window;
+      const { offsetTop } = ref.current;
+      const { height } = ref.current.getBoundingClientRect();
+      const { scrollY, innerHeight } = window;
 
-    setStack(offsetTop > scrollY + innerHeight - height);
-  }, [ref]);
+      setStack(offsetTop > scrollY + innerHeight - height);
+    }, [ref]);
 
-  useEffect(() => {
-    getPlace();
-    window.addEventListener('scroll', getPlace);
-    window.addEventListener('resize', getPlace);
+    useEffect(() => {
+      getPlace();
+      window.addEventListener('scroll', getPlace);
+      window.addEventListener('resize', getPlace);
 
-    return () => {
-      window.removeEventListener('scroll', getPlace);
-      window.removeEventListener('resize', getPlace);
-    };
-  }, [layout]);
+      return () => {
+        window.removeEventListener('scroll', getPlace);
+        window.removeEventListener('resize', getPlace);
+      };
+    }, [layout]);
 
-  return (
-    <div className={styles.place} ref={ref}>
-      {stack ? (
-        createPortal(
+    return (
+      <div className={styles.place} ref={ref}>
+        {stack ? (
+          createPortal(
+            <NodePanelInner
+              node={node}
+              stack
+              onEdit={onEdit}
+              onLike={onLike}
+              onStar={onStar}
+              can_edit={can_edit}
+              can_like={can_like}
+              can_star={can_star}
+            />,
+            document.body
+          )
+        ) : (
           <NodePanelInner
             node={node}
-            stack
             onEdit={onEdit}
             onLike={onLike}
+            onStar={onStar}
             can_edit={can_edit}
             can_like={can_like}
-          />,
-          document.body
-        )
-      ) : (
-        <NodePanelInner
-          node={node}
-          onEdit={onEdit}
-          onLike={onLike}
-          can_edit={can_edit}
-          can_like={can_like}
-        />
-      )}
-    </div>
-  );
-});
+            can_star={can_star}
+          />
+        )}
+      </div>
+    );
+  }
+);
 
 export { NodePanel };
diff --git a/src/components/node/NodePanelInner/index.tsx b/src/components/node/NodePanelInner/index.tsx
index 92719751..caaf6275 100644
--- a/src/components/node/NodePanelInner/index.tsx
+++ b/src/components/node/NodePanelInner/index.tsx
@@ -7,20 +7,24 @@ import { INode } from '~/redux/types';
 import classNames from 'classnames';
 
 interface IProps {
-  node: INode;
+  node: Partial<INode>;
   stack?: boolean;
 
   can_edit: boolean;
   can_like: boolean;
+  can_star: boolean;
   onEdit: () => void;
   onLike: () => void;
+  onStar: () => void;
 }
 
 const NodePanelInner: FC<IProps> = ({
-  node: { title, user, is_liked },
+  node: { title, user, is_liked, is_heroic },
   stack,
+  can_star,
   can_edit,
   can_like,
+  onStar,
   onEdit,
   onLike,
 }) => {
@@ -35,6 +39,15 @@ const NodePanelInner: FC<IProps> = ({
         </Group>
 
         <div className={styles.buttons}>
+          {can_star && (
+            <div className={classNames(styles.star, { is_heroic })}>
+              {is_heroic ? (
+                <Icon icon="star_full" size={24} onClick={onStar} />
+              ) : (
+                <Icon icon="star" size={24} onClick={onStar} />
+              )}
+            </div>
+          )}
           {can_edit && (
             <div>
               <Icon icon="edit" size={24} onClick={onEdit} />
diff --git a/src/components/node/NodePanelInner/styles.scss b/src/components/node/NodePanelInner/styles.scss
index 58358e10..3e1790b3 100644
--- a/src/components/node/NodePanelInner/styles.scss
+++ b/src/components/node/NodePanelInner/styles.scss
@@ -166,3 +166,18 @@
     animation: pulse 0.75s infinite;
   }
 }
+
+.star {
+  transition: fill, stroke 0.25s;
+  will-change: transform;
+
+  &:global(.is_heroic) {
+    svg {
+      fill: $orange;
+    }
+  }
+
+  &:hover {
+    fill: $orange;
+  }
+}
diff --git a/src/constants/api.ts b/src/constants/api.ts
index 9fcc0800..a83ce381 100644
--- a/src/constants/api.ts
+++ b/src/constants/api.ts
@@ -15,5 +15,6 @@ export const API = {
     COMMENT: (id: INode['id']) => `/node/${id}/comment`,
     UPDATE_TAGS: (id: INode['id']) => `/node/${id}/tags`,
     POST_LIKE: (id: INode['id']) => `/node/${id}/like`,
+    POST_STAR: (id: INode['id']) => `/node/${id}/heroic`,
   },
 };
diff --git a/src/containers/node/NodeLayout/index.tsx b/src/containers/node/NodeLayout/index.tsx
index 7bae3e15..f45a6dc9 100644
--- a/src/containers/node/NodeLayout/index.tsx
+++ b/src/containers/node/NodeLayout/index.tsx
@@ -1,7 +1,7 @@
 import React, { FC, createElement, useEffect, useCallback, useState, useMemo, memo } from 'react';
 import { RouteComponentProps } from 'react-router';
 import { connect } from 'react-redux';
-import { canEditNode, canLikeNode } from '~/utils/node';
+import { canEditNode, canLikeNode, canStarNode } from '~/utils/node';
 import { selectNode } from '~/redux/node/selectors';
 import { Card } from '~/components/containers/Card';
 
@@ -17,6 +17,7 @@ import { NODE_COMPONENTS, NODE_INLINES } from '~/redux/node/constants';
 import * as NODE_ACTIONS from '~/redux/node/actions';
 import { CommentForm } from '~/components/node/CommentForm';
 import { selectUser } from '~/redux/auth/selectors';
+import pick from 'ramda/es/pick';
 
 const mapStateToProps = state => ({
   node: selectNode(state),
@@ -29,6 +30,7 @@ const mapDispatchToProps = {
   nodeSetCoverImage: NODE_ACTIONS.nodeSetCoverImage,
   nodeEdit: NODE_ACTIONS.nodeEdit,
   nodeLike: NODE_ACTIONS.nodeLike,
+  nodeStar: NODE_ACTIONS.nodeStar,
 };
 
 type IProps = ReturnType<typeof mapStateToProps> &
@@ -40,13 +42,14 @@ const NodeLayoutUnconnected: FC<IProps> = memo(
     match: {
       params: { id },
     },
-    node: { is_loading, is_loading_comments, comments = [], current: node, current_cover_image },
+    node: { is_loading, is_loading_comments, comments = [], current: node },
     user,
     user: { is_user },
     nodeLoadNode,
     nodeUpdateTags,
     nodeEdit,
     nodeLike,
+    nodeStar,
     nodeSetCoverImage,
   }) => {
     const [layout, setLayout] = useState({});
@@ -67,12 +70,14 @@ const NodeLayoutUnconnected: FC<IProps> = memo(
 
     const can_edit = useMemo(() => canEditNode(node, user), [node, user]);
     const can_like = useMemo(() => canLikeNode(node, user), [node, user]);
+    const can_star = useMemo(() => canStarNode(node, user), [node, user]);
 
     const block = node && node.type && NODE_COMPONENTS[node.type];
     const inline_block = node && node.type && NODE_INLINES[node.type];
 
     const onEdit = useCallback(() => nodeEdit(node.id), [nodeEdit, node]);
     const onLike = useCallback(() => nodeLike(node.id), [nodeLike, node]);
+    const onStar = useCallback(() => nodeStar(node.id), [nodeStar, node]);
 
     useEffect(() => {
       if (!node.cover) return;
@@ -85,12 +90,14 @@ const NodeLayoutUnconnected: FC<IProps> = memo(
         {block && createElement(block, { node, is_loading, updateLayout, layout })}
 
         <NodePanel
-          node={node}
+          node={pick(['title', 'user', 'is_liked', 'is_heroic'], node)}
           layout={layout}
           can_edit={can_edit}
           can_like={can_like}
+          can_star={can_star}
           onEdit={onEdit}
           onLike={onLike}
+          onStar={onStar}
         />
 
         <Group>
diff --git a/src/redux/node/actions.ts b/src/redux/node/actions.ts
index 56dd72a3..f15cfa68 100644
--- a/src/redux/node/actions.ts
+++ b/src/redux/node/actions.ts
@@ -80,6 +80,11 @@ export const nodeLike = (id: INode['id']) => ({
   id,
 });
 
+export const nodeStar = (id: INode['id']) => ({
+  type: NODE_ACTIONS.STAR,
+  id,
+});
+
 export const nodeSetEditor = (editor: INode) => ({
   type: NODE_ACTIONS.SET_EDITOR,
   editor,
diff --git a/src/redux/node/api.ts b/src/redux/node/api.ts
index 1ca5da81..29e586b2 100644
--- a/src/redux/node/api.ts
+++ b/src/redux/node/api.ts
@@ -1,7 +1,7 @@
 import { api, configWithToken, resultMiddleware, errorMiddleware } from '~/utils/api';
 import { INode, IResultWithStatus, IComment } from '../types';
 import { API } from '~/constants/api';
-import { nodeUpdateTags } from './actions';
+import { nodeUpdateTags, nodeLike, nodeStar } from './actions';
 
 export const postNode = ({
   access,
@@ -79,10 +79,21 @@ export const updateNodeTags = ({
 export const postNodeLike = ({
   id,
   access,
-}: ReturnType<typeof nodeUpdateTags> & { access: string }): Promise<
+}: ReturnType<typeof nodeLike> & { access: string }): Promise<
   IResultWithStatus<{ is_liked: INode['is_liked'] }>
 > =>
   api
     .post(API.NODE.POST_LIKE(id), {}, configWithToken(access))
     .then(resultMiddleware)
     .catch(errorMiddleware);
+
+export const postNodeStar = ({
+  id,
+  access,
+}: ReturnType<typeof nodeStar> & { access: string }): Promise<
+  IResultWithStatus<{ is_liked: INode['is_liked'] }>
+> =>
+  api
+    .post(API.NODE.POST_STAR(id), {}, configWithToken(access))
+    .then(resultMiddleware)
+    .catch(errorMiddleware);
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index d964e2fc..457150a4 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -21,6 +21,7 @@ export const NODE_ACTIONS = {
 
   EDIT: `${prefix}EDIT`,
   LIKE: `${prefix}LIKE`,
+  STAR: `${prefix}STAR`,
   CREATE: `${prefix}CREATE`,
 
   SET_SAVE_ERRORS: `${prefix}SET_SAVE_ERRORS`,
diff --git a/src/redux/node/sagas.ts b/src/redux/node/sagas.ts
index 854ad486..70340422 100644
--- a/src/redux/node/sagas.ts
+++ b/src/redux/node/sagas.ts
@@ -27,6 +27,7 @@ import {
   getNodeComments,
   updateNodeTags,
   postNodeLike,
+  postNodeStar,
 } from './api';
 import { reqWrapper } from '../auth/sagas';
 import { flowSetNodes } from '../flow/actions';
@@ -197,6 +198,21 @@ function* onLikeSaga({ id }: ReturnType<typeof nodeLike>) {
   yield call(updateNodeEverythere, { ...current, is_liked });
 }
 
+function* onStarSaga({ id }: ReturnType<typeof nodeLike>) {
+  const {
+    current,
+    current: { is_heroic },
+  } = yield select(selectNode);
+
+  yield call(updateNodeEverythere, { ...current, is_heroic: !is_heroic });
+
+  const { data, error } = yield call(reqWrapper, postNodeStar, { id });
+
+  if (!error || data.is_heroic === !is_heroic) return; // ok and matches
+
+  yield call(updateNodeEverythere, { ...current, is_heroic });
+}
+
 export default function* nodeSaga() {
   yield takeLatest(NODE_ACTIONS.SAVE, onNodeSave);
   yield takeLatest(NODE_ACTIONS.LOAD_NODE, onNodeLoad);
@@ -205,4 +221,5 @@ export default function* nodeSaga() {
   yield takeLatest(NODE_ACTIONS.CREATE, onCreateSaga);
   yield takeLatest(NODE_ACTIONS.EDIT, onEditSaga);
   yield takeLatest(NODE_ACTIONS.LIKE, onLikeSaga);
+  yield takeLatest(NODE_ACTIONS.STAR, onStarSaga);
 }
diff --git a/src/sprites/Sprites.tsx b/src/sprites/Sprites.tsx
index 391f9a54..8a407350 100644
--- a/src/sprites/Sprites.tsx
+++ b/src/sprites/Sprites.tsx
@@ -44,6 +44,16 @@ const Sprites: FC<{}> = () => (
       <path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z" />
     </g>
 
+    <g id="star" stroke="none">
+      <path fill="none" d="M0 0h24v24H0V0z" />
+      <path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z" />
+    </g>
+
+    <g id="star_full" stroke="none">
+      <path fill="none" d="M0 0h24v24H0V0z" />
+      <path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" />
+    </g>
+
     <g id="heart" stroke="none">
       <path fill="none" d="M0 0h24v24H0V0z" />
       <path d="M16.5 3c-1.74 0-3.41.81-4.5 2.09C10.91 3.81 9.24 3 7.5 3 4.42 3 2 5.42 2 8.5c0 3.78 3.4 6.86 8.55 11.54L12 21.35l1.45-1.32C18.6 15.36 22 12.28 22 8.5 22 5.42 19.58 3 16.5 3zm-4.4 15.55l-.1.1-.1-.1C7.14 14.24 4 11.39 4 8.5 4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96 5 16.5 5c2 0 3.5 1.5 3.5 3.5 0 2.89-3.14 5.74-7.9 10.05z" />
diff --git a/src/utils/node.ts b/src/utils/node.ts
index 2b81e9e8..f73a9559 100644
--- a/src/utils/node.ts
+++ b/src/utils/node.ts
@@ -9,3 +9,6 @@ export const canEditNode = (node: Partial<INode>, user: Partial<IUser>): boolean
 
 export const canLikeNode = (node: Partial<INode>, user: Partial<IUser>): boolean =>
   path(['role'], user) && path(['role'], user) !== USER_ROLES.GUEST;
+
+export const canStarNode = (node: Partial<INode>, user: Partial<IUser>): boolean =>
+  path(['role'], user) && path(['role'], user) === USER_ROLES.ADMIN;

From 313c41b56c351cef02b70436b464679e29f4f7ec Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 12:08:50 +0700
Subject: [PATCH 72/99] limited heroic nodes to images

---
 src/utils/node.ts | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/utils/node.ts b/src/utils/node.ts
index f73a9559..53868c87 100644
--- a/src/utils/node.ts
+++ b/src/utils/node.ts
@@ -2,6 +2,7 @@ import { USER_ROLES } from '~/redux/auth/constants';
 import { INode } from '~/redux/types';
 import { IUser } from '~/redux/auth/types';
 import path from 'ramda/es/path';
+import { NODE_TYPES } from '~/redux/node/constants';
 
 export const canEditNode = (node: Partial<INode>, user: Partial<IUser>): boolean =>
   path(['role'], user) === USER_ROLES.ADMIN ||
@@ -11,4 +12,6 @@ export const canLikeNode = (node: Partial<INode>, user: Partial<IUser>): boolean
   path(['role'], user) && path(['role'], user) !== USER_ROLES.GUEST;
 
 export const canStarNode = (node: Partial<INode>, user: Partial<IUser>): boolean =>
-  path(['role'], user) && path(['role'], user) === USER_ROLES.ADMIN;
+  node.type === NODE_TYPES.IMAGE &&
+  path(['role'], user) &&
+  path(['role'], user) === USER_ROLES.ADMIN;

From 2f73e9ad298243bfa8db7c32633a95185c294878 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 12:31:05 +0700
Subject: [PATCH 73/99] flow for node

---
 src/redux/types.ts | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/redux/types.ts b/src/redux/types.ts
index b7b98a2c..d2e57edb 100644
--- a/src/redux/types.ts
+++ b/src/redux/types.ts
@@ -122,11 +122,9 @@ export interface INode {
   is_liked?: boolean;
   is_heroic?: boolean;
 
-  options: {
-    flow: {
-      display: 'single' | 'vertical' | 'horizontal' | 'quadro';
-      show_description: boolean;
-    };
+  flow: {
+    display: 'single' | 'vertical' | 'horizontal' | 'quadro';
+    show_description: boolean;
   };
 
   tags: ITag[];

From a6385cf4cf80cffa5ec61dbadf1db7a6ba3a5ee2 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 12:33:57 +0700
Subject: [PATCH 74/99] flow grid appearance

---
 src/components/flow/FlowGrid/styles.scss | 4 ++++
 src/redux/node/constants.ts              | 8 +++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/components/flow/FlowGrid/styles.scss b/src/components/flow/FlowGrid/styles.scss
index be508db9..b816a3de 100644
--- a/src/components/flow/FlowGrid/styles.scss
+++ b/src/components/flow/FlowGrid/styles.scss
@@ -16,21 +16,25 @@ $cols: $content_width / $cell;
 
   @media (max-width: $cell * 5) {
     grid-template-columns: repeat(4, 1fr);
+    grid-template-rows: 25vw $cell;
     grid-auto-rows: 25vw;
   }
 
   @media (max-width: $cell * 4) {
     grid-template-columns: repeat(3, 1fr);
+    grid-template-rows: 40vh 33vw;
     grid-auto-rows: 33vw;
   }
 
   @media (max-width: $cell * 3) {
     grid-template-columns: repeat(2, 1fr);
+    grid-template-rows: 40vh 50vw;
     grid-auto-rows: 50vw;
   }
 
   @media (max-width: $cell * 2) {
     grid-template-columns: repeat(1, 1fr);
+    grid-template-rows: 40vh 75vw;
     grid-auto-rows: 75vw;
     grid-column-gap: $gap;
     grid-row-gap: $gap;
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index 457150a4..e18df061 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -54,11 +54,9 @@ export const EMPTY_NODE: INode = {
   blocks: [],
   tags: [],
 
-  options: {
-    flow: {
-      display: 'single',
-      show_description: false,
-    },
+  flow: {
+    display: 'single',
+    show_description: false,
   },
 };
 

From 744f79053b0ffd772551ad452c809d791d937379 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 14:38:55 +0700
Subject: [PATCH 75/99] set flow cell view actions

---
 src/components/flow/Cell/index.tsx       | 58 +++++++++++++++++++++---
 src/components/flow/Cell/styles.scss     | 52 +++++++++++++++++++--
 src/components/flow/FlowGrid/index.tsx   | 26 +++++------
 src/containers/flow/FlowLayout/index.tsx | 22 +++++++--
 src/redux/flow/actions.ts                |  7 +++
 src/redux/flow/constants.ts              |  1 +
 src/sprites/Sprites.tsx                  | 28 +++++++++---
 7 files changed, 160 insertions(+), 34 deletions(-)

diff --git a/src/components/flow/Cell/index.tsx b/src/components/flow/Cell/index.tsx
index 28bc34b9..a3954be3 100644
--- a/src/components/flow/Cell/index.tsx
+++ b/src/components/flow/Cell/index.tsx
@@ -5,14 +5,24 @@ import classNames from 'classnames';
 
 import * as styles from './styles.scss';
 import path from 'ramda/es/path';
+import { Icon } from '~/components/input/Icon';
+import { flowSetCellView } from '~/redux/flow/actions';
 
 interface IProps {
   node: INode;
-  onSelect: (id: INode['id'], type: INode['type']) => void;
   is_text?: boolean;
+  can_edit?: boolean;
+
+  onSelect: (id: INode['id'], type: INode['type']) => void;
+  onChangeCellView: typeof flowSetCellView;
 }
 
-const Cell: FC<IProps> = ({ node: { id, title, thumbnail, type, blocks }, onSelect }) => {
+const Cell: FC<IProps> = ({
+  node: { id, title, thumbnail, type, blocks, flow },
+  can_edit,
+  onSelect,
+  onChangeCellView,
+}) => {
   const [is_loaded, setIsLoaded] = useState(false);
 
   const onImageLoad = useCallback(() => {
@@ -23,14 +33,50 @@ const Cell: FC<IProps> = ({ node: { id, title, thumbnail, type, blocks }, onSele
 
   const text = path([0, 'text'], blocks);
 
+  const toggleViewDescription = useCallback(() => {
+    const show_description = flow && !flow.show_description;
+    const display = (flow && flow.display) || 'single';
+    onChangeCellView(id, { show_description, display });
+  }, [id, flow, onChangeCellView]);
+
+  const setViewSingle = useCallback(() => {
+    const show_description = flow && !!flow.show_description;
+    onChangeCellView(id, { show_description, display: 'single' });
+  }, [id, flow, onChangeCellView]);
+
+  const setViewHorizontal = useCallback(() => {
+    const show_description = flow && !!flow.show_description;
+    onChangeCellView(id, { show_description, display: 'horizontal' });
+  }, [id, flow, onChangeCellView]);
+
+  const setViewVertical = useCallback(() => {
+    const show_description = flow && !!flow.show_description;
+    onChangeCellView(id, { show_description, display: 'vertical' });
+  }, [id, flow, onChangeCellView]);
+
+  const setViewQuadro = useCallback(() => {
+    const show_description = flow && !!flow.show_description;
+    onChangeCellView(id, { show_description, display: 'quadro' });
+  }, [id, flow, onChangeCellView]);
+
   return (
     <div
-      className={classNames(styles.cell, 'vert-1', 'hor-1', { is_text: false })}
-      onClick={onClick}
+      className={classNames(styles.cell, (flow && flow.display) || 'single', { is_text: false })}
     >
-      <div className={styles.menu}>MENU</div>
+      {can_edit && (
+        <div className={styles.menu}>
+          <div className={styles.menu_content}>
+            <Icon icon="cell-single" onClick={toggleViewDescription} />
+            <div className={styles.menu_sep} />
+            <Icon icon="cell-single" onClick={setViewSingle} />
+            <Icon icon="cell-double-h" onClick={setViewHorizontal} />
+            <Icon icon="cell-double-v" onClick={setViewVertical} />
+            <Icon icon="cell-quadro" onClick={setViewQuadro} />
+          </div>
+        </div>
+      )}
 
-      <div className={styles.face}>
+      <div className={styles.face} onClick={onClick}>
         {title && <div className={styles.title}>{title}</div>}
         {text && <div className={styles.text}>{text}</div>}
       </div>
diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index 6ea16ac5..4361e35a 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -137,15 +137,57 @@
 .menu {
   position: absolute;
   top: 0;
-  left: 0;
-  width: 100%;
-  height: 60px;
-  background: $content_bg;
+  right: 0;
+  height: 100%;
+  width: 80px;
   z-index: 4;
   border-radius: $radius;
   opacity: 0;
   pointer-events: none;
   touch-action: none;
   transition: opacity 0.5s;
-  display: none;
+  box-sizing: border-box;
+  // display: none;
+  padding: $gap;
+  display: flex;
+  align-items: stretch;
+  justify-content: center;
+}
+
+.menu_content {
+  flex: 1;
+  // height: 100%;
+  background: $red_gradient;
+  padding: 60px $gap $gap $gap;
+  border-radius: $radius;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  display: flex;
+  flex-direction: column;
+
+  & > * {
+    margin-top: $gap;
+    opacity: 0.5;
+    transition: opacity 0.25s;
+
+    &:hover {
+      opacity: 1;
+    }
+  }
+
+  svg {
+    fill: #222222;
+    width: 30px;
+    height: 30px;
+  }
+}
+
+.menu_sep {
+  width: 20px;
+  height: 2px;
+  flex: 0 0 4px;
+  background-color: #222222;
+  opacity: 0.2;
+  border-radius: 2px;
 }
diff --git a/src/components/flow/FlowGrid/index.tsx b/src/components/flow/FlowGrid/index.tsx
index b8d8849e..23bbe28b 100644
--- a/src/components/flow/FlowGrid/index.tsx
+++ b/src/components/flow/FlowGrid/index.tsx
@@ -4,31 +4,31 @@ import { Cell } from '~/components/flow/Cell';
 import * as styles from './styles.scss';
 import { IFlowState } from '~/redux/flow/reducer';
 import { INode } from '~/redux/types';
+import { canEditNode } from '~/utils/node';
+import { IUser } from '~/redux/auth/types';
+import { flowSetCellView } from '~/redux/flow/actions';
 
 type IProps = Partial<IFlowState> & {
+  user: Partial<IUser>;
   onSelect: (id: INode['id'], type: INode['type']) => void;
+  onChangeCellView: typeof flowSetCellView;
 };
 
-export const FlowGrid: FC<IProps> = ({ nodes, onSelect }) => (
+export const FlowGrid: FC<IProps> = ({ user, nodes, onSelect, onChangeCellView }) => (
   <div>
     <div className={styles.grid_test}>
       <div className={styles.hero}>HERO</div>
       <div className={styles.stamp}>STAMP</div>
 
       {nodes.map(node => (
-        <Cell key={node.id} node={node} onSelect={onSelect} />
+        <Cell
+          key={node.id}
+          node={node}
+          onSelect={onSelect}
+          can_edit={canEditNode(node, user)}
+          onChangeCellView={onChangeCellView}
+        />
       ))}
     </div>
   </div>
 );
-
-// {
-//   range(1, 20).map(el => (
-//     <Cell
-//       width={Math.floor(Math.random() * 2 + 1)}
-//       height={Math.floor(Math.random() * 2 + 1)}
-//       title={`Cell ${el}`}
-//       key={el}
-//     />
-//   ));
-// }
diff --git a/src/containers/flow/FlowLayout/index.tsx b/src/containers/flow/FlowLayout/index.tsx
index 317b6289..a87ccb44 100644
--- a/src/containers/flow/FlowLayout/index.tsx
+++ b/src/containers/flow/FlowLayout/index.tsx
@@ -3,15 +3,29 @@ import { connect } from 'react-redux';
 import { FlowGrid } from '~/components/flow/FlowGrid';
 import { selectFlow } from '~/redux/flow/selectors';
 import * as NODE_ACTIONS from '~/redux/node/actions';
+import * as FLOW_ACTIONS from '~/redux/flow/actions';
+import pick from 'ramda/es/pick';
+import { selectUser } from '~/redux/auth/selectors';
 
-const mapStateToProps = selectFlow;
+const mapStateToProps = state => ({
+  flow: pick(['nodes'], selectFlow(state)),
+  user: pick(['role', 'id'], selectUser(state)),
+});
 
-const mapDispatchToProps = { nodeLoadNode: NODE_ACTIONS.nodeLoadNode };
+const mapDispatchToProps = {
+  nodeLoadNode: NODE_ACTIONS.nodeLoadNode,
+  flowSetCellView: FLOW_ACTIONS.flowSetCellView,
+};
 
 type IProps = ReturnType<typeof mapStateToProps> & typeof mapDispatchToProps & {};
 
-const FlowLayoutUnconnected: FC<IProps> = ({ nodes, nodeLoadNode }) => (
-  <FlowGrid nodes={nodes} onSelect={nodeLoadNode} />
+const FlowLayoutUnconnected: FC<IProps> = ({
+  flow: { nodes },
+  user,
+  nodeLoadNode,
+  flowSetCellView,
+}) => (
+  <FlowGrid nodes={nodes} onSelect={nodeLoadNode} user={user} onChangeCellView={flowSetCellView} />
 );
 
 const FlowLayout = connect(
diff --git a/src/redux/flow/actions.ts b/src/redux/flow/actions.ts
index 88998656..d4b4b1e1 100644
--- a/src/redux/flow/actions.ts
+++ b/src/redux/flow/actions.ts
@@ -1,7 +1,14 @@
 import { FLOW_ACTIONS } from './constants';
 import { IFlowState } from './reducer';
+import { INode } from '../types';
 
 export const flowSetNodes = (nodes: IFlowState['nodes']) => ({
   nodes,
   type: FLOW_ACTIONS.SET_NODES,
 });
+
+export const flowSetCellView = (id: INode['id'], flow: INode['flow']) => ({
+  type: FLOW_ACTIONS.SET_CELL_VIEW,
+  id,
+  flow,
+});
diff --git a/src/redux/flow/constants.ts b/src/redux/flow/constants.ts
index 5b38ea68..a7389f18 100644
--- a/src/redux/flow/constants.ts
+++ b/src/redux/flow/constants.ts
@@ -3,4 +3,5 @@ const prefix = 'FLOW.';
 export const FLOW_ACTIONS = {
   GET_FLOW: `${prefix}GET_FLOW`,
   SET_NODES: `${prefix}SET_NODES`,
+  SET_CELL_VIEW: `${prefix}SET_CELL_VIEW`,
 };
diff --git a/src/sprites/Sprites.tsx b/src/sprites/Sprites.tsx
index 8a407350..7ea32118 100644
--- a/src/sprites/Sprites.tsx
+++ b/src/sprites/Sprites.tsx
@@ -2,23 +2,39 @@ import React, { FC } from 'react';
 
 const Sprites: FC<{}> = () => (
   <svg width={0} height={0} viewBox="0 0 24 24">
+    <defs>
+      <pattern
+        id="pattern_stripes"
+        patternUnits="userSpaceOnUse"
+        width="4"
+        height="4"
+        patternTransform="rotate(45)"
+      >
+        <line x1="0" y="0" x2="0" y2="4" stroke="#222222" strokeWidth="3" />
+      </pattern>
+    </defs>
+
     <g id="cell-single" stroke="none" transform="translate(2 2)">
-      <path d="M0,0 L9,0 L9,9 L0,9 L0,0 Z" />
+      <path d="M0,0 L9,0 L9,9 L0,9 L0,0 Z" fill="url(#pattern_stripes)" />
       <path d="M11,0 L20,0 L20,9 L11,9 L11,0 Z M12,1 L12,8 L19,8 L19,1 L12,1 Z" />
       <path d="M11,11 L20,11 L20,20 L11,20 L11,11 Z M12,12 L12,19 L19,19 L19,12 L12,12 Z" />
       <path d="M0,11 L9,11 L9,20 L0,20 L0,11 Z M1,12 L1,19 L8,19 L8,12 L1,12 Z" />
     </g>
 
-    <g id="cell-double-h" stroke="none">
-      <path d="M0,0 L20,0 L20,9 L0,9 L0,0 Z M1,1 L1,8 L19,8 L19,1 L1,1 Z" />
+    <g id="cell-double-h" stroke="none" transform="translate(2 2)">
+      <path d="M0,0 L19,0 L19,9 L0,9 L0,0 Z" fill="url(#pattern_stripes)" />
       <path d="M11,11 L20,11 L20,20 L11,20 L11,11 Z M12,12 L12,19 L19,19 L19,12 L12,12 Z" />
       <path d="M0,11 L9,11 L9,20 L0,20 L0,11 Z M1,12 L1,19 L8,19 L8,12 L1,12 Z" />
     </g>
 
-    <g id="cell-double-v" stroke="none">
-      <path d="M0,0 L20,0 L20,9 L0,9 L0,0 Z M1,1 L1,8 L19,8 L19,1 L1,1 Z" />
+    <g id="cell-double-v" stroke="none" transform="translate(2 2)">
+      <path d="M0,0 L9,0 L9,19 L0,19 L0,0 Z" fill="url(#pattern_stripes)" />
+      <path d="M11,0 L20,0 L20,9 L11,9 L11,0 Z M12,1 L12,8 L19,8 L19,1 L12,1 Z" />
       <path d="M11,11 L20,11 L20,20 L11,20 L11,11 Z M12,12 L12,19 L19,19 L19,12 L12,12 Z" />
-      <path d="M0,11 L9,11 L9,20 L0,20 L0,11 Z M1,12 L1,19 L8,19 L8,12 L1,12 Z" />
+    </g>
+
+    <g id="cell-quadro" stroke="none" transform="translate(2 2)">
+      <path d="M0,0 L19,0 L19,19 L0,19 L0,0 Z" fill="url(#pattern_stripes)" />
     </g>
 
     <g id="play">

From ed3f6369fb0a24f093986999ca2012e5dd56dfe7 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 14:51:34 +0700
Subject: [PATCH 76/99] flow grid now has 5 columns

---
 src/components/flow/Cell/styles.scss     | 10 ++++++++++
 src/components/flow/FlowGrid/styles.scss |  8 +++++++-
 src/redux/flow/sagas.ts                  | 13 ++++++++++---
 src/redux/node/sagas.ts                  | 10 +++++-----
 src/styles/variables.scss                |  4 ++--
 5 files changed, 34 insertions(+), 11 deletions(-)

diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index 4361e35a..0071fcbc 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -91,6 +91,16 @@
     grid-column-end: span 2;
   }
 
+  :global(.horizontal),
+  :global(.quadro) {
+    grid-column-end: span 2;
+  }
+
+  :global(.vertical),
+  :global(.quadro) {
+    grid-row-end: span 2;
+  }
+
   .is_text {
     background: none;
     padding: 10px;
diff --git a/src/components/flow/FlowGrid/styles.scss b/src/components/flow/FlowGrid/styles.scss
index b816a3de..8f761995 100644
--- a/src/components/flow/FlowGrid/styles.scss
+++ b/src/components/flow/FlowGrid/styles.scss
@@ -14,9 +14,15 @@ $cols: $content_width / $cell;
   grid-column-gap: $grid_line;
   grid-row-gap: $grid_line;
 
+  @media (max-width: $cell * 6) {
+    grid-template-columns: repeat(5, 1fr);
+    grid-template-rows: 40vh 20vw;
+    grid-auto-rows: 20vw;
+  }
+
   @media (max-width: $cell * 5) {
     grid-template-columns: repeat(4, 1fr);
-    grid-template-rows: 25vw $cell;
+    grid-template-rows: 40vh 25vw;
     grid-auto-rows: 25vw;
   }
 
diff --git a/src/redux/flow/sagas.ts b/src/redux/flow/sagas.ts
index a52cb975..377b7fa5 100644
--- a/src/redux/flow/sagas.ts
+++ b/src/redux/flow/sagas.ts
@@ -1,10 +1,11 @@
-import { takeLatest, call, put } from 'redux-saga/effects';
+import { takeLatest, call, put, select } from 'redux-saga/effects';
 import { REHYDRATE } from 'redux-persist';
 import { FLOW_ACTIONS } from './constants';
 import { getNodes } from '../node/api';
-import { flowSetNodes } from './actions';
-import { objFromArray } from '~/utils/fn';
+import { flowSetNodes, flowSetCellView } from './actions';
 import { IResultWithStatus, INode } from '../types';
+import { updateNodeEverywhere } from '../node/sagas';
+import { selectFlowNodes } from './selectors';
 
 function* onGetFlow() {
   const {
@@ -20,6 +21,12 @@ function* onGetFlow() {
   yield put(flowSetNodes(nodes));
 }
 
+function* onSetCellView({ id, flow }: ReturnType<typeof flowSetCellView>) {
+  const nodes = yield select(selectFlowNodes);
+  yield put(flowSetNodes(nodes.map(node => (node.id === id ? { ...node, flow } : node))));
+}
+
 export default function* nodeSaga() {
   yield takeLatest([FLOW_ACTIONS.GET_FLOW, REHYDRATE], onGetFlow);
+  yield takeLatest(FLOW_ACTIONS.SET_CELL_VIEW, onSetCellView);
 }
diff --git a/src/redux/node/sagas.ts b/src/redux/node/sagas.ts
index 70340422..4e0c577e 100644
--- a/src/redux/node/sagas.ts
+++ b/src/redux/node/sagas.ts
@@ -41,7 +41,7 @@ import { NODE_EDITOR_DIALOGS, DIALOGS } from '../modal/constants';
 import { INodeState } from './reducer';
 import { IFlowState } from '../flow/reducer';
 
-function* updateNodeEverythere(node) {
+export function* updateNodeEverywhere(node) {
   const {
     current: { id },
   }: INodeState = yield select(selectNode);
@@ -189,13 +189,13 @@ function* onLikeSaga({ id }: ReturnType<typeof nodeLike>) {
     current: { is_liked },
   } = yield select(selectNode);
 
-  yield call(updateNodeEverythere, { ...current, is_liked: !is_liked });
+  yield call(updateNodeEverywhere, { ...current, is_liked: !is_liked });
 
   const { data, error } = yield call(reqWrapper, postNodeLike, { id });
 
   if (!error || data.is_liked === !is_liked) return; // ok and matches
 
-  yield call(updateNodeEverythere, { ...current, is_liked });
+  yield call(updateNodeEverywhere, { ...current, is_liked });
 }
 
 function* onStarSaga({ id }: ReturnType<typeof nodeLike>) {
@@ -204,13 +204,13 @@ function* onStarSaga({ id }: ReturnType<typeof nodeLike>) {
     current: { is_heroic },
   } = yield select(selectNode);
 
-  yield call(updateNodeEverythere, { ...current, is_heroic: !is_heroic });
+  yield call(updateNodeEverywhere, { ...current, is_heroic: !is_heroic });
 
   const { data, error } = yield call(reqWrapper, postNodeStar, { id });
 
   if (!error || data.is_heroic === !is_heroic) return; // ok and matches
 
-  yield call(updateNodeEverythere, { ...current, is_heroic });
+  yield call(updateNodeEverywhere, { ...current, is_heroic });
 }
 
 export default function* nodeSaga() {
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index 6af3bd4e..6cbf9b63 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -1,8 +1,8 @@
 @import 'colors';
 
-$cell: 320px;
+$cell: 280px;
 $grid_line: 4px;
-$content_width: $cell * 4 + $grid_line * 3;
+$content_width: $cell * 5 + $grid_line * 4;
 $gap: 10px;
 $spc: $gap * 2;
 $comment_height: 72px;

From 9fc1d3b91853b15caab15a5d7ff6932d0d77ed40 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 15:03:17 +0700
Subject: [PATCH 77/99] dots menu on flow nodes

---
 src/components/flow/Cell/index.tsx   |  4 +++
 src/components/flow/Cell/styles.scss | 51 ++++++++++++++++++++--------
 src/sprites/Sprites.tsx              |  5 +++
 3 files changed, 45 insertions(+), 15 deletions(-)

diff --git a/src/components/flow/Cell/index.tsx b/src/components/flow/Cell/index.tsx
index a3954be3..6f4c2adf 100644
--- a/src/components/flow/Cell/index.tsx
+++ b/src/components/flow/Cell/index.tsx
@@ -65,6 +65,10 @@ const Cell: FC<IProps> = ({
     >
       {can_edit && (
         <div className={styles.menu}>
+          <div className={styles.menu_button}>
+            <Icon icon="dots-vertical" />
+          </div>
+
           <div className={styles.menu_content}>
             <Icon icon="cell-single" onClick={toggleViewDescription} />
             <div className={styles.menu_sep} />
diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index 0071fcbc..c0f29a43 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -6,7 +6,6 @@
   background: $cell_bg;
   border-radius: $cell_radius;
   position: relative;
-  overflow: hidden;
   cursor: pointer;
   color: white;
 
@@ -22,14 +21,6 @@
     }
   }
 
-  &:hover {
-    .menu {
-      opacity: 1;
-      pointer-events: all;
-      touch-action: auto;
-    }
-  }
-
   @include outer_shadow();
 }
 
@@ -132,6 +123,7 @@
 .face {
   @include outer_shadow();
 
+  overflow: hidden;
   box-sizing: border-box;
   position: absolute;
   top: 0;
@@ -148,27 +140,56 @@
   position: absolute;
   top: 0;
   right: 0;
-  height: 100%;
-  width: 80px;
+  // height: 100%;
+  // width: 80px;
   z-index: 4;
   border-radius: $radius;
-  opacity: 0;
+  // opacity: 0;
   pointer-events: none;
   touch-action: none;
   transition: opacity 0.5s;
   box-sizing: border-box;
   // display: none;
-  padding: $gap;
+  // padding: $gap;
   display: flex;
   align-items: stretch;
   justify-content: center;
+
+  &:hover {
+    opacity: 1;
+    pointer-events: all;
+    touch-action: auto;
+
+    .menu_content {
+      opacity: 1;
+    }
+  }
+}
+
+.menu_button {
+  pointer-events: all;
+  touch-action: auto;
+  position: absolute;
+  z-index: 4;
+  width: 32px + $gap * 2;
+  height: 32px + $gap * 2;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  opacity: 0.2;
+
+  svg {
+    fill: white;
+    width: 30px;
+    height: 30px;
+  }
 }
 
 .menu_content {
   flex: 1;
-  // height: 100%;
+  opacity: 0;
   background: $red_gradient;
-  padding: 60px $gap $gap $gap;
+  padding: (32px + $gap * 2) $gap $gap $gap;
   border-radius: $radius;
   display: flex;
   align-items: center;
diff --git a/src/sprites/Sprites.tsx b/src/sprites/Sprites.tsx
index 7ea32118..5384d0d6 100644
--- a/src/sprites/Sprites.tsx
+++ b/src/sprites/Sprites.tsx
@@ -144,6 +144,11 @@ const Sprites: FC<{}> = () => (
       <path fill="none" d="M0 0h24v24H0V0z" />
       <path d="M12 3v9.28c-.47-.17-.97-.28-1.5-.28C8.01 12 6 14.01 6 16.5S8.01 21 10.5 21c2.31 0 4.2-1.75 4.45-4H15V6h4V3h-7z" />
     </g>
+
+    <g id="dots-vertical" stroke="none">
+      <path fill="none" d="M0 0h24v24H0V0z" />
+      <path d="M16 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" />
+    </g>
   </svg>
 );
 

From 7254a448c165b199308c55212388ea6b940b6d2e Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 15:11:20 +0700
Subject: [PATCH 78/99] fixed toggling text view

---
 src/components/flow/Cell/index.tsx   | 11 +++++------
 src/components/flow/Cell/styles.scss | 10 +++-------
 2 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/src/components/flow/Cell/index.tsx b/src/components/flow/Cell/index.tsx
index 6f4c2adf..0e80c541 100644
--- a/src/components/flow/Cell/index.tsx
+++ b/src/components/flow/Cell/index.tsx
@@ -4,7 +4,6 @@ import { getURL } from '~/utils/dom';
 import classNames from 'classnames';
 
 import * as styles from './styles.scss';
-import path from 'ramda/es/path';
 import { Icon } from '~/components/input/Icon';
 import { flowSetCellView } from '~/redux/flow/actions';
 
@@ -18,7 +17,7 @@ interface IProps {
 }
 
 const Cell: FC<IProps> = ({
-  node: { id, title, thumbnail, type, blocks, flow },
+  node: { id, title, thumbnail, type, flow, description },
   can_edit,
   onSelect,
   onChangeCellView,
@@ -29,12 +28,12 @@ const Cell: FC<IProps> = ({
     setIsLoaded(true);
   }, [setIsLoaded]);
 
-  const onClick = useCallback(() => onSelect(id, type), [onSelect, id]);
+  const onClick = useCallback(() => onSelect(id, type), [onSelect, id, type]);
 
-  const text = path([0, 'text'], blocks);
+  const text = (((flow && !!flow.show_description) || type === 'text') && description) || null;
 
   const toggleViewDescription = useCallback(() => {
-    const show_description = flow && !flow.show_description;
+    const show_description = !(flow && flow.show_description);
     const display = (flow && flow.display) || 'single';
     onChangeCellView(id, { show_description, display });
   }, [id, flow, onChangeCellView]);
@@ -70,7 +69,7 @@ const Cell: FC<IProps> = ({
           </div>
 
           <div className={styles.menu_content}>
-            <Icon icon="cell-single" onClick={toggleViewDescription} />
+            <Icon icon="text" onClick={toggleViewDescription} />
             <div className={styles.menu_sep} />
             <Icon icon="cell-single" onClick={setViewSingle} />
             <Icon icon="cell-double-h" onClick={setViewHorizontal} />
diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index c0f29a43..dc9563f2 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -138,22 +138,18 @@
 
 .menu {
   position: absolute;
-  top: 0;
-  right: 0;
-  // height: 100%;
-  // width: 80px;
+  top: -$gap;
+  right: -$gap;
   z-index: 4;
   border-radius: $radius;
-  // opacity: 0;
   pointer-events: none;
   touch-action: none;
   transition: opacity 0.5s;
   box-sizing: border-box;
-  // display: none;
-  // padding: $gap;
   display: flex;
   align-items: stretch;
   justify-content: center;
+  padding: $gap;
 
   &:hover {
     opacity: 1;

From 1d40eca79e1c3f7c8104fcf37d783fccf6e02975 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 15:36:25 +0700
Subject: [PATCH 79/99] storing flow cell view

---
 .vscode/settings.json              |  1 +
 src/components/flow/Cell/index.tsx |  8 ++++----
 src/constants/api.ts               |  1 +
 src/redux/flow/api.ts              | 13 +++++++++++++
 src/redux/flow/sagas.ts            |  8 ++++++--
 tsconfig.json                      |  2 +-
 6 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/.vscode/settings.json b/.vscode/settings.json
index d7177d71..3d65345e 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -17,4 +17,5 @@
     "editor.formatOnSave": true,
     "editor.formatOnSaveTimeout": 750,
   },
+  "typescript.tsdk": "node_modules/typescript/lib",
 }
diff --git a/src/components/flow/Cell/index.tsx b/src/components/flow/Cell/index.tsx
index 0e80c541..df7e67be 100644
--- a/src/components/flow/Cell/index.tsx
+++ b/src/components/flow/Cell/index.tsx
@@ -39,22 +39,22 @@ const Cell: FC<IProps> = ({
   }, [id, flow, onChangeCellView]);
 
   const setViewSingle = useCallback(() => {
-    const show_description = flow && !!flow.show_description;
+    const show_description = (flow && !!flow.show_description) || false;
     onChangeCellView(id, { show_description, display: 'single' });
   }, [id, flow, onChangeCellView]);
 
   const setViewHorizontal = useCallback(() => {
-    const show_description = flow && !!flow.show_description;
+    const show_description = (flow && !!flow.show_description) || false;
     onChangeCellView(id, { show_description, display: 'horizontal' });
   }, [id, flow, onChangeCellView]);
 
   const setViewVertical = useCallback(() => {
-    const show_description = flow && !!flow.show_description;
+    const show_description = (flow && !!flow.show_description) || false;
     onChangeCellView(id, { show_description, display: 'vertical' });
   }, [id, flow, onChangeCellView]);
 
   const setViewQuadro = useCallback(() => {
-    const show_description = flow && !!flow.show_description;
+    const show_description = (flow && !!flow.show_description) || false;
     onChangeCellView(id, { show_description, display: 'quadro' });
   }, [id, flow, onChangeCellView]);
 
diff --git a/src/constants/api.ts b/src/constants/api.ts
index a83ce381..32a7b62a 100644
--- a/src/constants/api.ts
+++ b/src/constants/api.ts
@@ -16,5 +16,6 @@ export const API = {
     UPDATE_TAGS: (id: INode['id']) => `/node/${id}/tags`,
     POST_LIKE: (id: INode['id']) => `/node/${id}/like`,
     POST_STAR: (id: INode['id']) => `/node/${id}/heroic`,
+    SET_CELL_VIEW: (id: INode['id']) => `/node/${id}/cell-view`,
   },
 };
diff --git a/src/redux/flow/api.ts b/src/redux/flow/api.ts
index b15e5d7c..17145b59 100644
--- a/src/redux/flow/api.ts
+++ b/src/redux/flow/api.ts
@@ -1,6 +1,7 @@
 import { api, configWithToken, resultMiddleware, errorMiddleware } from '~/utils/api';
 import { INode, IResultWithStatus } from '../types';
 import { API } from '~/constants/api';
+import { flowSetCellView } from '~/redux/flow/actions';
 
 export const postNode = ({
   access,
@@ -23,3 +24,15 @@ export const getNodes = ({
     .get(API.NODE.GET, { params: { skip } })
     .then(resultMiddleware)
     .catch(errorMiddleware);
+
+export const postCellView = ({
+  id,
+  flow,
+  access,
+}: ReturnType<typeof flowSetCellView> & { access: string }): Promise<
+  IResultWithStatus<{ is_liked: INode['is_liked'] }>
+> =>
+  api
+    .post(API.NODE.SET_CELL_VIEW(id), { flow }, configWithToken(access))
+    .then(resultMiddleware)
+    .catch(errorMiddleware);
diff --git a/src/redux/flow/sagas.ts b/src/redux/flow/sagas.ts
index 377b7fa5..9c8aa710 100644
--- a/src/redux/flow/sagas.ts
+++ b/src/redux/flow/sagas.ts
@@ -4,13 +4,13 @@ import { FLOW_ACTIONS } from './constants';
 import { getNodes } from '../node/api';
 import { flowSetNodes, flowSetCellView } from './actions';
 import { IResultWithStatus, INode } from '../types';
-import { updateNodeEverywhere } from '../node/sagas';
 import { selectFlowNodes } from './selectors';
+import { reqWrapper } from '../auth/sagas';
+import { postCellView } from './api';
 
 function* onGetFlow() {
   const {
     data: { nodes = null },
-    error,
   }: IResultWithStatus<{ nodes: INode[] }> = yield call(getNodes, {});
 
   if (!nodes || !nodes.length) {
@@ -24,6 +24,10 @@ function* onGetFlow() {
 function* onSetCellView({ id, flow }: ReturnType<typeof flowSetCellView>) {
   const nodes = yield select(selectFlowNodes);
   yield put(flowSetNodes(nodes.map(node => (node.id === id ? { ...node, flow } : node))));
+
+  const { data, error } = yield call(reqWrapper, postCellView, { id, flow });
+
+  console.log({ data, error });
 }
 
 export default function* nodeSaga() {
diff --git a/tsconfig.json b/tsconfig.json
index 3b6d8e22..85e2c5c5 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -18,6 +18,6 @@
       "~/*": ["src/*"]
     }
   },
-  "include": ["./src/index.tsx", "./custom.d.ts"],
+  "include": ["./src/**/*.ts", "./src/**/*.tsx", "./custom.d.ts"],
   "exclude": ["./__tests__/**/*"]
 }

From 3d2e2a6f996be7d8134e04125a21e91ec6320e83 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 15:53:04 +0700
Subject: [PATCH 80/99] updated flow appearance

---
 src/components/flow/Cell/styles.scss     | 16 ++++++++++++++++
 src/components/flow/FlowGrid/styles.scss |  4 ++++
 src/constants/errors.ts                  |  2 ++
 3 files changed, 22 insertions(+)

diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index dc9563f2..91b818b5 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -92,6 +92,17 @@
     grid-row-end: span 2;
   }
 
+  @media (max-width: $cell * 2) {
+    :global(.vertical),
+    :global(.quadro) {
+      grid-row-end: span 1;
+    }
+
+    :global(.horizontal),
+    :global(.quadro) {
+      grid-column-end: span 1;
+    }
+  }
   .is_text {
     background: none;
     padding: 10px;
@@ -160,6 +171,11 @@
       opacity: 1;
     }
   }
+
+  @media (max-width: $cell * 2) {
+    right: 0;
+    top: 0;
+  }
 }
 
 .menu_button {
diff --git a/src/components/flow/FlowGrid/styles.scss b/src/components/flow/FlowGrid/styles.scss
index 8f761995..5532c25b 100644
--- a/src/components/flow/FlowGrid/styles.scss
+++ b/src/components/flow/FlowGrid/styles.scss
@@ -14,6 +14,10 @@ $cols: $content_width / $cell;
   grid-column-gap: $grid_line;
   grid-row-gap: $grid_line;
 
+  @include tablet {
+    padding: 0 $gap;
+  }
+
   @media (max-width: $cell * 6) {
     grid-template-columns: repeat(5, 1fr);
     grid-template-rows: 40vh 20vw;
diff --git a/src/constants/errors.ts b/src/constants/errors.ts
index efcb7ca1..7be28705 100644
--- a/src/constants/errors.ts
+++ b/src/constants/errors.ts
@@ -9,6 +9,7 @@ export const ERRORS = {
   URL_INVALID: 'Url_Invalid',
   FILES_AUDIO_REQUIRED: 'Files_Audio_Required',
   NOT_ENOUGH_RIGHTS: 'Not_Enough_Rights',
+  INCORRECT_DATA: 'Incorrect_Data',
 };
 
 export const ERROR_LITERAL = {
@@ -22,4 +23,5 @@ export const ERROR_LITERAL = {
   [ERRORS.URL_INVALID]: 'Неизвестный адрес',
   [ERRORS.FILES_AUDIO_REQUIRED]: 'Нужна хотя бы одна песня',
   [ERRORS.NOT_ENOUGH_RIGHTS]: 'У вас недостаточно прав',
+  [ERRORS.INCORRECT_DATA]: 'Недопустимые данные',
 };

From 428930497ea733f04ea955ffebbc3e8fec3d184f Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 16:43:18 +0700
Subject: [PATCH 81/99] better flow appearance

---
 src/components/flow/Cell/index.tsx   |  13 ++-
 src/components/flow/Cell/styles.scss | 121 +++++++++++++++++----------
 2 files changed, 88 insertions(+), 46 deletions(-)

diff --git a/src/components/flow/Cell/index.tsx b/src/components/flow/Cell/index.tsx
index df7e67be..a63fd78a 100644
--- a/src/components/flow/Cell/index.tsx
+++ b/src/components/flow/Cell/index.tsx
@@ -60,7 +60,9 @@ const Cell: FC<IProps> = ({
 
   return (
     <div
-      className={classNames(styles.cell, (flow && flow.display) || 'single', { is_text: false })}
+      className={classNames(styles.cell, styles[(flow && flow.display) || 'single'], {
+        [styles.is_text]: false,
+      })}
     >
       {can_edit && (
         <div className={styles.menu}>
@@ -79,9 +81,11 @@ const Cell: FC<IProps> = ({
         </div>
       )}
 
-      <div className={styles.face} onClick={onClick}>
-        {title && <div className={styles.title}>{title}</div>}
-        {text && <div className={styles.text}>{text}</div>}
+      <div className={classNames(styles.face, { [styles.has_text]: text })}>
+        <div className={styles.face_content}>
+          {title && <div className={styles.title}>{title}</div>}
+          {text && <div className={styles.text}>{text}</div>}
+        </div>
       </div>
 
       {thumbnail && (
@@ -91,6 +95,7 @@ const Cell: FC<IProps> = ({
             backgroundImage: `url("${getURL({ url: thumbnail })}")`,
             opacity: is_loaded ? 1 : 0,
           }}
+          onClick={onClick}
         >
           <img src={getURL({ url: thumbnail })} onLoad={onImageLoad} alt="" />
         </div>
diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index 91b818b5..a98ca9f3 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -9,13 +9,13 @@
   cursor: pointer;
   color: white;
 
-  &:global(.is_hero) {
+  .is_hero {
     .title {
       font: $font_hero_title;
     }
   }
 
-  &:global(.is_text) {
+  .is_text {
     .title {
       display: none;
     }
@@ -26,7 +26,7 @@
 
 .text {
   font: $font_18_regular;
-  line-height: 23px;
+  line-height: 22px;
   margin-top: $gap;
   letter-spacing: 0.5px;
 
@@ -65,49 +65,30 @@
   margin-bottom: $gap / 2;
 }
 
-:global {
-  .vert-1 {
+.horizontal,
+.quadro {
+  grid-column-end: span 2;
+}
+
+.vertical,
+.quadro {
+  grid-row-end: span 2;
+}
+
+@media (max-width: $cell * 2) {
+  .horizontal,
+  .quadro,
+  .vertical,
+  .quadro {
     grid-row-end: span 1;
-  }
-
-  .vert-2 {
-    grid-row-end: span 2;
-  }
-
-  .hor-1 {
     grid-column-end: span 1;
   }
+}
 
-  .hor-2 {
-    grid-column-end: span 2;
-  }
-
-  :global(.horizontal),
-  :global(.quadro) {
-    grid-column-end: span 2;
-  }
-
-  :global(.vertical),
-  :global(.quadro) {
-    grid-row-end: span 2;
-  }
-
-  @media (max-width: $cell * 2) {
-    :global(.vertical),
-    :global(.quadro) {
-      grid-row-end: span 1;
-    }
-
-    :global(.horizontal),
-    :global(.quadro) {
-      grid-column-end: span 1;
-    }
-  }
-  .is_text {
-    background: none;
-    padding: 10px;
-    box-shadow: inset #444 0 0 0 1px;
-  }
+.is_text {
+  background: none;
+  padding: 10px;
+  box-shadow: inset #444 0 0 0 1px;
 }
 
 .thumbnail {
@@ -134,6 +115,7 @@
 .face {
   @include outer_shadow();
 
+  display: flex;
   overflow: hidden;
   box-sizing: border-box;
   position: absolute;
@@ -145,6 +127,61 @@
   z-index: 2;
   border-radius: $cell_radius;
   padding: $gap;
+  pointer-events: none;
+  touch-action: none;
+
+  .vertical > &,
+  .horizontal > &,
+  .quadro > & {
+    box-sizing: border-box;
+    background: none;
+    box-shadow: none;
+    padding: $gap / 2;
+
+    &::after {
+      display: none;
+    }
+
+    .face_content {
+      padding: $gap;
+      background: rgba(25, 25, 25, 0.8);
+      border-radius: $radius;
+      overflow: hidden;
+    }
+
+    .text::after {
+      display: none;
+    }
+  }
+
+  .vertical > & {
+    top: auto;
+    bottom: 0;
+    max-height: 50%;
+    max-width: 100%;
+    height: auto;
+    width: auto;
+  }
+
+  .horizontal > & {
+    top: auto;
+    max-height: 50%;
+    max-width: 100%;
+    height: auto;
+    width: auto;
+    bottom: 0;
+  }
+
+  .quadro > & {
+    top: auto;
+    left: auto;
+    max-height: 70%;
+    max-width: 50%;
+    height: auto;
+    width: auto;
+    bottom: 0;
+    right: 0;
+  }
 }
 
 .menu {

From b4147231e7f3c6be04562e11772223900b4cf2a1 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 16:54:28 +0700
Subject: [PATCH 82/99] flow appearance

---
 src/components/flow/Cell/styles.scss | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index a98ca9f3..5408340e 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -165,8 +165,9 @@
 
   .horizontal > & {
     top: auto;
-    max-height: 50%;
-    max-width: 100%;
+    left: 0;
+    max-height: 100%;
+    max-width: 50%;
     height: auto;
     width: auto;
     bottom: 0;
@@ -174,13 +175,12 @@
 
   .quadro > & {
     top: auto;
-    left: auto;
     max-height: 70%;
     max-width: 50%;
     height: auto;
     width: auto;
     bottom: 0;
-    right: 0;
+    left: 0;
   }
 }
 

From 4b05aef7e72514b1105efd08be2c1b287dbe7c07 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 17:04:39 +0700
Subject: [PATCH 83/99] better flow gaps

---
 src/styles/variables.scss | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index 6cbf9b63..68c73473 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -1,15 +1,15 @@
 @import 'colors';
 
 $cell: 280px;
-$grid_line: 4px;
-$content_width: $cell * 5 + $grid_line * 4;
 $gap: 10px;
+$grid_line: 8px;
+$content_width: $cell * 5 + $grid_line * 4;
 $spc: $gap * 2;
 $comment_height: 72px;
 $bar_height: 64px;
 
 $radius: 8px;
-$cell_radius: $radius;
+$cell_radius: 3px;
 $panel_radius: $radius;
 $input_radius: $radius;
 

From 4facd1f1485887a035291962456d46cda30e19a0 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 17:08:52 +0700
Subject: [PATCH 84/99] flow fixes for mobile

---
 src/components/flow/Cell/styles.scss | 96 +++++++++++++++-------------
 1 file changed, 51 insertions(+), 45 deletions(-)

diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index 5408340e..bda847f0 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -43,6 +43,10 @@
     z-index: 1;
     border-radius: 0 0 $radius $radius;
   }
+
+  @media (max-width: $cell * 2 + $grid_line) {
+    display: none;
+  }
 }
 
 .title,
@@ -130,57 +134,59 @@
   pointer-events: none;
   touch-action: none;
 
-  .vertical > &,
-  .horizontal > &,
-  .quadro > & {
-    box-sizing: border-box;
-    background: none;
-    box-shadow: none;
-    padding: $gap / 2;
+  @media (min-width: $cell * 2 + $grid_line) {
+    .vertical > &,
+    .horizontal > &,
+    .quadro > & {
+      box-sizing: border-box;
+      background: none;
+      box-shadow: none;
+      padding: $gap / 2;
 
-    &::after {
-      display: none;
+      &::after {
+        display: none;
+      }
+
+      .face_content {
+        padding: $gap;
+        background: rgba(25, 25, 25, 0.8);
+        border-radius: $radius;
+        overflow: hidden;
+      }
+
+      .text::after {
+        display: none;
+      }
     }
 
-    .face_content {
-      padding: $gap;
-      background: rgba(25, 25, 25, 0.8);
-      border-radius: $radius;
-      overflow: hidden;
+    .vertical > & {
+      top: auto;
+      bottom: 0;
+      max-height: 50%;
+      max-width: 100%;
+      height: auto;
+      width: auto;
     }
 
-    .text::after {
-      display: none;
+    .horizontal > & {
+      top: auto;
+      left: 0;
+      max-height: 100%;
+      max-width: 50%;
+      height: auto;
+      width: auto;
+      bottom: 0;
     }
-  }
 
-  .vertical > & {
-    top: auto;
-    bottom: 0;
-    max-height: 50%;
-    max-width: 100%;
-    height: auto;
-    width: auto;
-  }
-
-  .horizontal > & {
-    top: auto;
-    left: 0;
-    max-height: 100%;
-    max-width: 50%;
-    height: auto;
-    width: auto;
-    bottom: 0;
-  }
-
-  .quadro > & {
-    top: auto;
-    max-height: 70%;
-    max-width: 50%;
-    height: auto;
-    width: auto;
-    bottom: 0;
-    left: 0;
+    .quadro > & {
+      top: auto;
+      max-height: 70%;
+      max-width: 50%;
+      height: auto;
+      width: auto;
+      bottom: 0;
+      left: 0;
+    }
   }
 }
 
@@ -209,7 +215,7 @@
     }
   }
 
-  @media (max-width: $cell * 2) {
+  @media (max-width: $cell * 2 + $grid_line) {
     right: 0;
     top: 0;
   }

From 6836e00de14747f38a1509af5d972a5a804d3aa2 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Wed, 23 Oct 2019 18:00:05 +0700
Subject: [PATCH 85/99] s,oother menu appearance

---
 src/components/flow/Cell/index.tsx   | 2 +-
 src/components/flow/Cell/styles.scss | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/components/flow/Cell/index.tsx b/src/components/flow/Cell/index.tsx
index a63fd78a..9441171b 100644
--- a/src/components/flow/Cell/index.tsx
+++ b/src/components/flow/Cell/index.tsx
@@ -1,4 +1,4 @@
-import React, { FC, useState, useCallback } from 'react';
+import React, { FC, useState, useCallback, useEffect } from 'react';
 import { INode } from '~/redux/types';
 import { getURL } from '~/utils/dom';
 import classNames from 'classnames';
diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index bda847f0..479774a4 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -251,6 +251,8 @@
   justify-content: center;
   display: flex;
   flex-direction: column;
+  transition: opacity 0.5s;
+  will-change: opacity;
 
   & > * {
     margin-top: $gap;

From 99426172b235e99b09c6dc1cf0edb201ed7c2532 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 24 Oct 2019 12:43:54 +0700
Subject: [PATCH 86/99] fixed pushing tags

---
 src/components/node/NodeRelated/index.tsx   | 20 +++++++++++++-------
 src/components/node/NodeRelated/styles.scss |  9 +++++++--
 src/components/node/Tags/index.tsx          | 12 +++++++++---
 src/constants/api.ts                        |  1 +
 src/containers/node/NodeLayout/index.tsx    |  8 ++++----
 src/redux/flow/api.ts                       |  2 +-
 src/redux/node/actions.ts                   |  5 +++++
 src/redux/node/api.ts                       | 15 ++++++++++++++-
 src/redux/node/constants.ts                 |  1 +
 src/redux/node/handlers.ts                  |  5 +++++
 src/redux/node/reducer.ts                   |  5 +++++
 src/redux/node/sagas.ts                     | 18 ++++++++++++++----
 12 files changed, 79 insertions(+), 22 deletions(-)

diff --git a/src/components/node/NodeRelated/index.tsx b/src/components/node/NodeRelated/index.tsx
index eb2af602..118ee233 100644
--- a/src/components/node/NodeRelated/index.tsx
+++ b/src/components/node/NodeRelated/index.tsx
@@ -2,12 +2,14 @@ import React, { FC, HTMLAttributes } from 'react';
 import { range } from 'ramda';
 import * as styles from './styles.scss';
 import { Group } from '~/components/containers/Group';
+import { INode } from '~/redux/types';
+import { getURL } from '~/utils/dom';
 
-type IProps = HTMLAttributes<HTMLDivElement> & {}
+type IProps = HTMLAttributes<HTMLDivElement> & {
+  items: Partial<INode>[];
+};
 
-const NodeRelated: FC<IProps> = ({
-  title,
-}) => (
+const NodeRelated: FC<IProps> = ({ title, items }) => (
   <Group className={styles.wrap}>
     <div className={styles.title}>
       <div className={styles.line} />
@@ -15,9 +17,13 @@ const NodeRelated: FC<IProps> = ({
       <div className={styles.line} />
     </div>
     <div className={styles.grid}>
-      {
-        range(1, 7).map(el => (<div className={styles.item} key={el} />))
-      }
+      {items.map(item => (
+        <div
+          className={styles.item}
+          key={item.id}
+          style={{ backgroundImage: `url("${getURL({ url: item.thumbnail })}")` }}
+        />
+      ))}
     </div>
   </Group>
 );
diff --git a/src/components/node/NodeRelated/styles.scss b/src/components/node/NodeRelated/styles.scss
index dae07ec1..4b7729c5 100644
--- a/src/components/node/NodeRelated/styles.scss
+++ b/src/components/node/NodeRelated/styles.scss
@@ -7,15 +7,20 @@
 
 .grid {
   display: grid;
-  grid-template-columns: repeat(auto-fit, minmax(64px, 1fr));
+  grid-template-columns: repeat(3, 1fr);
   grid-template-rows: auto;
   grid-auto-rows: auto;
   grid-column-gap: $gap;
   grid-row-gap: $gap;
+
+  @include tablet {
+    grid-template-columns: repeat(6, 1fr);
+  }
 }
 
 .item {
-  background: darken($content_bg, 2%);
+  background: darken($content_bg, 2%) 50% 50% no-repeat;
+  background-size: cover;
   padding-bottom: 100%;
   border-radius: $cell_radius;
 }
diff --git a/src/components/node/Tags/index.tsx b/src/components/node/Tags/index.tsx
index 89359e35..c3505ccb 100644
--- a/src/components/node/Tags/index.tsx
+++ b/src/components/node/Tags/index.tsx
@@ -12,6 +12,7 @@ import { TagField } from '~/components/containers/TagField';
 import { ITag } from '~/redux/types';
 import { Tag } from '~/components/node/Tag';
 import uniq from 'ramda/es/uniq';
+import assocPath from 'ramda/es/assocPath';
 
 type IProps = HTMLAttributes<HTMLDivElement> & {
   tags: Partial<ITag>[];
@@ -65,9 +66,14 @@ export const Tags: FC<IProps> = ({ tags, is_editable, onTagsChange, ...props })
   );
 
   const onSubmit = useCallback(() => {
-    if (!data.length) return;
-    onTagsChange(uniq([...tags, ...data]).map(tag => tag.title));
-  }, [tags, data, onTagsChange]);
+    const title = input && input.trim();
+    const items = title ? [...data, { title }] : data;
+
+    if (!items.length) return;
+    setData(items);
+    setInput('');
+    onTagsChange(uniq([...tags, ...items]).map(tag => tag.title));
+  }, [tags, data, onTagsChange, input, setInput]);
 
   useEffect(() => {
     setData(data.filter(({ title }) => !tags.some(tag => tag.title.trim() === title.trim())));
diff --git a/src/constants/api.ts b/src/constants/api.ts
index 32a7b62a..1a6ee4e0 100644
--- a/src/constants/api.ts
+++ b/src/constants/api.ts
@@ -13,6 +13,7 @@ export const API = {
     GET_NODE: (id: number | string) => `/node/${id}`,
 
     COMMENT: (id: INode['id']) => `/node/${id}/comment`,
+    RELATED: (id: INode['id']) => `/node/${id}/related`,
     UPDATE_TAGS: (id: INode['id']) => `/node/${id}/tags`,
     POST_LIKE: (id: INode['id']) => `/node/${id}/like`,
     POST_STAR: (id: INode['id']) => `/node/${id}/heroic`,
diff --git a/src/containers/node/NodeLayout/index.tsx b/src/containers/node/NodeLayout/index.tsx
index f45a6dc9..a404e747 100644
--- a/src/containers/node/NodeLayout/index.tsx
+++ b/src/containers/node/NodeLayout/index.tsx
@@ -42,7 +42,7 @@ const NodeLayoutUnconnected: FC<IProps> = memo(
     match: {
       params: { id },
     },
-    node: { is_loading, is_loading_comments, comments = [], current: node },
+    node: { is_loading, is_loading_comments, comments = [], current: node, related },
     user,
     user: { is_user },
     nodeLoadNode,
@@ -123,9 +123,9 @@ const NodeLayoutUnconnected: FC<IProps> = memo(
                 <Group style={{ flex: 1, minWidth: 0 }}>
                   <NodeTags is_editable={is_user} tags={node.tags} onChange={onTagsChange} />
 
-                  <NodeRelated title="First album" />
-
-                  <NodeRelated title="Second album" />
+                  {related && related.similar && (
+                    <NodeRelated title="ПОХОЖИЕ" items={related.similar} />
+                  )}
                 </Group>
               </div>
             </Group>
diff --git a/src/redux/flow/api.ts b/src/redux/flow/api.ts
index 17145b59..acdcff66 100644
--- a/src/redux/flow/api.ts
+++ b/src/redux/flow/api.ts
@@ -35,4 +35,4 @@ export const postCellView = ({
   api
     .post(API.NODE.SET_CELL_VIEW(id), { flow }, configWithToken(access))
     .then(resultMiddleware)
-    .catch(errorMiddleware);
+    .catch(errorMiddleware);
\ No newline at end of file
diff --git a/src/redux/node/actions.ts b/src/redux/node/actions.ts
index f15cfa68..b97f5c5d 100644
--- a/src/redux/node/actions.ts
+++ b/src/redux/node/actions.ts
@@ -48,6 +48,11 @@ export const nodeSetComments = (comments: IComment[]) => ({
   type: NODE_ACTIONS.SET_COMMENTS,
 });
 
+export const nodeSetRelated = (related: INodeState['related']) => ({
+  related,
+  type: NODE_ACTIONS.SET_RELATED,
+});
+
 export const nodeSetCommentData = (id: number, comment: IComment) => ({
   id,
   comment,
diff --git a/src/redux/node/api.ts b/src/redux/node/api.ts
index 29e586b2..5a98044d 100644
--- a/src/redux/node/api.ts
+++ b/src/redux/node/api.ts
@@ -2,6 +2,7 @@ import { api, configWithToken, resultMiddleware, errorMiddleware } from '~/utils
 import { INode, IResultWithStatus, IComment } from '../types';
 import { API } from '~/constants/api';
 import { nodeUpdateTags, nodeLike, nodeStar } from './actions';
+import { INodeState } from './reducer';
 
 export const postNode = ({
   access,
@@ -58,12 +59,24 @@ export const getNodeComments = ({
 }: {
   id: number;
   access: string;
-}): Promise<IResultWithStatus<{ comment: Comment }>> =>
+}): Promise<IResultWithStatus<{ comments: Comment[] }>> =>
   api
     .get(API.NODE.COMMENT(id), configWithToken(access))
     .then(resultMiddleware)
     .catch(errorMiddleware);
 
+export const getNodeRelated = ({
+  id,
+  access,
+}: {
+  id: number;
+  access: string;
+}): Promise<IResultWithStatus<{ related: INodeState['related'] }>> =>
+  api
+    .get(API.NODE.RELATED(id), configWithToken(access))
+    .then(resultMiddleware)
+    .catch(errorMiddleware);
+
 export const updateNodeTags = ({
   id,
   tags,
diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts
index e18df061..c246ccd6 100644
--- a/src/redux/node/constants.ts
+++ b/src/redux/node/constants.ts
@@ -34,6 +34,7 @@ export const NODE_ACTIONS = {
 
   POST_COMMENT: `${prefix}POST_COMMENT`,
   SET_COMMENTS: `${prefix}SET_COMMENTS`,
+  SET_RELATED: `${prefix}SET_RELATED`,
 
   UPDATE_TAGS: `${prefix}UPDATE_TAGS`,
   SET_TAGS: `${prefix}SET_TAGS`,
diff --git a/src/redux/node/handlers.ts b/src/redux/node/handlers.ts
index ef7d677c..b09ab335 100644
--- a/src/redux/node/handlers.ts
+++ b/src/redux/node/handlers.ts
@@ -11,6 +11,7 @@ import {
   nodeSetTags,
   nodeSetEditor,
   nodeSetCoverImage,
+  nodeSetRelated,
 } from './actions';
 import { INodeState } from './reducer';
 
@@ -36,6 +37,9 @@ const setSendingComment = (
 const setComments = (state: INodeState, { comments }: ReturnType<typeof nodeSetComments>) =>
   assocPath(['comments'], comments, state);
 
+const setRelated = (state: INodeState, { related }: ReturnType<typeof nodeSetRelated>) =>
+  assocPath(['related'], related, state);
+
 const setCommentData = (
   state: INodeState,
   { id, comment }: ReturnType<typeof nodeSetCommentData>
@@ -59,6 +63,7 @@ export const NODE_HANDLERS = {
   [NODE_ACTIONS.SET_CURRENT]: setCurrent,
   [NODE_ACTIONS.SET_SENDING_COMMENT]: setSendingComment,
   [NODE_ACTIONS.SET_COMMENTS]: setComments,
+  [NODE_ACTIONS.SET_RELATED]: setRelated,
   [NODE_ACTIONS.SET_COMMENT_DATA]: setCommentData,
   [NODE_ACTIONS.SET_TAGS]: setTags,
   [NODE_ACTIONS.SET_EDITOR]: setEditor,
diff --git a/src/redux/node/reducer.ts b/src/redux/node/reducer.ts
index fa15f16e..41e0161d 100644
--- a/src/redux/node/reducer.ts
+++ b/src/redux/node/reducer.ts
@@ -7,6 +7,10 @@ export type INodeState = Readonly<{
   editor: INode;
   current: INode;
   comments: IComment[];
+  related: {
+    albums: Record<string, Partial<INode[]>>;
+    similar: Partial<INode[]>;
+  };
   comment_data: Record<number, IComment>;
   current_cover_image: IFile;
 
@@ -28,6 +32,7 @@ const INITIAL_STATE: INodeState = {
   current: { ...EMPTY_NODE },
   comment_data: { 0: { ...EMPTY_COMMENT } },
   comments: [],
+  related: null,
   current_cover_image: null,
 
   is_loading: false,
diff --git a/src/redux/node/sagas.ts b/src/redux/node/sagas.ts
index 4e0c577e..dcec5c9e 100644
--- a/src/redux/node/sagas.ts
+++ b/src/redux/node/sagas.ts
@@ -1,4 +1,4 @@
-import { takeLatest, call, put, select, delay } from 'redux-saga/effects';
+import { takeLatest, call, put, select, delay, all } from 'redux-saga/effects';
 import { push } from 'connected-react-router';
 
 import { NODE_ACTIONS, EMPTY_NODE, EMPTY_COMMENT, NODE_EDITOR_DATA } from './constants';
@@ -19,6 +19,7 @@ import {
   nodeSetEditor,
   nodeEdit,
   nodeLike,
+  nodeSetRelated,
 } from './actions';
 import {
   postNode,
@@ -28,6 +29,7 @@ import {
   updateNodeTags,
   postNodeLike,
   postNodeStar,
+  getNodeRelated,
 } from './api';
 import { reqWrapper } from '../auth/sagas';
 import { flowSetNodes } from '../flow/actions';
@@ -112,11 +114,19 @@ function* onNodeLoad({ id, node_type }: ReturnType<typeof nodeLoadNode>) {
 
   // todo: load comments
   const {
-    data: { comments },
-  } = yield call(reqWrapper, getNodeComments, { id });
+    comments: {
+      data: { comments },
+    },
+    related: {
+      data: { related },
+    },
+  } = yield all({
+    comments: call(reqWrapper, getNodeComments, { id }),
+    related: call(reqWrapper, getNodeRelated, { id }),
+  });
 
   yield put(nodeSetComments(comments || []));
-
+  yield put(nodeSetRelated(related || []));
   yield put(nodeSetLoadingComments(false));
 
   return;

From e6c5deefd51e2798ea4ab5ac31900faa6963d7d5 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 24 Oct 2019 13:19:40 +0700
Subject: [PATCH 87/99] displaying related albums

---
 src/containers/node/NodeLayout/index.tsx | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/containers/node/NodeLayout/index.tsx b/src/containers/node/NodeLayout/index.tsx
index a404e747..0d35d636 100644
--- a/src/containers/node/NodeLayout/index.tsx
+++ b/src/containers/node/NodeLayout/index.tsx
@@ -123,6 +123,12 @@ const NodeLayoutUnconnected: FC<IProps> = memo(
                 <Group style={{ flex: 1, minWidth: 0 }}>
                   <NodeTags is_editable={is_user} tags={node.tags} onChange={onTagsChange} />
 
+                  {related &&
+                    related.albums &&
+                    Object.keys(related.albums).map(album => (
+                      <NodeRelated title={album} items={related.albums[album]} />
+                    ))}
+
                   {related && related.similar && (
                     <NodeRelated title="ПОХОЖИЕ" items={related.similar} />
                   )}

From 0d042d4a095bc92a85ee40ad758ca11355758d97 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 24 Oct 2019 13:20:53 +0700
Subject: [PATCH 88/99] resetting related on node load

---
 src/redux/node/sagas.ts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/redux/node/sagas.ts b/src/redux/node/sagas.ts
index dcec5c9e..b3396de8 100644
--- a/src/redux/node/sagas.ts
+++ b/src/redux/node/sagas.ts
@@ -94,6 +94,7 @@ function* onNodeLoad({ id, node_type }: ReturnType<typeof nodeLoadNode>) {
   yield put(nodeSetLoadingComments(true));
   yield put(nodeSetSaveErrors({}));
   yield put(nodeSetCommentData(0, { ...EMPTY_COMMENT }));
+  yield put(nodeSetRelated(null));
 
   if (node_type) yield put(nodeSetCurrent({ ...EMPTY_NODE, type: node_type }));
 

From a9da7e8ceff3e8447a832aeea384bff66633af36 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 24 Oct 2019 14:23:38 +0700
Subject: [PATCH 89/99] hiding empty samples

---
 src/components/containers/BlurWrapper/styles.scss | 6 +++---
 src/components/containers/PageCover/styles.scss   | 2 +-
 src/containers/node/NodeLayout/index.tsx          | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/components/containers/BlurWrapper/styles.scss b/src/components/containers/BlurWrapper/styles.scss
index 113865fb..70b8770f 100644
--- a/src/components/containers/BlurWrapper/styles.scss
+++ b/src/components/containers/BlurWrapper/styles.scss
@@ -2,7 +2,7 @@
   filter: blur(0);
   transition: filter 0.25s;
   will-change: filter;
-  // max-height: 100vh;
-  // width: 100vw;
-  // overflow: visible auto;
+  max-height: 100vh;
+  width: 100vw;
+  overflow: visible auto;
 }
diff --git a/src/components/containers/PageCover/styles.scss b/src/components/containers/PageCover/styles.scss
index 3081fccd..106c598b 100644
--- a/src/components/containers/PageCover/styles.scss
+++ b/src/components/containers/PageCover/styles.scss
@@ -8,7 +8,7 @@
 }
 
 .wrap {
-  position: absolute;
+  position: fixed;
   top: 0;
   left: 0;
   z-index: -1;
diff --git a/src/containers/node/NodeLayout/index.tsx b/src/containers/node/NodeLayout/index.tsx
index 0d35d636..8bc5526c 100644
--- a/src/containers/node/NodeLayout/index.tsx
+++ b/src/containers/node/NodeLayout/index.tsx
@@ -129,7 +129,7 @@ const NodeLayoutUnconnected: FC<IProps> = memo(
                       <NodeRelated title={album} items={related.albums[album]} />
                     ))}
 
-                  {related && related.similar && (
+                  {related && related.similar && related.similar.length > 0 && (
                     <NodeRelated title="ПОХОЖИЕ" items={related.similar} />
                   )}
                 </Group>

From 5cd5941be0f71ea238bafb293240117812d654e6 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 24 Oct 2019 15:44:40 +0700
Subject: [PATCH 90/99] hero slider

---
 src/components/flow/FlowGrid/index.tsx   |   7 +-
 src/components/flow/FlowGrid/styles.scss |   4 +-
 src/components/flow/FlowHero/index.tsx   | 109 +++++++++++++++++++++++
 src/components/flow/FlowHero/styles.scss | 106 ++++++++++++++++++++++
 src/containers/flow/FlowLayout/index.tsx |  12 ++-
 src/redux/flow/actions.ts                |   5 ++
 src/redux/flow/constants.ts              |   1 +
 src/redux/flow/handlers.ts               |   6 +-
 src/redux/flow/reducer.ts                |   2 +
 src/redux/flow/sagas.ts                  |  12 ++-
 src/sprites/Sprites.tsx                  |  10 +++
 src/styles/variables.scss                |   6 +-
 12 files changed, 266 insertions(+), 14 deletions(-)
 create mode 100644 src/components/flow/FlowHero/index.tsx
 create mode 100644 src/components/flow/FlowHero/styles.scss

diff --git a/src/components/flow/FlowGrid/index.tsx b/src/components/flow/FlowGrid/index.tsx
index 23bbe28b..cb2aecdd 100644
--- a/src/components/flow/FlowGrid/index.tsx
+++ b/src/components/flow/FlowGrid/index.tsx
@@ -7,6 +7,7 @@ import { INode } from '~/redux/types';
 import { canEditNode } from '~/utils/node';
 import { IUser } from '~/redux/auth/types';
 import { flowSetCellView } from '~/redux/flow/actions';
+import { FlowHero } from '../FlowHero';
 
 type IProps = Partial<IFlowState> & {
   user: Partial<IUser>;
@@ -14,10 +15,12 @@ type IProps = Partial<IFlowState> & {
   onChangeCellView: typeof flowSetCellView;
 };
 
-export const FlowGrid: FC<IProps> = ({ user, nodes, onSelect, onChangeCellView }) => (
+export const FlowGrid: FC<IProps> = ({ user, nodes, heroes, onSelect, onChangeCellView }) => (
   <div>
     <div className={styles.grid_test}>
-      <div className={styles.hero}>HERO</div>
+      <div className={styles.hero}>
+        <FlowHero heroes={heroes} />
+      </div>
       <div className={styles.stamp}>STAMP</div>
 
       {nodes.map(node => (
diff --git a/src/components/flow/FlowGrid/styles.scss b/src/components/flow/FlowGrid/styles.scss
index 5532c25b..39f7062a 100644
--- a/src/components/flow/FlowGrid/styles.scss
+++ b/src/components/flow/FlowGrid/styles.scss
@@ -8,7 +8,7 @@ $cols: $content_width / $cell;
 .grid_test {
   display: grid;
   grid-template-columns: repeat(auto-fit, minmax($cell, 1fr));
-  grid-template-rows: 40vh $cell;
+  grid-template-rows: 50vh $cell;
   grid-auto-rows: $cell;
   grid-auto-flow: row dense;
   grid-column-gap: $grid_line;
@@ -20,7 +20,7 @@ $cols: $content_width / $cell;
 
   @media (max-width: $cell * 6) {
     grid-template-columns: repeat(5, 1fr);
-    grid-template-rows: 40vh 20vw;
+    grid-template-rows: 50vh 20vw;
     grid-auto-rows: 20vw;
   }
 
diff --git a/src/components/flow/FlowHero/index.tsx b/src/components/flow/FlowHero/index.tsx
new file mode 100644
index 00000000..bdfc99a8
--- /dev/null
+++ b/src/components/flow/FlowHero/index.tsx
@@ -0,0 +1,109 @@
+import React, { FC, useState, useCallback, useEffect, useRef } from 'react';
+import { IFlowState } from '~/redux/flow/reducer';
+import classNames from 'classnames';
+
+import * as styles from './styles.scss';
+import { getURL } from '~/utils/dom';
+import { withRouter, RouteComponentProps } from 'react-router';
+import { URLS } from '~/constants/urls';
+import { Icon } from '~/components/input/Icon';
+import { Filler } from '~/components/containers/Filler';
+
+type IProps = RouteComponentProps & {
+  heroes: IFlowState['heroes'];
+};
+
+const FlowHeroUnconnected: FC<IProps> = ({ heroes, history }) => {
+  const [limit, setLimit] = useState(Math.max(heroes.length, 10));
+  const [current, setCurrent] = useState(0);
+  const [loaded, setLoaded] = useState([]);
+  const timer = useRef(null);
+
+  const onLoad = useCallback(id => () => setLoaded([...loaded, id]), [setLoaded, loaded]);
+
+  const onNext = useCallback(() => {
+    clearTimeout(timer.current);
+
+    if (loaded.length <= 1) return;
+
+    const index = loaded.findIndex(el => el === current);
+
+    setCurrent(index > loaded.length - 2 ? loaded[0] : loaded[index + 1]);
+  }, [loaded, current, setCurrent, timer]);
+
+  const onPrevious = useCallback(() => {
+    clearTimeout(timer.current);
+
+    if (loaded.length <= 1) return;
+
+    const index = loaded.findIndex(el => el === current);
+
+    setCurrent(index > 0 ? loaded[index - 1] : loaded[loaded.length - 1]);
+  }, [loaded, current, setCurrent, timer]);
+
+  useEffect(() => {
+    timer.current = setTimeout(onNext, 3000);
+
+    return () => clearTimeout(timer.current);
+  }, [current]);
+
+  useEffect(() => {
+    if (current === 0 && loaded.length > 0) setCurrent(loaded[0]);
+  }, [loaded]);
+
+  useEffect(() => {
+    setLimit(Math.max(heroes.length, limit));
+  }, [heroes, limit]);
+
+  const stopSliding = useCallback(() => {
+    clearTimeout(timer.current);
+    timer.current = setTimeout(onNext, 3000);
+  }, [timer]);
+
+  const onClick = useCallback(() => {
+    if (!current) return;
+
+    history.push(URLS.NODE_URL(current));
+  }, [current]);
+
+  return (
+    <div className={styles.wrap} onMouseOver={stopSliding} onFocus={stopSliding}>
+      <div className={styles.info}>
+        <div className={styles.title_wrap}>
+          <div className={styles.title}>TITLE!</div>
+        </div>
+
+        <div className={styles.buttons}>
+          <div className={styles.button} onClick={onPrevious}>
+            <Icon icon="left" />
+          </div>
+          <div className={styles.button} onClick={onNext}>
+            <Icon icon="right" />
+          </div>
+        </div>
+      </div>
+
+      {heroes.slice(0, limit).map(hero => (
+        <div
+          className={classNames(styles.hero, {
+            [styles.is_visible]: loaded.includes(hero.id),
+            [styles.is_active]: current === hero.id,
+          })}
+          style={{ backgroundImage: `url("${getURL({ url: hero.thumbnail })}")` }}
+          key={hero.id}
+          onClick={onClick}
+        >
+          <img
+            src={getURL({ url: hero.thumbnail })}
+            alt={hero.thumbnail}
+            onLoad={onLoad(hero.id)}
+          />
+        </div>
+      ))}
+    </div>
+  );
+};
+
+const FlowHero = withRouter(FlowHeroUnconnected);
+
+export { FlowHero };
diff --git a/src/components/flow/FlowHero/styles.scss b/src/components/flow/FlowHero/styles.scss
new file mode 100644
index 00000000..cc900bda
--- /dev/null
+++ b/src/components/flow/FlowHero/styles.scss
@@ -0,0 +1,106 @@
+.wrap {
+  width: 100%;
+  height: 100%;
+  position: relative;
+  background: $content_bg;
+  border-radius: $cell_radius;
+}
+
+.hero {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  display: none;
+  transition: opacity 1s;
+  background: 50% 50% no-repeat;
+  background-size: cover;
+  border-radius: $cell_radius;
+  z-index: 2;
+  opacity: 0;
+  cursor: pointer;
+
+  &::after {
+    content: ' ';
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: url('~/sprites/dots.svg') rgba(0, 0, 0, 0.3);
+  }
+
+  img {
+    width: 0;
+    height: 0;
+    opacity: 0;
+    pointer-events: none;
+    touch-action: none;
+  }
+
+  &.is_visible {
+    display: block;
+  }
+
+  &.is_active {
+    opacity: 1;
+    z-index: 3;
+  }
+}
+
+.info {
+  display: flex;
+  position: absolute;
+  bottom: 0;
+  right: 0;
+  width: 100%;
+  padding: $gap;
+  box-sizing: border-box;
+  z-index: 5;
+  flex-direction: row;
+}
+
+.title_wrap {
+  flex: 1;
+  white-space: nowrap;
+  display: flex;
+  margin-right: $gap;
+  overflow: hidden;
+}
+
+.title {
+  flex: 0;
+  height: 48px;
+  background: rgba(0, 0, 0, 0.7);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 0 $gap;
+  border-radius: $radius;
+  font: $font_hero_title;
+}
+
+.buttons {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  height: 48px;
+  background: rgba(0, 0, 0, 0.7);
+  flex-direction: row;
+  width: 96px;
+  border-radius: $radius;
+
+  .button {
+    cursor: pointer;
+    flex: 0 0 48px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+
+    svg {
+      width: 40px;
+      height: 40px;
+    }
+  }
+}
diff --git a/src/containers/flow/FlowLayout/index.tsx b/src/containers/flow/FlowLayout/index.tsx
index a87ccb44..3a655b16 100644
--- a/src/containers/flow/FlowLayout/index.tsx
+++ b/src/containers/flow/FlowLayout/index.tsx
@@ -8,7 +8,7 @@ import pick from 'ramda/es/pick';
 import { selectUser } from '~/redux/auth/selectors';
 
 const mapStateToProps = state => ({
-  flow: pick(['nodes'], selectFlow(state)),
+  flow: pick(['nodes', 'heroes'], selectFlow(state)),
   user: pick(['role', 'id'], selectUser(state)),
 });
 
@@ -20,12 +20,18 @@ const mapDispatchToProps = {
 type IProps = ReturnType<typeof mapStateToProps> & typeof mapDispatchToProps & {};
 
 const FlowLayoutUnconnected: FC<IProps> = ({
-  flow: { nodes },
+  flow: { nodes, heroes },
   user,
   nodeLoadNode,
   flowSetCellView,
 }) => (
-  <FlowGrid nodes={nodes} onSelect={nodeLoadNode} user={user} onChangeCellView={flowSetCellView} />
+  <FlowGrid
+    nodes={nodes}
+    heroes={heroes}
+    onSelect={nodeLoadNode}
+    user={user}
+    onChangeCellView={flowSetCellView}
+  />
 );
 
 const FlowLayout = connect(
diff --git a/src/redux/flow/actions.ts b/src/redux/flow/actions.ts
index d4b4b1e1..11b3b26b 100644
--- a/src/redux/flow/actions.ts
+++ b/src/redux/flow/actions.ts
@@ -7,6 +7,11 @@ export const flowSetNodes = (nodes: IFlowState['nodes']) => ({
   type: FLOW_ACTIONS.SET_NODES,
 });
 
+export const flowSetHeroes = (heroes: IFlowState['heroes']) => ({
+  heroes,
+  type: FLOW_ACTIONS.SET_HEROES,
+});
+
 export const flowSetCellView = (id: INode['id'], flow: INode['flow']) => ({
   type: FLOW_ACTIONS.SET_CELL_VIEW,
   id,
diff --git a/src/redux/flow/constants.ts b/src/redux/flow/constants.ts
index a7389f18..b74224b2 100644
--- a/src/redux/flow/constants.ts
+++ b/src/redux/flow/constants.ts
@@ -3,5 +3,6 @@ const prefix = 'FLOW.';
 export const FLOW_ACTIONS = {
   GET_FLOW: `${prefix}GET_FLOW`,
   SET_NODES: `${prefix}SET_NODES`,
+  SET_HEROES: `${prefix}SET_HEROES`,
   SET_CELL_VIEW: `${prefix}SET_CELL_VIEW`,
 };
diff --git a/src/redux/flow/handlers.ts b/src/redux/flow/handlers.ts
index 80f3b1ca..d44ec537 100644
--- a/src/redux/flow/handlers.ts
+++ b/src/redux/flow/handlers.ts
@@ -1,11 +1,15 @@
 import assocPath from 'ramda/es/assocPath';
 import { FLOW_ACTIONS } from './constants';
-import { flowSetNodes } from './actions';
+import { flowSetNodes, flowSetHeroes } from './actions';
 import { IFlowState } from './reducer';
 
 const setNodes = (state: IFlowState, { nodes }: ReturnType<typeof flowSetNodes>) =>
   assocPath(['nodes'], nodes, state);
 
+const setHeroes = (state: IFlowState, { heroes }: ReturnType<typeof flowSetHeroes>) =>
+  assocPath(['heroes'], heroes, state);
+
 export const FLOW_HANDLERS = {
   [FLOW_ACTIONS.SET_NODES]: setNodes,
+  [FLOW_ACTIONS.SET_HEROES]: setHeroes,
 };
diff --git a/src/redux/flow/reducer.ts b/src/redux/flow/reducer.ts
index f828c6c1..6786076d 100644
--- a/src/redux/flow/reducer.ts
+++ b/src/redux/flow/reducer.ts
@@ -5,11 +5,13 @@ import { FLOW_HANDLERS } from './handlers';
 export type IFlowState = Readonly<{
   is_loading: boolean;
   nodes: INode[];
+  heroes: Partial<INode>[];
   error: IError;
 }>;
 
 const INITIAL_STATE: IFlowState = {
   nodes: [],
+  heroes: [],
   is_loading: false,
   error: null,
 };
diff --git a/src/redux/flow/sagas.ts b/src/redux/flow/sagas.ts
index 9c8aa710..56776a8f 100644
--- a/src/redux/flow/sagas.ts
+++ b/src/redux/flow/sagas.ts
@@ -2,23 +2,29 @@ import { takeLatest, call, put, select } from 'redux-saga/effects';
 import { REHYDRATE } from 'redux-persist';
 import { FLOW_ACTIONS } from './constants';
 import { getNodes } from '../node/api';
-import { flowSetNodes, flowSetCellView } from './actions';
+import { flowSetNodes, flowSetCellView, flowSetHeroes } from './actions';
 import { IResultWithStatus, INode } from '../types';
 import { selectFlowNodes } from './selectors';
 import { reqWrapper } from '../auth/sagas';
 import { postCellView } from './api';
+import { IFlowState } from './reducer';
 
 function* onGetFlow() {
   const {
-    data: { nodes = null },
-  }: IResultWithStatus<{ nodes: INode[] }> = yield call(getNodes, {});
+    data: { nodes = null, heroes = null },
+  }: IResultWithStatus<{ nodes: IFlowState['nodes']; heroes: IFlowState['heroes'] }> = yield call(
+    getNodes,
+    {}
+  );
 
   if (!nodes || !nodes.length) {
     yield put(flowSetNodes([]));
+    yield put(flowSetHeroes([]));
     return;
   }
 
   yield put(flowSetNodes(nodes));
+  yield put(flowSetHeroes(heroes));
 }
 
 function* onSetCellView({ id, flow }: ReturnType<typeof flowSetCellView>) {
diff --git a/src/sprites/Sprites.tsx b/src/sprites/Sprites.tsx
index 5384d0d6..39856ab4 100644
--- a/src/sprites/Sprites.tsx
+++ b/src/sprites/Sprites.tsx
@@ -149,6 +149,16 @@ const Sprites: FC<{}> = () => (
       <path fill="none" d="M0 0h24v24H0V0z" />
       <path d="M16 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" />
     </g>
+
+    <g id="left" stroke="none">
+      <path fill="none" d="M0 0h24v24H0V0z" />
+      <path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z" />
+    </g>
+
+    <g id="right" stroke="none">
+      <path fill="none" d="M0 0h24v24H0V0z" />
+      <path d="M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z" />
+    </g>
   </svg>
 );
 
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index 68c73473..a7a75fb5 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -2,14 +2,14 @@
 
 $cell: 280px;
 $gap: 10px;
-$grid_line: 8px;
+$grid_line: 5px;
 $content_width: $cell * 5 + $grid_line * 4;
 $spc: $gap * 2;
 $comment_height: 72px;
 $bar_height: 64px;
 
 $radius: 8px;
-$cell_radius: 3px;
+$cell_radius: $radius;
 $panel_radius: $radius;
 $input_radius: $radius;
 
@@ -55,7 +55,7 @@ $font_8_regular: $regular 8px $font;
 $font_8_semibold: $semibold 8px $font;
 
 $font_cell_title: $bold 30px $font;
-$font_hero_title: $font_48_semibold;
+$font_hero_title: $bold 40px $font;
 
 $shadow_depth_1: transparentize(black, 0.8) 0 1px, inset transparentize(white, 0.98) 0 1px;
 $shadow_depth_2: transparentize(black, 0.8) 0 2px, inset transparentize(white, 0.98) 0 1px;

From 2386b3f8d8855d42b772188de5e14b4003253369 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 24 Oct 2019 16:02:18 +0700
Subject: [PATCH 91/99] dynamically loading images for hero

---
 .../containers/PageCover/styles.scss           |  2 +-
 src/components/flow/FlowHero/index.tsx         | 18 +++++++++++++-----
 src/components/flow/FlowHero/styles.scss       |  2 +-
 src/sprites/stripes.svg                        |  8 ++++++++
 4 files changed, 23 insertions(+), 7 deletions(-)
 create mode 100644 src/sprites/stripes.svg

diff --git a/src/components/containers/PageCover/styles.scss b/src/components/containers/PageCover/styles.scss
index 106c598b..4c2b9724 100644
--- a/src/components/containers/PageCover/styles.scss
+++ b/src/components/containers/PageCover/styles.scss
@@ -26,7 +26,7 @@
     left: 0;
     width: 100%;
     height: 100%;
-    background: url(~/sprites/dots.svg) rgba(0, 0, 0, 0.5);
+    background: url(~/sprites/stripes.svg) rgba(0, 0, 0, 0.3);
   }
 
   @include tablet {
diff --git a/src/components/flow/FlowHero/index.tsx b/src/components/flow/FlowHero/index.tsx
index bdfc99a8..d01896a4 100644
--- a/src/components/flow/FlowHero/index.tsx
+++ b/src/components/flow/FlowHero/index.tsx
@@ -7,14 +7,13 @@ import { getURL } from '~/utils/dom';
 import { withRouter, RouteComponentProps } from 'react-router';
 import { URLS } from '~/constants/urls';
 import { Icon } from '~/components/input/Icon';
-import { Filler } from '~/components/containers/Filler';
 
 type IProps = RouteComponentProps & {
   heroes: IFlowState['heroes'];
 };
 
 const FlowHeroUnconnected: FC<IProps> = ({ heroes, history }) => {
-  const [limit, setLimit] = useState(Math.max(heroes.length, 10));
+  const [limit, setLimit] = useState(Math.min(heroes.length, 6));
   const [current, setCurrent] = useState(0);
   const [loaded, setLoaded] = useState([]);
   const timer = useRef(null);
@@ -31,6 +30,11 @@ const FlowHeroUnconnected: FC<IProps> = ({ heroes, history }) => {
     setCurrent(index > loaded.length - 2 ? loaded[0] : loaded[index + 1]);
   }, [loaded, current, setCurrent, timer]);
 
+  const onNextPress = useCallback(() => {
+    setLimit(Math.min(heroes.length, limit + 1));
+    onNext();
+  }, [onNext, heroes, limit, setLimit]);
+
   const onPrevious = useCallback(() => {
     clearTimeout(timer.current);
 
@@ -52,13 +56,13 @@ const FlowHeroUnconnected: FC<IProps> = ({ heroes, history }) => {
   }, [loaded]);
 
   useEffect(() => {
-    setLimit(Math.max(heroes.length, limit));
+    setLimit(limit > 0 ? Math.min(heroes.length, limit) : heroes.length);
   }, [heroes, limit]);
 
   const stopSliding = useCallback(() => {
     clearTimeout(timer.current);
     timer.current = setTimeout(onNext, 3000);
-  }, [timer]);
+  }, [timer, onNext]);
 
   const onClick = useCallback(() => {
     if (!current) return;
@@ -66,6 +70,10 @@ const FlowHeroUnconnected: FC<IProps> = ({ heroes, history }) => {
     history.push(URLS.NODE_URL(current));
   }, [current]);
 
+  useEffect(() => {
+    console.log({ limit });
+  }, [limit]);
+
   return (
     <div className={styles.wrap} onMouseOver={stopSliding} onFocus={stopSliding}>
       <div className={styles.info}>
@@ -77,7 +85,7 @@ const FlowHeroUnconnected: FC<IProps> = ({ heroes, history }) => {
           <div className={styles.button} onClick={onPrevious}>
             <Icon icon="left" />
           </div>
-          <div className={styles.button} onClick={onNext}>
+          <div className={styles.button} onClick={onNextPress}>
             <Icon icon="right" />
           </div>
         </div>
diff --git a/src/components/flow/FlowHero/styles.scss b/src/components/flow/FlowHero/styles.scss
index cc900bda..ef265d54 100644
--- a/src/components/flow/FlowHero/styles.scss
+++ b/src/components/flow/FlowHero/styles.scss
@@ -28,7 +28,7 @@
     left: 0;
     width: 100%;
     height: 100%;
-    background: url('~/sprites/dots.svg') rgba(0, 0, 0, 0.3);
+    background: url('~/sprites/stripes.svg') rgba(0, 0, 0, 0.3);
   }
 
   img {
diff --git a/src/sprites/stripes.svg b/src/sprites/stripes.svg
new file mode 100644
index 00000000..6977e1ab
--- /dev/null
+++ b/src/sprites/stripes.svg
@@ -0,0 +1,8 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
+	<defs>
+		<pattern id="pattern_KGiq8" patternUnits="userSpaceOnUse" width="3.5" height="3.5" patternTransform="rotate(45)">
+			<line x1="0" y="0" x2="0" y2="3.5" stroke="#000000" stroke-width="1" />
+		</pattern>
+	</defs>
+	<rect width="100%" height="100%" fill="url(#pattern_KGiq8)" opacity="1" />
+</svg>
\ No newline at end of file

From 81cd45f1683f290fcbe55e78e07821fe8f6546e4 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 24 Oct 2019 16:04:31 +0700
Subject: [PATCH 92/99] fixed key warning

---
 src/containers/node/NodeLayout/index.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/containers/node/NodeLayout/index.tsx b/src/containers/node/NodeLayout/index.tsx
index 8bc5526c..1f0ba928 100644
--- a/src/containers/node/NodeLayout/index.tsx
+++ b/src/containers/node/NodeLayout/index.tsx
@@ -126,7 +126,7 @@ const NodeLayoutUnconnected: FC<IProps> = memo(
                   {related &&
                     related.albums &&
                     Object.keys(related.albums).map(album => (
-                      <NodeRelated title={album} items={related.albums[album]} />
+                      <NodeRelated title={album} items={related.albums[album]} key={album} />
                     ))}
 
                   {related && related.similar && related.similar.length > 0 && (

From fa0d3c99325131170d4e41e7302afda209cb15c4 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 24 Oct 2019 16:08:49 +0700
Subject: [PATCH 93/99] fixed flow timers

---
 src/components/containers/Filler/index.tsx | 13 ++-----------
 src/components/flow/FlowHero/index.tsx     |  4 ++--
 src/components/flow/FlowHero/styles.scss   |  2 +-
 3 files changed, 5 insertions(+), 14 deletions(-)

diff --git a/src/components/containers/Filler/index.tsx b/src/components/containers/Filler/index.tsx
index 2f40c037..3af36783 100644
--- a/src/components/containers/Filler/index.tsx
+++ b/src/components/containers/Filler/index.tsx
@@ -4,15 +4,6 @@ import * as styles from './styles.scss';
 
 type IProps = React.HTMLAttributes<HTMLDivElement>;
 
-export const Filler: FC<IProps> = ({
-  className = '',
-  ...props
-}) => (
-  <div
-    className={classNames(
-      styles.filler,
-      className,
-    )}
-    {...props}
-  />
+export const Filler: FC<IProps> = ({ className = '', ...props }) => (
+  <div className={classNames(styles.filler, className)} {...props} />
 );
diff --git a/src/components/flow/FlowHero/index.tsx b/src/components/flow/FlowHero/index.tsx
index d01896a4..552cd999 100644
--- a/src/components/flow/FlowHero/index.tsx
+++ b/src/components/flow/FlowHero/index.tsx
@@ -46,7 +46,7 @@ const FlowHeroUnconnected: FC<IProps> = ({ heroes, history }) => {
   }, [loaded, current, setCurrent, timer]);
 
   useEffect(() => {
-    timer.current = setTimeout(onNext, 3000);
+    timer.current = setTimeout(onNext, 5000);
 
     return () => clearTimeout(timer.current);
   }, [current]);
@@ -61,7 +61,7 @@ const FlowHeroUnconnected: FC<IProps> = ({ heroes, history }) => {
 
   const stopSliding = useCallback(() => {
     clearTimeout(timer.current);
-    timer.current = setTimeout(onNext, 3000);
+    timer.current = setTimeout(onNext, 5000);
   }, [timer, onNext]);
 
   const onClick = useCallback(() => {
diff --git a/src/components/flow/FlowHero/styles.scss b/src/components/flow/FlowHero/styles.scss
index ef265d54..2643864e 100644
--- a/src/components/flow/FlowHero/styles.scss
+++ b/src/components/flow/FlowHero/styles.scss
@@ -13,7 +13,7 @@
   width: 100%;
   height: 100%;
   display: none;
-  transition: opacity 1s;
+  transition: opacity 2s;
   background: 50% 50% no-repeat;
   background-size: cover;
   border-radius: $cell_radius;

From 72337142da1c29f5960c7f1d637bd0cfc6fa35f9 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 24 Oct 2019 17:24:35 +0700
Subject: [PATCH 94/99] animated flow

---
 src/components/flow/FlowHero/styles.scss | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/components/flow/FlowHero/styles.scss b/src/components/flow/FlowHero/styles.scss
index 2643864e..31e05817 100644
--- a/src/components/flow/FlowHero/styles.scss
+++ b/src/components/flow/FlowHero/styles.scss
@@ -1,9 +1,19 @@
+@keyframes rise {
+  0% {
+    transform: translate(0, 0);
+  }
+  100% {
+    transform: translate(0, -10%);
+  }
+}
+
 .wrap {
   width: 100%;
   height: 100%;
   position: relative;
   background: $content_bg;
   border-radius: $cell_radius;
+  overflow: hidden;
 }
 
 .hero {
@@ -11,7 +21,7 @@
   top: 0;
   left: 0;
   width: 100%;
-  height: 100%;
+  height: 150%;
   display: none;
   transition: opacity 2s;
   background: 50% 50% no-repeat;
@@ -20,6 +30,7 @@
   z-index: 2;
   opacity: 0;
   cursor: pointer;
+  transform: translate(0, -10%);
 
   &::after {
     content: ' ';
@@ -46,6 +57,8 @@
   &.is_active {
     opacity: 1;
     z-index: 3;
+    will-change: transform;
+    animation: rise 5s forwards;
   }
 }
 

From fb21057f8fab9ecf7d89f0b9f1ddf37bd2d419f3 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 24 Oct 2019 17:35:59 +0700
Subject: [PATCH 95/99] fixed hero animations

---
 src/components/flow/FlowHero/styles.scss | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/src/components/flow/FlowHero/styles.scss b/src/components/flow/FlowHero/styles.scss
index 31e05817..bad60ff3 100644
--- a/src/components/flow/FlowHero/styles.scss
+++ b/src/components/flow/FlowHero/styles.scss
@@ -1,11 +1,11 @@
-@keyframes rise {
-  0% {
-    transform: translate(0, 0);
-  }
-  100% {
-    transform: translate(0, -10%);
-  }
-}
+// @keyframes rise {
+//   0% {
+//     transform: translate(0, 0);
+//   }
+//   100% {
+//     transform: translate(0, -10%);
+//   }
+// }
 
 .wrap {
   width: 100%;
@@ -23,14 +23,14 @@
   width: 100%;
   height: 150%;
   display: none;
-  transition: opacity 2s;
+  transition: opacity 2s, transform linear 5s 2s;
   background: 50% 50% no-repeat;
   background-size: cover;
   border-radius: $cell_radius;
   z-index: 2;
   opacity: 0;
   cursor: pointer;
-  transform: translate(0, -10%);
+  transform: translate(0, 0);
 
   &::after {
     content: ' ';
@@ -58,7 +58,9 @@
     opacity: 1;
     z-index: 3;
     will-change: transform;
-    animation: rise 5s forwards;
+    // animation: rise 5s forwards;
+    transform: translate(0, -10%);
+    transition: opacity 2s, transform linear 5s;
   }
 }
 

From 312b1d1d174d063a1d99b254400fcca7a1fc6eb0 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 24 Oct 2019 17:37:23 +0700
Subject: [PATCH 96/99] fixed stripes at hero

---
 src/components/flow/FlowHero/styles.scss | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/components/flow/FlowHero/styles.scss b/src/components/flow/FlowHero/styles.scss
index bad60ff3..7d5b0e62 100644
--- a/src/components/flow/FlowHero/styles.scss
+++ b/src/components/flow/FlowHero/styles.scss
@@ -14,6 +14,17 @@
   background: $content_bg;
   border-radius: $cell_radius;
   overflow: hidden;
+
+  &::after {
+    content: ' ';
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: url('~/sprites/stripes.svg') rgba(0, 0, 0, 0.3);
+    z-index: 4;
+  }
 }
 
 .hero {
@@ -32,16 +43,6 @@
   cursor: pointer;
   transform: translate(0, 0);
 
-  &::after {
-    content: ' ';
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    height: 100%;
-    background: url('~/sprites/stripes.svg') rgba(0, 0, 0, 0.3);
-  }
-
   img {
     width: 0;
     height: 0;

From db992a375ba6d7fd1f3e292c80750259f4f3c1f3 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Thu, 24 Oct 2019 17:59:37 +0700
Subject: [PATCH 97/99] fixed flow appearance

---
 .../containers/BlurWrapper/styles.scss        |  6 ++---
 src/components/flow/Cell/styles.scss          | 26 +++++++++----------
 src/components/flow/FlowHero/styles.scss      |  2 ++
 src/components/node/NodeRelated/styles.scss   |  2 +-
 4 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/src/components/containers/BlurWrapper/styles.scss b/src/components/containers/BlurWrapper/styles.scss
index 70b8770f..113865fb 100644
--- a/src/components/containers/BlurWrapper/styles.scss
+++ b/src/components/containers/BlurWrapper/styles.scss
@@ -2,7 +2,7 @@
   filter: blur(0);
   transition: filter 0.25s;
   will-change: filter;
-  max-height: 100vh;
-  width: 100vw;
-  overflow: visible auto;
+  // max-height: 100vh;
+  // width: 100vw;
+  // overflow: visible auto;
 }
diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index 479774a4..0777feae 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -135,13 +135,13 @@
   touch-action: none;
 
   @media (min-width: $cell * 2 + $grid_line) {
-    .vertical > &,
-    .horizontal > &,
-    .quadro > & {
+    .vertical > &.has_text,
+    .horizontal > &.has_text,
+    .quadro > &.has_text {
       box-sizing: border-box;
       background: none;
       box-shadow: none;
-      padding: $gap / 2;
+      padding: $grid_line;
 
       &::after {
         display: none;
@@ -159,30 +159,30 @@
       }
     }
 
-    .vertical > & {
+    .vertical > &.has_text {
       top: auto;
       bottom: 0;
-      max-height: 50%;
+      height: 50%;
       max-width: 100%;
-      height: auto;
+      // height: auto;
       width: auto;
     }
 
-    .horizontal > & {
+    .horizontal > &.has_text {
       top: auto;
       left: 0;
-      max-height: 100%;
+      height: 100%;
       max-width: 50%;
-      height: auto;
+      // height: auto;
       width: auto;
       bottom: 0;
     }
 
-    .quadro > & {
+    .quadro > &.has_text {
       top: auto;
-      max-height: 70%;
+      height: 50%;
       max-width: 50%;
-      height: auto;
+      // height: auto;
       width: auto;
       bottom: 0;
       left: 0;
diff --git a/src/components/flow/FlowHero/styles.scss b/src/components/flow/FlowHero/styles.scss
index 7d5b0e62..13856c91 100644
--- a/src/components/flow/FlowHero/styles.scss
+++ b/src/components/flow/FlowHero/styles.scss
@@ -24,6 +24,8 @@
     height: 100%;
     background: url('~/sprites/stripes.svg') rgba(0, 0, 0, 0.3);
     z-index: 4;
+    pointer-events: none;
+    touch-action: none;
   }
 }
 
diff --git a/src/components/node/NodeRelated/styles.scss b/src/components/node/NodeRelated/styles.scss
index 4b7729c5..59da263f 100644
--- a/src/components/node/NodeRelated/styles.scss
+++ b/src/components/node/NodeRelated/styles.scss
@@ -19,7 +19,7 @@
 }
 
 .item {
-  background: darken($content_bg, 2%) 50% 50% no-repeat;
+  background: lighten($content_bg, 2%) 50% 50% no-repeat;
   background-size: cover;
   padding-bottom: 100%;
   border-radius: $cell_radius;

From 774e254afce5d8b0a42cd30a9f735c7f03cfef7a Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Fri, 25 Oct 2019 10:37:29 +0700
Subject: [PATCH 98/99] fixed flow appearance

---
 src/components/flow/Cell/styles.scss        |  3 +++
 src/components/node/NodeRelated/index.tsx   | 13 +++++++++----
 src/components/node/NodeRelated/styles.scss |  1 +
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/components/flow/Cell/styles.scss b/src/components/flow/Cell/styles.scss
index 0777feae..feec9ca8 100644
--- a/src/components/flow/Cell/styles.scss
+++ b/src/components/flow/Cell/styles.scss
@@ -166,6 +166,7 @@
       max-width: 100%;
       // height: auto;
       width: auto;
+      padding: ($grid_line / 2) $grid_line $grid_line $grid_line;
     }
 
     .horizontal > &.has_text {
@@ -176,9 +177,11 @@
       // height: auto;
       width: auto;
       bottom: 0;
+      padding: $grid_line ($grid_line / 2) $grid_line $grid_line;
     }
 
     .quadro > &.has_text {
+      padding: ($grid_line / 2) ($grid_line / 2) $grid_line $grid_line;
       top: auto;
       height: 50%;
       max-width: 50%;
diff --git a/src/components/node/NodeRelated/index.tsx b/src/components/node/NodeRelated/index.tsx
index 118ee233..a24beee5 100644
--- a/src/components/node/NodeRelated/index.tsx
+++ b/src/components/node/NodeRelated/index.tsx
@@ -1,15 +1,17 @@
-import React, { FC, HTMLAttributes } from 'react';
-import { range } from 'ramda';
+import React, { FC } from 'react';
 import * as styles from './styles.scss';
 import { Group } from '~/components/containers/Group';
 import { INode } from '~/redux/types';
 import { getURL } from '~/utils/dom';
+import { withRouter, RouteComponentProps } from 'react-router';
+import { URLS } from '~/constants/urls';
 
-type IProps = HTMLAttributes<HTMLDivElement> & {
+type IProps = RouteComponentProps & {
+  title: string;
   items: Partial<INode>[];
 };
 
-const NodeRelated: FC<IProps> = ({ title, items }) => (
+const NodeRelatedUnconnected: FC<IProps> = ({ title, items, history }) => (
   <Group className={styles.wrap}>
     <div className={styles.title}>
       <div className={styles.line} />
@@ -22,10 +24,13 @@ const NodeRelated: FC<IProps> = ({ title, items }) => (
           className={styles.item}
           key={item.id}
           style={{ backgroundImage: `url("${getURL({ url: item.thumbnail })}")` }}
+          onClick={() => history.push(URLS.NODE_URL(item.id))}
         />
       ))}
     </div>
   </Group>
 );
 
+const NodeRelated = withRouter(NodeRelatedUnconnected);
+
 export { NodeRelated };
diff --git a/src/components/node/NodeRelated/styles.scss b/src/components/node/NodeRelated/styles.scss
index 59da263f..959fbce5 100644
--- a/src/components/node/NodeRelated/styles.scss
+++ b/src/components/node/NodeRelated/styles.scss
@@ -23,6 +23,7 @@
   background-size: cover;
   padding-bottom: 100%;
   border-radius: $cell_radius;
+  cursor: pointer;
 }
 
 .title {

From 920a8adaa2e6faed117de93f1c80ed6644a4b8f8 Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Fri, 25 Oct 2019 10:54:46 +0700
Subject: [PATCH 99/99] fixed node related

---
 src/components/node/NodeRelated/index.tsx     | 45 ++++++++-----------
 src/components/node/NodeRelated/styles.scss   |  9 ----
 src/components/node/NodeRelatedItem/index.tsx | 35 +++++++++++++++
 .../node/NodeRelatedItem/styles.scss          | 30 +++++++++++++
 4 files changed, 84 insertions(+), 35 deletions(-)
 create mode 100644 src/components/node/NodeRelatedItem/index.tsx
 create mode 100644 src/components/node/NodeRelatedItem/styles.scss

diff --git a/src/components/node/NodeRelated/index.tsx b/src/components/node/NodeRelated/index.tsx
index a24beee5..07c70da7 100644
--- a/src/components/node/NodeRelated/index.tsx
+++ b/src/components/node/NodeRelated/index.tsx
@@ -2,35 +2,28 @@ import React, { FC } from 'react';
 import * as styles from './styles.scss';
 import { Group } from '~/components/containers/Group';
 import { INode } from '~/redux/types';
-import { getURL } from '~/utils/dom';
-import { withRouter, RouteComponentProps } from 'react-router';
-import { URLS } from '~/constants/urls';
+import { NodeRelatedItem } from '~/components/node/NodeRelatedItem';
 
-type IProps = RouteComponentProps & {
+interface IProps {
   title: string;
   items: Partial<INode>[];
+}
+
+const NodeRelated: FC<IProps> = ({ title, items }) => {
+  return (
+    <Group className={styles.wrap}>
+      <div className={styles.title}>
+        <div className={styles.line} />
+        <div className={styles.text}>{title}</div>
+        <div className={styles.line} />
+      </div>
+      <div className={styles.grid}>
+        {items.map(item => (
+          <NodeRelatedItem item={item} key={item.id} />
+        ))}
+      </div>
+    </Group>
+  );
 };
 
-const NodeRelatedUnconnected: FC<IProps> = ({ title, items, history }) => (
-  <Group className={styles.wrap}>
-    <div className={styles.title}>
-      <div className={styles.line} />
-      <div className={styles.text}>{title}</div>
-      <div className={styles.line} />
-    </div>
-    <div className={styles.grid}>
-      {items.map(item => (
-        <div
-          className={styles.item}
-          key={item.id}
-          style={{ backgroundImage: `url("${getURL({ url: item.thumbnail })}")` }}
-          onClick={() => history.push(URLS.NODE_URL(item.id))}
-        />
-      ))}
-    </div>
-  </Group>
-);
-
-const NodeRelated = withRouter(NodeRelatedUnconnected);
-
 export { NodeRelated };
diff --git a/src/components/node/NodeRelated/styles.scss b/src/components/node/NodeRelated/styles.scss
index 959fbce5..b0b43968 100644
--- a/src/components/node/NodeRelated/styles.scss
+++ b/src/components/node/NodeRelated/styles.scss
@@ -17,15 +17,6 @@
     grid-template-columns: repeat(6, 1fr);
   }
 }
-
-.item {
-  background: lighten($content_bg, 2%) 50% 50% no-repeat;
-  background-size: cover;
-  padding-bottom: 100%;
-  border-radius: $cell_radius;
-  cursor: pointer;
-}
-
 .title {
   font: $font_14_semibold;
   text-transform: uppercase;
diff --git a/src/components/node/NodeRelatedItem/index.tsx b/src/components/node/NodeRelatedItem/index.tsx
new file mode 100644
index 00000000..09eec397
--- /dev/null
+++ b/src/components/node/NodeRelatedItem/index.tsx
@@ -0,0 +1,35 @@
+import React, { FC, memo, useCallback, useState } from 'react';
+import * as styles from './styles.scss';
+import classNames from 'classnames';
+import { INode } from '~/redux/types';
+import { URLS } from '~/constants/urls';
+import { RouteComponentProps, withRouter } from 'react-router';
+import { getURL } from '~/utils/dom';
+
+type IProps = RouteComponentProps & {
+  item: Partial<INode>;
+};
+
+const NodeRelatedItemUnconnected: FC<IProps> = memo(({ item, history }) => {
+  const [is_loaded, setIsLoaded] = useState(false);
+  const onClick = useCallback(() => history.push(URLS.NODE_URL(item.id)), [item, history]);
+
+  return (
+    <div
+      className={classNames(styles.item, { [styles.is_loaded]: is_loaded })}
+      key={item.id}
+      onClick={onClick}
+    >
+      <div
+        className={styles.thumb}
+        style={{ backgroundImage: `url("${getURL({ url: item.thumbnail })}")` }}
+      />
+
+      <img src={getURL({ url: item.thumbnail })} alt="loader" onLoad={() => setIsLoaded(true)} />
+    </div>
+  );
+});
+
+const NodeRelatedItem = withRouter(NodeRelatedItemUnconnected);
+
+export { NodeRelatedItem };
diff --git a/src/components/node/NodeRelatedItem/styles.scss b/src/components/node/NodeRelatedItem/styles.scss
new file mode 100644
index 00000000..d35af1e5
--- /dev/null
+++ b/src/components/node/NodeRelatedItem/styles.scss
@@ -0,0 +1,30 @@
+.item {
+  background: lighten($content_bg, 2%) 50% 50% no-repeat;
+  padding-bottom: 100%;
+  border-radius: $cell_radius;
+  cursor: pointer;
+  position: relative;
+
+  img {
+    position: absolute;
+    width: 0;
+    height: 0;
+    opacity: 0;
+  }
+}
+
+.thumb {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  border-radius: $cell_radius;
+  background: lighten($content_bg, 2%) 50% 50% no-repeat;
+  background-size: cover;
+  opacity: 0;
+  transition: opacity 0.5s;
+  will-change: opacity;
+
+  .is_loaded & {
+    opacity: 1;
+  }
+}