From 63378a3946ef8766bbfde5e4fce5047cb67e980e Mon Sep 17 00:00:00 2001
From: Dylan Vorster <dylanvorster.dv@gmail.com>
Date: Thu, 21 Mar 2019 16:45:22 +0200
Subject: [PATCH 1/6] prettier

---
 .prettierrc                                   |    7 +
 .yarnrc                                       |    1 -
 demos/demo-standard/index.story.tsx           |   36 +-
 demos/index.tsx                               |   16 +-
 docs/architecture/overview.gv                 |    3 +
 package.json                                  |   48 +-
 src/AbstractElementFactory.ts                 |    6 +-
 src/CanvasEngine.ts                           |   77 +-
 src/CanvasLayerFactory.tsx                    |   12 +-
 src/base-models/BaseModel.ts                  |   14 +-
 src/base-models/GraphModel.ts                 |   16 +-
 src/base-models/GraphModelOrdered.ts          |   10 +-
 src/event-bus/Action.ts                       |    4 +-
 src/event-bus/Event.ts                        |    2 +-
 src/event-bus/EventBus.ts                     |   12 +-
 src/event-bus/InlineAction.ts                 |    4 +-
 src/event-bus/actions/DeselectModelsAction.ts |   10 +-
 src/event-bus/actions/SelectCanvasAction.ts   |    8 +-
 src/event-bus/actions/SelectElementAction.ts  |    8 +-
 src/event-bus/actions/ZoomCanvasAction.ts     |    6 +-
 src/event-bus/events/ModelEvent.ts            |    6 +-
 src/event-bus/events/elements.ts              |    8 +-
 src/event-bus/events/key.ts                   |    6 +-
 src/event-bus/events/mouse.ts                 |   16 +-
 src/geometry/Point.ts                         |    2 +-
 src/geometry/Polygon.ts                       |   32 +-
 src/geometry/Rectangle.ts                     |    9 +-
 src/history/HistoryBank.ts                    |   10 +-
 src/main.ts                                   |   40 +-
 src/models-canvas/CanvasElementModel.ts       |   16 +-
 src/models-canvas/CanvasGroupModel.ts         |    4 +-
 src/models-canvas/CanvasLayerModel.ts         |   18 +-
 src/models-canvas/CanvasModel.ts              |   29 +-
 .../ellipse/EllipseElementFactory.tsx         |   12 +-
 .../ellipse/EllipseElementModel.tsx           |   24 +-
 .../ellipse/EllipseElementWidget.tsx          |    8 +-
 src/primitives/grid/GridElementFactory.tsx    |   12 +-
 src/primitives/grid/GridElementModel.ts       |   18 +-
 src/primitives/grid/GridElementWidget.tsx     |   20 +-
 src/primitives/paper/PaperElementFactory.tsx  |   12 +-
 src/primitives/paper/PaperElementModel.ts     |    6 +-
 src/primitives/paper/PaperElementWidget.tsx   |    8 +-
 .../rectangle/RectangleElementFactory.tsx     |   12 +-
 .../rectangle/RectangleElementModel.ts        |   14 +-
 .../rectangle/RectangleElementWidget.tsx      |   12 +-
 .../selection/SelectionElementFactory.tsx     |   18 +-
 .../selection/SelectionElementModel.ts        |   12 +-
 .../selection/SelectionElementWidget.tsx      |   12 +-
 .../selection/SelectionGroupWidget.tsx        |   54 +-
 .../AbstractDisplacementState.ts              |   17 +-
 src/state-machine/AbstractState.ts            |    8 +-
 src/state-machine/StateMachine.ts             |   12 +-
 src/state-machine/input/KeyInput.ts           |   16 +-
 src/state-machine/input/ModelAnchorInput.ts   |    6 +-
 src/state-machine/input/ModelElementInput.ts  |   14 +-
 src/state-machine/input/ModelRotateInput.ts   |    6 +-
 src/state-machine/input/MouseDownInput.ts     |   12 +-
 src/state-machine/states/DefaultState.ts      |    8 +-
 .../states/ResizeDimensionsState.ts           |   18 +-
 .../states/ResizeOriginDimensionState.ts      |   20 +-
 .../states/RotateElementsState.ts             |   22 +-
 .../states/SelectElementsState.ts             |   10 +-
 .../states/TranslateCanvasState.ts            |   10 +-
 .../states/TranslateElementState.ts           |   17 +-
 src/tracking/DimensionTracker.ts              |    8 +-
 src/tracking/DimensionTrackerWidget.tsx       |   14 +-
 src/tracking/VirtualDimensionTracker.ts       |    6 +-
 src/widgets/AnchorWidget.tsx                  |   35 +-
 src/widgets/CanvasLayerWidget.tsx             |   24 +-
 src/widgets/CanvasWidget.tsx                  |   39 +-
 src/widgets/SmartAnchorWidget.tsx             |   55 +
 yarn.lock                                     | 5066 +++++++++++------
 72 files changed, 4049 insertions(+), 2144 deletions(-)
 create mode 100644 .prettierrc
 delete mode 100644 .yarnrc
 create mode 100644 docs/architecture/overview.gv
 create mode 100644 src/widgets/SmartAnchorWidget.tsx

diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..3f3aae3
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,7 @@
+{
+	"semi": true,
+	"singleQuote": true,
+	"tabWidth": 2,
+	"jsxBracketSameLine": true,
+	"useTabs": false
+}
diff --git a/.yarnrc b/.yarnrc
deleted file mode 100644
index 4f14322..0000000
--- a/.yarnrc
+++ /dev/null
@@ -1 +0,0 @@
---ignore-engines true
diff --git a/demos/demo-standard/index.story.tsx b/demos/demo-standard/index.story.tsx
index b8ede55..ec7efb0 100644
--- a/demos/demo-standard/index.story.tsx
+++ b/demos/demo-standard/index.story.tsx
@@ -1,16 +1,16 @@
-import { CanvasWidget } from "../../src/widgets/CanvasWidget";
-import * as React from "react";
-import { CanvasEngine } from "../../src/CanvasEngine";
-import { CanvasModel } from "../../src/models-canvas/CanvasModel";
-import { CanvasLayerModel } from "../../src/models-canvas/CanvasLayerModel";
-import { RectangleElementModel } from "../../src/primitives/rectangle/RectangleElementModel";
-
-import { storiesOf } from "@storybook/react";
-import { button } from "@storybook/addon-knobs";
-import { GridElementModel } from "../../src/primitives/grid/GridElementModel";
-import { PaperElementModel } from "../../src/primitives/paper/PaperElementModel";
-
-storiesOf("Simple Usage", module).add("Full example", () => {
+import { CanvasWidget } from '../../src/widgets/CanvasWidget';
+import * as React from 'react';
+import { CanvasEngine } from '../../src/CanvasEngine';
+import { CanvasModel } from '../../src/models-canvas/CanvasModel';
+import { CanvasLayerModel } from '../../src/models-canvas/CanvasLayerModel';
+import { RectangleElementModel } from '../../src/primitives/rectangle/RectangleElementModel';
+
+import { storiesOf } from '@storybook/react';
+import { button } from '@storybook/addon-knobs';
+import { GridElementModel } from '../../src/primitives/grid/GridElementModel';
+import { PaperElementModel } from '../../src/primitives/paper/PaperElementModel';
+
+storiesOf('Simple Usage', module).add('Full example', () => {
 	//setup canvas engine
 	let engine = new CanvasEngine();
 	engine.enableDebugMode(true);
@@ -33,7 +33,7 @@ storiesOf("Simple Usage", module).add("Full example", () => {
 	let gridModel2 = new GridElementModel();
 	gridModel2.sizeX = 200;
 	gridModel2.sizeY = 200;
-	gridModel2.color = "cyan";
+	gridModel2.color = 'cyan';
 	gridModel2.thickness = 2;
 	layer2.addModel(gridModel2);
 
@@ -63,17 +63,17 @@ storiesOf("Simple Usage", module).add("Full example", () => {
 
 	layer.addModels([squareModel, squareModel2, squareModel3]);
 
-	button("Fit Width", () => {
+	button('Fit Width', () => {
 		engine.getCanvasWidget().zoomToFit(15);
 	});
 
-	button("Undo", () => {
+	button('Undo', () => {
 		engine.getHistoryBank().goBackward();
 	});
 
-	button("Redo", () => {
+	button('Redo', () => {
 		engine.getHistoryBank().goForward();
 	});
 
-	return <CanvasWidget className={"demo-canvas"} engine={engine} />;
+	return <CanvasWidget className={'demo-canvas'} engine={engine} />;
 });
diff --git a/demos/index.tsx b/demos/index.tsx
index 19aecf4..bb3d5ea 100644
--- a/demos/index.tsx
+++ b/demos/index.tsx
@@ -1,16 +1,16 @@
-import * as React from "react";
-import { storiesOf, addDecorator } from "@storybook/react";
-import { setOptions } from "@storybook/addon-options";
-import { withKnobs, text, boolean, number } from "@storybook/addon-knobs/react";
+import * as React from 'react';
+import { storiesOf, addDecorator } from '@storybook/react';
+import { setOptions } from '@storybook/addon-options';
+import { withKnobs, text, boolean, number } from '@storybook/addon-knobs/react';
 import { configureViewport } from '@storybook/addon-viewport';
 //include the SCSS for the demo
-import "./.helpers/demo.scss";
-import "../src/sass/main.scss";
+import './.helpers/demo.scss';
+import '../src/sass/main.scss';
 
 addDecorator(withKnobs);
 
 setOptions({
-	name: "STORM React Canvas",
-	url: "https://github.com/projectstorm/react-canvas",
+	name: 'STORM React Canvas',
+	url: 'https://github.com/projectstorm/react-canvas',
 	addonPanelInRight: true
 });
diff --git a/docs/architecture/overview.gv b/docs/architecture/overview.gv
new file mode 100644
index 0000000..8a468a9
--- /dev/null
+++ b/docs/architecture/overview.gv
@@ -0,0 +1,3 @@
+graph g{
+
+}
\ No newline at end of file
diff --git a/package.json b/package.json
index 86326f2..ff8f9d9 100644
--- a/package.json
+++ b/package.json
@@ -12,37 +12,37 @@
 	"dependencies": {
 		"@projectstorm/react-core": "^1.2.11",
 		"lodash": "^4.17.11",
-		"mathjs": "^5.1.2",
-		"react": "^16.5.1"
+		"mathjs": "^5.8.0",
+		"react": "^16.8.4"
 	},
 	"devDependencies": {
 		"@babel/core": "^7",
-		"@storybook/addon-actions": "^4.0.0-alpha.21",
-		"@storybook/addon-knobs": "^4.0.0-alpha.21",
-		"@storybook/addon-options": "^4.0.0-alpha.21",
-		"@storybook/addon-storysource": "^4.0.0-alpha.21",
-		"@storybook/addons": "^4.0.0-alpha.21",
-		"@storybook/react": "^4.0.0-alpha.21",
-		"@types/lodash": "^4.14.116",
-		"@types/mathjs": "^4.4.1",
-		"@types/react": "^16.4.14",
-		"@types/react-dom": "^16.0.7",
+		"@storybook/addon-actions": "^5.0.3",
+		"@storybook/addon-knobs": "^5.0.3",
+		"@storybook/addon-options": "^5.0.3",
+		"@storybook/addon-storysource": "^5.0.3",
+		"@storybook/addons": "^5.0.3",
+		"@storybook/react": "^5.0.3",
+		"@types/lodash": "^4.14.123",
+		"@types/mathjs": "^5.0.1",
+		"@types/react": "^16.8.8",
+		"@types/react-dom": "^16.8.3",
 		"awesome-typescript-loader": "5",
-		"babel-loader": "^8.0.2",
-		"css-loader": "^1.0.0",
-		"file-loader": "^2.0.0",
-		"moment": "^2.22.2",
-		"node-sass": "^4.9.3",
-		"prettier": "^1.14.2",
-		"react-dom": "^16.5.1",
+		"babel-loader": "^8.0.5",
+		"css-loader": "^2.1.1",
+		"file-loader": "^3.0.1",
+		"moment": "^2.24.0",
+		"node-sass": "^4.11.0",
+		"prettier": "^1.16.4",
+		"react-dom": "^16.8.4",
 		"sass-loader": "^7.1.0",
 		"source-map-loader": "^0.2.4",
-		"style-loader": "^0.23.0",
-		"ts-loader": "^5.1.1",
+		"style-loader": "^0.23.1",
+		"ts-loader": "^5.3.3",
 		"tsconfig-paths-webpack-plugin": "^3.2.0",
-		"typescript": "^3.0.3",
-		"webpack": "^4.19.0",
-		"webpack-cli": "^3.1.0",
+		"typescript": "^3.3.4000",
+		"webpack": "^4.29.6",
+		"webpack-cli": "^3.3.0",
 		"webpack-node-externals": "^1.7.2"
 	}
 }
diff --git a/src/AbstractElementFactory.ts b/src/AbstractElementFactory.ts
index 49e56f7..ffe71d1 100644
--- a/src/AbstractElementFactory.ts
+++ b/src/AbstractElementFactory.ts
@@ -1,6 +1,6 @@
-import { CanvasEngine } from "./CanvasEngine";
-import { AbstractState } from "./state-machine/AbstractState";
-import { BaseModel } from "./base-models/BaseModel";
+import { CanvasEngine } from './CanvasEngine';
+import { AbstractState } from './state-machine/AbstractState';
+import { BaseModel } from './base-models/BaseModel';
 
 export abstract class AbstractElementFactory<T extends BaseModel = BaseModel> {
 	public type: string;
diff --git a/src/CanvasEngine.ts b/src/CanvasEngine.ts
index 06dab6b..5b6924f 100644
--- a/src/CanvasEngine.ts
+++ b/src/CanvasEngine.ts
@@ -1,33 +1,33 @@
-import * as _ from "lodash";
-import { AbstractElementFactory } from "./AbstractElementFactory";
-import { RectangleElementFactory } from "./primitives/rectangle/RectangleElementFactory";
-import { CanvasModel } from "./models-canvas/CanvasModel";
-import { CanvasWidget } from "./widgets/CanvasWidget";
-import { SelectionElementFactory } from "./primitives/selection/SelectionElementFactory";
-import { StateMachine } from "./state-machine/StateMachine";
-import { TranslateCanvasState } from "./state-machine/states/TranslateCanvasState";
-import { GridElementFactory } from "./primitives/grid/GridElementFactory";
-import { EllipseElementFactory } from "./primitives/ellipse/EllipseElementFactory";
-import { TranslateElementState } from "./state-machine/states/TranslateElementState";
-import { SelectElementsState } from "./state-machine/states/SelectElementsState";
-import { HistoryBank } from "./history/HistoryBank";
-import { CanvasLayerFactory } from "./CanvasLayerFactory";
-import { EventBus } from "./event-bus/EventBus";
-import { ZoomCanvasAction } from "./event-bus/actions/ZoomCanvasAction";
-import { MouseDownInput } from "./state-machine/input/MouseDownInput";
-import { KeyInput } from "./state-machine/input/KeyInput";
-import { ModelElementInput } from "./state-machine/input/ModelElementInput";
-import { DefaultState } from "./state-machine/states/DefaultState";
-import { Toolkit } from "@projectstorm/react-core";
-import { CanvasLayerModel } from "./models-canvas/CanvasLayerModel";
-import { SelectionElementModel } from "./primitives/selection/SelectionElementModel";
-import { ModelEvent } from "./event-bus/events/ModelEvent";
-import { InlineAction } from "./event-bus/InlineAction";
-import { PaperElementFactory } from "./primitives/paper/PaperElementFactory";
-import { BaseEvent, BaseObject } from "@projectstorm/react-core";
-import { BaseModel, DeserializeEvent } from "./base-models/BaseModel";
-import { EllipseElementModel } from "./primitives/ellipse/EllipseElementModel";
-import { DeselectModelsAction } from "./event-bus/actions/DeselectModelsAction";
+import * as _ from 'lodash';
+import { AbstractElementFactory } from './AbstractElementFactory';
+import { RectangleElementFactory } from './primitives/rectangle/RectangleElementFactory';
+import { CanvasModel } from './models-canvas/CanvasModel';
+import { CanvasWidget } from './widgets/CanvasWidget';
+import { SelectionElementFactory } from './primitives/selection/SelectionElementFactory';
+import { StateMachine } from './state-machine/StateMachine';
+import { TranslateCanvasState } from './state-machine/states/TranslateCanvasState';
+import { GridElementFactory } from './primitives/grid/GridElementFactory';
+import { EllipseElementFactory } from './primitives/ellipse/EllipseElementFactory';
+import { TranslateElementState } from './state-machine/states/TranslateElementState';
+import { SelectElementsState } from './state-machine/states/SelectElementsState';
+import { HistoryBank } from './history/HistoryBank';
+import { CanvasLayerFactory } from './CanvasLayerFactory';
+import { EventBus } from './event-bus/EventBus';
+import { ZoomCanvasAction } from './event-bus/actions/ZoomCanvasAction';
+import { MouseDownInput } from './state-machine/input/MouseDownInput';
+import { KeyInput } from './state-machine/input/KeyInput';
+import { ModelElementInput } from './state-machine/input/ModelElementInput';
+import { DefaultState } from './state-machine/states/DefaultState';
+import { Toolkit } from '@projectstorm/react-core';
+import { CanvasLayerModel } from './models-canvas/CanvasLayerModel';
+import { SelectionElementModel } from './primitives/selection/SelectionElementModel';
+import { ModelEvent } from './event-bus/events/ModelEvent';
+import { InlineAction } from './event-bus/InlineAction';
+import { PaperElementFactory } from './primitives/paper/PaperElementFactory';
+import { BaseEvent, BaseObject } from '@projectstorm/react-core';
+import { BaseModel, DeserializeEvent } from './base-models/BaseModel';
+import { EllipseElementModel } from './primitives/ellipse/EllipseElementModel';
+import { DeselectModelsAction } from './event-bus/actions/DeselectModelsAction';
 
 export class CanvasEngineError extends Error {}
 
@@ -92,7 +92,7 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
 		}
 		let oldModel = this.model;
 		this.model = model;
-		this.iterateListeners("Model changed", (listener, event) => {
+		this.iterateListeners('Model changed', (listener, event) => {
 			if (listener.modelChanged) {
 				listener.modelChanged({ ...event, model: model, oldModel: oldModel });
 			}
@@ -151,13 +151,10 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
 					let dimensions = element.getDimensions();
 					if (dimensions) {
 						this.debugLayer.addModels(
-							_.map(
-								EllipseElementModel.createPointCloudFrom(dimensions, 3 / this.model.getZoomLevel()),
-								point => {
-									point.background = "mediumpurple";
-									return point;
-								}
-							)
+							_.map(EllipseElementModel.createPointCloudFrom(dimensions, 3 / this.model.getZoomLevel()), point => {
+								point.background = 'mediumpurple';
+								return point;
+							})
 						);
 					}
 				});
@@ -194,7 +191,7 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
 		this.eventBus.registerAction(
 			new InlineAction(ModelEvent.NAME, (event: ModelEvent) => {
 				// setup a combo box for when there are models
-				if (event.modelEvent.name === "selection changed") {
+				if (event.modelEvent.name === 'selection changed') {
 					selectionLayer.clearEntities();
 					this.model.layers.moveModelToFront(selectionLayer);
 					let selected = _.filter(this.model.getElements(), element => {
@@ -262,7 +259,7 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
 
 	getFactory(type: string): AbstractElementFactory {
 		if (!this.elementFactories[type]) {
-			throw new CanvasEngineError("Cannot find Element factory with type: " + type);
+			throw new CanvasEngineError('Cannot find Element factory with type: ' + type);
 		}
 		return this.elementFactories[type];
 	}
diff --git a/src/CanvasLayerFactory.tsx b/src/CanvasLayerFactory.tsx
index a0f627e..90832c1 100644
--- a/src/CanvasLayerFactory.tsx
+++ b/src/CanvasLayerFactory.tsx
@@ -1,12 +1,12 @@
-import * as React from "react";
-import { AbstractElementFactory } from "./AbstractElementFactory";
-import { CanvasLayerModel } from "./models-canvas/CanvasLayerModel";
-import { CanvasEngine } from "./CanvasEngine";
-import { CanvasLayerWidget } from "./widgets/CanvasLayerWidget";
+import * as React from 'react';
+import { AbstractElementFactory } from './AbstractElementFactory';
+import { CanvasLayerModel } from './models-canvas/CanvasLayerModel';
+import { CanvasEngine } from './CanvasEngine';
+import { CanvasLayerWidget } from './widgets/CanvasLayerWidget';
 
 export class CanvasLayerFactory extends AbstractElementFactory<CanvasLayerModel> {
 	constructor() {
-		super("layer");
+		super('layer');
 	}
 
 	generateModel(): CanvasLayerModel {
diff --git a/src/base-models/BaseModel.ts b/src/base-models/BaseModel.ts
index 055b4e6..31241e2 100644
--- a/src/base-models/BaseModel.ts
+++ b/src/base-models/BaseModel.ts
@@ -1,5 +1,5 @@
-import { BaseEvent, BaseListener, BaseObject, Toolkit } from "@projectstorm/react-core";
-import { CanvasEngine } from "../CanvasEngine";
+import { BaseEvent, BaseListener, BaseObject, Toolkit } from '@projectstorm/react-core';
+import { CanvasEngine } from '../CanvasEngine';
 
 export interface Serializable {
 	_type: string;
@@ -59,7 +59,7 @@ export class BaseModel<
 			this.parentListener = parent.addListener({
 				delegateEvent: event => {
 					if (parent.parent) {
-						parent.parent.iterateListeners("delegating event", listener => {
+						parent.parent.iterateListeners('delegating event', listener => {
 							if (listener.delegateEvent) {
 								listener.delegateEvent(event);
 							}
@@ -97,11 +97,11 @@ export class BaseModel<
 	public deSerialize(event: DeserializeEvent) {
 		this.id = event.data.id;
 		this.locked = !!event.data.locked;
-		if (event.data["parent"]) {
-			if (!event.cache[event.data["parent"]]) {
-				throw "Cannot deserialize, because of missing parent";
+		if (event.data['parent']) {
+			if (!event.cache[event.data['parent']]) {
+				throw 'Cannot deserialize, because of missing parent';
 			}
-			this.setParent(event.cache[event.data["parent"]] as any);
+			this.setParent(event.cache[event.data['parent']] as any);
 		}
 		event.cache[this.id] = this;
 	}
diff --git a/src/base-models/GraphModel.ts b/src/base-models/GraphModel.ts
index 4af48cc..4bb1f20 100644
--- a/src/base-models/GraphModel.ts
+++ b/src/base-models/GraphModel.ts
@@ -1,6 +1,6 @@
-import { BaseModel, BaseModelListener, DeserializeEvent, Serializable } from "./BaseModel";
-import * as _ from "lodash";
-import { BaseEvent } from "@projectstorm/react-core";
+import { BaseModel, BaseModelListener, DeserializeEvent, Serializable } from './BaseModel';
+import * as _ from 'lodash';
+import { BaseEvent } from '@projectstorm/react-core';
 
 export interface GraphModelListener<CHILD = BaseModel> extends BaseModelListener {
 	modelsAdded?: (event: BaseEvent & { models: CHILD[] }) => any;
@@ -19,7 +19,7 @@ export class GraphModel<
 	protected children: { [id: string]: CHILD };
 	protected parentDelegate: BaseModel;
 
-	constructor(type: string = "graph") {
+	constructor(type: string = 'graph') {
 		super(type);
 		this.children = {};
 		this.parentDelegate = this;
@@ -38,7 +38,7 @@ export class GraphModel<
 			this.children[entity.getID()] = entity;
 			entity.setParent(this.parentDelegate);
 		});
-		this.iterateListeners("children added", (listener, event) => {
+		this.iterateListeners('children added', (listener, event) => {
 			if (listener.modelsAdded) {
 				listener.modelsAdded({ ...event, models: entities });
 			}
@@ -55,7 +55,7 @@ export class GraphModel<
 			entity.setParent(null);
 		});
 
-		this.iterateListeners("children removed", (listener, event) => {
+		this.iterateListeners('children removed', (listener, event) => {
 			if (listener.modelsRemoved) {
 				listener.modelsRemoved({ ...event, models: entities });
 			}
@@ -63,7 +63,7 @@ export class GraphModel<
 	}
 
 	removeModel(entity: CHILD | string) {
-		if (typeof entity === "string") {
+		if (typeof entity === 'string') {
 			entity = this.getModel(entity);
 		}
 		this.removeModels([entity]);
@@ -84,7 +84,7 @@ export class GraphModel<
 
 	deSerialize(event: DeserializeEvent): void {
 		super.deSerialize(event);
-		let entities = event.subset("entities");
+		let entities = event.subset('entities');
 		this.children = _.mapValues(entities.data, (entity: any, index) => {
 			let entityOb = event.engine.generateEntityFor(entity._type);
 			entityOb.deSerialize(entities.subset(index));
diff --git a/src/base-models/GraphModelOrdered.ts b/src/base-models/GraphModelOrdered.ts
index ba28c8b..3aac6a4 100644
--- a/src/base-models/GraphModelOrdered.ts
+++ b/src/base-models/GraphModelOrdered.ts
@@ -1,6 +1,6 @@
-import { GraphModel, GraphModelListener } from "./GraphModel";
-import { BaseModel, DeserializeEvent } from "./BaseModel";
-import * as _ from "lodash";
+import { GraphModel, GraphModelListener } from './GraphModel';
+import { BaseModel, DeserializeEvent } from './BaseModel';
+import * as _ from 'lodash';
 
 export class GraphModelOrdered<
 	CHILD extends BaseModel,
@@ -9,7 +9,7 @@ export class GraphModelOrdered<
 > extends GraphModel<CHILD, PARENT, LISTENER> {
 	protected entitiesOrdered: CHILD[];
 
-	constructor(type: string = "graph") {
+	constructor(type: string = 'graph') {
 		super(type);
 		this.entitiesOrdered = [];
 	}
@@ -29,7 +29,7 @@ export class GraphModelOrdered<
 
 	deSerialize(event: DeserializeEvent): void {
 		super.deSerialize(event);
-		this.entitiesOrdered = _.map(event.data["entitiesOrdered"], entityID => {
+		this.entitiesOrdered = _.map(event.data['entitiesOrdered'], entityID => {
 			return this.children[entityID];
 		});
 	}
diff --git a/src/event-bus/Action.ts b/src/event-bus/Action.ts
index 64b6f3e..8157026 100644
--- a/src/event-bus/Action.ts
+++ b/src/event-bus/Action.ts
@@ -1,5 +1,5 @@
-import { Event } from "./Event";
-import { Toolkit } from "@projectstorm/react-core";
+import { Event } from './Event';
+import { Toolkit } from '@projectstorm/react-core';
 
 export abstract class Action<T extends Event = Event> {
 	targetEvent: string;
diff --git a/src/event-bus/Event.ts b/src/event-bus/Event.ts
index f3c70a0..d8d4e19 100644
--- a/src/event-bus/Event.ts
+++ b/src/event-bus/Event.ts
@@ -1,4 +1,4 @@
-import { Action } from "./Action";
+import { Action } from './Action';
 
 export class Event {
 	stopped: boolean;
diff --git a/src/event-bus/EventBus.ts b/src/event-bus/EventBus.ts
index 0e24037..de828f0 100644
--- a/src/event-bus/EventBus.ts
+++ b/src/event-bus/EventBus.ts
@@ -1,7 +1,7 @@
-import { Action } from "./Action";
-import { Event } from "./Event";
-import * as _ from "lodash";
-import { BaseEvent, BaseListener, BaseObject } from "@projectstorm/react-core";
+import { Action } from './Action';
+import { Event } from './Event';
+import * as _ from 'lodash';
+import { BaseEvent, BaseListener, BaseObject } from '@projectstorm/react-core';
 
 export interface EventBusListener extends BaseListener {
 	eventWillFire?: (event: BaseEvent & { event: Event }) => any;
@@ -50,7 +50,7 @@ export class EventBus extends BaseObject<EventBusListener> {
 		}
 
 		// before the event fires
-		this.iterateListeners("event will fire", (listener, baseEvent) => {
+		this.iterateListeners('event will fire', (listener, baseEvent) => {
 			if (listener.eventWillFire) {
 				listener.eventWillFire({
 					...baseEvent,
@@ -71,7 +71,7 @@ export class EventBus extends BaseObject<EventBusListener> {
 		} while (!event.stopped && _.keys(this.actions[event.name]).length !== _.keys(processedActions).length);
 
 		if (event.actionsFired.length > 0) {
-			this.iterateListeners("event did fire", (listener, baseEvent) => {
+			this.iterateListeners('event did fire', (listener, baseEvent) => {
 				if (listener.eventDidFire) {
 					listener.eventDidFire({
 						...baseEvent,
diff --git a/src/event-bus/InlineAction.ts b/src/event-bus/InlineAction.ts
index af35e31..2a3c281 100644
--- a/src/event-bus/InlineAction.ts
+++ b/src/event-bus/InlineAction.ts
@@ -1,5 +1,5 @@
-import { Action } from "./Action";
-import { Event } from "./Event";
+import { Action } from './Action';
+import { Event } from './Event';
 
 export class InlineAction<T extends Event> extends Action<T> {
 	cb: (event: T) => any;
diff --git a/src/event-bus/actions/DeselectModelsAction.ts b/src/event-bus/actions/DeselectModelsAction.ts
index 2f95652..2953f9f 100644
--- a/src/event-bus/actions/DeselectModelsAction.ts
+++ b/src/event-bus/actions/DeselectModelsAction.ts
@@ -1,7 +1,7 @@
-import { Action } from "../Action";
-import { KeyDownEvent } from "../events/key";
-import { CanvasEngine } from "../../CanvasEngine";
-import * as _ from "lodash";
+import { Action } from '../Action';
+import { KeyDownEvent } from '../events/key';
+import { CanvasEngine } from '../../CanvasEngine';
+import * as _ from 'lodash';
 
 export class DeselectModelsAction extends Action<KeyDownEvent> {
 	engine: CanvasEngine;
@@ -12,7 +12,7 @@ export class DeselectModelsAction extends Action<KeyDownEvent> {
 	}
 
 	doAction(event: KeyDownEvent) {
-		if (event.key === "Escape") {
+		if (event.key === 'Escape') {
 			let entities = this.engine.getModel().getSelectedEntities();
 			_.forEach(entities, entity => {
 				entity.setSelected(false);
diff --git a/src/event-bus/actions/SelectCanvasAction.ts b/src/event-bus/actions/SelectCanvasAction.ts
index 36d3dce..fb1312f 100644
--- a/src/event-bus/actions/SelectCanvasAction.ts
+++ b/src/event-bus/actions/SelectCanvasAction.ts
@@ -1,7 +1,7 @@
-import { Action } from "../Action";
-import { MouseDownEvent } from "../events/mouse";
-import * as _ from "lodash";
-import { CanvasEngine } from "../../CanvasEngine";
+import { Action } from '../Action';
+import { MouseDownEvent } from '../events/mouse';
+import * as _ from 'lodash';
+import { CanvasEngine } from '../../CanvasEngine';
 
 export class SelectCanvasAction extends Action<MouseDownEvent> {
 	engine: CanvasEngine;
diff --git a/src/event-bus/actions/SelectElementAction.ts b/src/event-bus/actions/SelectElementAction.ts
index 8d98590..6dbf755 100644
--- a/src/event-bus/actions/SelectElementAction.ts
+++ b/src/event-bus/actions/SelectElementAction.ts
@@ -1,7 +1,7 @@
-import { Action } from "../Action";
-import { PressElementEvent } from "../events/elements";
-import * as _ from "lodash";
-import { CanvasEngine } from "../../CanvasEngine";
+import { Action } from '../Action';
+import { PressElementEvent } from '../events/elements';
+import * as _ from 'lodash';
+import { CanvasEngine } from '../../CanvasEngine';
 
 export class SelectElementAction extends Action<PressElementEvent> {
 	engine: CanvasEngine;
diff --git a/src/event-bus/actions/ZoomCanvasAction.ts b/src/event-bus/actions/ZoomCanvasAction.ts
index 4371b06..a20a021 100644
--- a/src/event-bus/actions/ZoomCanvasAction.ts
+++ b/src/event-bus/actions/ZoomCanvasAction.ts
@@ -1,6 +1,6 @@
-import { Action } from "../Action";
-import { MouseWheelEvent } from "../events/mouse";
-import { CanvasEngine } from "../../CanvasEngine";
+import { Action } from '../Action';
+import { MouseWheelEvent } from '../events/mouse';
+import { CanvasEngine } from '../../CanvasEngine';
 
 export class ZoomCanvasAction extends Action<MouseWheelEvent> {
 	engine: CanvasEngine;
diff --git a/src/event-bus/events/ModelEvent.ts b/src/event-bus/events/ModelEvent.ts
index 5d96b32..8de1e3b 100644
--- a/src/event-bus/events/ModelEvent.ts
+++ b/src/event-bus/events/ModelEvent.ts
@@ -1,10 +1,10 @@
-import { Event } from "../Event";
-import { BaseEvent } from "@projectstorm/react-core";
+import { Event } from '../Event';
+import { BaseEvent } from '@projectstorm/react-core';
 
 export class ModelEvent extends Event {
 	modelEvent: BaseEvent;
 
-	static NAME = "model-delegate-event";
+	static NAME = 'model-delegate-event';
 
 	constructor(modelEvent: BaseEvent) {
 		super(ModelEvent.NAME, modelEvent.source);
diff --git a/src/event-bus/events/elements.ts b/src/event-bus/events/elements.ts
index 1fe1ace..31157f4 100644
--- a/src/event-bus/events/elements.ts
+++ b/src/event-bus/events/elements.ts
@@ -1,5 +1,5 @@
-import { Event } from "../Event";
-import { CanvasElementModel } from "../../models-canvas/CanvasElementModel";
+import { Event } from '../Event';
+import { CanvasElementModel } from '../../models-canvas/CanvasElementModel';
 
 export class ElementEvent extends Event {
 	element: CanvasElementModel;
@@ -11,7 +11,7 @@ export class ElementEvent extends Event {
 }
 
 export class PressElementEvent extends ElementEvent {
-	static NAME = "press-element";
+	static NAME = 'press-element';
 
 	constructor(source: any, element: CanvasElementModel) {
 		super(PressElementEvent.NAME, source, element);
@@ -19,7 +19,7 @@ export class PressElementEvent extends ElementEvent {
 }
 
 export class UnPressElementEvent extends ElementEvent {
-	static NAME = "unpress-element";
+	static NAME = 'unpress-element';
 
 	constructor(source: any, element: CanvasElementModel) {
 		super(UnPressElementEvent.NAME, source, element);
diff --git a/src/event-bus/events/key.ts b/src/event-bus/events/key.ts
index 322a1b8..57eaa1e 100644
--- a/src/event-bus/events/key.ts
+++ b/src/event-bus/events/key.ts
@@ -1,4 +1,4 @@
-import { Event } from "../Event";
+import { Event } from '../Event';
 
 export abstract class KeyEvent extends Event {
 	key: string;
@@ -10,7 +10,7 @@ export abstract class KeyEvent extends Event {
 }
 
 export class KeyDownEvent extends KeyEvent {
-	static NAME = "key-down";
+	static NAME = 'key-down';
 
 	constructor(source: any, key: string) {
 		super(KeyDownEvent.NAME, source, key);
@@ -18,7 +18,7 @@ export class KeyDownEvent extends KeyEvent {
 }
 
 export class KeyUpEvent extends KeyEvent {
-	static NAME = "key-up";
+	static NAME = 'key-up';
 
 	constructor(source: any, key: string) {
 		super(KeyUpEvent.NAME, source, key);
diff --git a/src/event-bus/events/mouse.ts b/src/event-bus/events/mouse.ts
index bded841..2aabe74 100644
--- a/src/event-bus/events/mouse.ts
+++ b/src/event-bus/events/mouse.ts
@@ -1,7 +1,7 @@
-import { Event } from "../Event";
-import { Point } from "../../geometry/Point";
-import * as _ from "lodash";
-import { CanvasEngine } from "../../CanvasEngine";
+import { Event } from '../Event';
+import { Point } from '../../geometry/Point';
+import * as _ from 'lodash';
+import { CanvasEngine } from '../../CanvasEngine';
 
 export abstract class MouseEvent extends Event {
 	mouseX: number;
@@ -25,7 +25,7 @@ export abstract class MouseEvent extends Event {
 }
 
 export class MouseDownEvent extends MouseEvent {
-	static NAME = "mouse-down";
+	static NAME = 'mouse-down';
 
 	constructor(source: any, mouseX: number, mouseY: number) {
 		super(MouseDownEvent.NAME, source, mouseX, mouseY);
@@ -33,7 +33,7 @@ export class MouseDownEvent extends MouseEvent {
 }
 
 export class MouseUpEvent extends MouseEvent {
-	static NAME = "mouse-up";
+	static NAME = 'mouse-up';
 
 	constructor(source: any, mouseX: number, mouseY: number) {
 		super(MouseUpEvent.NAME, source, mouseX, mouseY);
@@ -41,7 +41,7 @@ export class MouseUpEvent extends MouseEvent {
 }
 
 export class MouseMoveEvent extends MouseEvent {
-	static NAME = "mouse-move";
+	static NAME = 'mouse-move';
 
 	constructor(source: any, mouseX: number, mouseY: number) {
 		super(MouseMoveEvent.NAME, source, mouseX, mouseY);
@@ -51,7 +51,7 @@ export class MouseMoveEvent extends MouseEvent {
 export class MouseWheelEvent extends MouseEvent {
 	amount: number;
 
-	static NAME = "mouse-wheel";
+	static NAME = 'mouse-wheel';
 
 	constructor(source: any, mouseX: number, mouseY: number, amount: number) {
 		super(MouseWheelEvent.NAME, source, mouseX, mouseY);
diff --git a/src/geometry/Point.ts b/src/geometry/Point.ts
index c426783..07f28b1 100644
--- a/src/geometry/Point.ts
+++ b/src/geometry/Point.ts
@@ -1,4 +1,4 @@
-import * as mathjs from "mathjs";
+import * as mathjs from 'mathjs';
 import Matrix = mathjs.Matrix;
 
 export class Point {
diff --git a/src/geometry/Polygon.ts b/src/geometry/Polygon.ts
index 1edc381..7bfdfec 100644
--- a/src/geometry/Polygon.ts
+++ b/src/geometry/Polygon.ts
@@ -1,8 +1,8 @@
-import { Point } from "./Point";
-import { Rectangle } from "./Rectangle";
-import * as _ from "lodash";
-import { CanvasModel } from "../models-canvas/CanvasModel";
-import { Matrix } from "mathjs";
+import { Point } from './Point';
+import { Rectangle } from './Rectangle';
+import * as _ from 'lodash';
+import { CanvasModel } from '../models-canvas/CanvasModel';
+import { Matrix } from 'mathjs';
 
 export class Polygon {
 	protected points: Point[];
@@ -12,11 +12,9 @@ export class Polygon {
 	}
 
 	getSVGPoints(): string {
-		return _
-			.map(this.points, point => {
-				return point.x + "," + point.y;
-			})
-			.join(" ");
+		return _.map(this.points, point => {
+			return point.x + ',' + point.y;
+		}).join(' ');
 	}
 
 	serialize() {
@@ -114,12 +112,7 @@ export class Polygon {
 			}
 		}
 
-		return new Rectangle(
-			new Point(minX, minY),
-			new Point(maxX, minY),
-			new Point(maxX, maxY),
-			new Point(minX, maxY)
-		);
+		return new Rectangle(new Point(minX, minY), new Point(maxX, minY), new Point(maxX, maxY), new Point(minX, maxY));
 	}
 
 	getBoundingBox(): Rectangle {
@@ -143,11 +136,6 @@ export class Polygon {
 			}
 		}
 
-		return new Rectangle(
-			new Point(minX, minY),
-			new Point(maxX, minY),
-			new Point(maxX, maxY),
-			new Point(minX, maxY)
-		);
+		return new Rectangle(new Point(minX, minY), new Point(maxX, minY), new Point(maxX, maxY), new Point(minX, maxY));
 	}
 }
diff --git a/src/geometry/Rectangle.ts b/src/geometry/Rectangle.ts
index a12bb3d..9cfb550 100644
--- a/src/geometry/Rectangle.ts
+++ b/src/geometry/Rectangle.ts
@@ -1,5 +1,5 @@
-import { Polygon } from "./Polygon";
-import { Point } from "./Point";
+import { Polygon } from './Polygon';
+import { Point } from './Point';
 
 export class Rectangle extends Polygon {
 	constructor(tl: Point, tr: Point, br: Point, bl: Point);
@@ -26,15 +26,14 @@ export class Rectangle extends Polygon {
 
 	setPoints(points: Point[]) {
 		if (points.length !== 4) {
-			throw "Rectangles must always have 4 points";
+			throw 'Rectangles must always have 4 points';
 		}
 		super.setPoints(points);
 	}
 
 	getWidth(): number {
 		return Math.sqrt(
-			Math.pow(this.getTopLeft().x - this.getTopRight().x, 2) +
-				Math.pow(this.getTopLeft().y - this.getTopRight().y, 2)
+			Math.pow(this.getTopLeft().x - this.getTopRight().x, 2) + Math.pow(this.getTopLeft().y - this.getTopRight().y, 2)
 		);
 	}
 
diff --git a/src/history/HistoryBank.ts b/src/history/HistoryBank.ts
index b928503..a08eab5 100644
--- a/src/history/HistoryBank.ts
+++ b/src/history/HistoryBank.ts
@@ -1,6 +1,6 @@
-import * as _ from "lodash";
-import { BaseEvent, BaseListener, BaseObject } from "@projectstorm/react-core";
-import { HistoryState } from "./HistoryState";
+import * as _ from 'lodash';
+import { BaseEvent, BaseListener, BaseObject } from '@projectstorm/react-core';
+import { HistoryState } from './HistoryState';
 
 export interface HistoryBankListener extends BaseListener<HistoryBank> {
 	forward?(event: BaseEvent<HistoryBank> & { state: HistoryState });
@@ -35,7 +35,7 @@ export class HistoryBank extends BaseObject<HistoryBankListener> {
 			return;
 		}
 		this.pointer++;
-		this.iterateListeners("history moved forward", (listener, event) => {
+		this.iterateListeners('history moved forward', (listener, event) => {
 			if (listener.forward) {
 				listener.forward({ ...event, state: this.history[this.pointer] });
 			}
@@ -48,7 +48,7 @@ export class HistoryBank extends BaseObject<HistoryBankListener> {
 			return;
 		}
 		this.pointer--;
-		this.iterateListeners("history moved backward", (listener, event) => {
+		this.iterateListeners('history moved backward', (listener, event) => {
 			if (listener.backward) {
 				listener.backward({ ...event, state: this.history[this.pointer] });
 			}
diff --git a/src/main.ts b/src/main.ts
index 127a5b8..b5be8ad 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,26 +1,26 @@
-export * from "./CanvasEngine";
-export * from "./AbstractElementFactory";
-export * from "./CanvasLayerFactory";
+export * from './CanvasEngine';
+export * from './AbstractElementFactory';
+export * from './CanvasLayerFactory';
 
-export * from "./widgets/CanvasLayerWidget";
-export * from "./widgets/AnchorWidget";
-export * from "./primitives/selection/SelectionGroupWidget";
+export * from './widgets/CanvasLayerWidget';
+export * from './widgets/AnchorWidget';
+export * from './primitives/selection/SelectionGroupWidget';
 
-export * from "./geometry/Point";
-export * from "./geometry/Polygon";
-export * from "./geometry/Rectangle";
+export * from './geometry/Point';
+export * from './geometry/Polygon';
+export * from './geometry/Rectangle';
 
-export * from "./base-models/BaseModel";
-export * from "./base-models/GraphModel";
-export * from "./base-models/GraphModelOrdered";
+export * from './base-models/BaseModel';
+export * from './base-models/GraphModel';
+export * from './base-models/GraphModelOrdered';
 
-export * from "./models-canvas/CanvasElementModel";
-export * from "./models-canvas/CanvasLayerModel";
-export * from "./models-canvas/CanvasModel";
+export * from './models-canvas/CanvasElementModel';
+export * from './models-canvas/CanvasLayerModel';
+export * from './models-canvas/CanvasModel';
 
-export * from "./history/HistoryBank";
+export * from './history/HistoryBank';
 
-export * from "./event-bus/Action";
-export * from "./event-bus/InlineAction";
-export * from "./event-bus/Event";
-export * from "./event-bus/EventBus";
+export * from './event-bus/Action';
+export * from './event-bus/InlineAction';
+export * from './event-bus/Event';
+export * from './event-bus/EventBus';
diff --git a/src/models-canvas/CanvasElementModel.ts b/src/models-canvas/CanvasElementModel.ts
index d740a7b..940e28a 100644
--- a/src/models-canvas/CanvasElementModel.ts
+++ b/src/models-canvas/CanvasElementModel.ts
@@ -1,7 +1,7 @@
-import { CanvasLayerModel } from "./CanvasLayerModel";
-import { Rectangle } from "../geometry/Rectangle";
-import { BaseEvent } from "../base-models/BaseObject";
-import { BaseModel, BaseModelListener, DeserializeEvent } from "../base-models/BaseModel";
+import { CanvasLayerModel } from './CanvasLayerModel';
+import { Rectangle } from '../geometry/Rectangle';
+import { BaseModel, BaseModelListener, DeserializeEvent } from '../base-models/BaseModel';
+import { BaseEvent } from '@projectstorm/react-core';
 
 export interface CanvasElementModelListener<T extends CanvasElementModel = any> extends BaseModelListener<T> {
 	selectionChanged?(event: BaseEvent<CanvasElementModel> & { selected: boolean });
@@ -32,13 +32,13 @@ export abstract class CanvasElementModel<
 
 	deSerialize(event: DeserializeEvent): void {
 		super.deSerialize(event);
-		this.selected = !!event.data["selected"];
-		this.locked = !!event.data["locked"];
+		this.selected = !!event.data['selected'];
+		this.locked = !!event.data['locked'];
 	}
 
 	setSelected(selected: boolean) {
 		this.selected = selected;
-		this.iterateListeners("selection changed", (listener, event: any) => {
+		this.iterateListeners('selection changed', (listener, event: any) => {
 			if (listener.selectionChanged) {
 				event.selected = selected;
 				listener.selectionChanged(event);
@@ -48,7 +48,7 @@ export abstract class CanvasElementModel<
 
 	setLocked(locked: boolean) {
 		this.locked = locked;
-		this.iterateListeners("lock changed", (listener, event: any) => {
+		this.iterateListeners('lock changed', (listener, event: any) => {
 			if (listener.lockChanged) {
 				event.locked = locked;
 				listener.lockChanged(event);
diff --git a/src/models-canvas/CanvasGroupModel.ts b/src/models-canvas/CanvasGroupModel.ts
index 807d968..077a0b5 100644
--- a/src/models-canvas/CanvasGroupModel.ts
+++ b/src/models-canvas/CanvasGroupModel.ts
@@ -1,5 +1,5 @@
-import { CanvasElementModel } from "./CanvasElementModel";
-import { Rectangle } from "../geometry/Rectangle";
+import { CanvasElementModel } from './CanvasElementModel';
+import { Rectangle } from '../geometry/Rectangle';
 
 export class CanvasGroupModel extends CanvasElementModel {
 	getDimensions(): Rectangle {
diff --git a/src/models-canvas/CanvasLayerModel.ts b/src/models-canvas/CanvasLayerModel.ts
index c926589..a3e3130 100644
--- a/src/models-canvas/CanvasLayerModel.ts
+++ b/src/models-canvas/CanvasLayerModel.ts
@@ -1,7 +1,7 @@
-import { CanvasElementModel } from "./CanvasElementModel";
-import { CanvasModel } from "./CanvasModel";
-import { DeserializeEvent, Serializable } from "../base-models/BaseModel";
-import { GraphModelOrdered } from "../base-models/GraphModelOrdered";
+import { CanvasElementModel } from './CanvasElementModel';
+import { CanvasModel } from './CanvasModel';
+import { DeserializeEvent, Serializable } from '../base-models/BaseModel';
+import { GraphModelOrdered } from '../base-models/GraphModelOrdered';
 
 export class CanvasLayerModel<T extends CanvasElementModel = CanvasElementModel> extends GraphModelOrdered<
 	T,
@@ -11,8 +11,8 @@ export class CanvasLayerModel<T extends CanvasElementModel = CanvasElementModel>
 	protected svg: boolean;
 	protected transform: boolean;
 
-	constructor(name: string = "Layer") {
-		super("layer");
+	constructor(name: string = 'Layer') {
+		super('layer');
 		this.name = name;
 		this.svg = false;
 		this.transform = true;
@@ -20,9 +20,9 @@ export class CanvasLayerModel<T extends CanvasElementModel = CanvasElementModel>
 
 	deSerialize(event: DeserializeEvent): void {
 		super.deSerialize(event);
-		this.name = event.data["name"];
-		this.svg = event.data["svg"];
-		this.transform = event.data["transform"];
+		this.name = event.data['name'];
+		this.svg = event.data['svg'];
+		this.transform = event.data['transform'];
 	}
 
 	serialize(): Serializable & any {
diff --git a/src/models-canvas/CanvasModel.ts b/src/models-canvas/CanvasModel.ts
index abb89fa..e2cbfe6 100644
--- a/src/models-canvas/CanvasModel.ts
+++ b/src/models-canvas/CanvasModel.ts
@@ -1,10 +1,9 @@
-import { CanvasLayerModel } from "./CanvasLayerModel";
-import * as _ from "lodash";
-import { CanvasElementModel } from "./CanvasElementModel";
-import { CanvasEngine } from "../CanvasEngine";
-import { BaseModel, BaseModelListener, DeserializeEvent } from "../base-models/BaseModel";
-import { BaseEvent } from "../base-models/BaseObject";
-import { GraphModelOrdered } from "../base-models/GraphModelOrdered";
+import { CanvasLayerModel } from './CanvasLayerModel';
+import * as _ from 'lodash';
+import { CanvasElementModel } from './CanvasElementModel';
+import { BaseModel, BaseModelListener, DeserializeEvent } from '../base-models/BaseModel';
+import { GraphModelOrdered } from '../base-models/GraphModelOrdered';
+import { BaseEvent } from '@projectstorm/react-core';
 
 export interface CanvasModelListener<T extends CanvasModel = any> extends BaseModelListener<T> {
 	offsetUpdated?(event: BaseEvent<T> & { offsetX: number; offsetY: number }): void;
@@ -22,9 +21,9 @@ export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> ex
 	zoom: number;
 
 	constructor() {
-		super("canvas");
+		super('canvas');
 		this.selectedLayer = null;
-		this.layers = new GraphModelOrdered("layers");
+		this.layers = new GraphModelOrdered('layers');
 		this.layers.setParentDelegate(this);
 		this.offsetX = 0;
 		this.offsetY = 0;
@@ -43,10 +42,10 @@ export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> ex
 
 	deSerialize(event: DeserializeEvent): void {
 		super.deSerialize(event);
-		this.layers.deSerialize(event.subset("layers"));
-		this.offsetX = event.data["offsetX"];
-		this.offsetY = event.data["offsetY"];
-		this.zoom = event.data["zoom"];
+		this.layers.deSerialize(event.subset('layers'));
+		this.offsetX = event.data['offsetX'];
+		this.offsetY = event.data['offsetY'];
+		this.zoom = event.data['zoom'];
 	}
 
 	getOffsetY() {
@@ -63,7 +62,7 @@ export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> ex
 
 	setZoomLevel(zoom: number) {
 		this.zoom = zoom;
-		this.iterateListeners("zoom changed", (listener: CanvasModelListener, event) => {
+		this.iterateListeners('zoom changed', (listener: CanvasModelListener, event) => {
 			if (listener.zoomUpdated) {
 				listener.zoomUpdated({ ...event, zoom: zoom });
 			}
@@ -77,7 +76,7 @@ export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> ex
 	setOffset(offsetX: number, offsetY: number) {
 		this.offsetX = offsetX;
 		this.offsetY = offsetY;
-		this.iterateListeners("offset changed", (listener: CanvasModelListener, event) => {
+		this.iterateListeners('offset changed', (listener: CanvasModelListener, event) => {
 			if (listener.offsetUpdated) {
 				listener.offsetUpdated({ ...event, offsetX: offsetX, offsetY: offsetY });
 			}
diff --git a/src/primitives/ellipse/EllipseElementFactory.tsx b/src/primitives/ellipse/EllipseElementFactory.tsx
index 000e8ba..9fa7c6a 100644
--- a/src/primitives/ellipse/EllipseElementFactory.tsx
+++ b/src/primitives/ellipse/EllipseElementFactory.tsx
@@ -1,11 +1,11 @@
-import { AbstractElementFactory } from "../../AbstractElementFactory";
-import { EllipseElementModel } from "./EllipseElementModel";
-import { CanvasEngine } from "../../CanvasEngine";
-import { EllipseElementWidget } from "./EllipseElementWidget";
-import * as React from "react";
+import { AbstractElementFactory } from '../../AbstractElementFactory';
+import { EllipseElementModel } from './EllipseElementModel';
+import { CanvasEngine } from '../../CanvasEngine';
+import { EllipseElementWidget } from './EllipseElementWidget';
+import * as React from 'react';
 
 export class EllipseElementFactory extends AbstractElementFactory<EllipseElementModel> {
-	static NAME = "primitive-circle";
+	static NAME = 'primitive-circle';
 
 	constructor() {
 		super(EllipseElementFactory.NAME);
diff --git a/src/primitives/ellipse/EllipseElementModel.tsx b/src/primitives/ellipse/EllipseElementModel.tsx
index 87ca939..4ed9aef 100644
--- a/src/primitives/ellipse/EllipseElementModel.tsx
+++ b/src/primitives/ellipse/EllipseElementModel.tsx
@@ -1,10 +1,10 @@
-import { CanvasElementModel } from "../../models-canvas/CanvasElementModel";
-import { Rectangle } from "../../geometry/Rectangle";
-import { Point } from "../../geometry/Point";
-import * as _ from "lodash";
-import { Polygon } from "../../geometry/Polygon";
-import { DeserializeEvent } from "../../base-models/BaseModel";
-import { EllipseElementFactory } from "./EllipseElementFactory";
+import { CanvasElementModel } from '../../models-canvas/CanvasElementModel';
+import { Rectangle } from '../../geometry/Rectangle';
+import { Point } from '../../geometry/Point';
+import * as _ from 'lodash';
+import { Polygon } from '../../geometry/Polygon';
+import { DeserializeEvent } from '../../base-models/BaseModel';
+import { EllipseElementFactory } from './EllipseElementFactory';
 
 export class EllipseElementModel extends CanvasElementModel {
 	radiusX: number;
@@ -17,7 +17,7 @@ export class EllipseElementModel extends CanvasElementModel {
 		this.radiusX = 5;
 		this.radiusY = 5;
 		this.center = new Point(0, 0);
-		this.background = "rgb(0,192,255)";
+		this.background = 'rgb(0,192,255)';
 	}
 
 	static createPointCloud(points: Point[], radius: number = 5) {
@@ -45,10 +45,10 @@ export class EllipseElementModel extends CanvasElementModel {
 
 	deSerialize(event: DeserializeEvent): void {
 		super.deSerialize(event);
-		this.radiusX = event.data["radiusX"];
-		this.radiusY = event.data["radiusY"];
-		this.background = event.data["background"];
-		this.center = new Point(event.data["centerX"], event.data["centerY"]);
+		this.radiusX = event.data['radiusX'];
+		this.radiusY = event.data['radiusY'];
+		this.background = event.data['background'];
+		this.center = new Point(event.data['centerX'], event.data['centerY']);
 	}
 
 	serialize() {
diff --git a/src/primitives/ellipse/EllipseElementWidget.tsx b/src/primitives/ellipse/EllipseElementWidget.tsx
index d13f404..718c935 100644
--- a/src/primitives/ellipse/EllipseElementWidget.tsx
+++ b/src/primitives/ellipse/EllipseElementWidget.tsx
@@ -1,6 +1,6 @@
-import * as React from "react";
-import { EllipseElementModel } from "./EllipseElementModel";
-import { BaseWidget, BaseWidgetProps } from "@projectstorm/react-core";
+import * as React from 'react';
+import { EllipseElementModel } from './EllipseElementModel';
+import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
 
 export interface EllipseElementWidgetProps extends BaseWidgetProps {
 	model: EllipseElementModel;
@@ -10,7 +10,7 @@ export interface EllipseElementWidgetState {}
 
 export class EllipseElementWidget extends BaseWidget<EllipseElementWidgetProps, EllipseElementWidgetState> {
 	constructor(props: EllipseElementWidgetProps) {
-		super("src-ellipsse-element", props);
+		super('src-ellipsse-element', props);
 		this.state = {};
 	}
 
diff --git a/src/primitives/grid/GridElementFactory.tsx b/src/primitives/grid/GridElementFactory.tsx
index 1f09587..92bd5a6 100644
--- a/src/primitives/grid/GridElementFactory.tsx
+++ b/src/primitives/grid/GridElementFactory.tsx
@@ -1,11 +1,11 @@
-import { AbstractElementFactory } from "../../AbstractElementFactory";
-import { GridElementModel } from "./GridElementModel";
-import { CanvasEngine } from "../../CanvasEngine";
-import { GridElementWidget } from "./GridElementWidget";
-import * as React from "react";
+import { AbstractElementFactory } from '../../AbstractElementFactory';
+import { GridElementModel } from './GridElementModel';
+import { CanvasEngine } from '../../CanvasEngine';
+import { GridElementWidget } from './GridElementWidget';
+import * as React from 'react';
 
 export class GridElementFactory extends AbstractElementFactory<GridElementModel> {
-	static NAME = "primitive-grid";
+	static NAME = 'primitive-grid';
 
 	constructor() {
 		super(GridElementFactory.NAME);
diff --git a/src/primitives/grid/GridElementModel.ts b/src/primitives/grid/GridElementModel.ts
index f429af9..839a6c9 100644
--- a/src/primitives/grid/GridElementModel.ts
+++ b/src/primitives/grid/GridElementModel.ts
@@ -1,7 +1,7 @@
-import { CanvasElementModel } from "../../models-canvas/CanvasElementModel";
-import { Rectangle } from "../../geometry/Rectangle";
-import { DeserializeEvent } from "../../base-models/BaseModel";
-import { GridElementFactory } from "./GridElementFactory";
+import { CanvasElementModel } from '../../models-canvas/CanvasElementModel';
+import { Rectangle } from '../../geometry/Rectangle';
+import { DeserializeEvent } from '../../base-models/BaseModel';
+import { GridElementFactory } from './GridElementFactory';
 
 export class GridElementModel extends CanvasElementModel {
 	sizeX: number;
@@ -13,7 +13,7 @@ export class GridElementModel extends CanvasElementModel {
 		super(GridElementFactory.NAME);
 		this.sizeX = 50;
 		this.sizeY = 50;
-		this.color = "rgba(0,0,0,0.1)";
+		this.color = 'rgba(0,0,0,0.1)';
 		this.thickness = 1;
 	}
 
@@ -25,10 +25,10 @@ export class GridElementModel extends CanvasElementModel {
 
 	deSerialize(event: DeserializeEvent): void {
 		super.deSerialize(event);
-		this.sizeX = event.data["sizeX"];
-		this.sizeY = event.data["sizeY"];
-		this.color = event.data["color"];
-		this.thickness = event.data["thickness"];
+		this.sizeX = event.data['sizeX'];
+		this.sizeY = event.data['sizeY'];
+		this.color = event.data['color'];
+		this.thickness = event.data['thickness'];
 	}
 
 	serialize(): { selected: boolean } {
diff --git a/src/primitives/grid/GridElementWidget.tsx b/src/primitives/grid/GridElementWidget.tsx
index 92f7dba..45ffce4 100644
--- a/src/primitives/grid/GridElementWidget.tsx
+++ b/src/primitives/grid/GridElementWidget.tsx
@@ -1,7 +1,7 @@
-import * as React from "react";
-import { CanvasEngine } from "../../CanvasEngine";
-import { GridElementModel } from "./GridElementModel";
-import { BaseWidget, BaseWidgetProps } from "@projectstorm/react-core";
+import * as React from 'react';
+import { CanvasEngine } from '../../CanvasEngine';
+import { GridElementModel } from './GridElementModel';
+import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
 
 export interface GridElementWidgetProps extends BaseWidgetProps {
 	engine: CanvasEngine;
@@ -12,22 +12,21 @@ export interface GridElementWidgetState {}
 
 export class GridElementWidget extends BaseWidget<GridElementWidgetProps, GridElementWidgetState> {
 	constructor(props: GridElementWidgetProps) {
-		super("src-grid-element", props);
+		super('src-grid-element', props);
 		this.state = {};
 	}
 
 	render() {
 		let childrenX = [];
 		let offsetX =
-			this.props.engine.getModel().offsetX %
-			(this.props.model.sizeX * this.props.engine.getModel().getZoomLevel());
+			this.props.engine.getModel().offsetX % (this.props.model.sizeX * this.props.engine.getModel().getZoomLevel());
 		let spacingX = this.props.model.sizeX * this.props.engine.getModel().getZoomLevel();
 		let totalChildrenX = this.props.engine.getCanvasWidget().dimension.realDimensions.getWidth() / spacingX;
 		for (let i = 0; i < totalChildrenX; i++) {
 			let x = offsetX + spacingX * i;
 			childrenX.push(
 				<line
-					key={"x-" + i}
+					key={'x-' + i}
 					stroke={this.props.model.color}
 					strokeWidth={this.props.model.thickness}
 					y1={0}
@@ -40,15 +39,14 @@ export class GridElementWidget extends BaseWidget<GridElementWidgetProps, GridEl
 
 		let childrenY = [];
 		let offsetY =
-			this.props.engine.getModel().offsetY %
-			(this.props.model.sizeY * this.props.engine.getModel().getZoomLevel());
+			this.props.engine.getModel().offsetY % (this.props.model.sizeY * this.props.engine.getModel().getZoomLevel());
 		let spacingY = this.props.model.sizeY * this.props.engine.getModel().getZoomLevel();
 		let totalChildrenY = this.props.engine.getCanvasWidget().dimension.realDimensions.getHeight() / spacingY;
 		for (let i = 0; i < totalChildrenY; i++) {
 			let y = offsetY + spacingY * i;
 			childrenY.push(
 				<line
-					key={"y-" + i}
+					key={'y-' + i}
 					stroke={this.props.model.color}
 					strokeWidth={this.props.model.thickness}
 					x1={0}
diff --git a/src/primitives/paper/PaperElementFactory.tsx b/src/primitives/paper/PaperElementFactory.tsx
index e8be6ba..c169d42 100644
--- a/src/primitives/paper/PaperElementFactory.tsx
+++ b/src/primitives/paper/PaperElementFactory.tsx
@@ -1,11 +1,11 @@
-import { AbstractElementFactory } from "../../AbstractElementFactory";
-import { PaperElementModel } from "./PaperElementModel";
-import { CanvasEngine } from "../../CanvasEngine";
-import { PaperElementWidget } from "./PaperElementWidget";
-import * as React from "react";
+import { AbstractElementFactory } from '../../AbstractElementFactory';
+import { PaperElementModel } from './PaperElementModel';
+import { CanvasEngine } from '../../CanvasEngine';
+import { PaperElementWidget } from './PaperElementWidget';
+import * as React from 'react';
 
 export class PaperElementFactory extends AbstractElementFactory<PaperElementModel> {
-	static NAME = "primitive-paper";
+	static NAME = 'primitive-paper';
 
 	constructor() {
 		super(PaperElementFactory.NAME);
diff --git a/src/primitives/paper/PaperElementModel.ts b/src/primitives/paper/PaperElementModel.ts
index 7498896..fde897f 100644
--- a/src/primitives/paper/PaperElementModel.ts
+++ b/src/primitives/paper/PaperElementModel.ts
@@ -1,6 +1,6 @@
-import { CanvasElementModel } from "../../models-canvas/CanvasElementModel";
-import { Rectangle } from "../../geometry/Rectangle";
-import { PaperElementFactory } from "./PaperElementFactory";
+import { CanvasElementModel } from '../../models-canvas/CanvasElementModel';
+import { Rectangle } from '../../geometry/Rectangle';
+import { PaperElementFactory } from './PaperElementFactory';
 
 export class PaperElementModel extends CanvasElementModel {
 	dimensions: Rectangle;
diff --git a/src/primitives/paper/PaperElementWidget.tsx b/src/primitives/paper/PaperElementWidget.tsx
index f8182a1..948a774 100644
--- a/src/primitives/paper/PaperElementWidget.tsx
+++ b/src/primitives/paper/PaperElementWidget.tsx
@@ -1,6 +1,6 @@
-import * as React from "react";
-import { BaseWidget, BaseWidgetProps } from "@projectstorm/react-core";
-import { PaperElementModel } from "./PaperElementModel";
+import * as React from 'react';
+import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
+import { PaperElementModel } from './PaperElementModel';
 
 export interface PaperElementWidgetProps extends BaseWidgetProps {
 	model: PaperElementModel;
@@ -8,7 +8,7 @@ export interface PaperElementWidgetProps extends BaseWidgetProps {
 
 export class PaperElementWidget extends BaseWidget<PaperElementWidgetProps> {
 	constructor(props) {
-		super("src-paper", props);
+		super('src-paper', props);
 	}
 
 	render() {
diff --git a/src/primitives/rectangle/RectangleElementFactory.tsx b/src/primitives/rectangle/RectangleElementFactory.tsx
index 0e3a91a..0503675 100644
--- a/src/primitives/rectangle/RectangleElementFactory.tsx
+++ b/src/primitives/rectangle/RectangleElementFactory.tsx
@@ -1,11 +1,11 @@
-import { AbstractElementFactory } from "../../AbstractElementFactory";
-import { RectangleElementModel } from "./RectangleElementModel";
-import { RectangleElementWidget } from "./RectangleElementWidget";
-import * as React from "react";
-import { CanvasEngine } from "../../CanvasEngine";
+import { AbstractElementFactory } from '../../AbstractElementFactory';
+import { RectangleElementModel } from './RectangleElementModel';
+import { RectangleElementWidget } from './RectangleElementWidget';
+import * as React from 'react';
+import { CanvasEngine } from '../../CanvasEngine';
 
 export class RectangleElementFactory extends AbstractElementFactory<RectangleElementModel> {
-	static NAME = "primitive-rectangle";
+	static NAME = 'primitive-rectangle';
 
 	constructor() {
 		super(RectangleElementFactory.NAME);
diff --git a/src/primitives/rectangle/RectangleElementModel.ts b/src/primitives/rectangle/RectangleElementModel.ts
index 1574e06..e6d30ad 100644
--- a/src/primitives/rectangle/RectangleElementModel.ts
+++ b/src/primitives/rectangle/RectangleElementModel.ts
@@ -1,7 +1,7 @@
-import { CanvasElementModel } from "../../models-canvas/CanvasElementModel";
-import { Rectangle } from "../../geometry/Rectangle";
-import { DeserializeEvent } from "../../base-models/BaseModel";
-import { RectangleElementFactory } from "./RectangleElementFactory";
+import { CanvasElementModel } from '../../models-canvas/CanvasElementModel';
+import { Rectangle } from '../../geometry/Rectangle';
+import { DeserializeEvent } from '../../base-models/BaseModel';
+import { RectangleElementFactory } from './RectangleElementFactory';
 
 export class RectangleElementModel extends CanvasElementModel {
 	border: number;
@@ -12,8 +12,8 @@ export class RectangleElementModel extends CanvasElementModel {
 	constructor() {
 		super(RectangleElementFactory.NAME);
 		this.border = 2;
-		this.borderColor = "black";
-		this.background = "rgb(0,192,255)";
+		this.borderColor = 'black';
+		this.background = 'rgb(0,192,255)';
 		this.dimensions = new Rectangle(0, 0, 100, 100);
 		this.selected = false;
 	}
@@ -27,7 +27,7 @@ export class RectangleElementModel extends CanvasElementModel {
 
 	deSerialize(event: DeserializeEvent): void {
 		super.deSerialize(event);
-		this.dimensions.deserialize(event.data["dimensions"]);
+		this.dimensions.deserialize(event.data['dimensions']);
 	}
 
 	getDimensions(): Rectangle {
diff --git a/src/primitives/rectangle/RectangleElementWidget.tsx b/src/primitives/rectangle/RectangleElementWidget.tsx
index 9492c45..6c1389f 100644
--- a/src/primitives/rectangle/RectangleElementWidget.tsx
+++ b/src/primitives/rectangle/RectangleElementWidget.tsx
@@ -1,8 +1,8 @@
-import * as React from "react";
-import { BaseWidget, BaseWidgetProps } from "@projectstorm/react-core";
-import { RectangleElementModel } from "./RectangleElementModel";
-import { CanvasEngine } from "../../CanvasEngine";
-import { PressElementEvent, UnPressElementEvent } from "../../event-bus/events/elements";
+import * as React from 'react';
+import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
+import { RectangleElementModel } from './RectangleElementModel';
+import { CanvasEngine } from '../../CanvasEngine';
+import { PressElementEvent, UnPressElementEvent } from '../../event-bus/events/elements';
 
 export interface SquareElementWidgetProps extends BaseWidgetProps {
 	model: RectangleElementModel;
@@ -13,7 +13,7 @@ export interface SquareElementWidgetState {}
 
 export class RectangleElementWidget extends BaseWidget<SquareElementWidgetProps, SquareElementWidgetState> {
 	constructor(props: SquareElementWidgetProps) {
-		super("src-primitive-rectangle", props);
+		super('src-primitive-rectangle', props);
 		this.state = {};
 	}
 
diff --git a/src/primitives/selection/SelectionElementFactory.tsx b/src/primitives/selection/SelectionElementFactory.tsx
index c3f2bf7..e7cdcdb 100644
--- a/src/primitives/selection/SelectionElementFactory.tsx
+++ b/src/primitives/selection/SelectionElementFactory.tsx
@@ -1,15 +1,15 @@
-import { AbstractElementFactory } from "../../AbstractElementFactory";
-import { SelectionElementModel } from "./SelectionElementModel";
-import { CanvasEngine } from "../../CanvasEngine";
-import { SelectionElementWidget } from "./SelectionElementWidget";
-import * as React from "react";
-import { ResizeDimensionsState } from "../../state-machine/states/ResizeDimensionsState";
-import { ResizeOriginDimensionsState } from "../../state-machine/states/ResizeOriginDimensionState";
-import { RotateElementsState } from "../../state-machine/states/RotateElementsState";
+import { AbstractElementFactory } from '../../AbstractElementFactory';
+import { SelectionElementModel } from './SelectionElementModel';
+import { CanvasEngine } from '../../CanvasEngine';
+import { SelectionElementWidget } from './SelectionElementWidget';
+import * as React from 'react';
+import { ResizeDimensionsState } from '../../state-machine/states/ResizeDimensionsState';
+import { ResizeOriginDimensionsState } from '../../state-machine/states/ResizeOriginDimensionState';
+import { RotateElementsState } from '../../state-machine/states/RotateElementsState';
 
 export class SelectionElementFactory extends AbstractElementFactory<SelectionElementModel> {
 	constructor() {
-		super("selection");
+		super('selection');
 	}
 
 	generateModel(): SelectionElementModel {
diff --git a/src/primitives/selection/SelectionElementModel.ts b/src/primitives/selection/SelectionElementModel.ts
index 46f9181..acf396d 100644
--- a/src/primitives/selection/SelectionElementModel.ts
+++ b/src/primitives/selection/SelectionElementModel.ts
@@ -1,13 +1,13 @@
-import { CanvasElementModel } from "../../models-canvas/CanvasElementModel";
-import * as _ from "lodash";
-import { Rectangle } from "../../geometry/Rectangle";
-import { DeserializeEvent } from "../../base-models/BaseModel";
+import { CanvasElementModel } from '../../models-canvas/CanvasElementModel';
+import * as _ from 'lodash';
+import { Rectangle } from '../../geometry/Rectangle';
+import { DeserializeEvent } from '../../base-models/BaseModel';
 
 export class SelectionElementModel extends CanvasElementModel {
 	models: CanvasElementModel[];
 
 	constructor() {
-		super("selection");
+		super('selection');
 		this.models = [];
 	}
 
@@ -31,7 +31,7 @@ export class SelectionElementModel extends CanvasElementModel {
 
 	deSerialize(event: DeserializeEvent): void {
 		super.deSerialize(event);
-		this.models = _.map(event.data["models"], modelID => {
+		this.models = _.map(event.data['models'], modelID => {
 			return event.cache[modelID];
 		}) as any;
 	}
diff --git a/src/primitives/selection/SelectionElementWidget.tsx b/src/primitives/selection/SelectionElementWidget.tsx
index 1681eb4..98ec9be 100644
--- a/src/primitives/selection/SelectionElementWidget.tsx
+++ b/src/primitives/selection/SelectionElementWidget.tsx
@@ -1,8 +1,8 @@
-import * as React from "react";
-import { BaseWidget, BaseWidgetProps } from "@projectstorm/react-core";
-import { SelectionGroupWidget } from "./SelectionGroupWidget";
-import { CanvasEngine } from "../../CanvasEngine";
-import { SelectionElementModel } from "./SelectionElementModel";
+import * as React from 'react';
+import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
+import { SelectionGroupWidget } from './SelectionGroupWidget';
+import { CanvasEngine } from '../../CanvasEngine';
+import { SelectionElementModel } from './SelectionElementModel';
 
 export interface SelectionElementWidgetProps extends BaseWidgetProps {
 	engine: CanvasEngine;
@@ -13,7 +13,7 @@ export interface SelectionElementWidgetState {}
 
 export class SelectionElementWidget extends BaseWidget<SelectionElementWidgetProps, SelectionElementWidgetState> {
 	constructor(props: SelectionElementWidgetProps) {
-		super("src-selection-group", props);
+		super('src-selection-group', props);
 		this.state = {};
 	}
 
diff --git a/src/primitives/selection/SelectionGroupWidget.tsx b/src/primitives/selection/SelectionGroupWidget.tsx
index 1474952..63ad265 100644
--- a/src/primitives/selection/SelectionGroupWidget.tsx
+++ b/src/primitives/selection/SelectionGroupWidget.tsx
@@ -1,10 +1,11 @@
-import * as React from "react";
-import { BaseWidget, BaseWidgetProps, MouseWidget } from "@projectstorm/react-core";
-import { AnchorWidget } from "../../widgets/AnchorWidget";
-import { CanvasEngine } from "../../CanvasEngine";
-import { SelectionElementModel } from "./SelectionElementModel";
-import { ModelAnchorInputPosition } from "../../state-machine/input/ModelAnchorInput";
-import { ModelRotateInput } from "../../state-machine/input/ModelRotateInput";
+import * as React from 'react';
+import { BaseWidget, BaseWidgetProps, MouseWidget } from '@projectstorm/react-core';
+import { AnchorWidget } from '../../widgets/AnchorWidget';
+import { CanvasEngine } from '../../CanvasEngine';
+import { SelectionElementModel } from './SelectionElementModel';
+import { ModelAnchorInputPosition } from '../../state-machine/input/ModelAnchorInput';
+import { ModelRotateInput } from '../../state-machine/input/ModelRotateInput';
+import { SmartAnchorWidget } from '../../widgets/SmartAnchorWidget';
 
 export interface SelectionGroupWidgetProps extends BaseWidgetProps {
 	model: SelectionElementModel;
@@ -15,7 +16,7 @@ export interface SelectionGroupWidgetState {}
 
 export class SelectionGroupWidget extends BaseWidget<SelectionGroupWidgetProps, SelectionGroupWidgetState> {
 	constructor(props: SelectionGroupWidgetProps) {
-		super("src-selection-group", props);
+		super('src-selection-group', props);
 		this.state = {};
 	}
 
@@ -29,12 +30,11 @@ export class SelectionGroupWidget extends BaseWidget<SelectionGroupWidgetProps,
 					width: dimension.getWidth(),
 					height: dimension.getHeight()
 				}}
-				{...this.getProps()}
-			>
+				{...this.getProps()}>
 				<MouseWidget
 					element="div"
 					extraProps={{
-						className: this.bem("__rotate")
+						className: this.bem('__rotate')
 					}}
 					mouseDownEvent={() => {
 						this.props.engine.getStateMachine().addInput(new ModelRotateInput(this.props.model));
@@ -43,53 +43,53 @@ export class SelectionGroupWidget extends BaseWidget<SelectionGroupWidgetProps,
 						this.props.engine.getStateMachine().removeInput(ModelRotateInput.NAME);
 					}}
 				/>
-				<AnchorWidget
+				<SmartAnchorWidget
 					pos={ModelAnchorInputPosition.TOP_LEFT}
 					selectionModel={this.props.model}
 					engine={this.props.engine}
-					className={this.bem("__top-left")}
+					className={this.bem('__top-left')}
 				/>
-				<AnchorWidget
+				<SmartAnchorWidget
 					pos={ModelAnchorInputPosition.TOP}
 					selectionModel={this.props.model}
 					engine={this.props.engine}
-					className={this.bem("__top")}
+					className={this.bem('__top')}
 				/>
-				<AnchorWidget
+				<SmartAnchorWidget
 					pos={ModelAnchorInputPosition.TOP_RIGHT}
 					selectionModel={this.props.model}
 					engine={this.props.engine}
-					className={this.bem("__top-right")}
+					className={this.bem('__top-right')}
 				/>
-				<AnchorWidget
+				<SmartAnchorWidget
 					pos={ModelAnchorInputPosition.LEFT}
 					selectionModel={this.props.model}
 					engine={this.props.engine}
-					className={this.bem("__left")}
+					className={this.bem('__left')}
 				/>
-				<AnchorWidget
+				<SmartAnchorWidget
 					pos={ModelAnchorInputPosition.RIGHT}
 					selectionModel={this.props.model}
 					engine={this.props.engine}
-					className={this.bem("__right")}
+					className={this.bem('__right')}
 				/>
-				<AnchorWidget
+				<SmartAnchorWidget
 					pos={ModelAnchorInputPosition.BOT_LEFT}
 					selectionModel={this.props.model}
 					engine={this.props.engine}
-					className={this.bem("__bot-left")}
+					className={this.bem('__bot-left')}
 				/>
-				<AnchorWidget
+				<SmartAnchorWidget
 					pos={ModelAnchorInputPosition.BOT}
 					selectionModel={this.props.model}
 					engine={this.props.engine}
-					className={this.bem("__bot")}
+					className={this.bem('__bot')}
 				/>
-				<AnchorWidget
+				<SmartAnchorWidget
 					pos={ModelAnchorInputPosition.BOT_RIGHT}
 					selectionModel={this.props.model}
 					engine={this.props.engine}
-					className={this.bem("__bot-right")}
+					className={this.bem('__bot-right')}
 				/>
 			</div>
 		);
diff --git a/src/state-machine/AbstractDisplacementState.ts b/src/state-machine/AbstractDisplacementState.ts
index 0b3d86c..e44bb96 100644
--- a/src/state-machine/AbstractDisplacementState.ts
+++ b/src/state-machine/AbstractDisplacementState.ts
@@ -1,9 +1,9 @@
-import { AbstractState } from "./AbstractState";
-import { StateMachine } from "./StateMachine";
-import { CanvasEngine } from "../CanvasEngine";
-import { MouseDownInput } from "./input/MouseDownInput";
-import { InlineAction } from "../event-bus/InlineAction";
-import { MouseMoveEvent } from "../event-bus/events/mouse";
+import { AbstractState } from './AbstractState';
+import { StateMachine } from './StateMachine';
+import { CanvasEngine } from '../CanvasEngine';
+import { MouseDownInput } from './input/MouseDownInput';
+import { InlineAction } from '../event-bus/InlineAction';
+import { MouseMoveEvent } from '../event-bus/events/mouse';
 
 export abstract class AbstractDisplacementState extends AbstractState {
 	initialMouse: MouseDownInput;
@@ -14,10 +14,7 @@ export abstract class AbstractDisplacementState extends AbstractState {
 		this.registerAction(
 			new InlineAction<MouseMoveEvent>(MouseMoveEvent.NAME, event => {
 				if (this.initialMouse) {
-					this.processDisplacement(
-						event.mouseX - this.initialMouse.mouseX,
-						event.mouseY - this.initialMouse.mouseY
-					);
+					this.processDisplacement(event.mouseX - this.initialMouse.mouseX, event.mouseY - this.initialMouse.mouseY);
 				}
 			})
 		);
diff --git a/src/state-machine/AbstractState.ts b/src/state-machine/AbstractState.ts
index e39569e..43cf819 100644
--- a/src/state-machine/AbstractState.ts
+++ b/src/state-machine/AbstractState.ts
@@ -1,7 +1,7 @@
-import { StateMachine } from "./StateMachine";
-import { Action } from "../event-bus/Action";
-import { CanvasEngine } from "../CanvasEngine";
-import * as _ from "lodash";
+import { StateMachine } from './StateMachine';
+import { Action } from '../event-bus/Action';
+import { CanvasEngine } from '../CanvasEngine';
+import * as _ from 'lodash';
 
 export abstract class AbstractState {
 	engine: CanvasEngine;
diff --git a/src/state-machine/StateMachine.ts b/src/state-machine/StateMachine.ts
index eceac08..3ce52e2 100644
--- a/src/state-machine/StateMachine.ts
+++ b/src/state-machine/StateMachine.ts
@@ -1,7 +1,7 @@
-import { AbstractState } from "./AbstractState";
-import * as _ from "lodash";
-import { AbstractStateMachineInput } from "./AbstractStateMachineInput";
-import { BaseEvent, BaseListener, BaseObject } from "@projectstorm/react-core";
+import { AbstractState } from './AbstractState';
+import * as _ from 'lodash';
+import { AbstractStateMachineInput } from './AbstractStateMachineInput';
+import { BaseEvent, BaseListener, BaseObject } from '@projectstorm/react-core';
 
 export interface StateMachineListener extends BaseListener<StateMachine> {
 	stateChanged(event: BaseEvent<StateMachine> & { state: AbstractState });
@@ -21,7 +21,7 @@ export class StateMachine extends BaseObject<StateMachineListener> {
 
 	addState(state: AbstractState) {
 		if (this.states[state.getName()]) {
-			throw "A state with name: " + state.getName() + " is already registered";
+			throw 'A state with name: ' + state.getName() + ' is already registered';
 		}
 		this.states[state.getName()] = state;
 	}
@@ -60,7 +60,7 @@ export class StateMachine extends BaseObject<StateMachineListener> {
 	}
 
 	fireStateChanged() {
-		this.iterateListeners("state changed", (listener, event) => {
+		this.iterateListeners('state changed', (listener, event) => {
 			if (listener.stateChanged) {
 				listener.stateChanged({ ...event, state: this.state });
 			}
diff --git a/src/state-machine/input/KeyInput.ts b/src/state-machine/input/KeyInput.ts
index f1f2a99..c9b5c46 100644
--- a/src/state-machine/input/KeyInput.ts
+++ b/src/state-machine/input/KeyInput.ts
@@ -1,19 +1,19 @@
-import { AbstractStateMachineInput } from "../AbstractStateMachineInput";
-import { EventBus } from "../../event-bus/EventBus";
-import { InlineAction } from "../../event-bus/InlineAction";
-import { KeyDownEvent, KeyUpEvent } from "../../event-bus/events/key";
-import { StateMachine } from "../StateMachine";
+import { AbstractStateMachineInput } from '../AbstractStateMachineInput';
+import { EventBus } from '../../event-bus/EventBus';
+import { InlineAction } from '../../event-bus/InlineAction';
+import { KeyDownEvent, KeyUpEvent } from '../../event-bus/events/key';
+import { StateMachine } from '../StateMachine';
 
 export enum KeyCode {
-	SHIFT = "Shift",
-	CONTROL = "Control"
+	SHIFT = 'Shift',
+	CONTROL = 'Control'
 }
 
 export class KeyInput extends AbstractStateMachineInput {
 	key: any;
 
 	static identifier(key: string) {
-		return "key-" + key;
+		return 'key-' + key;
 	}
 
 	constructor(key: string) {
diff --git a/src/state-machine/input/ModelAnchorInput.ts b/src/state-machine/input/ModelAnchorInput.ts
index 3bad7f0..7f88b95 100644
--- a/src/state-machine/input/ModelAnchorInput.ts
+++ b/src/state-machine/input/ModelAnchorInput.ts
@@ -1,5 +1,5 @@
-import { SelectionElementModel } from "../../primitives/selection/SelectionElementModel";
-import { AbstractStateMachineInput } from "../AbstractStateMachineInput";
+import { SelectionElementModel } from '../../primitives/selection/SelectionElementModel';
+import { AbstractStateMachineInput } from '../AbstractStateMachineInput';
 
 export enum ModelAnchorInputPosition {
 	TOP,
@@ -16,7 +16,7 @@ export class ModelAnchorInput extends AbstractStateMachineInput {
 	selectionModel: SelectionElementModel;
 	anchor: ModelAnchorInputPosition;
 
-	static NAME = "model-anchor";
+	static NAME = 'model-anchor';
 
 	constructor(model: SelectionElementModel, anchor: ModelAnchorInputPosition) {
 		super(ModelAnchorInput.NAME);
diff --git a/src/state-machine/input/ModelElementInput.ts b/src/state-machine/input/ModelElementInput.ts
index 327b99a..8ec20ec 100644
--- a/src/state-machine/input/ModelElementInput.ts
+++ b/src/state-machine/input/ModelElementInput.ts
@@ -1,14 +1,14 @@
-import { CanvasElementModel } from "../../models-canvas/CanvasElementModel";
-import { AbstractStateMachineInput } from "../AbstractStateMachineInput";
-import { EventBus } from "../../event-bus/EventBus";
-import { InlineAction } from "../../event-bus/InlineAction";
-import { StateMachine } from "../StateMachine";
-import { PressElementEvent, UnPressElementEvent } from "../../event-bus/events/elements";
+import { CanvasElementModel } from '../../models-canvas/CanvasElementModel';
+import { AbstractStateMachineInput } from '../AbstractStateMachineInput';
+import { EventBus } from '../../event-bus/EventBus';
+import { InlineAction } from '../../event-bus/InlineAction';
+import { StateMachine } from '../StateMachine';
+import { PressElementEvent, UnPressElementEvent } from '../../event-bus/events/elements';
 
 export class ModelElementInput extends AbstractStateMachineInput {
 	element: CanvasElementModel;
 
-	static NAME = "model-element";
+	static NAME = 'model-element';
 
 	constructor(element: CanvasElementModel) {
 		super(ModelElementInput.NAME);
diff --git a/src/state-machine/input/ModelRotateInput.ts b/src/state-machine/input/ModelRotateInput.ts
index bca7417..a8cab9a 100644
--- a/src/state-machine/input/ModelRotateInput.ts
+++ b/src/state-machine/input/ModelRotateInput.ts
@@ -1,10 +1,10 @@
-import { SelectionElementModel } from "../../primitives/selection/SelectionElementModel";
-import { AbstractStateMachineInput } from "../AbstractStateMachineInput";
+import { SelectionElementModel } from '../../primitives/selection/SelectionElementModel';
+import { AbstractStateMachineInput } from '../AbstractStateMachineInput';
 
 export class ModelRotateInput extends AbstractStateMachineInput {
 	selectionModel: SelectionElementModel;
 
-	static NAME = "model-rotate";
+	static NAME = 'model-rotate';
 
 	constructor(model: SelectionElementModel) {
 		super(ModelRotateInput.NAME);
diff --git a/src/state-machine/input/MouseDownInput.ts b/src/state-machine/input/MouseDownInput.ts
index 6316074..28109e8 100644
--- a/src/state-machine/input/MouseDownInput.ts
+++ b/src/state-machine/input/MouseDownInput.ts
@@ -1,15 +1,15 @@
-import { AbstractStateMachineInput } from "../AbstractStateMachineInput";
-import { EventBus } from "../../event-bus/EventBus";
-import { InlineAction } from "../../event-bus/InlineAction";
-import { StateMachine } from "../StateMachine";
-import { MouseDownEvent, MouseUpEvent } from "../../event-bus/events/mouse";
+import { AbstractStateMachineInput } from '../AbstractStateMachineInput';
+import { EventBus } from '../../event-bus/EventBus';
+import { InlineAction } from '../../event-bus/InlineAction';
+import { StateMachine } from '../StateMachine';
+import { MouseDownEvent, MouseUpEvent } from '../../event-bus/events/mouse';
 
 export class MouseDownInput extends AbstractStateMachineInput {
 	mouseX: number;
 	mouseY: number;
 	originalEvent: MouseDownEvent;
 
-	static NAME = "mouse-down";
+	static NAME = 'mouse-down';
 
 	constructor(event: MouseDownEvent) {
 		super(MouseDownInput.NAME);
diff --git a/src/state-machine/states/DefaultState.ts b/src/state-machine/states/DefaultState.ts
index fea97e6..431b83f 100644
--- a/src/state-machine/states/DefaultState.ts
+++ b/src/state-machine/states/DefaultState.ts
@@ -1,10 +1,10 @@
-import { AbstractState } from "../AbstractState";
-import { CanvasEngine } from "../../CanvasEngine";
-import { SelectElementAction } from "../../event-bus/actions/SelectElementAction";
+import { AbstractState } from '../AbstractState';
+import { CanvasEngine } from '../../CanvasEngine';
+import { SelectElementAction } from '../../event-bus/actions/SelectElementAction';
 
 export class DefaultState extends AbstractState {
 	constructor(engine: CanvasEngine) {
-		super("default-state", engine);
+		super('default-state', engine);
 		this.registerAction(new SelectElementAction(engine, false));
 	}
 }
diff --git a/src/state-machine/states/ResizeDimensionsState.ts b/src/state-machine/states/ResizeDimensionsState.ts
index 54b4609..7d8513a 100644
--- a/src/state-machine/states/ResizeDimensionsState.ts
+++ b/src/state-machine/states/ResizeDimensionsState.ts
@@ -1,11 +1,11 @@
-import { StateMachine } from "../StateMachine";
-import * as _ from "lodash";
-import { CanvasEngine } from "../../CanvasEngine";
-import { Rectangle } from "../../geometry/Rectangle";
-import { Point } from "../../geometry/Point";
-import { AbstractDisplacementState } from "../AbstractDisplacementState";
-import { Matrix } from "mathjs";
-import { ModelAnchorInput, ModelAnchorInputPosition } from "../input/ModelAnchorInput";
+import { StateMachine } from '../StateMachine';
+import * as _ from 'lodash';
+import { CanvasEngine } from '../../CanvasEngine';
+import { Rectangle } from '../../geometry/Rectangle';
+import { Point } from '../../geometry/Point';
+import { AbstractDisplacementState } from '../AbstractDisplacementState';
+import { Matrix } from 'mathjs';
+import { ModelAnchorInput, ModelAnchorInputPosition } from '../input/ModelAnchorInput';
 
 export class ResizeDimensionsState extends AbstractDisplacementState {
 	anchorInput: ModelAnchorInput;
@@ -13,7 +13,7 @@ export class ResizeDimensionsState extends AbstractDisplacementState {
 	initialDimension: Rectangle;
 
 	constructor(engine: CanvasEngine) {
-		super("resize-dimension", engine);
+		super('resize-dimension', engine);
 		this.requireInput(ModelAnchorInput.NAME);
 		this.engine = engine;
 	}
diff --git a/src/state-machine/states/ResizeOriginDimensionState.ts b/src/state-machine/states/ResizeOriginDimensionState.ts
index 628246e..bfa0cce 100644
--- a/src/state-machine/states/ResizeOriginDimensionState.ts
+++ b/src/state-machine/states/ResizeOriginDimensionState.ts
@@ -1,12 +1,12 @@
-import { StateMachine } from "../StateMachine";
-import * as _ from "lodash";
-import { CanvasEngine } from "../../CanvasEngine";
-import { Rectangle } from "../../geometry/Rectangle";
-import { Point } from "../../geometry/Point";
-import { AbstractDisplacementState } from "../AbstractDisplacementState";
-import { Matrix } from "mathjs";
-import { ModelAnchorInput, ModelAnchorInputPosition } from "../input/ModelAnchorInput";
-import { KeyCode, KeyInput } from "../input/KeyInput";
+import { StateMachine } from '../StateMachine';
+import * as _ from 'lodash';
+import { CanvasEngine } from '../../CanvasEngine';
+import { Rectangle } from '../../geometry/Rectangle';
+import { Point } from '../../geometry/Point';
+import { AbstractDisplacementState } from '../AbstractDisplacementState';
+import { Matrix } from 'mathjs';
+import { ModelAnchorInput, ModelAnchorInputPosition } from '../input/ModelAnchorInput';
+import { KeyCode, KeyInput } from '../input/KeyInput';
 
 export class ResizeOriginDimensionsState extends AbstractDisplacementState {
 	anchorInput: ModelAnchorInput;
@@ -14,7 +14,7 @@ export class ResizeOriginDimensionsState extends AbstractDisplacementState {
 	initialDimension: Rectangle;
 
 	constructor(engine: CanvasEngine) {
-		super("resize-origin-dimension", engine);
+		super('resize-origin-dimension', engine);
 		this.requireInput(ModelAnchorInput.NAME);
 		this.requireInput(KeyInput.identifier(KeyCode.SHIFT));
 		this.engine = engine;
diff --git a/src/state-machine/states/RotateElementsState.ts b/src/state-machine/states/RotateElementsState.ts
index 61007a4..6a94183 100644
--- a/src/state-machine/states/RotateElementsState.ts
+++ b/src/state-machine/states/RotateElementsState.ts
@@ -1,13 +1,13 @@
-import { AbstractState } from "../AbstractState";
-import { CanvasEngine } from "../../CanvasEngine";
-import { InlineAction } from "../../event-bus/InlineAction";
-import { StateMachine } from "../StateMachine";
-import { MouseDownInput } from "../input/MouseDownInput";
-import { MouseMoveEvent } from "../../event-bus/events/mouse";
-import { ModelRotateInput } from "../input/ModelRotateInput";
-import { Point } from "../../geometry/Point";
-import * as _ from "lodash";
-import { Rectangle } from "../../geometry/Rectangle";
+import { AbstractState } from '../AbstractState';
+import { CanvasEngine } from '../../CanvasEngine';
+import { InlineAction } from '../../event-bus/InlineAction';
+import { StateMachine } from '../StateMachine';
+import { MouseDownInput } from '../input/MouseDownInput';
+import { MouseMoveEvent } from '../../event-bus/events/mouse';
+import { ModelRotateInput } from '../input/ModelRotateInput';
+import { Point } from '../../geometry/Point';
+import * as _ from 'lodash';
+import { Rectangle } from '../../geometry/Rectangle';
 
 export class RotateElementsState extends AbstractState {
 	initialMouse: MouseDownInput;
@@ -16,7 +16,7 @@ export class RotateElementsState extends AbstractState {
 	initialDimensions: Rectangle[];
 
 	constructor(engine: CanvasEngine) {
-		super("rotate-elements", engine);
+		super('rotate-elements', engine);
 		this.requireInput(ModelRotateInput.NAME);
 		this.requireInput(MouseDownInput.NAME);
 		this.registerAction(
diff --git a/src/state-machine/states/SelectElementsState.ts b/src/state-machine/states/SelectElementsState.ts
index e6052f2..638e4c0 100644
--- a/src/state-machine/states/SelectElementsState.ts
+++ b/src/state-machine/states/SelectElementsState.ts
@@ -1,11 +1,11 @@
-import { AbstractState } from "../AbstractState";
-import { CanvasEngine } from "../../CanvasEngine";
-import { KeyCode, KeyInput } from "../input/KeyInput";
-import { SelectElementAction } from "../../event-bus/actions/SelectElementAction";
+import { AbstractState } from '../AbstractState';
+import { CanvasEngine } from '../../CanvasEngine';
+import { KeyCode, KeyInput } from '../input/KeyInput';
+import { SelectElementAction } from '../../event-bus/actions/SelectElementAction';
 
 export class SelectElementsState extends AbstractState {
 	constructor(engine: CanvasEngine) {
-		super("select-elements", engine);
+		super('select-elements', engine);
 		this.requireInput(KeyInput.identifier(KeyCode.SHIFT));
 		this.registerAction(new SelectElementAction(engine, true));
 	}
diff --git a/src/state-machine/states/TranslateCanvasState.ts b/src/state-machine/states/TranslateCanvasState.ts
index 38481c6..1decd2f 100644
--- a/src/state-machine/states/TranslateCanvasState.ts
+++ b/src/state-machine/states/TranslateCanvasState.ts
@@ -1,14 +1,14 @@
-import { StateMachine } from "../StateMachine";
-import { CanvasEngine } from "../../CanvasEngine";
-import { AbstractDisplacementState } from "../AbstractDisplacementState";
-import { SelectCanvasAction } from "../../event-bus/actions/SelectCanvasAction";
+import { StateMachine } from '../StateMachine';
+import { CanvasEngine } from '../../CanvasEngine';
+import { AbstractDisplacementState } from '../AbstractDisplacementState';
+import { SelectCanvasAction } from '../../event-bus/actions/SelectCanvasAction';
 
 export class TranslateCanvasState extends AbstractDisplacementState {
 	initialOffsetX: number;
 	initialOffsetY: number;
 
 	constructor(engine: CanvasEngine) {
-		super("translate-canvas", engine);
+		super('translate-canvas', engine);
 		this.registerAction(new SelectCanvasAction(engine));
 	}
 
diff --git a/src/state-machine/states/TranslateElementState.ts b/src/state-machine/states/TranslateElementState.ts
index 60ef47b..8db4da0 100644
--- a/src/state-machine/states/TranslateElementState.ts
+++ b/src/state-machine/states/TranslateElementState.ts
@@ -1,17 +1,17 @@
-import * as _ from "lodash";
-import { AbstractDisplacementState } from "../AbstractDisplacementState";
-import { StateMachine } from "../StateMachine";
-import { CanvasEngine } from "../../CanvasEngine";
-import { Rectangle } from "../../geometry/Rectangle";
-import { ModelElementInput } from "../input/ModelElementInput";
-import { CanvasElementModel } from "../../models-canvas/CanvasElementModel";
+import * as _ from 'lodash';
+import { AbstractDisplacementState } from '../AbstractDisplacementState';
+import { StateMachine } from '../StateMachine';
+import { CanvasEngine } from '../../CanvasEngine';
+import { Rectangle } from '../../geometry/Rectangle';
+import { ModelElementInput } from '../input/ModelElementInput';
+import { CanvasElementModel } from '../../models-canvas/CanvasElementModel';
 
 export class TranslateElementState extends AbstractDisplacementState {
 	initialPosition: { [id: string]: Rectangle };
 	initialEntities: { [id: string]: CanvasElementModel };
 
 	constructor(engine: CanvasEngine) {
-		super("translate-element", engine);
+		super('translate-element', engine);
 		this.requireInput(ModelElementInput.NAME);
 	}
 
@@ -27,7 +27,6 @@ export class TranslateElementState extends AbstractDisplacementState {
 	}
 
 	processDisplacement(displacementX, displacementY) {
-
 		const zoom = this.engine.getModel().getZoomLevel();
 
 		// work out the distance difference
diff --git a/src/tracking/DimensionTracker.ts b/src/tracking/DimensionTracker.ts
index d5a2e32..d58bd06 100644
--- a/src/tracking/DimensionTracker.ts
+++ b/src/tracking/DimensionTracker.ts
@@ -1,6 +1,6 @@
-import { CanvasEngine } from "../CanvasEngine";
-import { Rectangle } from "../geometry/Rectangle";
-import { BaseEvent, BaseListener, BaseObject } from "@projectstorm/react-core";
+import { CanvasEngine } from '../CanvasEngine';
+import { Rectangle } from '../geometry/Rectangle';
+import { BaseEvent, BaseListener, BaseObject } from '@projectstorm/react-core';
 
 export interface DimensionTrackerListener extends BaseListener<DimensionTracker> {
 	updated(event: BaseEvent);
@@ -29,7 +29,7 @@ export class DimensionTracker extends BaseObject<DimensionTrackerListener> {
 		this.recompute(canvasEngine, ClientRect);
 
 		// fire the update event
-		this.iterateListeners("dimensions updated", (listener, event) => {
+		this.iterateListeners('dimensions updated', (listener, event) => {
 			if (listener.updated) {
 				listener.updated(event);
 			}
diff --git a/src/tracking/DimensionTrackerWidget.tsx b/src/tracking/DimensionTrackerWidget.tsx
index be079da..23006da 100644
--- a/src/tracking/DimensionTrackerWidget.tsx
+++ b/src/tracking/DimensionTrackerWidget.tsx
@@ -1,7 +1,7 @@
-import * as React from "react";
-import { BaseWidget, BaseWidgetProps } from "@projectstorm/react-core";
-import { DimensionTracker } from "./DimensionTracker";
-import { CanvasEngine } from "../CanvasEngine";
+import * as React from 'react';
+import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
+import { DimensionTracker } from './DimensionTracker';
+import { CanvasEngine } from '../CanvasEngine';
 
 export interface DimensionTrackerWidgetProps extends BaseWidgetProps {
 	dimensionTracker: DimensionTracker;
@@ -15,7 +15,7 @@ export class DimensionTrackerWidget extends BaseWidget<DimensionTrackerWidgetPro
 	observer: any;
 
 	constructor(props: DimensionTrackerWidgetProps) {
-		super("src-dimension-tracker", props);
+		super('src-dimension-tracker', props);
 		this.state = {};
 	}
 
@@ -30,8 +30,8 @@ export class DimensionTrackerWidget extends BaseWidget<DimensionTrackerWidgetPro
 
 	componentDidMount() {
 		//if resize observer is present, rather use that
-		if (window["ResizeObserver"]) {
-			this.observer = new window["ResizeObserver"](entries => {
+		if (window['ResizeObserver']) {
+			this.observer = new window['ResizeObserver'](entries => {
 				this.updateDimensions();
 			});
 			this.observer.observe(this.props.reference.current);
diff --git a/src/tracking/VirtualDimensionTracker.ts b/src/tracking/VirtualDimensionTracker.ts
index 52fce69..aabac66 100644
--- a/src/tracking/VirtualDimensionTracker.ts
+++ b/src/tracking/VirtualDimensionTracker.ts
@@ -1,6 +1,6 @@
-import { DimensionTracker } from "./DimensionTracker";
-import { CanvasEngine } from "../CanvasEngine";
-import { Rectangle } from "../geometry/Rectangle";
+import { DimensionTracker } from './DimensionTracker';
+import { CanvasEngine } from '../CanvasEngine';
+import { Rectangle } from '../geometry/Rectangle';
 
 export class VirtualDimensionTracker extends DimensionTracker {
 	virtualDimensions: Rectangle;
diff --git a/src/widgets/AnchorWidget.tsx b/src/widgets/AnchorWidget.tsx
index 87cf2f7..d144874 100644
--- a/src/widgets/AnchorWidget.tsx
+++ b/src/widgets/AnchorWidget.tsx
@@ -1,37 +1,34 @@
-import { BaseWidget, BaseWidgetProps, MouseWidget } from "@projectstorm/react-core";
-import * as React from "react";
-import { CanvasEngine } from "../CanvasEngine";
-import { SelectionElementModel } from "../primitives/selection/SelectionElementModel";
-import { ModelAnchorInput, ModelAnchorInputPosition } from "../state-machine/input/ModelAnchorInput";
+import { BaseWidget, BaseWidgetProps, MouseWidget } from '@projectstorm/react-core';
+import * as React from 'react';
 
 export interface AnchorWidgetProps extends BaseWidgetProps {
-	engine: CanvasEngine;
-	selectionModel: SelectionElementModel;
-	pos: ModelAnchorInputPosition;
+	selected: boolean;
+	events: {
+		mouseUp: () => any;
+		mouseDown: () => any;
+	};
 }
 
 export class AnchorWidget extends BaseWidget<AnchorWidgetProps> {
 	constructor(props) {
-		super("src-anchor", props);
-	}
-
-	componentWillUnmount() {
-		this.props.engine.getStateMachine().removeInput(ModelAnchorInput.NAME);
+		super('src-anchor', props);
 	}
 
 	render() {
 		return (
 			<MouseWidget
-				element={"div"}
+				element={'div'}
 				mouseDownEvent={() => {
-					this.props.engine
-						.getStateMachine()
-						.addInput(new ModelAnchorInput(this.props.selectionModel, this.props.pos));
+					this.props.events.mouseDown();
 				}}
 				mouseUpEvent={() => {
-					this.props.engine.getStateMachine().removeInput(ModelAnchorInput.NAME);
+					this.props.events.mouseUp();
+				}}
+				extraProps={{
+					...this.getProps({
+						'--selected': this.props.selected
+					})
 				}}
-				extraProps={{ ...this.getProps() }}
 			/>
 		);
 	}
diff --git a/src/widgets/CanvasLayerWidget.tsx b/src/widgets/CanvasLayerWidget.tsx
index 2bbadd3..4e034ca 100644
--- a/src/widgets/CanvasLayerWidget.tsx
+++ b/src/widgets/CanvasLayerWidget.tsx
@@ -1,8 +1,8 @@
-import * as React from "react";
-import { CanvasEngine } from "../CanvasEngine";
-import { CanvasLayerModel } from "../models-canvas/CanvasLayerModel";
-import * as _ from "lodash";
-import { BaseWidget, BaseWidgetProps } from "@projectstorm/react-core";
+import * as React from 'react';
+import { CanvasEngine } from '../CanvasEngine';
+import { CanvasLayerModel } from '../models-canvas/CanvasLayerModel';
+import * as _ from 'lodash';
+import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
 
 export interface CanvasLayerWidgetProps extends BaseWidgetProps {
 	engine: CanvasEngine;
@@ -13,7 +13,7 @@ export interface CanvasLayerWidgetState {}
 
 export class CanvasLayerWidget extends BaseWidget<CanvasLayerWidgetProps, CanvasLayerWidgetState> {
 	constructor(props: CanvasLayerWidgetProps) {
-		super("src-canvas-layer", props);
+		super('src-canvas-layer', props);
 		this.state = {};
 	}
 
@@ -23,16 +23,10 @@ export class CanvasLayerWidget extends BaseWidget<CanvasLayerWidgetProps, Canvas
 
 		// do we apply
 		if (this.props.layer.isTransformable()) {
-			props["style"] = {
-				...props["style"],
+			props['style'] = {
+				...props['style'],
 				transform:
-					"translate(" +
-					canvas.getOffsetX() +
-					"px," +
-					canvas.getOffsetY() +
-					"px) scale(" +
-					canvas.getZoomLevel() +
-					")"
+					'translate(' + canvas.getOffsetX() + 'px,' + canvas.getOffsetY() + 'px) scale(' + canvas.getZoomLevel() + ')'
 			};
 		}
 
diff --git a/src/widgets/CanvasWidget.tsx b/src/widgets/CanvasWidget.tsx
index af32f22..3766da1 100644
--- a/src/widgets/CanvasWidget.tsx
+++ b/src/widgets/CanvasWidget.tsx
@@ -1,12 +1,12 @@
-import * as React from "react";
-import { BaseWidget, BaseWidgetProps } from "@projectstorm/react-core";
-import { CanvasEngine } from "../CanvasEngine";
-import * as _ from "lodash";
-import { DimensionTrackerWidget } from "../tracking/DimensionTrackerWidget";
-import { DimensionTracker } from "../tracking/DimensionTracker";
-import { Rectangle } from "../geometry/Rectangle";
-import { KeyDownEvent, KeyUpEvent } from "../event-bus/events/key";
-import { MouseDownEvent, MouseMoveEvent, MouseUpEvent, MouseWheelEvent } from "../event-bus/events/mouse";
+import * as React from 'react';
+import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
+import { CanvasEngine } from '../CanvasEngine';
+import * as _ from 'lodash';
+import { DimensionTrackerWidget } from '../tracking/DimensionTrackerWidget';
+import { DimensionTracker } from '../tracking/DimensionTracker';
+import { Rectangle } from '../geometry/Rectangle';
+import { KeyDownEvent, KeyUpEvent } from '../event-bus/events/key';
+import { MouseDownEvent, MouseMoveEvent, MouseUpEvent, MouseWheelEvent } from '../event-bus/events/mouse';
 
 export interface CanvasWidgetProps extends BaseWidgetProps {
 	engine: CanvasEngine;
@@ -28,7 +28,7 @@ export class CanvasWidget extends BaseWidget<CanvasWidgetProps, CanvasWidgetStat
 	onMouseWheelHandle: (event: WheelEvent) => any;
 
 	constructor(props: CanvasWidgetProps) {
-		super("src-canvas", props);
+		super('src-canvas', props);
 		this.state = {};
 		this.dimension = new DimensionTracker();
 
@@ -57,9 +57,7 @@ export class CanvasWidget extends BaseWidget<CanvasWidgetProps, CanvasWidgetStat
 		this.onMouseWheelHandle = event => {
 			this.props.engine
 				.getEventBus()
-				.fireEvent(
-					new MouseWheelEvent(this, event.clientX, event.clientY, CanvasWidget.normalizeScrollWheel(event))
-				);
+				.fireEvent(new MouseWheelEvent(this, event.clientX, event.clientY, CanvasWidget.normalizeScrollWheel(event)));
 			event.stopPropagation();
 			event.preventDefault();
 		};
@@ -84,15 +82,15 @@ export class CanvasWidget extends BaseWidget<CanvasWidgetProps, CanvasWidgetStat
 	}
 
 	componentDidMount() {
-		document.addEventListener("mousemove", this.onMouseMoveHandle);
-		document.addEventListener("keydown", this.onKeyDownHandle);
-		document.addEventListener("keyup", this.onKeyUpHandle);
+		document.addEventListener('mousemove', this.onMouseMoveHandle);
+		document.addEventListener('keydown', this.onKeyDownHandle);
+		document.addEventListener('keyup', this.onKeyUpHandle);
 	}
 
 	componentWillUnmount() {
-		document.removeEventListener("mousemove", this.onMouseMoveHandle);
-		document.removeEventListener("keyup", this.onKeyUpHandle);
-		document.removeEventListener("keydown", this.onKeyDownHandle);
+		document.removeEventListener('mousemove', this.onMouseMoveHandle);
+		document.removeEventListener('keyup', this.onKeyUpHandle);
+		document.removeEventListener('keydown', this.onKeyDownHandle);
 		this.props.engine.setCanvasWidget(null);
 	}
 
@@ -140,8 +138,7 @@ export class CanvasWidget extends BaseWidget<CanvasWidgetProps, CanvasWidgetStat
 					ref={this.ref}
 					onWheel={this.onMouseWheelHandle}
 					onMouseDown={this.onMouseDownHandle}
-					onMouseUp={this.onMouseUpHandle}
-				>
+					onMouseUp={this.onMouseUpHandle}>
 					{_.map(this.props.engine.getModel().layers.getArray(), layer => {
 						return React.cloneElement(
 							this.props.engine.getFactoryForElement(layer).generateWidget(this.props.engine, layer),
diff --git a/src/widgets/SmartAnchorWidget.tsx b/src/widgets/SmartAnchorWidget.tsx
new file mode 100644
index 0000000..efe8cd6
--- /dev/null
+++ b/src/widgets/SmartAnchorWidget.tsx
@@ -0,0 +1,55 @@
+import { BaseWidget, BaseWidgetProps, MouseWidget } from '@projectstorm/react-core';
+import * as React from 'react';
+import { CanvasEngine } from '../CanvasEngine';
+import { SelectionElementModel } from '../primitives/selection/SelectionElementModel';
+import { ModelAnchorInput, ModelAnchorInputPosition } from '../state-machine/input/ModelAnchorInput';
+import { AnchorWidget } from './AnchorWidget';
+import { bool } from 'prop-types';
+
+export interface SmartAnchorWidgetProps extends BaseWidgetProps {
+	engine: CanvasEngine;
+	selectionModel: SelectionElementModel;
+	pos: ModelAnchorInputPosition;
+}
+
+export interface SmartAnchorWidgetState {
+	selected: boolean;
+}
+
+export class SmartAnchorWidget extends BaseWidget<SmartAnchorWidgetProps, SmartAnchorWidgetState> {
+	constructor(props) {
+		super('src-anchor', props);
+		this.state = {
+			selected: false
+		};
+	}
+
+	componentWillUnmount() {
+		this.props.engine.getStateMachine().removeInput(ModelAnchorInput.NAME);
+	}
+
+	render() {
+		return (
+			<AnchorWidget
+				{...this.props}
+				selected={this.state.selected}
+				events={{
+					mouseUp: () => {
+						this.props.engine.getStateMachine().removeInput(ModelAnchorInput.NAME);
+						this.setState({
+							selected: false
+						});
+					},
+					mouseDown: () => {
+						this.props.engine
+							.getStateMachine()
+							.addInput(new ModelAnchorInput(this.props.selectionModel, this.props.pos));
+						this.setState({
+							selected: true
+						});
+					}
+				}}
+			/>
+		);
+	}
+}
diff --git a/yarn.lock b/yarn.lock
index cd3bd32..b575686 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,18 +2,32 @@
 # yarn lockfile v1
 
 
-"@babel/code-frame@7.0.0-beta.46":
-  version "7.0.0-beta.46"
-  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.46.tgz#e0d002100805daab1461c0fcb32a07e304f3a4f4"
-  dependencies:
-    "@babel/highlight" "7.0.0-beta.46"
-
-"@babel/code-frame@^7.0.0":
+"@babel/code-frame@7.0.0", "@babel/code-frame@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
   dependencies:
     "@babel/highlight" "^7.0.0"
 
+"@babel/core@7.2.2":
+  version "7.2.2"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687"
+  integrity sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "@babel/generator" "^7.2.2"
+    "@babel/helpers" "^7.2.0"
+    "@babel/parser" "^7.2.2"
+    "@babel/template" "^7.2.2"
+    "@babel/traverse" "^7.2.2"
+    "@babel/types" "^7.2.2"
+    convert-source-map "^1.1.0"
+    debug "^4.1.0"
+    json5 "^2.1.0"
+    lodash "^4.17.10"
+    resolve "^1.3.2"
+    semver "^5.4.1"
+    source-map "^0.5.0"
+
 "@babel/core@^7":
   version "7.0.1"
   resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.1.tgz#406658caed0e9686fa4feb5c2f3cefb6161c0f41"
@@ -33,6 +47,26 @@
     semver "^5.4.1"
     source-map "^0.5.0"
 
+"@babel/core@^7.1.6":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.0.tgz#248fd6874b7d755010bfe61f557461d4f446d9e9"
+  integrity sha512-Dzl7U0/T69DFOTwqz/FJdnOSWS57NpjNfCwMKHABr589Lg8uX1RrlBIJ7L5Dubt/xkLsx0xH5EBFzlBVes1ayA==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "@babel/generator" "^7.4.0"
+    "@babel/helpers" "^7.4.0"
+    "@babel/parser" "^7.4.0"
+    "@babel/template" "^7.4.0"
+    "@babel/traverse" "^7.4.0"
+    "@babel/types" "^7.4.0"
+    convert-source-map "^1.1.0"
+    debug "^4.1.0"
+    json5 "^2.1.0"
+    lodash "^4.17.11"
+    resolve "^1.3.2"
+    semver "^5.4.1"
+    source-map "^0.5.0"
+
 "@babel/generator@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0.tgz#1efd58bffa951dc846449e58ce3a1d7f02d393aa"
@@ -43,17 +77,29 @@
     source-map "^0.5.0"
     trim-right "^1.0.1"
 
+"@babel/generator@^7.2.2", "@babel/generator@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196"
+  integrity sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ==
+  dependencies:
+    "@babel/types" "^7.4.0"
+    jsesc "^2.5.1"
+    lodash "^4.17.11"
+    source-map "^0.5.0"
+    trim-right "^1.0.1"
+
 "@babel/helper-annotate-as-pure@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
   dependencies:
     "@babel/types" "^7.0.0"
 
-"@babel/helper-builder-binary-assignment-operator-visitor@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0.tgz#ba26336beb2abb547d58b6eba5b84d77975a39eb"
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
+  integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==
   dependencies:
-    "@babel/helper-explode-assignable-expression" "^7.0.0"
+    "@babel/helper-explode-assignable-expression" "^7.1.0"
     "@babel/types" "^7.0.0"
 
 "@babel/helper-builder-react-jsx@^7.0.0":
@@ -63,27 +109,42 @@
     "@babel/types" "^7.0.0"
     esutils "^2.0.0"
 
-"@babel/helper-call-delegate@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0.tgz#e036956bb33d76e59c07a04a1fff144e9f62ab78"
+"@babel/helper-call-delegate@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.0.tgz#f308eabe0d44f451217853aedf4dea5f6fe3294f"
+  integrity sha512-SdqDfbVdNQCBp3WhK2mNdDvHd3BD6qbmIc43CAyjnsfCmgHMeqgDcM3BzY2lchi7HBJGJ2CVdynLWbezaE4mmQ==
   dependencies:
-    "@babel/helper-hoist-variables" "^7.0.0"
-    "@babel/traverse" "^7.0.0"
-    "@babel/types" "^7.0.0"
+    "@babel/helper-hoist-variables" "^7.4.0"
+    "@babel/traverse" "^7.4.0"
+    "@babel/types" "^7.4.0"
 
-"@babel/helper-define-map@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.0.0.tgz#a5684dd2adf30f0137cf9b0bde436f8c2db17225"
+"@babel/helper-create-class-features-plugin@^7.3.0", "@babel/helper-create-class-features-plugin@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.0.tgz#30fd090e059d021995c1762a5b76798fa0b51d82"
+  integrity sha512-2K8NohdOT7P6Vyp23QH4w2IleP8yG3UJsbRKwA4YP6H8fErcLkFuuEEqbF2/BYBKSNci/FWJiqm6R3VhM/QHgw==
   dependencies:
-    "@babel/helper-function-name" "^7.0.0"
-    "@babel/types" "^7.0.0"
-    lodash "^4.17.10"
+    "@babel/helper-function-name" "^7.1.0"
+    "@babel/helper-member-expression-to-functions" "^7.0.0"
+    "@babel/helper-optimise-call-expression" "^7.0.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/helper-replace-supers" "^7.4.0"
+    "@babel/helper-split-export-declaration" "^7.4.0"
 
-"@babel/helper-explode-assignable-expression@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0.tgz#fdfa4c88603ae3e954d0fc3244d5ca82fb468497"
+"@babel/helper-define-map@^7.1.0", "@babel/helper-define-map@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.0.tgz#cbfd8c1b2f12708e262c26f600cd16ed6a3bc6c9"
+  integrity sha512-wAhQ9HdnLIywERVcSvX40CEJwKdAa1ID4neI9NXQPDOHwwA+57DqwLiPEVy2AIyWzAk0CQ8qx4awO0VUURwLtA==
   dependencies:
-    "@babel/traverse" "^7.0.0"
+    "@babel/helper-function-name" "^7.1.0"
+    "@babel/types" "^7.4.0"
+    lodash "^4.17.11"
+
+"@babel/helper-explode-assignable-expression@^7.1.0":
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6"
+  integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==
+  dependencies:
+    "@babel/traverse" "^7.1.0"
     "@babel/types" "^7.0.0"
 
 "@babel/helper-function-name@^7.0.0":
@@ -94,17 +155,27 @@
     "@babel/template" "^7.0.0"
     "@babel/types" "^7.0.0"
 
+"@babel/helper-function-name@^7.1.0":
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53"
+  integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
+  dependencies:
+    "@babel/helper-get-function-arity" "^7.0.0"
+    "@babel/template" "^7.1.0"
+    "@babel/types" "^7.0.0"
+
 "@babel/helper-get-function-arity@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
   dependencies:
     "@babel/types" "^7.0.0"
 
-"@babel/helper-hoist-variables@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88"
+"@babel/helper-hoist-variables@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.0.tgz#25b621399ae229869329730a62015bbeb0a6fbd6"
+  integrity sha512-/NErCuoe/et17IlAQFKWM24qtyYYie7sFIrW/tIQXpck6vAu2hhtYYsKLBWQV+BQZMbcIYPU/QMYuTufrY4aQw==
   dependencies:
-    "@babel/types" "^7.0.0"
+    "@babel/types" "^7.4.0"
 
 "@babel/helper-member-expression-to-functions@^7.0.0":
   version "7.0.0"
@@ -112,28 +183,22 @@
   dependencies:
     "@babel/types" "^7.0.0"
 
-"@babel/helper-module-imports@7.0.0-beta.51":
-  version "7.0.0-beta.51"
-  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.51.tgz#ce00428045fbb7d5ebc0ea7bf835789f15366ab2"
-  dependencies:
-    "@babel/types" "7.0.0-beta.51"
-    lodash "^4.17.5"
-
 "@babel/helper-module-imports@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
   dependencies:
     "@babel/types" "^7.0.0"
 
-"@babel/helper-module-transforms@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0.tgz#b01ee7d543e81e8c3fc404b19c9f26acb6e4cf4c"
+"@babel/helper-module-transforms@^7.1.0":
+  version "7.2.2"
+  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz#ab2f8e8d231409f8370c883d20c335190284b963"
+  integrity sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==
   dependencies:
     "@babel/helper-module-imports" "^7.0.0"
-    "@babel/helper-simple-access" "^7.0.0"
+    "@babel/helper-simple-access" "^7.1.0"
     "@babel/helper-split-export-declaration" "^7.0.0"
-    "@babel/template" "^7.0.0"
-    "@babel/types" "^7.0.0"
+    "@babel/template" "^7.2.2"
+    "@babel/types" "^7.2.2"
     lodash "^4.17.10"
 
 "@babel/helper-optimise-call-expression@^7.0.0":
@@ -152,30 +217,33 @@
   dependencies:
     lodash "^4.17.10"
 
-"@babel/helper-remap-async-to-generator@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0.tgz#6512273c2feb91587822335cf913fdf680c26901"
+"@babel/helper-remap-async-to-generator@^7.1.0":
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f"
+  integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==
   dependencies:
     "@babel/helper-annotate-as-pure" "^7.0.0"
-    "@babel/helper-wrap-function" "^7.0.0"
-    "@babel/template" "^7.0.0"
-    "@babel/traverse" "^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@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0.tgz#b6f21237280e0be54f591f63a464b66627ced707"
+"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz#4f56adb6aedcd449d2da9399c2dcf0545463b64c"
+  integrity sha512-PVwCVnWWAgnal+kJ+ZSAphzyl58XrFeSKSAJRiqg5QToTsjL+Xu1f9+RJ+d+Q0aPhPfBGaYfkox66k86thxNSg==
   dependencies:
     "@babel/helper-member-expression-to-functions" "^7.0.0"
     "@babel/helper-optimise-call-expression" "^7.0.0"
-    "@babel/traverse" "^7.0.0"
-    "@babel/types" "^7.0.0"
+    "@babel/traverse" "^7.4.0"
+    "@babel/types" "^7.4.0"
 
-"@babel/helper-simple-access@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.0.0.tgz#ff36a27983ae4c27122da2f7f294dced80ecbd08"
+"@babel/helper-simple-access@^7.1.0":
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
+  integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==
   dependencies:
-    "@babel/template" "^7.0.0"
+    "@babel/template" "^7.1.0"
     "@babel/types" "^7.0.0"
 
 "@babel/helper-split-export-declaration@^7.0.0":
@@ -184,14 +252,22 @@
   dependencies:
     "@babel/types" "^7.0.0"
 
-"@babel/helper-wrap-function@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0.tgz#1c8e42a2cfb0808e3140189dfe9490782a6fa740"
+"@babel/helper-split-export-declaration@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55"
+  integrity sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw==
   dependencies:
-    "@babel/helper-function-name" "^7.0.0"
-    "@babel/template" "^7.0.0"
-    "@babel/traverse" "^7.0.0"
-    "@babel/types" "^7.0.0"
+    "@babel/types" "^7.4.0"
+
+"@babel/helper-wrap-function@^7.1.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa"
+  integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==
+  dependencies:
+    "@babel/helper-function-name" "^7.1.0"
+    "@babel/template" "^7.1.0"
+    "@babel/traverse" "^7.1.0"
+    "@babel/types" "^7.2.0"
 
 "@babel/helpers@^7.0.0":
   version "7.0.0"
@@ -201,13 +277,14 @@
     "@babel/traverse" "^7.0.0"
     "@babel/types" "^7.0.0"
 
-"@babel/highlight@7.0.0-beta.46":
-  version "7.0.0-beta.46"
-  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.46.tgz#c553c51e65f572bdedd6eff66fc0bb563016645e"
+"@babel/helpers@^7.2.0", "@babel/helpers@^7.4.0":
+  version "7.4.2"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.2.tgz#3bdfa46a552ca77ef5a0f8551be5f0845ae989be"
+  integrity sha512-gQR1eQeroDzFBikhrCccm5Gs2xBjZ57DNjGbqTaHo911IpmSxflOQWMAHPw/TXk8L3isv7s9lYzUkexOeTQUYg==
   dependencies:
-    chalk "^2.0.0"
-    esutils "^2.0.2"
-    js-tokens "^3.0.0"
+    "@babel/template" "^7.4.0"
+    "@babel/traverse" "^7.4.0"
+    "@babel/types" "^7.4.0"
 
 "@babel/highlight@^7.0.0":
   version "7.0.0"
@@ -217,71 +294,108 @@
     esutils "^2.0.2"
     js-tokens "^4.0.0"
 
-"@babel/parser@7.0.0-beta.53":
-  version "7.0.0-beta.53"
-  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0-beta.53.tgz#1f45eb617bf9463d482b2c04d349d9e4edbf4892"
-
 "@babel/parser@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0.tgz#697655183394facffb063437ddf52c0277698775"
 
-"@babel/plugin-proposal-async-generator-functions@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0.tgz#5d1eb6b44fd388b97f964350007ab9da090b1d70"
+"@babel/parser@^7.1.3", "@babel/parser@^7.2.2", "@babel/parser@^7.4.0":
+  version "7.4.2"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.2.tgz#b4521a400cb5a871eab3890787b4bc1326d38d91"
+  integrity sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==
+
+"@babel/plugin-proposal-async-generator-functions@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e"
+  integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-remap-async-to-generator" "^7.0.0"
-    "@babel/plugin-syntax-async-generators" "^7.0.0"
+    "@babel/helper-remap-async-to-generator" "^7.1.0"
+    "@babel/plugin-syntax-async-generators" "^7.2.0"
 
-"@babel/plugin-proposal-class-properties@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.0.0.tgz#a16b5c076ba6c3d87df64d2480a380e979543731"
+"@babel/plugin-proposal-class-properties@7.3.0":
+  version "7.3.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.0.tgz#272636bc0fa19a0bc46e601ec78136a173ea36cd"
+  integrity sha512-wNHxLkEKTQ2ay0tnsam2z7fGZUi+05ziDJflEt3AZTP3oXLKHJp9HqhfroB/vdMvt3sda9fAbq7FsG8QPDrZBg==
   dependencies:
-    "@babel/helper-function-name" "^7.0.0"
-    "@babel/helper-member-expression-to-functions" "^7.0.0"
-    "@babel/helper-optimise-call-expression" "^7.0.0"
+    "@babel/helper-create-class-features-plugin" "^7.3.0"
     "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-replace-supers" "^7.0.0"
-    "@babel/plugin-syntax-class-properties" "^7.0.0"
 
-"@babel/plugin-proposal-json-strings@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz#3b4d7b5cf51e1f2e70f52351d28d44fc2970d01e"
+"@babel/plugin-proposal-class-properties@^7.3.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.0.tgz#d70db61a2f1fd79de927eea91f6411c964e084b8"
+  integrity sha512-t2ECPNOXsIeK1JxJNKmgbzQtoG27KIlVE61vTqX0DKR9E9sZlVVxWUtEW9D5FlZ8b8j7SBNCHY47GgPKCKlpPg==
   dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.4.0"
     "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/plugin-syntax-json-strings" "^7.0.0"
 
-"@babel/plugin-proposal-object-rest-spread@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e"
+"@babel/plugin-proposal-decorators@7.3.0":
+  version "7.3.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.3.0.tgz#637ba075fa780b1f75d08186e8fb4357d03a72a7"
+  integrity sha512-3W/oCUmsO43FmZIqermmq6TKaRSYhmh/vybPfVFwQWdSb8xwki38uAIvknCRzuyHRuYfCYmJzL9or1v0AffPjg==
   dependencies:
+    "@babel/helper-create-class-features-plugin" "^7.3.0"
     "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+    "@babel/plugin-syntax-decorators" "^7.2.0"
 
-"@babel/plugin-proposal-optional-catch-binding@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425"
+"@babel/plugin-proposal-json-strings@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317"
+  integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/plugin-syntax-optional-catch-binding" "^7.0.0"
+    "@babel/plugin-syntax-json-strings" "^7.2.0"
 
-"@babel/plugin-proposal-unicode-property-regex@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz#498b39cd72536cd7c4b26177d030226eba08cd33"
+"@babel/plugin-proposal-object-rest-spread@7.3.2":
+  version "7.3.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz#6d1859882d4d778578e41f82cc5d7bf3d5daf6c1"
+  integrity sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
+
+"@babel/plugin-proposal-object-rest-spread@^7.3.1", "@babel/plugin-proposal-object-rest-spread@^7.3.2", "@babel/plugin-proposal-object-rest-spread@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.0.tgz#e4960575205eadf2a1ab4e0c79f9504d5b82a97f"
+  integrity sha512-uTNi8pPYyUH2eWHyYWWSYJKwKg34hhgl4/dbejEjL+64OhbHjTX7wEVWMQl82tEmdDsGeu77+s8HHLS627h6OQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5"
+  integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.2.0", "@babel/plugin-proposal-unicode-property-regex@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.0.tgz#202d91ee977d760ef83f4f416b280d568be84623"
+  integrity sha512-h/KjEZ3nK9wv1P1FSNb9G079jXrNYR0Ko+7XkOx85+gM24iZbPn0rh4vCftk+5QKY7y1uByFataBTmX7irEF1w==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
     "@babel/helper-regex" "^7.0.0"
-    regexpu-core "^4.2.0"
+    regexpu-core "^4.5.4"
 
-"@babel/plugin-syntax-async-generators@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz#bf0891dcdbf59558359d0c626fdc9490e20bc13c"
+"@babel/plugin-syntax-async-generators@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f"
+  integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-syntax-class-properties@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0.tgz#e051af5d300cbfbcec4a7476e37a803489881634"
+"@babel/plugin-syntax-decorators@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b"
+  integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-dynamic-import@7.2.0", "@babel/plugin-syntax-dynamic-import@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612"
+  integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
@@ -291,9 +405,17 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-syntax-json-strings@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz#0d259a68090e15b383ce3710e01d5b23f3770cbd"
+"@babel/plugin-syntax-flow@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c"
+  integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-json-strings@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470"
+  integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
@@ -303,91 +425,139 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-syntax-object-rest-spread@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz#37d8fbcaf216bd658ea1aebbeb8b75e88ebc549b"
+"@babel/plugin-syntax-object-rest-spread@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e"
+  integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-syntax-optional-catch-binding@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475"
+"@babel/plugin-syntax-optional-catch-binding@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c"
+  integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-arrow-functions@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz#a6c14875848c68a3b4b3163a486535ef25c7e749"
+"@babel/plugin-syntax-typescript@^7.2.0":
+  version "7.3.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991"
+  integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-async-to-generator@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0.tgz#feaf18f4bfeaf2236eea4b2d4879da83006cc8f5"
+"@babel/plugin-transform-arrow-functions@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550"
+  integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-async-to-generator@^7.2.0", "@babel/plugin-transform-async-to-generator@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.0.tgz#234fe3e458dce95865c0d152d256119b237834b0"
+  integrity sha512-EeaFdCeUULM+GPFEsf7pFcNSxM7hYjoj5fiYbyuiXobW4JhFnjAv9OWzNwHyHcKoPNpAfeRDuW6VyaXEDUBa7g==
   dependencies:
     "@babel/helper-module-imports" "^7.0.0"
     "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-remap-async-to-generator" "^7.0.0"
+    "@babel/helper-remap-async-to-generator" "^7.1.0"
 
-"@babel/plugin-transform-block-scoped-functions@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07"
+"@babel/plugin-transform-block-scoped-functions@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190"
+  integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-block-scoping@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc"
+"@babel/plugin-transform-block-scoping@^7.2.0", "@babel/plugin-transform-block-scoping@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.0.tgz#164df3bb41e3deb954c4ca32ffa9fcaa56d30bcb"
+  integrity sha512-AWyt3k+fBXQqt2qb9r97tn3iBwFpiv9xdAiG+Gr2HpAZpuayvbL55yWrsV3MyHvXk/4vmSiedhDRl1YI2Iy5nQ==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
-    lodash "^4.17.10"
+    lodash "^4.17.11"
 
-"@babel/plugin-transform-classes@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0.tgz#9e65ca401747dde99e344baea90ab50dccb4c468"
+"@babel/plugin-transform-classes@7.2.2":
+  version "7.2.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz#6c90542f210ee975aa2aa8c8b5af7fa73a126953"
+  integrity sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==
   dependencies:
     "@babel/helper-annotate-as-pure" "^7.0.0"
-    "@babel/helper-define-map" "^7.0.0"
-    "@babel/helper-function-name" "^7.0.0"
+    "@babel/helper-define-map" "^7.1.0"
+    "@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.0.0"
+    "@babel/helper-replace-supers" "^7.1.0"
     "@babel/helper-split-export-declaration" "^7.0.0"
     globals "^11.1.0"
 
-"@babel/plugin-transform-computed-properties@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31"
+"@babel/plugin-transform-classes@^7.2.0", "@babel/plugin-transform-classes@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.0.tgz#e3428d3c8a3d01f33b10c529b998ba1707043d4d"
+  integrity sha512-XGg1Mhbw4LDmrO9rSTNe+uI79tQPdGs0YASlxgweYRLZqo/EQktjaOV4tchL/UZbM0F+/94uOipmdNGoaGOEYg==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.0.0"
+    "@babel/helper-define-map" "^7.4.0"
+    "@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.4.0"
+    "@babel/helper-split-export-declaration" "^7.4.0"
+    globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da"
+  integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-destructuring@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0.tgz#68e911e1935dda2f06b6ccbbf184ffb024e9d43a"
+"@babel/plugin-transform-destructuring@7.3.2":
+  version "7.3.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz#f2f5520be055ba1c38c41c0e094d8a461dd78f2d"
+  integrity sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-dotall-regex@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz#73a24da69bc3c370251f43a3d048198546115e58"
+"@babel/plugin-transform-destructuring@^7.2.0", "@babel/plugin-transform-destructuring@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.0.tgz#acbb9b2418d290107db333f4d6cd8aa6aea00343"
+  integrity sha512-HySkoatyYTY3ZwLI8GGvkRWCFrjAGXUHur5sMecmCIdIharnlcWWivOqDJI76vvmVZfzwb6G08NREsrY96RhGQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-dotall-regex@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz#f0aabb93d120a8ac61e925ea0ba440812dbe0e49"
+  integrity sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
     "@babel/helper-regex" "^7.0.0"
     regexpu-core "^4.1.3"
 
-"@babel/plugin-transform-duplicate-keys@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz#a0601e580991e7cace080e4cf919cfd58da74e86"
+"@babel/plugin-transform-duplicate-keys@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3"
+  integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-exponentiation-operator@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0.tgz#c51b45e090a01876f64d32b5b46c0799c85ea56c"
+"@babel/plugin-transform-exponentiation-operator@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008"
+  integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==
   dependencies:
-    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.0.0"
+    "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0"
     "@babel/helper-plugin-utils" "^7.0.0"
 
+"@babel/plugin-transform-flow-strip-types@7.2.3":
+  version "7.2.3"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.2.3.tgz#e3ac2a594948454e7431c7db33e1d02d51b5cd69"
+  integrity sha512-xnt7UIk9GYZRitqCnsVMjQK1O2eKZwFB3CvvHjf5SGx6K6vr/MScCKQDnf1DxRaj501e3pXjti+inbSXX2ZUoQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-syntax-flow" "^7.2.0"
+
 "@babel/plugin-transform-flow-strip-types@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.0.0.tgz#c40ced34c2783985d90d9f9ac77a13e6fb396a01"
@@ -395,75 +565,113 @@
     "@babel/helper-plugin-utils" "^7.0.0"
     "@babel/plugin-syntax-flow" "^7.0.0"
 
-"@babel/plugin-transform-for-of@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz#f2ba4eadb83bd17dc3c7e9b30f4707365e1c3e39"
+"@babel/plugin-transform-for-of@^7.2.0", "@babel/plugin-transform-for-of@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.0.tgz#56c8c36677f5d4a16b80b12f7b768de064aaeb5f"
+  integrity sha512-vWdfCEYLlYSxbsKj5lGtzA49K3KANtb8qCPQ1em07txJzsBwY+cKJzBHizj5fl3CCx7vt+WPdgDLTHmydkbQSQ==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-function-name@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0.tgz#eeda18dc22584e13c3581a68f6be4822bb1d1d81"
+"@babel/plugin-transform-function-name@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz#f7930362829ff99a3174c39f0afcc024ef59731a"
+  integrity sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==
   dependencies:
-    "@babel/helper-function-name" "^7.0.0"
+    "@babel/helper-function-name" "^7.1.0"
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-literals@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86"
+"@babel/plugin-transform-literals@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1"
+  integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-modules-amd@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0.tgz#2430ab73db9960c4ca89966f425b803f5d0d0468"
+"@babel/plugin-transform-modules-amd@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6"
+  integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==
   dependencies:
-    "@babel/helper-module-transforms" "^7.0.0"
+    "@babel/helper-module-transforms" "^7.1.0"
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-modules-commonjs@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0.tgz#20b906e5ab130dd8e456b694a94d9575da0fd41f"
+"@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.0.tgz#3b8ec61714d3b75d20c5ccfa157f2c2e087fd4ca"
+  integrity sha512-iWKAooAkipG7g1IY0eah7SumzfnIT3WNhT4uYB2kIsvHnNSB6MDYVa5qyICSwaTBDBY2c4SnJ3JtEa6ltJd6Jw==
   dependencies:
-    "@babel/helper-module-transforms" "^7.0.0"
+    "@babel/helper-module-transforms" "^7.1.0"
     "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-simple-access" "^7.0.0"
+    "@babel/helper-simple-access" "^7.1.0"
 
-"@babel/plugin-transform-modules-systemjs@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0.tgz#8873d876d4fee23209decc4d1feab8f198cf2df4"
+"@babel/plugin-transform-modules-systemjs@^7.2.0", "@babel/plugin-transform-modules-systemjs@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.0.tgz#c2495e55528135797bc816f5d50f851698c586a1"
+  integrity sha512-gjPdHmqiNhVoBqus5qK60mWPp1CmYWp/tkh11mvb0rrys01HycEGD7NvvSoKXlWEfSM9TcL36CpsK8ElsADptQ==
   dependencies:
-    "@babel/helper-hoist-variables" "^7.0.0"
+    "@babel/helper-hoist-variables" "^7.4.0"
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-modules-umd@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0.tgz#e7bb4f2a6cd199668964241951a25013450349be"
+"@babel/plugin-transform-modules-umd@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae"
+  integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==
   dependencies:
-    "@babel/helper-module-transforms" "^7.0.0"
+    "@babel/helper-module-transforms" "^7.1.0"
     "@babel/helper-plugin-utils" "^7.0.0"
 
+"@babel/plugin-transform-named-capturing-groups-regex@^7.3.0", "@babel/plugin-transform-named-capturing-groups-regex@^7.4.2":
+  version "7.4.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.2.tgz#800391136d6cbcc80728dbdba3c1c6e46f86c12e"
+  integrity sha512-NsAuliSwkL3WO2dzWTOL1oZJHm0TM8ZY8ZSxk2ANyKkt5SQlToGA4pzctmq1BEjoacurdwZ3xp2dCQWJkME0gQ==
+  dependencies:
+    regexp-tree "^0.1.0"
+
 "@babel/plugin-transform-new-target@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a"
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-object-super@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0.tgz#b8587d511309b3a0e96e9e38169908b3e392041e"
+"@babel/plugin-transform-new-target@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.0.tgz#67658a1d944edb53c8d4fa3004473a0dd7838150"
+  integrity sha512-6ZKNgMQmQmrEX/ncuCwnnw1yVGoaOW5KpxNhoWI7pCQdA0uZ0HqHGqenCUIENAnxRjy2WwNQ30gfGdIgqJXXqw==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/helper-replace-supers" "^7.0.0"
 
-"@babel/plugin-transform-parameters@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0.tgz#da864efa111816a6df161d492f33de10e74b1949"
+"@babel/plugin-transform-object-super@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598"
+  integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==
   dependencies:
-    "@babel/helper-call-delegate" "^7.0.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/helper-replace-supers" "^7.1.0"
+
+"@babel/plugin-transform-parameters@^7.2.0", "@babel/plugin-transform-parameters@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.0.tgz#a1309426fac4eecd2a9439a4c8c35124a11a48a9"
+  integrity sha512-Xqv6d1X+doyiuCGDoVJFtlZx0onAX0tnc3dY8w71pv/O0dODAbusVv2Ale3cGOwfiyi895ivOBhYa9DhAM8dUA==
+  dependencies:
+    "@babel/helper-call-delegate" "^7.4.0"
     "@babel/helper-get-function-arity" "^7.0.0"
     "@babel/helper-plugin-utils" "^7.0.0"
 
+"@babel/plugin-transform-react-constant-elements@7.2.0", "@babel/plugin-transform-react-constant-elements@^7.0.0", "@babel/plugin-transform-react-constant-elements@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.2.0.tgz#ed602dc2d8bff2f0cb1a5ce29263dbdec40779f7"
+  integrity sha512-YYQFg6giRFMsZPKUM9v+VcHOdfSQdz9jHCx3akAi3UYgyjndmdYGSXylQ/V+HswQt4fL8IklchD9HTsaOCrWQQ==
+  dependencies:
+    "@babel/helper-annotate-as-pure" "^7.0.0"
+    "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-react-display-name@7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0"
+  integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+
 "@babel/plugin-transform-react-display-name@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz#93759e6c023782e52c2da3b75eca60d4f10533ee"
@@ -498,96 +706,173 @@
   dependencies:
     regenerator-transform "^0.13.3"
 
-"@babel/plugin-transform-runtime@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.0.0.tgz#0f1443c07bac16dba8efa939e0c61d6922740062"
+"@babel/plugin-transform-regenerator@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.0.tgz#0780e27ee458cc3fdbad18294d703e972ae1f6d1"
+  integrity sha512-SZ+CgL4F0wm4npojPU6swo/cK4FcbLgxLd4cWpHaNXY/NJ2dpahODCqBbAwb2rDmVszVb3SSjnk9/vik3AYdBw==
+  dependencies:
+    regenerator-transform "^0.13.4"
+
+"@babel/plugin-transform-runtime@7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz#566bc43f7d0aedc880eaddbd29168d0f248966ea"
+  integrity sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw==
   dependencies:
     "@babel/helper-module-imports" "^7.0.0"
     "@babel/helper-plugin-utils" "^7.0.0"
     resolve "^1.8.1"
+    semver "^5.5.1"
 
-"@babel/plugin-transform-shorthand-properties@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz#85f8af592dcc07647541a0350e8c95c7bf419d15"
+"@babel/plugin-transform-shorthand-properties@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0"
+  integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-spread@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b"
+"@babel/plugin-transform-spread@^7.2.0":
+  version "7.2.2"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406"
+  integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-sticky-regex@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366"
+"@babel/plugin-transform-sticky-regex@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1"
+  integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
     "@babel/helper-regex" "^7.0.0"
 
-"@babel/plugin-transform-template-literals@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65"
+"@babel/plugin-transform-template-literals@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz#d87ed01b8eaac7a92473f608c97c089de2ba1e5b"
+  integrity sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==
   dependencies:
     "@babel/helper-annotate-as-pure" "^7.0.0"
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-typeof-symbol@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz#4dcf1e52e943e5267b7313bff347fdbe0f81cec9"
+"@babel/plugin-transform-typeof-symbol@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2"
+  integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
 
-"@babel/plugin-transform-unicode-regex@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc"
+"@babel/plugin-transform-typescript@^7.1.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.0.tgz#0389ec53a34e80f99f708c4ca311181449a68eb1"
+  integrity sha512-U7/+zKnRZg04ggM/Bm+xmu2B/PrwyDQTT/V89FXWYWNMxBDwSx56u6jtk9SEbfLFbZaEI72L+5LPvQjeZgFCrQ==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-syntax-typescript" "^7.2.0"
+
+"@babel/plugin-transform-unicode-regex@^7.2.0":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz#4eb8db16f972f8abb5062c161b8b115546ade08b"
+  integrity sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==
   dependencies:
     "@babel/helper-plugin-utils" "^7.0.0"
     "@babel/helper-regex" "^7.0.0"
     regexpu-core "^4.1.3"
 
-"@babel/preset-env@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.0.0.tgz#f450f200c14e713f98cb14d113bf0c2cfbb89ca9"
+"@babel/preset-env@7.3.1":
+  version "7.3.1"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.1.tgz#389e8ca6b17ae67aaf9a2111665030be923515db"
+  integrity sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ==
   dependencies:
     "@babel/helper-module-imports" "^7.0.0"
     "@babel/helper-plugin-utils" "^7.0.0"
-    "@babel/plugin-proposal-async-generator-functions" "^7.0.0"
-    "@babel/plugin-proposal-json-strings" "^7.0.0"
-    "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
-    "@babel/plugin-proposal-optional-catch-binding" "^7.0.0"
-    "@babel/plugin-proposal-unicode-property-regex" "^7.0.0"
-    "@babel/plugin-syntax-async-generators" "^7.0.0"
-    "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
-    "@babel/plugin-syntax-optional-catch-binding" "^7.0.0"
-    "@babel/plugin-transform-arrow-functions" "^7.0.0"
-    "@babel/plugin-transform-async-to-generator" "^7.0.0"
-    "@babel/plugin-transform-block-scoped-functions" "^7.0.0"
-    "@babel/plugin-transform-block-scoping" "^7.0.0"
-    "@babel/plugin-transform-classes" "^7.0.0"
-    "@babel/plugin-transform-computed-properties" "^7.0.0"
-    "@babel/plugin-transform-destructuring" "^7.0.0"
-    "@babel/plugin-transform-dotall-regex" "^7.0.0"
-    "@babel/plugin-transform-duplicate-keys" "^7.0.0"
-    "@babel/plugin-transform-exponentiation-operator" "^7.0.0"
-    "@babel/plugin-transform-for-of" "^7.0.0"
-    "@babel/plugin-transform-function-name" "^7.0.0"
-    "@babel/plugin-transform-literals" "^7.0.0"
-    "@babel/plugin-transform-modules-amd" "^7.0.0"
-    "@babel/plugin-transform-modules-commonjs" "^7.0.0"
-    "@babel/plugin-transform-modules-systemjs" "^7.0.0"
-    "@babel/plugin-transform-modules-umd" "^7.0.0"
+    "@babel/plugin-proposal-async-generator-functions" "^7.2.0"
+    "@babel/plugin-proposal-json-strings" "^7.2.0"
+    "@babel/plugin-proposal-object-rest-spread" "^7.3.1"
+    "@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.2.0"
+    "@babel/plugin-syntax-async-generators" "^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.2.0"
+    "@babel/plugin-transform-block-scoped-functions" "^7.2.0"
+    "@babel/plugin-transform-block-scoping" "^7.2.0"
+    "@babel/plugin-transform-classes" "^7.2.0"
+    "@babel/plugin-transform-computed-properties" "^7.2.0"
+    "@babel/plugin-transform-destructuring" "^7.2.0"
+    "@babel/plugin-transform-dotall-regex" "^7.2.0"
+    "@babel/plugin-transform-duplicate-keys" "^7.2.0"
+    "@babel/plugin-transform-exponentiation-operator" "^7.2.0"
+    "@babel/plugin-transform-for-of" "^7.2.0"
+    "@babel/plugin-transform-function-name" "^7.2.0"
+    "@babel/plugin-transform-literals" "^7.2.0"
+    "@babel/plugin-transform-modules-amd" "^7.2.0"
+    "@babel/plugin-transform-modules-commonjs" "^7.2.0"
+    "@babel/plugin-transform-modules-systemjs" "^7.2.0"
+    "@babel/plugin-transform-modules-umd" "^7.2.0"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0"
     "@babel/plugin-transform-new-target" "^7.0.0"
-    "@babel/plugin-transform-object-super" "^7.0.0"
-    "@babel/plugin-transform-parameters" "^7.0.0"
+    "@babel/plugin-transform-object-super" "^7.2.0"
+    "@babel/plugin-transform-parameters" "^7.2.0"
     "@babel/plugin-transform-regenerator" "^7.0.0"
-    "@babel/plugin-transform-shorthand-properties" "^7.0.0"
-    "@babel/plugin-transform-spread" "^7.0.0"
-    "@babel/plugin-transform-sticky-regex" "^7.0.0"
-    "@babel/plugin-transform-template-literals" "^7.0.0"
-    "@babel/plugin-transform-typeof-symbol" "^7.0.0"
-    "@babel/plugin-transform-unicode-regex" "^7.0.0"
-    browserslist "^4.1.0"
+    "@babel/plugin-transform-shorthand-properties" "^7.2.0"
+    "@babel/plugin-transform-spread" "^7.2.0"
+    "@babel/plugin-transform-sticky-regex" "^7.2.0"
+    "@babel/plugin-transform-template-literals" "^7.2.0"
+    "@babel/plugin-transform-typeof-symbol" "^7.2.0"
+    "@babel/plugin-transform-unicode-regex" "^7.2.0"
+    browserslist "^4.3.4"
+    invariant "^2.2.2"
+    js-levenshtein "^1.1.3"
+    semver "^5.3.0"
+
+"@babel/preset-env@^7.1.6", "@babel/preset-env@^7.3.1":
+  version "7.4.2"
+  resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.2.tgz#2f5ba1de2daefa9dcca653848f96c7ce2e406676"
+  integrity sha512-OEz6VOZaI9LW08CWVS3d9g/0jZA6YCn1gsKIy/fut7yZCJti5Lm1/Hi+uo/U+ODm7g4I6gULrCP+/+laT8xAsA==
+  dependencies:
+    "@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-json-strings" "^7.2.0"
+    "@babel/plugin-proposal-object-rest-spread" "^7.4.0"
+    "@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
+    "@babel/plugin-proposal-unicode-property-regex" "^7.4.0"
+    "@babel/plugin-syntax-async-generators" "^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.4.0"
+    "@babel/plugin-transform-block-scoped-functions" "^7.2.0"
+    "@babel/plugin-transform-block-scoping" "^7.4.0"
+    "@babel/plugin-transform-classes" "^7.4.0"
+    "@babel/plugin-transform-computed-properties" "^7.2.0"
+    "@babel/plugin-transform-destructuring" "^7.4.0"
+    "@babel/plugin-transform-dotall-regex" "^7.2.0"
+    "@babel/plugin-transform-duplicate-keys" "^7.2.0"
+    "@babel/plugin-transform-exponentiation-operator" "^7.2.0"
+    "@babel/plugin-transform-for-of" "^7.4.0"
+    "@babel/plugin-transform-function-name" "^7.2.0"
+    "@babel/plugin-transform-literals" "^7.2.0"
+    "@babel/plugin-transform-modules-amd" "^7.2.0"
+    "@babel/plugin-transform-modules-commonjs" "^7.4.0"
+    "@babel/plugin-transform-modules-systemjs" "^7.4.0"
+    "@babel/plugin-transform-modules-umd" "^7.2.0"
+    "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.2"
+    "@babel/plugin-transform-new-target" "^7.4.0"
+    "@babel/plugin-transform-object-super" "^7.2.0"
+    "@babel/plugin-transform-parameters" "^7.4.0"
+    "@babel/plugin-transform-regenerator" "^7.4.0"
+    "@babel/plugin-transform-shorthand-properties" "^7.2.0"
+    "@babel/plugin-transform-spread" "^7.2.0"
+    "@babel/plugin-transform-sticky-regex" "^7.2.0"
+    "@babel/plugin-transform-template-literals" "^7.2.0"
+    "@babel/plugin-transform-typeof-symbol" "^7.2.0"
+    "@babel/plugin-transform-unicode-regex" "^7.2.0"
+    "@babel/types" "^7.4.0"
+    browserslist "^4.4.2"
+    core-js-compat "^3.0.0"
     invariant "^2.2.2"
     js-levenshtein "^1.1.3"
     semver "^5.3.0"
@@ -599,7 +884,7 @@
     "@babel/helper-plugin-utils" "^7.0.0"
     "@babel/plugin-transform-flow-strip-types" "^7.0.0"
 
-"@babel/preset-react@^7.0.0":
+"@babel/preset-react@7.0.0", "@babel/preset-react@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0"
   dependencies:
@@ -609,12 +894,34 @@
     "@babel/plugin-transform-react-jsx-self" "^7.0.0"
     "@babel/plugin-transform-react-jsx-source" "^7.0.0"
 
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.0.0-rc.1":
+"@babel/preset-typescript@7.1.0":
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.1.0.tgz#49ad6e2084ff0bfb5f1f7fb3b5e76c434d442c7f"
+  integrity sha512-LYveByuF9AOM8WrsNne5+N79k1YxjNB6gmpCQsnuSBAcV8QUeB+ZUxQzL7Rz7HksPbahymKkq2qBR+o36ggFZA==
+  dependencies:
+    "@babel/helper-plugin-utils" "^7.0.0"
+    "@babel/plugin-transform-typescript" "^7.1.0"
+
+"@babel/runtime@7.3.1":
+  version "7.3.1"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.1.tgz#574b03e8e8a9898eaf4a872a92ea20b7846f6f2a"
+  integrity sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA==
+  dependencies:
+    regenerator-runtime "^0.12.0"
+
+"@babel/runtime@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0.tgz#adeb78fedfc855aa05bc041640f3f6f98e85424c"
   dependencies:
     regenerator-runtime "^0.12.0"
 
+"@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.4":
+  version "7.4.2"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.2.tgz#f5ab6897320f16decd855eed70b705908a313fe8"
+  integrity sha512-7Bl2rALb7HpvXFL7TETNzKSAeBVCPHELzc0C//9FCxN8nsiueWSJBqaF+2oIJScyILStASR/Cx5WMkXGYTiJFA==
+  dependencies:
+    regenerator-runtime "^0.13.2"
+
 "@babel/template@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0.tgz#c2bc9870405959c89a9c814376a2ecb247838c80"
@@ -623,6 +930,15 @@
     "@babel/parser" "^7.0.0"
     "@babel/types" "^7.0.0"
 
+"@babel/template@^7.1.0", "@babel/template@^7.2.2", "@babel/template@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b"
+  integrity sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    "@babel/parser" "^7.4.0"
+    "@babel/types" "^7.4.0"
+
 "@babel/traverse@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0.tgz#b1fe9b6567fdf3ab542cfad6f3b31f854d799a61"
@@ -637,13 +953,20 @@
     globals "^11.1.0"
     lodash "^4.17.10"
 
-"@babel/types@7.0.0-beta.51":
-  version "7.0.0-beta.51"
-  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.51.tgz#d802b7b543b5836c778aa691797abf00f3d97ea9"
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.2.2", "@babel/traverse@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.0.tgz#14006967dd1d2b3494cdd650c686db9daf0ddada"
+  integrity sha512-/DtIHKfyg2bBKnIN+BItaIlEg5pjAnzHOIQe5w+rHAw/rg9g0V7T4rqPX8BJPfW11kt3koyjAnTNwCzb28Y1PA==
   dependencies:
-    esutils "^2.0.2"
-    lodash "^4.17.5"
-    to-fast-properties "^2.0.0"
+    "@babel/code-frame" "^7.0.0"
+    "@babel/generator" "^7.4.0"
+    "@babel/helper-function-name" "^7.1.0"
+    "@babel/helper-split-export-declaration" "^7.4.0"
+    "@babel/parser" "^7.4.0"
+    "@babel/types" "^7.4.0"
+    debug "^4.1.0"
+    globals "^11.1.0"
+    lodash "^4.17.11"
 
 "@babel/types@^7.0.0":
   version "7.0.0"
@@ -653,6 +976,15 @@
     lodash "^4.17.10"
     to-fast-properties "^2.0.0"
 
+"@babel/types@^7.1.6", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.4.0":
+  version "7.4.0"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c"
+  integrity sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==
+  dependencies:
+    esutils "^2.0.2"
+    lodash "^4.17.11"
+    to-fast-properties "^2.0.0"
+
 "@emotion/babel-utils@^0.6.4":
   version "0.6.9"
   resolved "https://registry.yarnpkg.com/@emotion/babel-utils/-/babel-utils-0.6.9.tgz#bb074fadad65c443a575d3379488415fd194fc75"
@@ -664,51 +996,71 @@
     find-root "^1.1.0"
     source-map "^0.7.2"
 
-"@emotion/cache@^0.8.7":
-  version "0.8.7"
-  resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-0.8.7.tgz#79d34ebd6e87562286bf2f059ef7b36ea8b59d4b"
-  dependencies:
-    "@emotion/sheet" "^0.8.0"
-    "@emotion/stylis" "^0.7.0"
-    "@emotion/utils" "^0.8.1"
-
-"@emotion/core@0.13.0", "@emotion/core@^0.13.0", "@emotion/core@~0.13.0":
-  version "0.13.0"
-  resolved "https://registry.yarnpkg.com/@emotion/core/-/core-0.13.0.tgz#199b08ed25b8e72fbaa46f2de4fc58d1ab4c0f3b"
-  dependencies:
-    "@emotion/cache" "^0.8.7"
-    "@emotion/css" "^0.9.7"
-    "@emotion/serialize" "^0.9.0"
-    "@emotion/sheet" "^0.8.0"
-    "@emotion/utils" "^0.8.1"
-
-"@emotion/css@^0.9.7":
-  version "0.9.7"
-  resolved "https://registry.yarnpkg.com/@emotion/css/-/css-0.9.7.tgz#e5719973111299dcd197b12470e14fec7bcdab91"
-  dependencies:
-    "@emotion/serialize" "^0.9.0"
-    "@emotion/utils" "^0.8.1"
+"@emotion/cache@^10.0.9":
+  version "10.0.9"
+  resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.9.tgz#e0c7b7a289f7530edcfad4dcf3858bd2e5700a6f"
+  integrity sha512-f7MblpE2xoimC4fCMZ9pivmsIn7hyWRIvY75owMDi8pdOSeh+w5tH3r4hBJv/LLrwiMM7cTQURqTPcYoL5pWnw==
+  dependencies:
+    "@emotion/sheet" "0.9.2"
+    "@emotion/stylis" "0.8.3"
+    "@emotion/utils" "0.11.1"
+    "@emotion/weak-memoize" "0.2.2"
+
+"@emotion/core@^10.0.7":
+  version "10.0.9"
+  resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.9.tgz#f8afbccb0011100680f5dc94657b410c6aa1350e"
+  integrity sha512-v5a77dV+uWGoy9w6R3MXZG01lqHcXgoy/jGmJqPDGhPjmpWg26LWXAphYZxpZffFUwDUlDdYDiX5HtaKphvJnQ==
+  dependencies:
+    "@emotion/cache" "^10.0.9"
+    "@emotion/css" "^10.0.9"
+    "@emotion/serialize" "^0.11.6"
+    "@emotion/sheet" "0.9.2"
+    "@emotion/utils" "0.11.1"
+
+"@emotion/css@^10.0.9":
+  version "10.0.9"
+  resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.9.tgz#ea0df431965a308f6cb1d61386df8ad61e5befb5"
+  integrity sha512-jtHhUSWw+L7yxYgNtC+KJ3Ory90/jiAtpG1qT+gTQQ/RR5AMiigs9/lDHu/vnwljaq2S48FoKb/FZZMlJcC4bw==
+  dependencies:
+    "@emotion/serialize" "^0.11.6"
+    "@emotion/utils" "0.11.1"
+    babel-plugin-emotion "^10.0.9"
+
+"@emotion/hash@0.7.1":
+  version "0.7.1"
+  resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.1.tgz#9833722341379fb7d67f06a4b00ab3c37913da53"
+  integrity sha512-OYpa/Sg+2GDX+jibUfpZVn1YqSVRpYmTLF2eyAfrFTIJSbwyIrc+YscayoykvaOME/wV4BV0Sa0yqdMrgse6mA==
 
 "@emotion/hash@^0.6.2", "@emotion/hash@^0.6.5":
   version "0.6.5"
   resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.6.5.tgz#097729b84a5164f71f9acd2570ecfd1354d7b360"
 
-"@emotion/is-prop-valid@^0.6.7":
-  version "0.6.7"
-  resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.6.7.tgz#1767d39c29ba786b7afc3d8d727a2896995f01eb"
+"@emotion/is-prop-valid@0.7.3":
+  version "0.7.3"
+  resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz#a6bf4fa5387cbba59d44e698a4680f481a8da6cc"
+  integrity sha512-uxJqm/sqwXw3YPA5GXX365OBcJGFtxUVkB6WyezqFHlNe9jqUWH5ur2O2M8dGBz61kn1g3ZBlzUunFQXQIClhA==
   dependencies:
-    "@emotion/memoize" "^0.6.5"
+    "@emotion/memoize" "0.7.1"
+
+"@emotion/memoize@0.7.1":
+  version "0.7.1"
+  resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.1.tgz#e93c13942592cf5ef01aa8297444dc192beee52f"
+  integrity sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg==
 
 "@emotion/memoize@^0.6.1", "@emotion/memoize@^0.6.5":
   version "0.6.5"
   resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.6.5.tgz#f868c314b889e7c3d84868a1d1cc323fbb40ca86"
 
-"@emotion/provider@0.11.1":
-  version "0.11.1"
-  resolved "https://registry.yarnpkg.com/@emotion/provider/-/provider-0.11.1.tgz#65267dea4a67a4488ba46316420f6238f0d1c644"
+"@emotion/serialize@^0.11.6":
+  version "0.11.6"
+  resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.6.tgz#78be8b9ee9ff49e0196233ba6ec1c1768ba1e1fc"
+  integrity sha512-n4zVv2qGLmspF99jaEUwnMV0fnEGsyUMsC/8KZKUSUTZMYljHE+j+B6rSD8PIFtaUIhHaxCG2JawN6L+OgLN0Q==
   dependencies:
-    "@emotion/cache" "^0.8.7"
-    "@emotion/weak-memoize" "^0.1.2"
+    "@emotion/hash" "0.7.1"
+    "@emotion/memoize" "0.7.1"
+    "@emotion/unitless" "0.7.3"
+    "@emotion/utils" "0.11.1"
+    csstype "^2.5.7"
 
 "@emotion/serialize@^0.9.0":
   version "0.9.0"
@@ -719,43 +1071,65 @@
     "@emotion/unitless" "^0.6.6"
     "@emotion/utils" "^0.8.1"
 
-"@emotion/sheet@^0.8.0":
-  version "0.8.0"
-  resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.8.0.tgz#278e3e95e5006515958382369104ae0fabc65b52"
+"@emotion/sheet@0.9.2":
+  version "0.9.2"
+  resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.2.tgz#74e5c6b5e489a1ba30ab246ab5eedd96916487c4"
+  integrity sha512-pVBLzIbC/QCHDKJF2E82V2H/W/B004mDFQZiyo/MSR+VC4pV5JLG0TF/zgQDFvP3fZL/5RTPGEmXlYJBMUuJ+A==
 
-"@emotion/styled-base@^0.10.5":
-  version "0.10.5"
-  resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-0.10.5.tgz#7f8afca216b2440367c6747de0cb1459468624b1"
+"@emotion/styled-base@^10.0.9":
+  version "10.0.9"
+  resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.9.tgz#634b43d1f0309c35c5b342c775b01610517d2529"
+  integrity sha512-uXOPP2V7g8lYWsqBfYGmEOXHMUPleOujFWusQyXezxe1VGlZjGJIQj+YmzkwzGBmFx2nAun0OKMYCBJMeGKojw==
   dependencies:
-    "@emotion/is-prop-valid" "^0.6.7"
-    "@emotion/serialize" "^0.9.0"
-    "@emotion/utils" "^0.8.1"
+    "@emotion/is-prop-valid" "0.7.3"
+    "@emotion/serialize" "^0.11.6"
+    "@emotion/utils" "0.11.1"
+    object-assign "^4.1.1"
 
-"@emotion/styled@0.10.5", "@emotion/styled@~0.10.5":
-  version "0.10.5"
-  resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-0.10.5.tgz#4a0d3e5c80f8e80112af6d398ca06098e5b82775"
+"@emotion/styled@^10.0.7":
+  version "10.0.9"
+  resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.9.tgz#3d940ec8b989853fd422dab6278a2803e1c4a608"
+  integrity sha512-V+BT+KE4NKCANS18TL0yGueIyVbL5qXbgKarLcIhxmz0/dEk2k6kA18sKguJpHYa0RpgkggdhUPWWohTu3DRPw==
   dependencies:
-    "@emotion/styled-base" "^0.10.5"
+    "@emotion/styled-base" "^10.0.9"
+    babel-plugin-emotion "^10.0.9"
 
-"@emotion/stylis@^0.6.10":
-  version "0.6.12"
-  resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.6.12.tgz#3fb58220e0fc9e380bcabbb3edde396ddc1dfe6e"
+"@emotion/stylis@0.8.3":
+  version "0.8.3"
+  resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.3.tgz#3ca7e9bcb31b3cb4afbaeb66156d86ee85e23246"
+  integrity sha512-M3nMfJ6ndJMYloSIbYEBq6G3eqoYD41BpDOxreE8j0cb4fzz/5qvmqU9Mb2hzsXcCnIlGlWhS03PCzVGvTAe0Q==
 
 "@emotion/stylis@^0.7.0":
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.7.0.tgz#4c30e6fccc9555e42fa6fef98b3bd0788b954684"
 
+"@emotion/unitless@0.7.3":
+  version "0.7.3"
+  resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.3.tgz#6310a047f12d21a1036fb031317219892440416f"
+  integrity sha512-4zAPlpDEh2VwXswwr/t8xGNDGg8RQiPxtxZ3qQEXyQsBV39ptTdESCjuBvGze1nLMVrxmTIKmnO/nAV8Tqjjzg==
+
 "@emotion/unitless@^0.6.2", "@emotion/unitless@^0.6.6":
   version "0.6.6"
   resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.6.6.tgz#988957ecd0a9be00ee9de27172f8c56d41595a93"
 
+"@emotion/utils@0.11.1":
+  version "0.11.1"
+  resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.1.tgz#8529b7412a6eb4b48bdf6e720cc1b8e6e1e17628"
+  integrity sha512-8M3VN0hetwhsJ8dH8VkVy7xo5/1VoBsDOk/T4SJOeXwTO1c4uIqVNx2qyecLFnnUWD5vvUqHQ1gASSeUN6zcTg==
+
 "@emotion/utils@^0.8.1":
   version "0.8.1"
   resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.8.1.tgz#f3a81587ad8d0ef33cdad6f3b4310774fcc1053e"
 
-"@emotion/weak-memoize@^0.1.2":
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.1.2.tgz#4e4afffc61fb82fd0e55a4ed3c3041fd0a765a5a"
+"@emotion/weak-memoize@0.2.2":
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.2.tgz#63985d3d8b02530e0869962f4da09142ee8e200e"
+  integrity sha512-n/VQ4mbfr81aqkx/XmVicOLjviMuy02eenSdJY33SVA7S2J42EU0P1H0mOogfYedb3wXA0d/LVtBrgTSm04WEA==
+
+"@icons/material@^0.2.4":
+  version "0.2.4"
+  resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8"
+  integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==
 
 "@mrmlnc/readdir-enhanced@^2.2.1":
   version "2.2.1"
@@ -764,18 +1138,6 @@
     call-me-maybe "^1.0.1"
     glob-to-regexp "^0.3.0"
 
-"@ndelangen/react-treebeard@^3.0.0":
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/@ndelangen/react-treebeard/-/react-treebeard-3.0.1.tgz#644f959a7fff26f2f3e4753c6804be36ab1e6921"
-  dependencies:
-    "@emotion/core" "~0.13.0"
-    "@emotion/styled" "~0.10.5"
-    babel-runtime "^6.23.0"
-    deep-equal "^1.0.1"
-    prop-types "^15.6.2"
-    shallowequal "^1.1.0"
-    velocity-react "^1.3.1"
-
 "@nodelib/fs.stat@^1.0.1":
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz#54c5a964462be3d4d78af631363c18d6fa91ac26"
@@ -787,268 +1149,480 @@
     lodash "^4.17.10"
     react "^16.4.0"
 
-"@storybook/addon-actions@^4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-4.0.0-alpha.21.tgz#08de5c5b357f1ad5af30cd8b7a1deaf1ed7828c7"
-  dependencies:
-    "@emotion/core" "^0.13.0"
-    "@emotion/provider" "0.11.1"
-    "@emotion/styled" "0.10.5"
-    "@storybook/addons" "4.0.0-alpha.21"
-    "@storybook/components" "4.0.0-alpha.21"
-    "@storybook/core-events" "4.0.0-alpha.21"
-    deep-equal "^1.0.1"
+"@reach/router@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.2.1.tgz#34ae3541a5ac44fa7796e5506a5d7274a162be4e"
+  integrity sha512-kTaX08X4g27tzIFQGRukaHmNbtMYDS3LEWIS8+l6OayGIw6Oyo1HIF/JzeuR2FoF9z6oV+x/wJSVSq4v8tcUGQ==
+  dependencies:
+    create-react-context "^0.2.1"
+    invariant "^2.2.3"
+    prop-types "^15.6.1"
+    react-lifecycles-compat "^3.0.4"
+    warning "^3.0.0"
+
+"@storybook/addon-actions@^5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.0.3.tgz#bf8bafeebc7b325f33a62d023e8ce9280ac66349"
+  integrity sha512-uyZV1TacrSb0A+bTGWCwaa0KiXUfeTs0+RBa1V5GPh5hZfZel8EAxlujsQWz/e3UZlvFPunW0NJWU0avpWYHCQ==
+  dependencies:
+    "@storybook/addons" "5.0.3"
+    "@storybook/components" "5.0.3"
+    "@storybook/core-events" "5.0.3"
+    "@storybook/theming" "5.0.3"
+    core-js "^2.6.5"
+    fast-deep-equal "^2.0.1"
     global "^4.3.2"
-    lodash.isequal "^4.5.0"
+    lodash "^4.17.11"
     make-error "^1.3.5"
+    polished "^2.3.3"
     prop-types "^15.6.2"
+    react "^16.8.1"
     react-inspector "^2.3.0"
     uuid "^3.3.2"
 
-"@storybook/addon-knobs@^4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-4.0.0-alpha.21.tgz#720cd182f8b1fa986c1d664407cc55131d6b6168"
+"@storybook/addon-knobs@^5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-5.0.3.tgz#0d5877189dfe773493f4daeb1c39fa19c6927bd3"
+  integrity sha512-FX1dhdmqr0H2h3oMK3cIWfeQtVbLnTrDNYD6ommRWZYSYA9hU7Acj1u+9/IDK609EIgS10pBQYVeWwn0SRCnOA==
   dependencies:
-    "@emotion/styled" "0.10.5"
-    "@storybook/addons" "4.0.0-alpha.21"
-    "@storybook/components" "4.0.0-alpha.21"
-    "@storybook/core-events" "4.0.0-alpha.21"
+    "@storybook/addons" "5.0.3"
+    "@storybook/components" "5.0.3"
+    "@storybook/core-events" "5.0.3"
+    "@storybook/theming" "5.0.3"
     copy-to-clipboard "^3.0.8"
+    core-js "^2.6.5"
     escape-html "^1.0.3"
     fast-deep-equal "^2.0.1"
     global "^4.3.2"
+    lodash.debounce "^4.0.8"
     prop-types "^15.6.2"
     qs "^6.5.2"
-    react-color "^2.14.1"
-    react-datetime "^2.15.0"
+    react-color "^2.17.0"
     react-lifecycles-compat "^3.0.4"
+    react-select "^2.3.0"
     util-deprecate "^1.0.2"
 
-"@storybook/addon-options@^4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-options/-/addon-options-4.0.0-alpha.21.tgz#035af96d2130a4bd202d5dedee8dd11e4a1ae06d"
+"@storybook/addon-options@^5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-options/-/addon-options-5.0.3.tgz#0321f05504b6e0c23d064584706ed6f529bb7c59"
+  integrity sha512-hOas4I8zjuH0py/gkhQy3xAADLdXatn3Q2w9eMxKAYD7iDqfcopDW9fugdgX+5ROffSGhEA52ZwGGuYHGPy0Sw==
   dependencies:
-    "@storybook/addons" "4.0.0-alpha.21"
+    "@storybook/addons" "5.0.3"
+    core-js "^2.6.5"
+    util-deprecate "^1.0.2"
 
-"@storybook/addon-storysource@^4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/addon-storysource/-/addon-storysource-4.0.0-alpha.21.tgz#1c5ce5626e22c533412655a2377dedf3095d400a"
-  dependencies:
-    "@babel/runtime" "^7.0.0"
-    "@storybook/addons" "4.0.0-alpha.21"
-    "@storybook/components" "4.0.0-alpha.21"
+"@storybook/addon-storysource@^5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/addon-storysource/-/addon-storysource-5.0.3.tgz#f2362e9d0398a2e16e3ed50c05557b8fb0f8eccc"
+  integrity sha512-C3aV6X+OwiBYGf/i7WrEIhEL/GqVl3FppMR/QR6W/Bft5pWOcedktXrJsVHHskVOBg3sxcCJScce/BTy1+3zeQ==
+  dependencies:
+    "@storybook/addons" "5.0.3"
+    "@storybook/components" "5.0.3"
+    "@storybook/router" "5.0.3"
+    "@storybook/theming" "5.0.3"
+    core-js "^2.6.5"
     estraverse "^4.2.0"
-    loader-utils "^1.1.0"
-    prettier "^1.14.0"
+    loader-utils "^1.2.1"
+    prettier "^1.16.4"
     prop-types "^15.6.2"
     react-syntax-highlighter "^8.0.1"
+    regenerator-runtime "^0.12.1"
 
-"@storybook/addons@4.0.0-alpha.21", "@storybook/addons@^4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-4.0.0-alpha.21.tgz#4d5b9f4ce2b75ca03b68847ca31cf78e148d3ad7"
+"@storybook/addons@5.0.3", "@storybook/addons@^5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.0.3.tgz#073352021d97ebbd3b8499e1dbe7fe32eafaaa28"
+  integrity sha512-jrhj2JQ05qErCMQQGwAMd/Diq14070aGof62RCUGqrEnfiYgeTM74k3C8sK7G/WFOAowI7hmQvWN9002HMXpVg==
   dependencies:
-    "@storybook/channels" "4.0.0-alpha.21"
-    "@storybook/components" "4.0.0-alpha.21"
+    "@storybook/channels" "5.0.3"
+    "@storybook/client-logger" "5.0.3"
+    core-js "^2.6.5"
     global "^4.3.2"
     util-deprecate "^1.0.2"
 
-"@storybook/channel-postmessage@4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-4.0.0-alpha.21.tgz#8456696644f6a3d50faa5d41d50012c78297f72e"
+"@storybook/channel-postmessage@5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.0.3.tgz#3531a78b7e4e0cb04349c5135ff87963457669da"
+  integrity sha512-qi4RjwWzgVvIHgfdQtSk6DLvh9iUiAPYt8OwmJ+ymBgCtUFK2NLNnvK4EPm92WgZgH4cZJ5z1nl9lD2l/de5sQ==
   dependencies:
-    "@storybook/channels" "4.0.0-alpha.21"
+    "@storybook/channels" "5.0.3"
+    "@storybook/client-logger" "5.0.3"
+    core-js "^2.6.5"
     global "^4.3.2"
-    json-stringify-safe "^5.0.1"
+    telejson "^2.1.0"
 
-"@storybook/channels@4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-4.0.0-alpha.21.tgz#5fc63c5331db26e2a1678038dbe1212badcc095c"
+"@storybook/channels@5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.0.3.tgz#ab1623b2dc6ab9202f7938bf2210b00259794784"
+  integrity sha512-trqHZPOmv3yTgT4EHQn74UhqIPOuFHZzHURKi3JWxDvDntZ+itIDgX8u3jiME0EIEVWwru5QM88j87GfqfzRmA==
+  dependencies:
+    core-js "^2.6.5"
 
-"@storybook/client-logger@4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-4.0.0-alpha.21.tgz#018c394c549e8eaccb87b2dd892d2c9753287df5"
+"@storybook/client-api@5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.0.3.tgz#d235eac1637ec213e651286c3ca37c1a56f785a0"
+  integrity sha512-dZRyhmvPv6MZjlVN1F0v9rQtmm1dQkk+4NYffk2lM14BIfSiUnDmF4VRzDpHAKWy6gCHvlPBPuzS0DkfikAgsA==
+  dependencies:
+    "@storybook/addons" "5.0.3"
+    "@storybook/client-logger" "5.0.3"
+    "@storybook/core-events" "5.0.3"
+    "@storybook/router" "5.0.3"
+    common-tags "^1.8.0"
+    eventemitter3 "^3.1.0"
+    global "^4.3.2"
+    is-plain-object "^2.0.4"
+    lodash.debounce "^4.0.8"
+    lodash.isequal "^4.5.0"
+    lodash.mergewith "^4.6.1"
+    memoizerific "^1.11.3"
+    qs "^6.5.2"
 
-"@storybook/components@4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/components/-/components-4.0.0-alpha.21.tgz#c86594f2bf2c057294a88d214fe0f2acf7bde091"
+"@storybook/client-logger@5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.0.3.tgz#5ec45b3173313aa7912ac95ac1ec530598a9d20e"
+  integrity sha512-1izIxCV1QsYfz5c93sUlHI6IlkVF3Rslje0QQeGOQPHZ4Pe73JzUjIlMKww9BAYS7rYbq7asNNplEp4GIgIdYQ==
   dependencies:
-    "@emotion/core" "0.13.0"
-    "@emotion/provider" "0.11.1"
-    "@emotion/styled" "0.10.5"
+    core-js "^2.6.5"
+
+"@storybook/components@5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.0.3.tgz#99df80256ce19d5d6d307b4f2a8d2f2a03c68b5a"
+  integrity sha512-xJX5poCjIae2Qv0bq5Ef87kcLn90IhlEOPg8nBCcUt2y8T6JQhEk+Zk6WpzA+TxV1Q/P1Oqozv8sr2vuQR2EFA==
+  dependencies:
+    "@storybook/addons" "5.0.3"
+    "@storybook/client-logger" "5.0.3"
+    "@storybook/core-events" "5.0.3"
+    "@storybook/router" "5.0.3"
+    "@storybook/theming" "5.0.3"
+    core-js "^2.6.5"
     global "^4.3.2"
+    immer "^1.12.0"
+    js-beautify "^1.8.9"
     lodash.pick "^4.4.0"
     lodash.throttle "^4.1.1"
+    memoizerific "^1.11.3"
+    polished "^2.3.3"
     prop-types "^15.6.2"
+    react "^16.8.1"
+    react-dom "^16.8.1"
+    react-focus-lock "^1.17.7"
+    react-helmet-async "^0.2.0"
     react-inspector "^2.3.0"
-    react-split-pane "^0.1.82"
+    react-popper-tooltip "^2.8.0"
+    react-syntax-highlighter "^8.0.1"
     react-textarea-autosize "^7.0.4"
+    reactjs-popup "^1.3.2"
+    recompose "^0.30.0"
     render-fragment "^0.1.1"
 
-"@storybook/core-events@4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-4.0.0-alpha.21.tgz#46fd682afc0cede8dfb6058b4358c08fbb832236"
-
-"@storybook/core@4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/core/-/core-4.0.0-alpha.21.tgz#744d5af9c167d3f8d2623b1491890bc4e8f5e2ba"
+"@storybook/core-events@5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.0.3.tgz#1b9d6265f7a2b16a0ddee274975e104d7a02c9f6"
+  integrity sha512-a+GbuuhGcfL6ovFlzfYi1oEu2gVa5m2tY5sHEYA03lWdKR2aa4R5Q8haVujox6yxQ6L8gNh1RZff0s1kx64Drw==
   dependencies:
-    "@babel/plugin-proposal-class-properties" "^7.0.0"
-    "@babel/plugin-transform-regenerator" "^7.0.0"
-    "@babel/plugin-transform-runtime" "^7.0.0"
-    "@babel/preset-env" "^7.0.0"
-    "@babel/runtime" "^7.0.0"
-    "@emotion/core" "0.13.0"
-    "@emotion/provider" "0.11.1"
-    "@emotion/styled" "0.10.5"
-    "@storybook/addons" "4.0.0-alpha.21"
-    "@storybook/channel-postmessage" "4.0.0-alpha.21"
-    "@storybook/client-logger" "4.0.0-alpha.21"
-    "@storybook/core-events" "4.0.0-alpha.21"
-    "@storybook/node-logger" "4.0.0-alpha.21"
-    "@storybook/ui" "4.0.0-alpha.21"
-    airbnb-js-shims "^2.1.0"
-    autoprefixer "^9.1.3"
-    babel-plugin-macros "^2.2.2"
-    babel-preset-minify canary
-    case-sensitive-paths-webpack-plugin "^2.1.2"
-    chalk "^2.4.1"
-    commander "^2.17.0"
-    core-js "^2.5.7"
-    css-loader "^1.0.0"
-    deepmerge "^2.1.1"
-    dotenv-webpack "^1.5.7"
+    core-js "^2.6.5"
+
+"@storybook/core@5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/core/-/core-5.0.3.tgz#9e797a3b2f5b62dc3e43c19f04888c5ac7a3bacd"
+  integrity sha512-3pfHsao/My0PTfHWQ6sQFuq1KSl/6uXi+NupYiExryYhe79fhwh0wO9JQ1JkiA9sUhD6Y+ZaxBZlcNtQgntAmg==
+  dependencies:
+    "@babel/plugin-proposal-class-properties" "^7.3.0"
+    "@babel/plugin-proposal-object-rest-spread" "^7.3.2"
+    "@babel/plugin-syntax-dynamic-import" "^7.2.0"
+    "@babel/plugin-transform-react-constant-elements" "^7.2.0"
+    "@babel/preset-env" "^7.3.1"
+    "@storybook/addons" "5.0.3"
+    "@storybook/channel-postmessage" "5.0.3"
+    "@storybook/client-api" "5.0.3"
+    "@storybook/client-logger" "5.0.3"
+    "@storybook/core-events" "5.0.3"
+    "@storybook/node-logger" "5.0.3"
+    "@storybook/router" "5.0.3"
+    "@storybook/theming" "5.0.3"
+    "@storybook/ui" "5.0.3"
+    airbnb-js-shims "^1 || ^2"
+    autoprefixer "^9.4.7"
+    babel-plugin-add-react-displayname "^0.0.5"
+    babel-plugin-emotion "^10.0.7"
+    babel-plugin-macros "^2.4.5"
+    babel-preset-minify "^0.5.0 || 0.6.0-alpha.5"
+    boxen "^2.1.0"
+    case-sensitive-paths-webpack-plugin "^2.2.0"
+    chalk "^2.4.2"
+    child-process-promise "^2.2.1"
+    cli-table3 "0.5.1"
+    commander "^2.19.0"
+    common-tags "^1.8.0"
+    core-js "^2.6.5"
+    css-loader "^2.1.0"
+    detect-port "^1.2.3"
+    dotenv-webpack "^1.7.0"
     ejs "^2.6.1"
     express "^4.16.3"
-    file-loader "^2.0.0"
+    file-loader "^3.0.1"
+    file-system-cache "^1.0.5"
     find-cache-dir "^2.0.0"
-    generate-page-webpack-plugin "^1.0.0"
+    fs-extra "^7.0.1"
     global "^4.3.2"
-    interpret "^1.1.0"
-    json5 "^2.0.1"
+    html-webpack-plugin "^4.0.0-beta.2"
+    inquirer "^6.2.0"
+    interpret "^1.2.0"
+    ip "^1.1.5"
+    json5 "^2.1.0"
+    lazy-universal-dotenv "^2.0.0"
+    node-fetch "^2.2.0"
     object.omit "^3.0.0"
+    opn "^5.4.0"
     postcss-flexbugs-fixes "^4.1.0"
     postcss-loader "^3.0.0"
+    pretty-hrtime "^1.0.3"
     prop-types "^15.6.2"
-    qs "^6.5.2"
-    raw-loader "^0.5.1"
-    react-dev-utils "6.0.0-next.3e165448"
-    redux "^4.0.0"
-    resolve "^1.8.1"
-    semver "^5.5.1"
+    raw-loader "^1.0.0"
+    react-dev-utils "^7.0.0"
+    regenerator-runtime "^0.12.1"
+    resolve "^1.10.0"
+    resolve-from "^4.0.0"
+    semver "^5.6.0"
     serve-favicon "^2.5.0"
     shelljs "^0.8.2"
-    style-loader "^0.23.0"
+    spawn-promise "^0.1.8"
+    style-loader "^0.23.1"
     svg-url-loader "^2.3.2"
-    universal-dotenv "^1.9.0"
-    url-loader "^1.1.1"
-    webpack "^4.17.1"
-    webpack-dev-middleware "^3.2.0"
-    webpack-hot-middleware "^2.22.3"
-
-"@storybook/mantra-core@^1.7.2":
-  version "1.7.2"
-  resolved "https://registry.yarnpkg.com/@storybook/mantra-core/-/mantra-core-1.7.2.tgz#e10c7faca29769e97131e0e0308ef7cfb655b70c"
-  dependencies:
-    "@storybook/react-komposer" "^2.0.1"
-    "@storybook/react-simple-di" "^1.2.1"
-    babel-runtime "6.x.x"
-
-"@storybook/node-logger@4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-4.0.0-alpha.21.tgz#37ea48f407c28d94d600ed97b1d742ce2d89681d"
-  dependencies:
-    "@babel/runtime" "^7.0.0"
-    npmlog "^4.1.2"
-
-"@storybook/podda@^1.2.3":
-  version "1.2.3"
-  resolved "http://registry.npmjs.org/@storybook/podda/-/podda-1.2.3.tgz#53c4a1a3f8c7bbd5755dff5c34576fd1af9d38ba"
-  dependencies:
-    babel-runtime "^6.11.6"
-    immutable "^3.8.1"
+    terser-webpack-plugin "^1.2.1"
+    url-loader "^1.1.2"
+    util-deprecate "^1.0.2"
+    webpack "^4.29.0"
+    webpack-dev-middleware "^3.5.1"
+    webpack-hot-middleware "^2.24.3"
 
-"@storybook/react-komposer@^2.0.1", "@storybook/react-komposer@^2.0.4":
-  version "2.0.4"
-  resolved "http://registry.npmjs.org/@storybook/react-komposer/-/react-komposer-2.0.4.tgz#c2c0d4a75d9b4a9c0c6b46f14ab050f458ad4bb0"
+"@storybook/node-logger@5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-5.0.3.tgz#616992e02ac58318250d6bb3d212d6bb79ed9b87"
+  integrity sha512-sVOOXO5Ae9xu1uTiBkVItDYZpsncA83tZ5xUNjxQmmQaaDDev+SO2d6b8A5drFLZQxbIXCdHn57CjZXUP1ChlA==
   dependencies:
-    "@storybook/react-stubber" "^1.0.0"
-    babel-runtime "^6.11.6"
-    hoist-non-react-statics "^1.2.0"
-    lodash.pick "^4.4.0"
-    shallowequal "^0.2.2"
+    chalk "^2.4.2"
+    core-js "^2.6.5"
+    npmlog "^4.1.2"
+    pretty-hrtime "^1.0.3"
+    regenerator-runtime "^0.12.1"
 
-"@storybook/react-simple-di@^1.2.1":
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/@storybook/react-simple-di/-/react-simple-di-1.3.0.tgz#13116d89a2f42898716a7f8c4095b47415526371"
+"@storybook/react@^5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/react/-/react-5.0.3.tgz#6154b5449a0c888ad6ee486ed747a37821230d0b"
+  integrity sha512-CUIid9zujWlwPuWYMFEVBQMcN2MmNk4Mwu+L3dQnqr9q4yqIOeMB+i9d1CpaFaxSaN6XtFdXkE7puzIS3lAQgg==
   dependencies:
-    babel-runtime "6.x.x"
-    create-react-class "^15.6.2"
-    hoist-non-react-statics "1.x.x"
-    prop-types "^15.6.0"
+    "@babel/plugin-transform-react-constant-elements" "^7.2.0"
+    "@babel/preset-flow" "^7.0.0"
+    "@babel/preset-react" "^7.0.0"
+    "@storybook/core" "5.0.3"
+    "@storybook/node-logger" "5.0.3"
+    "@storybook/theming" "5.0.3"
+    "@svgr/webpack" "^4.0.3"
+    babel-plugin-named-asset-import "^0.3.0"
+    babel-plugin-react-docgen "^2.0.2"
+    babel-preset-react-app "^7.0.0"
+    common-tags "^1.8.0"
+    core-js "^2.6.5"
+    global "^4.3.2"
+    lodash "^4.17.11"
+    mini-css-extract-plugin "^0.5.0"
+    prop-types "^15.6.2"
+    react-dev-utils "^7.0.1"
+    regenerator-runtime "^0.12.1"
+    semver "^5.6.0"
+    webpack "^4.29.0"
 
-"@storybook/react-stubber@^1.0.0":
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/@storybook/react-stubber/-/react-stubber-1.0.1.tgz#8c312c2658b9eeafce470e1c39e4193f0b5bf9b1"
+"@storybook/router@5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.0.3.tgz#8af21da49c2801931b54810b74118f144b0a863e"
+  integrity sha512-HgDBhvJ9HzaKrpo22IOlNAWET6rPM7peVmnoUvBtjnbQnmBAd38+rT7geX1inVfIJp+CQw1jw2MB18AHgH36Og==
   dependencies:
-    babel-runtime "^6.5.0"
+    "@reach/router" "^1.2.1"
+    "@storybook/theming" "5.0.3"
+    core-js "^2.6.5"
+    global "^4.3.2"
+    memoizerific "^1.11.3"
+    qs "^6.5.2"
 
-"@storybook/react@^4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/react/-/react-4.0.0-alpha.21.tgz#219ae837d935e83cf7cc3aa558a9902fc58df4d4"
+"@storybook/theming@5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.0.3.tgz#d4dbf8016bc03b8581edaa5e3ace145d5e9dd504"
+  integrity sha512-S1KBbhy8mFBEIkzpsC7bW1yHBgvvGlp5y0uP0B/c4ObQvjAxNCMWZlRGiELn6vIpeQF1ywyFpEnq9jKKbY83Qw==
   dependencies:
-    "@babel/preset-flow" "^7.0.0"
-    "@babel/preset-react" "^7.0.0"
-    "@babel/runtime" "^7.0.0"
-    "@emotion/styled" "0.10.5"
-    "@storybook/core" "4.0.0-alpha.21"
-    babel-plugin-react-docgen "^2.0.0-babel7.0"
+    "@emotion/core" "^10.0.7"
+    "@emotion/styled" "^10.0.7"
+    "@storybook/client-logger" "5.0.3"
     common-tags "^1.8.0"
-    emotion "^9.2.6"
+    core-js "^2.6.5"
+    deep-object-diff "^1.1.0"
+    emotion-theming "^10.0.7"
     global "^4.3.2"
-    lodash.flattendeep "^4.4.0"
+    lodash.isequal "^4.5.0"
+    lodash.mergewith "^4.6.1"
+    memoizerific "^1.11.3"
+    polished "^2.3.3"
     prop-types "^15.6.2"
-    react-dev-utils "6.0.0-next.3e165448"
-
-"@storybook/ui@4.0.0-alpha.21":
-  version "4.0.0-alpha.21"
-  resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-4.0.0-alpha.21.tgz#f1b3e97b0a2e93d30f6e63eb97cd77fe068d0b23"
-  dependencies:
-    "@emotion/core" "0.13.0"
-    "@emotion/provider" "0.11.1"
-    "@emotion/styled" "0.10.5"
-    "@ndelangen/react-treebeard" "^3.0.0"
-    "@storybook/components" "4.0.0-alpha.21"
-    "@storybook/core-events" "4.0.0-alpha.21"
-    "@storybook/mantra-core" "^1.7.2"
-    "@storybook/podda" "^1.2.3"
-    "@storybook/react-komposer" "^2.0.4"
-    deep-equal "^1.0.1"
-    emotion "^9.2.8"
-    events "^3.0.0"
-    fuse.js "^3.2.1"
+    react-inspector "^2.3.1"
+
+"@storybook/ui@5.0.3":
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-5.0.3.tgz#81553d32bfa10ca901caeb42dd336e9bae13b417"
+  integrity sha512-3r0CSgv+yZye0yFUUseIya4FmQiMYO8AVlAh9whA1NyhI7IQ8aM7er3FUoMiBP0LTySprrVMV+1Ig8ZD54xrlg==
+  dependencies:
+    "@storybook/addons" "5.0.3"
+    "@storybook/client-logger" "5.0.3"
+    "@storybook/components" "5.0.3"
+    "@storybook/core-events" "5.0.3"
+    "@storybook/router" "5.0.3"
+    "@storybook/theming" "5.0.3"
+    core-js "^2.6.5"
+    fast-deep-equal "^2.0.1"
+    fuzzy-search "^3.0.1"
     global "^4.3.2"
+    history "^4.7.2"
     keycode "^2.2.0"
     lodash.debounce "^4.0.8"
+    lodash.isequal "^4.5.0"
+    lodash.mergewith "^4.6.1"
     lodash.pick "^4.4.0"
     lodash.sortby "^4.7.0"
     lodash.throttle "^4.1.1"
+    markdown-to-jsx "^6.9.1"
+    memoizerific "^1.11.3"
+    polished "^2.3.3"
     prop-types "^15.6.2"
     qs "^6.5.2"
-    react-fuzzy "^0.5.2"
+    react "^16.8.1"
+    react-dom "^16.8.1"
+    react-draggable "^3.1.1"
+    react-helmet-async "^0.2.0"
+    react-hotkeys "2.0.0-pre4"
     react-lifecycles-compat "^3.0.4"
-    react-modal "^3.5.1"
+    react-modal "^3.8.1"
+    react-resize-detector "^3.2.1"
+    recompose "^0.30.0"
+    semver "^5.6.0"
+    telejson "^2.1.1"
+    util-deprecate "^1.0.2"
+
+"@svgr/babel-plugin-add-jsx-attribute@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.0.0.tgz#5acf239cd2747b1a36ec7e708de05d914cb9b948"
+  integrity sha512-PDvHV2WhSGCSExp+eIMEKxYd1Q0SBvXLb4gAOXbdh0dswHFFgXWzxGjCmx5aln4qGrhkuN81khzYzR/44DYaMA==
+
+"@svgr/babel-plugin-remove-jsx-attribute@^4.0.3":
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.0.3.tgz#32564b5c4d761b51e34492b6a4894196c0f75803"
+  integrity sha512-fpG7AzzJxz1tc8ITYS1jCAt1cq4ydK2R+sx//BMTJgvOjfk91M5GiqFolP8aYTzLcum92IGNAVFS3zEcucOQEA==
+
+"@svgr/babel-plugin-remove-jsx-empty-expression@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.0.0.tgz#0b59338c00671cf8137eb823bd84a3efac686502"
+  integrity sha512-nBGVl6LzXTdk1c6w3rMWcjq3mYGz+syWc5b3CdqAiEeY/nswYDoW/cnGUKKC8ofD6/LaG+G/IUnfv3jKoHz43A==
+
+"@svgr/babel-plugin-replace-jsx-attribute-value@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.0.0.tgz#91785643540c2300f3d89e515b37af9b5ce4e695"
+  integrity sha512-ejQqpTfORy6TT5w1x/2IQkscgfbtNFjitcFDu63GRz7qfhVTYhMdiJvJ1+Aw9hmv9bO4tXThGQDr1IF5lIvgew==
+
+"@svgr/babel-plugin-svg-dynamic-title@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.0.0.tgz#eb8d50b80ba0a26f9b27c7268e2a803d90f1bc9e"
+  integrity sha512-OE6GT9WRKWqd0Dk6NJ5TYXTF5OxAyn74+c/D+gTLbCXnK2A0luEXuwMbe5zR5Px4A/jow2OeEBboTENl4vtuQg==
+
+"@svgr/babel-plugin-svg-em-dimensions@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.0.0.tgz#0de3972c46ff1960bed765646037a3a7f9e1da3d"
+  integrity sha512-QeDRGHXfjYEBTXxV0TsjWmepsL9Up5BOOlMFD557x2JrSiVGUn2myNxHIrHiVW0+nnWnaDcrkjg/jUvbJ5nKCg==
+
+"@svgr/babel-plugin-transform-react-native-svg@^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.0.0.tgz#5e8ecc2a9870ae05fb1e553b1fe9c6b5853a1c66"
+  integrity sha512-c6eE6ovs14k6dmHKoy26h7iRFhjWNnwYVrDWIPfouVm/gcLIeMw/ME4i91O5LEfaDHs6kTRCcVpbAVbNULZOtw==
+
+"@svgr/babel-plugin-transform-svg-component@^4.1.0":
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.1.0.tgz#257159e28a21ac20988b1eaa5f59d4724f37fdaa"
+  integrity sha512-uulxdx2p3nrM2BkrtADQHK8IhEzCxdUILfC/ddvFC8tlFWuKiA3ych8C6q0ulyQHq34/3hzz+3rmUbhWF9redg==
+
+"@svgr/babel-preset@^4.1.0":
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-4.1.0.tgz#f6fa8ad90064b85dd7a3566a70b7006e789e8385"
+  integrity sha512-Nat5aJ3VO3LE8KfMyIbd3sGWnaWPiFCeWIdEV+lalga0To/tpmzsnPDdnrR9fNYhvSSLJbwhU/lrLYt9wXY0ZQ==
+  dependencies:
+    "@svgr/babel-plugin-add-jsx-attribute" "^4.0.0"
+    "@svgr/babel-plugin-remove-jsx-attribute" "^4.0.3"
+    "@svgr/babel-plugin-remove-jsx-empty-expression" "^4.0.0"
+    "@svgr/babel-plugin-replace-jsx-attribute-value" "^4.0.0"
+    "@svgr/babel-plugin-svg-dynamic-title" "^4.0.0"
+    "@svgr/babel-plugin-svg-em-dimensions" "^4.0.0"
+    "@svgr/babel-plugin-transform-react-native-svg" "^4.0.0"
+    "@svgr/babel-plugin-transform-svg-component" "^4.1.0"
+
+"@svgr/core@^4.1.0":
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/@svgr/core/-/core-4.1.0.tgz#4f8ad24fb4ab25c787c12a6bbb511c6430558f83"
+  integrity sha512-ahv3lvOKuUAcs0KbQ4Jr5fT5pGHhye4ew8jZVS4lw8IQdWrbG/o3rkpgxCPREBk7PShmEoGQpteeXVwp2yExuQ==
+  dependencies:
+    "@svgr/plugin-jsx" "^4.1.0"
+    camelcase "^5.0.0"
+    cosmiconfig "^5.0.7"
+
+"@svgr/hast-util-to-babel-ast@^4.1.0":
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.1.0.tgz#a1eb0f47059769896f759f47995b636fce5d9fa4"
+  integrity sha512-tdkEZHmigYYiVhIEzycAMKN5aUSpddUnjr6v7bPwaNTFuSyqGUrpCg1JlIGi7PUaaJVHbn6whGQMGUpKOwT5nw==
+  dependencies:
+    "@babel/types" "^7.1.6"
+
+"@svgr/plugin-jsx@^4.1.0":
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-4.1.0.tgz#4045e9cc0589374a6c182a1217c80e6734b5cbec"
+  integrity sha512-xwu+9TGziuN7cu7p+vhCw2EJIfv8iDNMzn2dR0C7fBYc8q+SRtYTcg4Uyn8ZWh6DM+IZOlVrS02VEMT0FQzXSA==
+  dependencies:
+    "@babel/core" "^7.1.6"
+    "@svgr/babel-preset" "^4.1.0"
+    "@svgr/hast-util-to-babel-ast" "^4.1.0"
+    rehype-parse "^6.0.0"
+    unified "^7.0.2"
+    vfile "^3.0.1"
+
+"@svgr/plugin-svgo@^4.0.3":
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-4.0.3.tgz#a07ea0a736c26fa3a5440fe8e222e2e887764cab"
+  integrity sha512-MgL1CrlxvNe+1tQjPUc2bIJtsdJOIE5arbHlPgW+XVWGjMZTUcyNNP8R7/IjM2Iyrc98UJY+WYiiWHrinnY9ZQ==
+  dependencies:
+    cosmiconfig "^5.0.7"
+    merge-deep "^3.0.2"
+    svgo "^1.1.1"
+
+"@svgr/webpack@^4.0.3":
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-4.1.0.tgz#20c88f32f731c7b1d4711045b2b993887d731c28"
+  integrity sha512-d09ehQWqLMywP/PT/5JvXwPskPK9QCXUjiSkAHehreB381qExXf5JFCBWhfEyNonRbkIneCeYM99w+Ud48YIQQ==
+  dependencies:
+    "@babel/core" "^7.1.6"
+    "@babel/plugin-transform-react-constant-elements" "^7.0.0"
+    "@babel/preset-env" "^7.1.6"
+    "@babel/preset-react" "^7.0.0"
+    "@svgr/core" "^4.1.0"
+    "@svgr/plugin-jsx" "^4.1.0"
+    "@svgr/plugin-svgo" "^4.0.3"
+    loader-utils "^1.1.0"
 
 "@types/json5@^0.0.29":
   version "0.0.29"
   resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
 
-"@types/lodash@^4.14.116":
-  version "4.14.116"
-  resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.116.tgz#5ccf215653e3e8c786a58390751033a9adca0eb9"
+"@types/lodash@^4.14.123":
+  version "4.14.123"
+  resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.123.tgz#39be5d211478c8dd3bdae98ee75bb7efe4abfe4d"
+  integrity sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==
 
-"@types/mathjs@^4.4.1":
-  version "4.4.1"
-  resolved "https://registry.yarnpkg.com/@types/mathjs/-/mathjs-4.4.1.tgz#ce876a823848486f3675f8573e93f2d282feba19"
+"@types/mathjs@^5.0.1":
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/@types/mathjs/-/mathjs-5.0.1.tgz#b98e163ea396b4f27bec20ee25ffb8fe9e656af8"
+  integrity sha512-EFBuueI+BRed9bnUO6/9my55b4FH+VQIvqMm58h9JGbtaGCkqr3YSDhnmVbM1SJjF//8SURERSypzNwejOk7lA==
   dependencies:
     decimal.js "^10.0.0"
 
@@ -1062,156 +1636,209 @@
   dependencies:
     "@types/react" "*"
 
-"@types/react-dom@^16.0.7":
-  version "16.0.7"
-  resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.7.tgz#54d0f867a76b90597e8432030d297982f25c20ba"
+"@types/q@^1.5.1":
+  version "1.5.2"
+  resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
+  integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
+
+"@types/react-dom@^16.8.3":
+  version "16.8.3"
+  resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.8.3.tgz#6131b7b6158bc7ed1925a3374b88b7c00481f0cb"
+  integrity sha512-HF5hD5YR3z9Mn6kXcW1VKe4AQ04ZlZj1EdLBae61hzQ3eEWWxMgNLUbIxeZp40BnSxqY1eAYLsH9QopQcxzScA==
   dependencies:
-    "@types/node" "*"
     "@types/react" "*"
 
-"@types/react@*", "@types/react@^16.4.14":
+"@types/react@*":
   version "16.4.14"
   resolved "https://registry.yarnpkg.com/@types/react/-/react-16.4.14.tgz#47c604c8e46ed674bbdf4aabf82b34b9041c6a04"
   dependencies:
     "@types/prop-types" "*"
     csstype "^2.2.0"
 
-"@webassemblyjs/ast@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.6.tgz#3ef8c45b3e5e943a153a05281317474fef63e21e"
+"@types/react@^16.8.8":
+  version "16.8.8"
+  resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.8.tgz#4b60a469fd2469f7aa6eaa0f8cfbc51f6d76e662"
+  integrity sha512-xwEvyet96u7WnB96kqY0yY7qxx/pEpU51QeACkKFtrgjjXITQn0oO1iwPEraXVgh10ZFPix7gs1R4OJXF7P5sg==
   dependencies:
-    "@webassemblyjs/helper-module-context" "1.7.6"
-    "@webassemblyjs/helper-wasm-bytecode" "1.7.6"
-    "@webassemblyjs/wast-parser" "1.7.6"
-    mamacro "^0.0.3"
-
-"@webassemblyjs/floating-point-hex-parser@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz#7cb37d51a05c3fe09b464ae7e711d1ab3837801f"
-
-"@webassemblyjs/helper-api-error@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz#99b7e30e66f550a2638299a109dda84a622070ef"
+    "@types/prop-types" "*"
+    csstype "^2.2.0"
 
-"@webassemblyjs/helper-buffer@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz#ba0648be12bbe560c25c997e175c2018df39ca3e"
+"@types/unist@*", "@types/unist@^2.0.0":
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
+  integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
 
-"@webassemblyjs/helper-code-frame@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz#5a94d21b0057b69a7403fca0c253c3aaca95b1a5"
+"@types/vfile-message@*":
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-1.0.1.tgz#e1e9895cc6b36c462d4244e64e6d0b6eaf65355a"
+  integrity sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==
   dependencies:
-    "@webassemblyjs/wast-printer" "1.7.6"
-
-"@webassemblyjs/helper-fsm@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz#ae1741c6f6121213c7a0b587fb964fac492d3e49"
+    "@types/node" "*"
+    "@types/unist" "*"
 
-"@webassemblyjs/helper-module-context@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz#116d19a51a6cebc8900ad53ca34ff8269c668c23"
+"@types/vfile@^3.0.0":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@types/vfile/-/vfile-3.0.2.tgz#19c18cd232df11ce6fa6ad80259bc86c366b09b9"
+  integrity sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==
   dependencies:
+    "@types/node" "*"
+    "@types/unist" "*"
+    "@types/vfile-message" "*"
+
+"@webassemblyjs/ast@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359"
+  integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==
+  dependencies:
+    "@webassemblyjs/helper-module-context" "1.8.5"
+    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+    "@webassemblyjs/wast-parser" "1.8.5"
+
+"@webassemblyjs/floating-point-hex-parser@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721"
+  integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==
+
+"@webassemblyjs/helper-api-error@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7"
+  integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==
+
+"@webassemblyjs/helper-buffer@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204"
+  integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==
+
+"@webassemblyjs/helper-code-frame@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e"
+  integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==
+  dependencies:
+    "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/helper-fsm@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452"
+  integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==
+
+"@webassemblyjs/helper-module-context@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245"
+  integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
     mamacro "^0.0.3"
 
-"@webassemblyjs/helper-wasm-bytecode@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz#98e515eaee611aa6834eb5f6a7f8f5b29fefb6f1"
+"@webassemblyjs/helper-wasm-bytecode@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61"
+  integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==
 
-"@webassemblyjs/helper-wasm-section@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz#783835867bdd686df7a95377ab64f51a275e8333"
+"@webassemblyjs/helper-wasm-section@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf"
+  integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==
   dependencies:
-    "@webassemblyjs/ast" "1.7.6"
-    "@webassemblyjs/helper-buffer" "1.7.6"
-    "@webassemblyjs/helper-wasm-bytecode" "1.7.6"
-    "@webassemblyjs/wasm-gen" "1.7.6"
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/helper-buffer" "1.8.5"
+    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+    "@webassemblyjs/wasm-gen" "1.8.5"
 
-"@webassemblyjs/ieee754@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz#c34fc058f2f831fae0632a8bb9803cf2d3462eb1"
+"@webassemblyjs/ieee754@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e"
+  integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==
   dependencies:
     "@xtuc/ieee754" "^1.2.0"
 
-"@webassemblyjs/leb128@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.6.tgz#197f75376a29f6ed6ace15898a310d871d92f03b"
-  dependencies:
-    "@xtuc/long" "4.2.1"
-
-"@webassemblyjs/utf8@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.6.tgz#eb62c66f906af2be70de0302e29055d25188797d"
-
-"@webassemblyjs/wasm-edit@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz#fa41929160cd7d676d4c28ecef420eed5b3733c5"
-  dependencies:
-    "@webassemblyjs/ast" "1.7.6"
-    "@webassemblyjs/helper-buffer" "1.7.6"
-    "@webassemblyjs/helper-wasm-bytecode" "1.7.6"
-    "@webassemblyjs/helper-wasm-section" "1.7.6"
-    "@webassemblyjs/wasm-gen" "1.7.6"
-    "@webassemblyjs/wasm-opt" "1.7.6"
-    "@webassemblyjs/wasm-parser" "1.7.6"
-    "@webassemblyjs/wast-printer" "1.7.6"
-
-"@webassemblyjs/wasm-gen@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz#695ac38861ab3d72bf763c8c75e5f087ffabc322"
-  dependencies:
-    "@webassemblyjs/ast" "1.7.6"
-    "@webassemblyjs/helper-wasm-bytecode" "1.7.6"
-    "@webassemblyjs/ieee754" "1.7.6"
-    "@webassemblyjs/leb128" "1.7.6"
-    "@webassemblyjs/utf8" "1.7.6"
-
-"@webassemblyjs/wasm-opt@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz#fbafa78e27e1a75ab759a4b658ff3d50b4636c21"
-  dependencies:
-    "@webassemblyjs/ast" "1.7.6"
-    "@webassemblyjs/helper-buffer" "1.7.6"
-    "@webassemblyjs/wasm-gen" "1.7.6"
-    "@webassemblyjs/wasm-parser" "1.7.6"
-
-"@webassemblyjs/wasm-parser@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz#84eafeeff405ad6f4c4b5777d6a28ae54eed51fe"
-  dependencies:
-    "@webassemblyjs/ast" "1.7.6"
-    "@webassemblyjs/helper-api-error" "1.7.6"
-    "@webassemblyjs/helper-wasm-bytecode" "1.7.6"
-    "@webassemblyjs/ieee754" "1.7.6"
-    "@webassemblyjs/leb128" "1.7.6"
-    "@webassemblyjs/utf8" "1.7.6"
-
-"@webassemblyjs/wast-parser@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.6.tgz#ca4d20b1516e017c91981773bd7e819d6bd9c6a7"
-  dependencies:
-    "@webassemblyjs/ast" "1.7.6"
-    "@webassemblyjs/floating-point-hex-parser" "1.7.6"
-    "@webassemblyjs/helper-api-error" "1.7.6"
-    "@webassemblyjs/helper-code-frame" "1.7.6"
-    "@webassemblyjs/helper-fsm" "1.7.6"
-    "@xtuc/long" "4.2.1"
-    mamacro "^0.0.3"
-
-"@webassemblyjs/wast-printer@1.7.6":
-  version "1.7.6"
-  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz#a6002c526ac5fa230fe2c6d2f1bdbf4aead43a5e"
-  dependencies:
-    "@webassemblyjs/ast" "1.7.6"
-    "@webassemblyjs/wast-parser" "1.7.6"
-    "@xtuc/long" "4.2.1"
+"@webassemblyjs/leb128@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10"
+  integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==
+  dependencies:
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc"
+  integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==
+
+"@webassemblyjs/wasm-edit@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a"
+  integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/helper-buffer" "1.8.5"
+    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+    "@webassemblyjs/helper-wasm-section" "1.8.5"
+    "@webassemblyjs/wasm-gen" "1.8.5"
+    "@webassemblyjs/wasm-opt" "1.8.5"
+    "@webassemblyjs/wasm-parser" "1.8.5"
+    "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/wasm-gen@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc"
+  integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+    "@webassemblyjs/ieee754" "1.8.5"
+    "@webassemblyjs/leb128" "1.8.5"
+    "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wasm-opt@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264"
+  integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/helper-buffer" "1.8.5"
+    "@webassemblyjs/wasm-gen" "1.8.5"
+    "@webassemblyjs/wasm-parser" "1.8.5"
+
+"@webassemblyjs/wasm-parser@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d"
+  integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/helper-api-error" "1.8.5"
+    "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+    "@webassemblyjs/ieee754" "1.8.5"
+    "@webassemblyjs/leb128" "1.8.5"
+    "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wast-parser@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c"
+  integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/floating-point-hex-parser" "1.8.5"
+    "@webassemblyjs/helper-api-error" "1.8.5"
+    "@webassemblyjs/helper-code-frame" "1.8.5"
+    "@webassemblyjs/helper-fsm" "1.8.5"
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.8.5":
+  version "1.8.5"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc"
+  integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/wast-parser" "1.8.5"
+    "@xtuc/long" "4.2.2"
 
 "@xtuc/ieee754@^1.2.0":
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
 
-"@xtuc/long@4.2.1":
-  version "4.2.1"
-  resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8"
+"@xtuc/long@4.2.2":
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
 
 abbrev@1:
   version "1.1.1"
@@ -1224,23 +1851,24 @@ accepts@~1.3.5:
     mime-types "~2.1.18"
     negotiator "0.6.1"
 
-acorn-dynamic-import@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278"
-  dependencies:
-    acorn "^5.0.0"
+acorn-dynamic-import@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948"
+  integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==
 
-acorn@^5.0.0, acorn@^5.6.2:
-  version "5.7.3"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
+acorn@^6.0.5:
+  version "6.1.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f"
+  integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==
 
 address@1.0.3, address@^1.0.1:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
 
-airbnb-js-shims@^2.1.0:
+"airbnb-js-shims@^1 || ^2":
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.1.1.tgz#a509611480db7e6d9db62fe2acfaeb473b6842ac"
+  integrity sha512-h8UtyB/TCdOwWoEPQJGHgsWwSnTqPrRZbhyZYjAwY9/AbjdjfkKy9L/T3fIFS6MKX8YrpWFRm6xqFSgU+2DRGw==
   dependencies:
     array-includes "^3.0.3"
     array.prototype.flat "^1.2.1"
@@ -1266,7 +1894,7 @@ ajv-keywords@^3.1.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a"
 
-ajv@^5.1.0, ajv@^5.3.0:
+ajv@^5.3.0:
   version "5.5.2"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
   dependencies:
@@ -1288,6 +1916,13 @@ amdefine@>=0.0.4:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
 
+ansi-align@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb"
+  integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==
+  dependencies:
+    string-width "^3.0.0"
+
 ansi-colors@^3.0.0:
   version "3.0.5"
   resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.0.5.tgz#cb9dc64993b64fd6945485f797fc3853137d9a7b"
@@ -1296,6 +1931,11 @@ ansi-escapes@^3.0.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
 
+ansi-escapes@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+  integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
 ansi-html@0.0.7:
   version "0.0.7"
   resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
@@ -1308,6 +1948,11 @@ ansi-regex@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
 
+ansi-regex@^4.0.0, ansi-regex@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
 ansi-styles@^2.2.1:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
@@ -1451,9 +2096,15 @@ assign-symbols@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
 
-ast-types@0.11.5:
-  version "0.11.5"
-  resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.5.tgz#9890825d660c03c28339f315e9fa0a360e31ec28"
+ast-types@0.11.3:
+  version "0.11.3"
+  resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8"
+  integrity sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==
+
+ast-types@0.11.7:
+  version "0.11.7"
+  resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.7.tgz#f318bf44e339db6a320be0009ded64ec1471f46c"
+  integrity sha512-2mP3TwtkY/aTv5X3ZsMpNAbOnyoC/aMJwJSoaELPkHId0nSQgFcnU4dRW3isxiz7+zBexk0ym3WNVjMiQBnJSw==
 
 async-each@^1.0.0:
   version "1.0.1"
@@ -1477,16 +2128,17 @@ atob@^2.1.1:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
 
-autoprefixer@^9.1.3:
-  version "9.1.5"
-  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.1.5.tgz#8675fd8d1c0d43069f3b19a2c316f3524e4f6671"
+autoprefixer@^9.4.7:
+  version "9.5.0"
+  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.5.0.tgz#7e51d0355c11596e6cf9a0afc9a44e86d1596c70"
+  integrity sha512-hMKcyHsZn5+qL6AUeP3c8OyuteZ4VaUlg+fWbyl8z7PqsKHF/Bf8/px3K6AT8aMzDkBo8Bc11245MM+itDBOxQ==
   dependencies:
-    browserslist "^4.1.0"
-    caniuse-lite "^1.0.30000884"
+    browserslist "^4.4.2"
+    caniuse-lite "^1.0.30000947"
     normalize-range "^0.1.2"
     num2fraction "^1.2.2"
-    postcss "^7.0.2"
-    postcss-value-parser "^3.2.3"
+    postcss "^7.0.14"
+    postcss-value-parser "^3.3.1"
 
 awesome-typescript-loader@5:
   version "5.2.1"
@@ -1505,336 +2157,335 @@ aws-sign2@~0.7.0:
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
 
-aws4@^1.6.0, aws4@^1.8.0:
+aws4@^1.8.0:
   version "1.8.0"
   resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
 
-babel-code-frame@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
-  dependencies:
-    chalk "^1.1.3"
-    esutils "^2.0.2"
-    js-tokens "^3.0.2"
-
-babel-core@^6.26.0, babel-core@^6.26.3:
-  version "6.26.3"
-  resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
-  dependencies:
-    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"
-
-babel-generator@^6.26.0:
-  version "6.26.1"
-  resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
-  dependencies:
-    babel-messages "^6.23.0"
-    babel-runtime "^6.26.0"
-    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"
-
-babel-helper-evaluate-path@^0.5.0-alpha.e9f96ffe:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0-alpha.e9f96ffe.tgz#5da27bfe87a830a7fad3676770e09d9e51a48104"
+babel-helper-evaluate-path@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz#a62fa9c4e64ff7ea5cea9353174ef023a900a67c"
+  integrity sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==
 
-babel-helper-flip-expressions@^0.5.0-alpha.e9f96ffe:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.5.0-alpha.e9f96ffe.tgz#fa3929314172a13a56cbc82b395c4e2c6c098025"
+babel-helper-flip-expressions@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz#3696736a128ac18bc25254b5f40a22ceb3c1d3fd"
+  integrity sha1-NpZzahKKwYvCUlS19AoizrPB0/0=
 
 babel-helper-is-nodes-equiv@^0.0.1:
   version "0.0.1"
   resolved "http://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684"
 
-babel-helper-is-void-0@^0.5.0-alpha.e9f96ffe:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.5.0-alpha.e9f96ffe.tgz#e1c0c51dad35638c1c1c2e2f6f1069a9fe0be0af"
-
-babel-helper-mark-eval-scopes@^0.5.0-alpha.e9f96ffe:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.5.0-alpha.e9f96ffe.tgz#f1d80062ff70b1dd6b7321c1ce5377e65d128c0e"
+babel-helper-is-void-0@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz#7d9c01b4561e7b95dbda0f6eee48f5b60e67313e"
+  integrity sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=
 
-babel-helper-remove-or-void@^0.5.0-alpha.e9f96ffe:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.5.0-alpha.e9f96ffe.tgz#e5992fa19341d02c2f6b02a14cec8c1f5471d3be"
+babel-helper-mark-eval-scopes@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz#d244a3bef9844872603ffb46e22ce8acdf551562"
+  integrity sha1-0kSjvvmESHJgP/tG4izorN9VFWI=
 
-babel-helper-to-multiple-sequence-expressions@^0.5.0-alpha.e9f96ffe:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0-alpha.e9f96ffe.tgz#ab4830d63f1698f1379c09a6782bf589ac11cd01"
+babel-helper-remove-or-void@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz#a4f03b40077a0ffe88e45d07010dee241ff5ae60"
+  integrity sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=
 
-babel-helpers@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
+babel-helper-to-multiple-sequence-expressions@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz#a3f924e3561882d42fcf48907aa98f7979a4588d"
+  integrity sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==
 
-babel-loader@^8.0.2:
-  version "8.0.2"
-  resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.2.tgz#2079b8ec1628284a929241da3d90f5b3de2a5ae5"
+babel-loader@8.0.5, babel-loader@^8.0.5:
+  version "8.0.5"
+  resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.5.tgz#225322d7509c2157655840bba52e46b6c2f2fe33"
+  integrity sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==
   dependencies:
-    find-cache-dir "^1.0.0"
+    find-cache-dir "^2.0.0"
     loader-utils "^1.0.2"
     mkdirp "^0.5.1"
     util.promisify "^1.0.0"
 
-babel-messages@^6.23.0:
-  version "6.23.0"
-  resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+babel-plugin-add-react-displayname@^0.0.5:
+  version "0.0.5"
+  resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5"
+  integrity sha1-M51M3be2X9YtHfnbn+BN4TQSK9U=
+
+babel-plugin-dynamic-import-node@2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz#c0adfb07d95f4a4495e9aaac6ec386c4d7c2524e"
+  integrity sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA==
+  dependencies:
+    object.assign "^4.1.0"
+
+babel-plugin-emotion@^10.0.7, babel-plugin-emotion@^10.0.9:
+  version "10.0.9"
+  resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.9.tgz#04a0404d5a4084d5296357a393d344c0f8303ae4"
+  integrity sha512-IfWP12e9/wHtWHxVTzD692Nbcmrmcz2tip7acp6YUqtrP7slAyr5B+69hyZ8jd55GsyNSZwryNnmuDEVe0j+7w==
   dependencies:
-    babel-runtime "^6.22.0"
+    "@babel/helper-module-imports" "^7.0.0"
+    "@emotion/hash" "0.7.1"
+    "@emotion/memoize" "0.7.1"
+    "@emotion/serialize" "^0.11.6"
+    babel-plugin-macros "^2.0.0"
+    babel-plugin-syntax-jsx "^6.18.0"
+    convert-source-map "^1.5.0"
+    escape-string-regexp "^1.0.5"
+    find-root "^1.1.0"
+    source-map "^0.5.7"
 
-babel-plugin-emotion@^9.2.8:
-  version "9.2.8"
-  resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-9.2.8.tgz#4df55ef10625c391f25b031f7e3006abac359e09"
+babel-plugin-emotion@^9.2.11:
+  version "9.2.11"
+  resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-9.2.11.tgz#319c005a9ee1d15bb447f59fe504c35fd5807728"
+  integrity sha512-dgCImifnOPPSeXod2znAmgc64NhaaOjGEHROR/M+lmStb3841yK1sgaDYAYMnlvWNz8GnpwIPN0VmNpbWYZ+VQ==
   dependencies:
-    "@babel/helper-module-imports" "7.0.0-beta.51"
+    "@babel/helper-module-imports" "^7.0.0"
     "@emotion/babel-utils" "^0.6.4"
     "@emotion/hash" "^0.6.2"
     "@emotion/memoize" "^0.6.1"
     "@emotion/stylis" "^0.7.0"
-    babel-core "^6.26.3"
     babel-plugin-macros "^2.0.0"
     babel-plugin-syntax-jsx "^6.18.0"
     convert-source-map "^1.5.0"
     find-root "^1.1.0"
     mkdirp "^0.5.1"
     source-map "^0.5.7"
-    touch "^1.0.0"
+    touch "^2.0.1"
+
+babel-plugin-macros@2.5.0, babel-plugin-macros@^2.4.5:
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.5.0.tgz#01f4d3b50ed567a67b80a30b9da066e94f4097b6"
+  integrity sha512-BWw0lD0kVZAXRD3Od1kMrdmfudqzDzYv2qrN3l2ISR1HVp1EgLKfbOrYV9xmY5k3qx3RIu5uPAUZZZHpo0o5Iw==
+  dependencies:
+    cosmiconfig "^5.0.5"
+    resolve "^1.8.1"
 
-babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.2.2:
+babel-plugin-macros@^2.0.0:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.4.0.tgz#6c5f9836e1f6c0a9743b3bab4af29f73e437e544"
   dependencies:
     cosmiconfig "^5.0.5"
 
-babel-plugin-minify-builtins@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0-alpha.e9f96ffe.tgz#22a40d257f12f43fbe12731a82b54866b9f753bb"
-  dependencies:
-    babel-helper-evaluate-path "^0.5.0-alpha.e9f96ffe"
+babel-plugin-minify-builtins@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz#31eb82ed1a0d0efdc31312f93b6e4741ce82c36b"
+  integrity sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==
 
-babel-plugin-minify-constant-folding@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0-alpha.e9f96ffe.tgz#d4b4c444ca9716d3fd34093fc7298b2585e64a73"
+babel-plugin-minify-constant-folding@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz#f84bc8dbf6a561e5e350ff95ae216b0ad5515b6e"
+  integrity sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==
   dependencies:
-    babel-helper-evaluate-path "^0.5.0-alpha.e9f96ffe"
+    babel-helper-evaluate-path "^0.5.0"
 
-babel-plugin-minify-dead-code-elimination@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.0-alpha.e9f96ffe.tgz#1f450f52831ede977e0cbcc23d4909aba31e8255"
+babel-plugin-minify-dead-code-elimination@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.0.tgz#d23ef5445238ad06e8addf5c1cf6aec835bcda87"
+  integrity sha512-XQteBGXlgEoAKc/BhO6oafUdT4LBa7ARi55mxoyhLHNuA+RlzRmeMAfc31pb/UqU01wBzRc36YqHQzopnkd/6Q==
   dependencies:
-    babel-helper-evaluate-path "^0.5.0-alpha.e9f96ffe"
-    babel-helper-mark-eval-scopes "^0.5.0-alpha.e9f96ffe"
-    babel-helper-remove-or-void "^0.5.0-alpha.e9f96ffe"
+    babel-helper-evaluate-path "^0.5.0"
+    babel-helper-mark-eval-scopes "^0.4.3"
+    babel-helper-remove-or-void "^0.4.3"
     lodash.some "^4.6.0"
 
-babel-plugin-minify-flip-comparisons@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.5.0-alpha.e9f96ffe.tgz#a0443772d1e0b8c6c06499cf9ac27979519a3bd4"
+babel-plugin-minify-flip-comparisons@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz#00ca870cb8f13b45c038b3c1ebc0f227293c965a"
+  integrity sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=
   dependencies:
-    babel-helper-is-void-0 "^0.5.0-alpha.e9f96ffe"
+    babel-helper-is-void-0 "^0.4.3"
 
-babel-plugin-minify-guarded-expressions@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.5.0-alpha.e9f96ffe.tgz#48a9040c4863ce079840f1f7c7b80b9056bc20a7"
+babel-plugin-minify-guarded-expressions@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.3.tgz#cc709b4453fd21b1f302877444c89f88427ce397"
+  integrity sha1-zHCbRFP9IbHzAod0RMifiEJ845c=
   dependencies:
-    babel-helper-flip-expressions "^0.5.0-alpha.e9f96ffe"
+    babel-helper-flip-expressions "^0.4.3"
 
-babel-plugin-minify-infinity@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.5.0-alpha.e9f96ffe.tgz#1eff5cf31e4400202a53ebb90f28083c4d0d06bc"
+babel-plugin-minify-infinity@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz#dfb876a1b08a06576384ef3f92e653ba607b39ca"
+  integrity sha1-37h2obCKBldjhO8/kuZTumB7Oco=
 
-babel-plugin-minify-mangle-names@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0-alpha.e9f96ffe.tgz#9867fa057f90ed81bfc7668730f3fb323918bccc"
+babel-plugin-minify-mangle-names@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz#bcddb507c91d2c99e138bd6b17a19c3c271e3fd3"
+  integrity sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==
   dependencies:
-    babel-helper-mark-eval-scopes "^0.5.0-alpha.e9f96ffe"
+    babel-helper-mark-eval-scopes "^0.4.3"
 
-babel-plugin-minify-numeric-literals@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.5.0-alpha.e9f96ffe.tgz#07be5d3fed33f2d740a706a14b24439161c840ee"
+babel-plugin-minify-numeric-literals@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz#8e4fd561c79f7801286ff60e8c5fd9deee93c0bc"
+  integrity sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=
 
-babel-plugin-minify-replace@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0-alpha.e9f96ffe.tgz#8ecdeb5e6860279e6406381a82c612b389435957"
+babel-plugin-minify-replace@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz#d3e2c9946c9096c070efc96761ce288ec5c3f71c"
+  integrity sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==
 
-babel-plugin-minify-simplify@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.0-alpha.e9f96ffe.tgz#5d027f8cf4d82330c2021ffa4fac44c0ec806d24"
+babel-plugin-minify-simplify@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.0.tgz#1f090018afb90d8b54d3d027fd8a4927f243da6f"
+  integrity sha512-TM01J/YcKZ8XIQd1Z3nF2AdWHoDsarjtZ5fWPDksYZNsoOjQ2UO2EWm824Ym6sp127m44gPlLFiO5KFxU8pA5Q==
   dependencies:
-    babel-helper-flip-expressions "^0.5.0-alpha.e9f96ffe"
+    babel-helper-flip-expressions "^0.4.3"
     babel-helper-is-nodes-equiv "^0.0.1"
-    babel-helper-to-multiple-sequence-expressions "^0.5.0-alpha.e9f96ffe"
+    babel-helper-to-multiple-sequence-expressions "^0.5.0"
 
-babel-plugin-minify-type-constructors@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.5.0-alpha.e9f96ffe.tgz#116b76e4b4953c89f2c836769eec9464643e6b46"
+babel-plugin-minify-type-constructors@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz#1bc6f15b87f7ab1085d42b330b717657a2156500"
+  integrity sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=
   dependencies:
-    babel-helper-is-void-0 "^0.5.0-alpha.e9f96ffe"
+    babel-helper-is-void-0 "^0.4.3"
 
-babel-plugin-react-docgen@^2.0.0-babel7.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-2.0.0.tgz#039d90f5a1a37131c8cc3015017eecafa8d78882"
+babel-plugin-named-asset-import@^0.3.0:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.1.tgz#5ec13ec446d0a1e5bb6c57a1f94c9cdedb0c50d6"
+  integrity sha512-vzZlo+yEB5YHqI6CRRTDojeT43J3Wf3C/MVkZW5UlbSeIIVUYRKtxaFT2L/VTv9mbIyatCW39+9g/SZolvwRUQ==
+
+babel-plugin-react-docgen@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-2.0.2.tgz#3307e27414c370365710576b7fadbcaf8984d862"
+  integrity sha512-fFendfUUU2KqqE1ki2NyQoZm4uHPoEWPUgBZiPBiowcPZos+4q+chdQh0nlwY5hxs08AMHSH4Pp98RQL0VFS/g==
   dependencies:
     lodash "^4.17.10"
-    react-docgen "^3.0.0-rc.1"
+    react-docgen "^3.0.0"
+    recast "^0.14.7"
 
 babel-plugin-syntax-jsx@^6.18.0:
   version "6.18.0"
   resolved "http://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
 
-babel-plugin-transform-inline-consecutive-adds@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.5.0-alpha.e9f96ffe.tgz#d485c6ca183e15e865fec5731aadc831e2083022"
+babel-plugin-transform-inline-consecutive-adds@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz#323d47a3ea63a83a7ac3c811ae8e6941faf2b0d1"
+  integrity sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=
 
-babel-plugin-transform-member-expression-literals@^6.10.0-alpha.3cc09dcf:
-  version "6.10.0-alpha.f95869d4"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.10.0-alpha.f95869d4.tgz#272ebd2a2d4341b86c24dcd84374ae5aa3702874"
+babel-plugin-transform-member-expression-literals@^6.9.4:
+  version "6.9.4"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz#37039c9a0c3313a39495faac2ff3a6b5b9d038bf"
+  integrity sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=
 
-babel-plugin-transform-merge-sibling-variables@^6.10.0-alpha.3cc09dcf:
-  version "6.10.0-alpha.f95869d4"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.10.0-alpha.f95869d4.tgz#48a330d28293e318d07175c260c74859e7398b43"
+babel-plugin-transform-merge-sibling-variables@^6.9.4:
+  version "6.9.4"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz#85b422fc3377b449c9d1cde44087203532401dae"
+  integrity sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=
 
-babel-plugin-transform-minify-booleans@^6.10.0-alpha.3cc09dcf:
-  version "6.10.0-alpha.f95869d4"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.10.0-alpha.f95869d4.tgz#1deef69c22135038a91de1f5d13d759e3464c43c"
+babel-plugin-transform-minify-booleans@^6.9.4:
+  version "6.9.4"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz#acbb3e56a3555dd23928e4b582d285162dd2b198"
+  integrity sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=
 
-babel-plugin-transform-property-literals@^6.10.0-alpha.3cc09dcf:
-  version "6.10.0-alpha.f95869d4"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.10.0-alpha.f95869d4.tgz#37127aaa04125c3d08bf95cdb5a8f1d2e44ca453"
+babel-plugin-transform-property-literals@^6.9.4:
+  version "6.9.4"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz#98c1d21e255736573f93ece54459f6ce24985d39"
+  integrity sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=
   dependencies:
     esutils "^2.0.2"
 
-babel-plugin-transform-regexp-constructors@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.5.0-alpha.e9f96ffe.tgz#8d7a283d3bd1645018dbce73e7e3846a68267e66"
-
-babel-plugin-transform-remove-console@^6.10.0-alpha.3cc09dcf:
-  version "6.10.0-alpha.f95869d4"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.10.0-alpha.f95869d4.tgz#c5717af9f76918b2821cfaef44d8245d4ea9422c"
-
-babel-plugin-transform-remove-debugger@^6.10.0-alpha.3cc09dcf:
-  version "6.10.0-alpha.f95869d4"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.10.0-alpha.f95869d4.tgz#1fc35c29c7c0878cf30e558a733651906e888e44"
-
-babel-plugin-transform-remove-undefined@^0.5.0-alpha.3cc09dcf:
-  version "0.5.0-alpha.e9f96ffe"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0-alpha.e9f96ffe.tgz#39f694ee66e3edeb99e2ed4155cf5fb7ac991384"
-  dependencies:
-    babel-helper-evaluate-path "^0.5.0-alpha.e9f96ffe"
-
-babel-plugin-transform-simplify-comparison-operators@^6.10.0-alpha.3cc09dcf:
-  version "6.10.0-alpha.f95869d4"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.10.0-alpha.f95869d4.tgz#f5499a6dc3ed686bda53363866b67dda774c5bed"
-
-babel-plugin-transform-undefined-to-void@^6.10.0-alpha.3cc09dcf:
-  version "6.10.0-alpha.f95869d4"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.10.0-alpha.f95869d4.tgz#175a1a3090e616403f8c819cdcea1aecb66523b2"
-
-babel-preset-minify@canary:
-  version "0.5.0-alpha.3cc09dcf"
-  resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.5.0-alpha.3cc09dcf.tgz#d2f58065ea977d9453f3538e22ea83adff73292b"
-  dependencies:
-    babel-plugin-minify-builtins "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-minify-constant-folding "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-minify-dead-code-elimination "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-minify-flip-comparisons "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-minify-guarded-expressions "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-minify-infinity "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-minify-mangle-names "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-minify-numeric-literals "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-minify-replace "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-minify-simplify "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-minify-type-constructors "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-transform-inline-consecutive-adds "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-transform-member-expression-literals "^6.10.0-alpha.3cc09dcf"
-    babel-plugin-transform-merge-sibling-variables "^6.10.0-alpha.3cc09dcf"
-    babel-plugin-transform-minify-booleans "^6.10.0-alpha.3cc09dcf"
-    babel-plugin-transform-property-literals "^6.10.0-alpha.3cc09dcf"
-    babel-plugin-transform-regexp-constructors "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-transform-remove-console "^6.10.0-alpha.3cc09dcf"
-    babel-plugin-transform-remove-debugger "^6.10.0-alpha.3cc09dcf"
-    babel-plugin-transform-remove-undefined "^0.5.0-alpha.3cc09dcf"
-    babel-plugin-transform-simplify-comparison-operators "^6.10.0-alpha.3cc09dcf"
-    babel-plugin-transform-undefined-to-void "^6.10.0-alpha.3cc09dcf"
-    lodash.isplainobject "^4.0.6"
+babel-plugin-transform-react-remove-prop-types@0.4.24:
+  version "0.4.24"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a"
+  integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==
 
-babel-register@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
-  dependencies:
-    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"
+babel-plugin-transform-regexp-constructors@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz#58b7775b63afcf33328fae9a5f88fbd4fb0b4965"
+  integrity sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=
 
-babel-runtime@6.x.x, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.5.0, babel-runtime@^6.9.2:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
-  dependencies:
-    core-js "^2.4.0"
-    regenerator-runtime "^0.11.0"
+babel-plugin-transform-remove-console@^6.9.4:
+  version "6.9.4"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz#b980360c067384e24b357a588d807d3c83527780"
+  integrity sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=
 
-babel-template@^6.24.1, babel-template@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
-  dependencies:
-    babel-runtime "^6.26.0"
-    babel-traverse "^6.26.0"
-    babel-types "^6.26.0"
-    babylon "^6.18.0"
-    lodash "^4.17.4"
+babel-plugin-transform-remove-debugger@^6.9.4:
+  version "6.9.4"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz#42b727631c97978e1eb2d199a7aec84a18339ef2"
+  integrity sha1-QrcnYxyXl44estGZp67IShgznvI=
 
-babel-traverse@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+babel-plugin-transform-remove-undefined@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz#80208b31225766c630c97fa2d288952056ea22dd"
+  integrity sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==
   dependencies:
-    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"
+    babel-helper-evaluate-path "^0.5.0"
+
+babel-plugin-transform-simplify-comparison-operators@^6.9.4:
+  version "6.9.4"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz#f62afe096cab0e1f68a2d753fdf283888471ceb9"
+  integrity sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=
+
+babel-plugin-transform-undefined-to-void@^6.9.4:
+  version "6.9.4"
+  resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz#be241ca81404030678b748717322b89d0c8fe280"
+  integrity sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=
+
+"babel-preset-minify@^0.5.0 || 0.6.0-alpha.5":
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.5.0.tgz#e25bb8d3590087af02b650967159a77c19bfb96b"
+  integrity sha512-xj1s9Mon+RFubH569vrGCayA9Fm2GMsCgDRm1Jb8SgctOB7KFcrVc2o8K3YHUyMz+SWP8aea75BoS8YfsXXuiA==
+  dependencies:
+    babel-plugin-minify-builtins "^0.5.0"
+    babel-plugin-minify-constant-folding "^0.5.0"
+    babel-plugin-minify-dead-code-elimination "^0.5.0"
+    babel-plugin-minify-flip-comparisons "^0.4.3"
+    babel-plugin-minify-guarded-expressions "^0.4.3"
+    babel-plugin-minify-infinity "^0.4.3"
+    babel-plugin-minify-mangle-names "^0.5.0"
+    babel-plugin-minify-numeric-literals "^0.4.3"
+    babel-plugin-minify-replace "^0.5.0"
+    babel-plugin-minify-simplify "^0.5.0"
+    babel-plugin-minify-type-constructors "^0.4.3"
+    babel-plugin-transform-inline-consecutive-adds "^0.4.3"
+    babel-plugin-transform-member-expression-literals "^6.9.4"
+    babel-plugin-transform-merge-sibling-variables "^6.9.4"
+    babel-plugin-transform-minify-booleans "^6.9.4"
+    babel-plugin-transform-property-literals "^6.9.4"
+    babel-plugin-transform-regexp-constructors "^0.4.3"
+    babel-plugin-transform-remove-console "^6.9.4"
+    babel-plugin-transform-remove-debugger "^6.9.4"
+    babel-plugin-transform-remove-undefined "^0.5.0"
+    babel-plugin-transform-simplify-comparison-operators "^6.9.4"
+    babel-plugin-transform-undefined-to-void "^6.9.4"
+    lodash.isplainobject "^4.0.6"
 
-babel-types@^6.26.0:
+babel-preset-react-app@^7.0.0:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-7.0.2.tgz#d01ae973edc93b9f1015cb0236dd55889a584308"
+  integrity sha512-mwCk/u2wuiO8qQqblN5PlDa44taY0acq7hw6W+a70W522P7a9mIcdggL1fe5/LgAT7tqCq46q9wwhqaMoYKslQ==
+  dependencies:
+    "@babel/core" "7.2.2"
+    "@babel/plugin-proposal-class-properties" "7.3.0"
+    "@babel/plugin-proposal-decorators" "7.3.0"
+    "@babel/plugin-proposal-object-rest-spread" "7.3.2"
+    "@babel/plugin-syntax-dynamic-import" "7.2.0"
+    "@babel/plugin-transform-classes" "7.2.2"
+    "@babel/plugin-transform-destructuring" "7.3.2"
+    "@babel/plugin-transform-flow-strip-types" "7.2.3"
+    "@babel/plugin-transform-react-constant-elements" "7.2.0"
+    "@babel/plugin-transform-react-display-name" "7.2.0"
+    "@babel/plugin-transform-runtime" "7.2.0"
+    "@babel/preset-env" "7.3.1"
+    "@babel/preset-react" "7.0.0"
+    "@babel/preset-typescript" "7.1.0"
+    "@babel/runtime" "7.3.1"
+    babel-loader "8.0.5"
+    babel-plugin-dynamic-import-node "2.2.0"
+    babel-plugin-macros "2.5.0"
+    babel-plugin-transform-react-remove-prop-types "0.4.24"
+
+babel-runtime@^6.18.0, babel-runtime@^6.26.0:
   version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+  resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
   dependencies:
-    babel-runtime "^6.26.0"
-    esutils "^2.0.2"
-    lodash "^4.17.4"
-    to-fast-properties "^1.0.3"
+    core-js "^2.4.0"
+    regenerator-runtime "^0.11.0"
 
-babylon@^6.18.0:
-  version "6.18.0"
-  resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+bail@^1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3"
+  integrity sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==
 
 balanced-match@^1.0.0:
   version "1.0.0"
@@ -1866,6 +2517,11 @@ big.js@^3.1.3:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
 
+big.js@^5.2.2:
+  version "5.2.2"
+  resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+  integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
 binary-extensions@^1.0.0:
   version "1.11.0"
   resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
@@ -1876,9 +2532,10 @@ block-stream@*:
   dependencies:
     inherits "~2.0.0"
 
-bluebird@^3.5.1:
-  version "3.5.2"
-  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a"
+bluebird@^3.3.5, bluebird@^3.5.3:
+  version "3.5.3"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
+  integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
 
 bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
   version "4.11.8"
@@ -1899,9 +2556,23 @@ body-parser@1.18.2:
     raw-body "2.3.2"
     type-is "~1.6.15"
 
-bowser@^1.7.3:
-  version "1.9.4"
-  resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a"
+boolbase@^1.0.0, boolbase@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
+boxen@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/boxen/-/boxen-2.1.0.tgz#8d576156e33fc26a34d6be8635fd16b1d745f0b2"
+  integrity sha512-luq3RQOt2U5sUX+fiu+qnT+wWnHDcATLpEe63jvge6GUZO99AKbVRfp97d2jgLvq1iQa0ORzaAm4lGVG52ZSlw==
+  dependencies:
+    ansi-align "^3.0.0"
+    camelcase "^5.0.0"
+    chalk "^2.4.1"
+    cli-boxes "^1.0.0"
+    string-width "^3.0.0"
+    term-size "^1.2.0"
+    widest-line "^2.0.0"
 
 brace-expansion@^1.1.7:
   version "1.1.11"
@@ -1982,20 +2653,23 @@ browserify-zlib@^0.2.0:
   dependencies:
     pako "~1.0.5"
 
-browserslist@3.2.6:
-  version "3.2.6"
-  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.6.tgz#138a44d04a9af64443679191d041f28ce5b965d5"
+browserslist@4.4.1:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.1.tgz#42e828954b6b29a7a53e352277be429478a69062"
+  integrity sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==
   dependencies:
-    caniuse-lite "^1.0.30000830"
-    electron-to-chromium "^1.3.42"
+    caniuse-lite "^1.0.30000929"
+    electron-to-chromium "^1.3.103"
+    node-releases "^1.1.3"
 
-browserslist@^4.1.0:
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.1.1.tgz#328eb4ff1215b12df6589e9ab82f8adaa4fc8cd6"
+browserslist@^4.3.4, browserslist@^4.4.2, browserslist@^4.5.1:
+  version "4.5.2"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.2.tgz#36ad281f040af684555a23c780f5c2081c752df0"
+  integrity sha512-zmJVLiKLrzko0iszd/V4SsjTaomFeoVzQGYYOYgRgsbh7WNh95RgDB0CmBdFWYs/3MyFSt69NypjL/h3iaddKQ==
   dependencies:
-    caniuse-lite "^1.0.30000884"
-    electron-to-chromium "^1.3.62"
-    node-releases "^1.0.0-alpha.11"
+    caniuse-lite "^1.0.30000951"
+    electron-to-chromium "^1.3.116"
+    node-releases "^1.1.11"
 
 buffer-from@^1.0.0:
   version "1.1.1"
@@ -2025,22 +2699,24 @@ bytes@3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
 
-cacache@^10.0.4:
-  version "10.0.4"
-  resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460"
-  dependencies:
-    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"
+cacache@^11.0.2:
+  version "11.3.2"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa"
+  integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==
+  dependencies:
+    bluebird "^3.5.3"
+    chownr "^1.1.1"
+    figgy-pudding "^3.5.1"
+    glob "^7.1.3"
+    graceful-fs "^4.1.15"
+    lru-cache "^5.1.1"
+    mississippi "^3.0.0"
     mkdirp "^0.5.1"
     move-concurrently "^1.0.1"
     promise-inflight "^1.0.1"
     rimraf "^2.6.2"
-    ssri "^5.2.4"
-    unique-filename "^1.1.0"
+    ssri "^6.0.1"
+    unique-filename "^1.1.1"
     y18n "^4.0.0"
 
 cache-base@^1.0.1:
@@ -2061,6 +2737,33 @@ call-me-maybe@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
 
+caller-callsite@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+  integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+  dependencies:
+    callsites "^2.0.0"
+
+caller-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+  integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+  dependencies:
+    caller-callsite "^2.0.0"
+
+callsites@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+  integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+camel-case@3.0.x:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+  integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=
+  dependencies:
+    no-case "^2.2.0"
+    upper-case "^1.1.1"
+
 camelcase-keys@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
@@ -2076,31 +2779,40 @@ camelcase@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
 
-camelcase@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+camelcase@^5.0.0, camelcase@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.2.0.tgz#e7522abda5ed94cc0489e1b8466610e88404cf45"
+  integrity sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==
 
-caniuse-lite@^1.0.30000830, caniuse-lite@^1.0.30000884:
-  version "1.0.30000885"
-  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000885.tgz#e889e9f8e7e50e769f2a49634c932b8aee622984"
+caniuse-lite@^1.0.30000929, caniuse-lite@^1.0.30000947, caniuse-lite@^1.0.30000951:
+  version "1.0.30000951"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000951.tgz#c7c2fd4d71080284c8677dd410368df8d83688fe"
+  integrity sha512-eRhP+nQ6YUkIcNQ6hnvdhMkdc7n3zadog0KXNRxAZTT2kHjUb1yGn71OrPhSn8MOvlX97g5CR97kGVj8fMsXWg==
 
-case-sensitive-paths-webpack-plugin@^2.1.2:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz#c899b52175763689224571dad778742e133f0192"
+case-sensitive-paths-webpack-plugin@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz#3371ef6365ef9c25fa4b81c16ace0e9c7dc58c3e"
+  integrity sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==
 
 caseless@~0.12.0:
   version "0.12.0"
   resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
 
-chalk@2.4.1, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
+ccount@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff"
+  integrity sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==
+
+chalk@2.4.2, chalk@^2.4.2:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
   dependencies:
     ansi-styles "^3.2.1"
     escape-string-regexp "^1.0.5"
     supports-color "^5.3.0"
 
-chalk@^1.1.1, chalk@^1.1.3:
+chalk@^1.1.1:
   version "1.1.3"
   resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
   dependencies:
@@ -2110,6 +2822,19 @@ chalk@^1.1.1, chalk@^1.1.3:
     strip-ansi "^3.0.0"
     supports-color "^2.0.0"
 
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
+  dependencies:
+    ansi-styles "^3.2.1"
+    escape-string-regexp "^1.0.5"
+    supports-color "^5.3.0"
+
+change-emitter@^0.1.2:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515"
+  integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=
+
 character-entities-legacy@^1.0.0:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c"
@@ -2122,14 +2847,19 @@ character-reference-invalid@^1.0.0:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed"
 
-chardet@^0.4.0:
-  version "0.4.2"
-  resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
-
 chardet@^0.7.0:
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
 
+child-process-promise@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/child-process-promise/-/child-process-promise-2.2.1.tgz#4730a11ef610fad450b8f223c79d31d7bdad8074"
+  integrity sha1-RzChHvYQ+tRQuPIjx50x172tgHQ=
+  dependencies:
+    cross-spawn "^4.0.2"
+    node-version "^1.0.0"
+    promise-polyfill "^6.0.1"
+
 chokidar@^2.0.2:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26"
@@ -2149,7 +2879,7 @@ chokidar@^2.0.2:
   optionalDependencies:
     fsevents "^1.2.2"
 
-chownr@^1.0.1:
+chownr@^1.0.1, chownr@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
 
@@ -2179,12 +2909,34 @@ classnames@^2.2.5:
   version "2.2.6"
   resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
 
+clean-css@4.2.x:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
+  integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==
+  dependencies:
+    source-map "~0.6.0"
+
+cli-boxes@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
+  integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
+
 cli-cursor@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
   dependencies:
     restore-cursor "^2.0.0"
 
+cli-table3@0.5.1:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202"
+  integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==
+  dependencies:
+    object-assign "^4.1.0"
+    string-width "^2.1.1"
+  optionalDependencies:
+    colors "^1.1.2"
+
 cli-width@^2.0.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
@@ -2213,6 +2965,17 @@ cliui@^4.0.0:
     strip-ansi "^4.0.0"
     wrap-ansi "^2.0.0"
 
+clone-deep@^0.2.4:
+  version "0.2.4"
+  resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6"
+  integrity sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=
+  dependencies:
+    for-own "^0.1.3"
+    is-plain-object "^2.0.1"
+    kind-of "^3.0.2"
+    lazy-cache "^1.0.3"
+    shallow-clone "^0.1.2"
+
 clone-deep@^2.0.1:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713"
@@ -2226,6 +2989,15 @@ co@^4.6.0:
   version "4.6.0"
   resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
 
+coa@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
+  integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
+  dependencies:
+    "@types/q" "^1.5.1"
+    chalk "^2.4.1"
+    q "^1.1.2"
+
 code-point-at@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
@@ -2247,7 +3019,12 @@ color-name@1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
 
-combined-stream@1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6:
+colors@^1.1.2:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
+  integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==
+
+combined-stream@1.0.6, combined-stream@~1.0.6:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
   dependencies:
@@ -2259,13 +3036,15 @@ comma-separated-tokens@^1.0.0:
   dependencies:
     trim "0.0.1"
 
-commander@^2.17.0, commander@^2.9.0:
-  version "2.18.0"
-  resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970"
+commander@2.17.x:
+  version "2.17.1"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
+  integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
 
-commander@~2.13.0:
-  version "2.13.0"
-  resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
+commander@^2.19.0, commander@~2.19.0:
+  version "2.19.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
+  integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
 
 common-tags@^1.8.0:
   version "1.8.0"
@@ -2296,6 +3075,14 @@ concat-stream@^1.5.0:
     readable-stream "^2.2.2"
     typedarray "^0.0.6"
 
+config-chain@^1.1.12:
+  version "1.1.12"
+  resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa"
+  integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==
+  dependencies:
+    ini "^1.3.4"
+    proto-list "~1.2.1"
+
 console-browserify@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
@@ -2353,14 +3140,39 @@ copy-to-clipboard@^3.0.8:
   dependencies:
     toggle-selection "^1.0.3"
 
+core-js-compat@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.0.0.tgz#cd9810b8000742535a4a43773866185e310bd4f7"
+  integrity sha512-W/Ppz34uUme3LmXWjMgFlYyGnbo1hd9JvA0LNQ4EmieqVjg2GPYbj3H6tcdP2QGPGWdRKUqZVbVKLNIFVs/HiA==
+  dependencies:
+    browserslist "^4.5.1"
+    core-js "3.0.0"
+    core-js-pure "3.0.0"
+    semver "^5.6.0"
+
+core-js-pure@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.0.0.tgz#a5679adb4875427c8c0488afc93e6f5b7125859b"
+  integrity sha512-yPiS3fQd842RZDgo/TAKGgS0f3p2nxssF1H65DIZvZv0Od5CygP8puHXn3IQiM/39VAvgCbdaMQpresrbGgt9g==
+
+core-js@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0.tgz#a8dbfa978d29bfc263bfb66c556d0ca924c28957"
+  integrity sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ==
+
 core-js@^1.0.0:
   version "1.2.7"
   resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
 
-core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7:
+core-js@^2.4.0, core-js@^2.5.7:
   version "2.5.7"
   resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e"
 
+core-js@^2.6.5:
+  version "2.6.5"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895"
+  integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==
+
 core-util-is@1.0.2, core-util-is@~1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -2382,6 +3194,17 @@ cosmiconfig@^5.0.5:
     js-yaml "^3.9.0"
     parse-json "^4.0.0"
 
+cosmiconfig@^5.0.7:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.1.0.tgz#6c5c35e97f37f985061cdf653f114784231185cf"
+  integrity sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==
+  dependencies:
+    import-fresh "^2.0.0"
+    is-directory "^0.3.1"
+    js-yaml "^3.9.0"
+    lodash.get "^4.4.2"
+    parse-json "^4.0.0"
+
 create-ecdh@^4.0.0:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
@@ -2389,13 +3212,14 @@ create-ecdh@^4.0.0:
     bn.js "^4.1.0"
     elliptic "^6.0.0"
 
-create-emotion@^9.2.6:
-  version "9.2.6"
-  resolved "https://registry.yarnpkg.com/create-emotion/-/create-emotion-9.2.6.tgz#f64cf1c64cf82fe7d22725d1d77498ddd2d39edb"
+create-emotion@^9.2.12:
+  version "9.2.12"
+  resolved "https://registry.yarnpkg.com/create-emotion/-/create-emotion-9.2.12.tgz#0fc8e7f92c4f8bb924b0fef6781f66b1d07cb26f"
+  integrity sha512-P57uOF9NL2y98Xrbl2OuiDQUZ30GVmASsv5fbsjF4Hlraip2kyAvMm+2PoYUvFFw03Fhgtxk3RqZSm2/qHL9hA==
   dependencies:
     "@emotion/hash" "^0.6.2"
     "@emotion/memoize" "^0.6.1"
-    "@emotion/stylis" "^0.6.10"
+    "@emotion/stylis" "^0.7.0"
     "@emotion/unitless" "^0.6.2"
     csstype "^2.5.2"
     stylis "^3.5.0"
@@ -2422,13 +3246,21 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
     safe-buffer "^5.0.1"
     sha.js "^2.4.8"
 
-create-react-class@^15.5.2, create-react-class@^15.6.2:
-  version "15.6.3"
-  resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
+create-react-context@<=0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.2.tgz#9836542f9aaa22868cd7d4a6f82667df38019dca"
+  integrity sha512-KkpaLARMhsTsgp0d2NA/R94F/eDLbhXERdIq3LvX2biCAXcDvHYoOqHfWCHf1+OLj+HKBotLG3KqaOOf+C1C+A==
   dependencies:
-    fbjs "^0.8.9"
-    loose-envify "^1.3.1"
-    object-assign "^4.1.1"
+    fbjs "^0.8.0"
+    gud "^1.0.0"
+
+create-react-context@^0.2.1:
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.3.tgz#9ec140a6914a22ef04b8b09b7771de89567cb6f3"
+  integrity sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag==
+  dependencies:
+    fbjs "^0.8.0"
+    gud "^1.0.0"
 
 cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
   version "6.0.5"
@@ -2447,6 +3279,23 @@ cross-spawn@^3.0.0:
     lru-cache "^4.0.1"
     which "^1.2.9"
 
+cross-spawn@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
+  integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=
+  dependencies:
+    lru-cache "^4.0.1"
+    which "^1.2.9"
+
+cross-spawn@^5.0.1:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+  integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+  dependencies:
+    lru-cache "^4.0.1"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
+
 crypto-browserify@^3.11.0:
   version "3.12.0"
   resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
@@ -2463,46 +3312,95 @@ crypto-browserify@^3.11.0:
     randombytes "^2.0.0"
     randomfill "^1.0.3"
 
-css-in-js-utils@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99"
+css-loader@^2.1.0, css-loader@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea"
+  integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==
+  dependencies:
+    camelcase "^5.2.0"
+    icss-utils "^4.1.0"
+    loader-utils "^1.2.3"
+    normalize-path "^3.0.0"
+    postcss "^7.0.14"
+    postcss-modules-extract-imports "^2.0.0"
+    postcss-modules-local-by-default "^2.0.6"
+    postcss-modules-scope "^2.1.0"
+    postcss-modules-values "^2.0.0"
+    postcss-value-parser "^3.3.0"
+    schema-utils "^1.0.0"
+
+css-select-base-adapter@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
+  integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
+
+css-select@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+  integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
   dependencies:
-    hyphenate-style-name "^1.0.2"
-    isobject "^3.0.1"
+    boolbase "~1.0.0"
+    css-what "2.1"
+    domutils "1.5.1"
+    nth-check "~1.0.1"
 
-css-loader@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.0.tgz#9f46aaa5ca41dbe31860e3b62b8e23c42916bf56"
+css-select@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede"
+  integrity sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==
   dependencies:
-    babel-code-frame "^6.26.0"
-    css-selector-tokenizer "^0.7.0"
-    icss-utils "^2.1.0"
-    loader-utils "^1.0.2"
-    lodash.camelcase "^4.3.0"
-    postcss "^6.0.23"
-    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"
+    boolbase "^1.0.0"
+    css-what "^2.1.2"
+    domutils "^1.7.0"
+    nth-check "^1.0.2"
 
-css-selector-tokenizer@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86"
+css-tree@1.0.0-alpha.28:
+  version "1.0.0-alpha.28"
+  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f"
+  integrity sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==
   dependencies:
-    cssesc "^0.1.0"
-    fastparse "^1.1.1"
-    regexpu-core "^1.0.0"
+    mdn-data "~1.1.0"
+    source-map "^0.5.3"
 
-cssesc@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
+css-tree@1.0.0-alpha.29:
+  version "1.0.0-alpha.29"
+  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39"
+  integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==
+  dependencies:
+    mdn-data "~1.1.0"
+    source-map "^0.5.3"
+
+css-url-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec"
+  integrity sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=
+
+css-what@2.1, css-what@^2.1.2:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
+  integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
+
+cssesc@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+  integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+csso@^3.5.1:
+  version "3.5.1"
+  resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b"
+  integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==
+  dependencies:
+    css-tree "1.0.0-alpha.29"
 
 csstype@^2.2.0, csstype@^2.5.2:
   version "2.5.7"
   resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.7.tgz#bf9235d5872141eccfb2d16d82993c6b149179ff"
 
+csstype@^2.5.7:
+  version "2.6.3"
+  resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.3.tgz#b701e5968245bf9b08d54ac83d00b624e622a9fa"
+  integrity sha512-rINUZXOkcBmoHWEyu7JdHu5JMzkGRoMX4ov9830WNgxf5UYxcBUO0QTKAqeJ5EZfSdlrcJYkC8WwfVW7JYi4yg==
+
 currently-unhandled@^0.4.1:
   version "0.4.1"
   resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
@@ -2529,7 +3427,7 @@ date-now@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
 
-debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9:
+debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
   dependencies:
@@ -2541,17 +3439,30 @@ debug@^3.1.0:
   dependencies:
     ms "^2.1.1"
 
-decamelize@^1.1.1, decamelize@^1.1.2:
+debug@^3.2.5:
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+  integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+  dependencies:
+    ms "^2.1.1"
+
+debug@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+  integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+  dependencies:
+    ms "^2.1.1"
+
+decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
 
-decamelize@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7"
-  dependencies:
-    xregexp "4.0.0"
+decimal.js@10.1.1:
+  version "10.1.1"
+  resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.1.1.tgz#fb541922a2e8fc618f5e6fbb474e281ed3d2a64c"
+  integrity sha512-vEEgyk1fWVEnv7lPjkNedAIjzxQDue5Iw4FeX4UkNUDSVyD/jZTD0Bw2kAO7k6iyyJRAhM9oxxI0D1ET6k0Mmg==
 
-decimal.js@10.0.1, decimal.js@^10.0.0:
+decimal.js@^10.0.0:
   version "10.0.1"
   resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.0.1.tgz#d04b16b277f0f9af09671cee225c4882e8857c58"
 
@@ -2559,19 +3470,20 @@ decode-uri-component@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
 
-deep-equal@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
-
 deep-extend@^0.6.0:
   version "0.6.0"
   resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
 
-deepmerge@^2.0.1, deepmerge@^2.1.1:
+deep-object-diff@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a"
+  integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==
+
+deepmerge@^2.0.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.1.1.tgz#e862b4e45ea0555072bf51e7fd0d9845170ae768"
 
-define-properties@^1.1.2:
+define-properties@^1.1.2, define-properties@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
   dependencies:
@@ -2627,11 +3539,10 @@ destroy@~1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
 
-detect-indent@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
-  dependencies:
-    repeating "^2.0.0"
+detect-file@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+  integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
 
 detect-libc@^1.0.2:
   version "1.0.3"
@@ -2644,6 +3555,14 @@ detect-port-alt@1.1.6:
     address "^1.0.1"
     debug "^2.6.0"
 
+detect-port@^1.2.3:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1"
+  integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==
+  dependencies:
+    address "^1.0.1"
+    debug "^2.6.0"
+
 diffie-hellman@^5.0.0:
   version "5.0.3"
   resolved "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
@@ -2652,9 +3571,10 @@ diffie-hellman@^5.0.0:
     miller-rabin "^4.0.0"
     randombytes "^2.0.0"
 
-dir-glob@^2.0.0:
+dir-glob@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
+  integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==
   dependencies:
     arrify "^1.0.1"
     path-type "^3.0.0"
@@ -2665,10 +3585,25 @@ doctrine@^2.0.0:
   dependencies:
     esutils "^2.0.2"
 
+dom-converter@^0.2:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+  integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+  dependencies:
+    utila "~0.4"
+
 dom-helpers@^3.3.1:
   version "3.3.1"
   resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6"
 
+dom-serializer@0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
+  integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==
+  dependencies:
+    domelementtype "^1.3.0"
+    entities "^1.1.1"
+
 dom-walk@^0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
@@ -2677,24 +3612,61 @@ domain-browser@^1.1.1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
 
+domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+  integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domhandler@^2.3.0:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+  integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
+  dependencies:
+    domelementtype "1"
+
+domutils@1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+  integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
+  dependencies:
+    dom-serializer "0"
+    domelementtype "1"
+
+domutils@^1.5.1, domutils@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+  integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+  dependencies:
+    dom-serializer "0"
+    domelementtype "1"
+
+dotenv-defaults@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-1.0.2.tgz#441cf5f067653fca4bbdce9dd3b803f6f84c585d"
+  integrity sha512-iXFvHtXl/hZPiFj++1hBg4lbKwGM+t/GlvELDnRtOFdjXyWP7mubkVr+eZGWG62kdsbulXAef6v/j6kiWc/xGA==
+  dependencies:
+    dotenv "^6.2.0"
+
 dotenv-expand@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275"
 
-dotenv-webpack@^1.5.7:
-  version "1.5.7"
-  resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-1.5.7.tgz#c44395ab21d1fd28d79a90942a7b14b1debd145f"
+dotenv-webpack@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-1.7.0.tgz#4384d8c57ee6f405c296278c14a9f9167856d3a1"
+  integrity sha512-wwNtOBW/6gLQSkb8p43y0Wts970A3xtNiG/mpwj9MLUhtPCQG6i+/DSXXoNN7fbPCU/vQ7JjwGmgOeGZSSZnsw==
   dependencies:
-    dotenv "^5.0.1"
-
-dotenv@^5.0.1:
-  version "5.0.1"
-  resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef"
+    dotenv-defaults "^1.0.2"
 
 dotenv@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.0.0.tgz#24e37c041741c5f4b25324958ebbc34bca965935"
 
+dotenv@^6.2.0:
+  version "6.2.0"
+  resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064"
+  integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==
+
 duplexer@^0.1.1:
   version "0.1.1"
   resolved "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
@@ -2715,6 +3687,16 @@ ecc-jsbn@~0.1.1:
     jsbn "~0.1.0"
     safer-buffer "^2.1.0"
 
+editorconfig@^0.15.2:
+  version "0.15.3"
+  resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5"
+  integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==
+  dependencies:
+    commander "^2.19.0"
+    lru-cache "^4.1.5"
+    semver "^5.6.0"
+    sigmund "^1.0.1"
+
 ee-first@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -2723,9 +3705,10 @@ ejs@^2.6.1:
   version "2.6.1"
   resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0"
 
-electron-to-chromium@^1.3.42, electron-to-chromium@^1.3.62:
-  version "1.3.67"
-  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.67.tgz#5e8f3ffac89b4b0402c7e1a565be06f3a109abbc"
+electron-to-chromium@^1.3.103, electron-to-chromium@^1.3.116:
+  version "1.3.118"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.118.tgz#5c82b0445a40934e6cae9c2f40bfaaa986ea44a3"
+  integrity sha512-/1FpHvmKmKo2Z6CCza2HfkrKvKhU7Rq4nvyX1FOherdTrdTufhVrJbCrcrIqgqUCI+BG6JC2rlY4z5QA1G0NOw==
 
 elliptic@^6.0.0:
   version "6.4.1"
@@ -2739,16 +3722,31 @@ elliptic@^6.0.0:
     minimalistic-assert "^1.0.0"
     minimalistic-crypto-utils "^1.0.0"
 
+emoji-regex@^7.0.1:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+  integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
 emojis-list@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
 
-emotion@^9.2.6, emotion@^9.2.8:
-  version "9.2.8"
-  resolved "https://registry.yarnpkg.com/emotion/-/emotion-9.2.8.tgz#b89e754be1a109f4e47ff0031928f94e40d7984a"
+emotion-theming@^10.0.7:
+  version "10.0.9"
+  resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.9.tgz#80e9fc40db8c46b466fcc11f3ae076f332933a4e"
+  integrity sha512-Z8fg5+5u62fOkZR9uCO9/TTxjTk5ieL/GIQgtRhi6WrZT++NAqY9u9GBUjbbJDWYkt6GIcy/S+m7yKaB+iGrDA==
+  dependencies:
+    "@emotion/weak-memoize" "0.2.2"
+    hoist-non-react-statics "^3.3.0"
+    object-assign "^4.1.1"
+
+emotion@^9.1.2:
+  version "9.2.12"
+  resolved "https://registry.yarnpkg.com/emotion/-/emotion-9.2.12.tgz#53925aaa005614e65c6e43db8243c843574d1ea9"
+  integrity sha512-hcx7jppaI8VoXxIWEhxpDW7I+B4kq9RNzQLmsrF6LY8BGKqe2N+gFAQr0EfuFucFlPs2A9HM4+xNj4NeqEWIOQ==
   dependencies:
-    babel-plugin-emotion "^9.2.8"
-    create-emotion "^9.2.6"
+    babel-plugin-emotion "^9.2.11"
+    create-emotion "^9.2.12"
 
 encodeurl@~1.0.2:
   version "1.0.2"
@@ -2774,6 +3772,11 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0:
     memory-fs "^0.4.0"
     tapable "^1.0.0"
 
+entities@^1.1.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+  integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+
 errno@^0.1.3, errno@~0.1.7:
   version "0.1.7"
   resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
@@ -2839,9 +3842,10 @@ escape-html@^1.0.3, escape-html@~1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
 
-escape-latex@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/escape-latex/-/escape-latex-1.1.1.tgz#657d8632af8849a5db8766778d4a43da9dec3376"
+escape-latex@1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/escape-latex/-/escape-latex-1.2.0.tgz#07c03818cf7dac250cce517f4fda1b001ef2bca1"
+  integrity sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==
 
 escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
   version "1.0.5"
@@ -2876,19 +3880,21 @@ etag@~1.8.1:
   version "1.8.1"
   resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
 
+eventemitter3@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
+  integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==
+
 events@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
 
-events@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88"
-
-eventsource@0.1.6:
-  version "0.1.6"
-  resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232"
+eventsource@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"
+  integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==
   dependencies:
-    original ">=0.0.5"
+    original "^1.0.0"
 
 evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
   version "1.0.3"
@@ -2909,6 +3915,19 @@ execa@^0.10.0:
     signal-exit "^3.0.0"
     strip-eof "^1.0.0"
 
+execa@^0.7.0:
+  version "0.7.0"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+  integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
+  dependencies:
+    cross-spawn "^5.0.1"
+    get-stream "^3.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@^1.2.0:
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d"
@@ -2979,19 +3998,12 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
     assign-symbols "^1.0.0"
     is-extendable "^1.0.1"
 
-extend@~3.0.1, extend@~3.0.2:
+extend@^3.0.0, extend@~3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+  integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
 
-external-editor@^2.1.0:
-  version "2.2.0"
-  resolved "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
-  dependencies:
-    chardet "^0.4.0"
-    iconv-lite "^0.4.17"
-    tmp "^0.0.33"
-
-external-editor@^3.0.0:
+external-editor@^3.0.0, external-editor@^3.0.3:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27"
   dependencies:
@@ -3043,25 +4055,23 @@ fast-json-stable-stringify@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
 
-fastparse@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
-
 fault@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.2.tgz#c3d0fec202f172a3a4d414042ad2bb5e2a3ffbaa"
   dependencies:
     format "^0.2.2"
 
-faye-websocket@~0.11.0:
+faye-websocket@~0.11.1:
   version "0.11.1"
   resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"
+  integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=
   dependencies:
     websocket-driver ">=0.5.1"
 
-fbjs@^0.8.9:
+fbjs@^0.8.0, fbjs@^0.8.1:
   version "0.8.17"
   resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
+  integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=
   dependencies:
     core-js "^1.0.0"
     isomorphic-fetch "^2.1.1"
@@ -3071,6 +4081,11 @@ fbjs@^0.8.9:
     setimmediate "^1.0.5"
     ua-parser-js "^0.7.18"
 
+figgy-pudding@^3.5.1:
+  version "3.5.1"
+  resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
+  integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
+
 figures@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
@@ -3084,13 +4099,23 @@ file-loader@1.1.11:
     loader-utils "^1.0.2"
     schema-utils "^0.4.5"
 
-file-loader@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-2.0.0.tgz#39749c82f020b9e85901dcff98e8004e6401cfde"
+file-loader@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa"
+  integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==
   dependencies:
     loader-utils "^1.0.2"
     schema-utils "^1.0.0"
 
+file-system-cache@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.0.5.tgz#84259b36a2bbb8d3d6eb1021d3132ffe64cfff4f"
+  integrity sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08=
+  dependencies:
+    bluebird "^3.3.5"
+    fs-extra "^0.30.0"
+    ramda "^0.21.0"
+
 filesize@3.6.1:
   version "3.6.1"
   resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
@@ -3116,14 +4141,6 @@ finalhandler@1.1.1:
     statuses "~1.4.0"
     unpipe "~1.0.0"
 
-find-cache-dir@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f"
-  dependencies:
-    commondir "^1.0.1"
-    make-dir "^1.0.0"
-    pkg-dir "^2.0.0"
-
 find-cache-dir@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d"
@@ -3132,22 +4149,17 @@ find-cache-dir@^2.0.0:
     make-dir "^1.0.0"
     pkg-dir "^3.0.0"
 
-find-file-up@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/find-file-up/-/find-file-up-1.0.2.tgz#4d53664bc128cf793901497f4b13558d979755ca"
-  dependencies:
-    resolve-dir "^1.0.0"
-
-find-pkg@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/find-pkg/-/find-pkg-1.0.0.tgz#96db242e001c7c55025d32213302ea3aba677177"
-  dependencies:
-    find-file-up "^1.0.2"
-
 find-root@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
 
+find-up@3.0.0, find-up@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+  integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+  dependencies:
+    locate-path "^3.0.0"
+
 find-up@^1.0.0:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
@@ -3161,11 +4173,15 @@ find-up@^2.1.0:
   dependencies:
     locate-path "^2.0.0"
 
-find-up@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+findup-sync@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc"
+  integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=
   dependencies:
-    locate-path "^3.0.0"
+    detect-file "^1.0.0"
+    is-glob "^3.1.0"
+    micromatch "^3.0.4"
+    resolve-dir "^1.0.1"
 
 flush-write-stream@^1.0.0:
   version "1.0.3"
@@ -3174,6 +4190,11 @@ flush-write-stream@^1.0.0:
     inherits "^2.0.1"
     readable-stream "^2.0.4"
 
+focus-lock@^0.6.0:
+  version "0.6.2"
+  resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.6.2.tgz#d8ac9dbc46250779789c3e6f43d978c7dfa59dcd"
+  integrity sha512-Wuq6TSOgsGQmzbpvinl1TcEw4BAUhD9T06myl5HvaBlO0geAz9ABtqBIqPkkNyO3AgPzEDazetL5hSRgj+2iqQ==
+
 for-in@^0.1.3:
   version "0.1.8"
   resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
@@ -3182,6 +4203,13 @@ for-in@^1.0.1, for-in@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
 
+for-own@^0.1.3:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+  integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
+  dependencies:
+    for-in "^1.0.1"
+
 for-own@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
@@ -3192,7 +4220,7 @@ forever-agent@~0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
 
-form-data@~2.3.1, form-data@~2.3.2:
+form-data@~2.3.2:
   version "2.3.2"
   resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
   dependencies:
@@ -3208,9 +4236,10 @@ forwarded@~0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
 
-fraction.js@4.0.9:
-  version "4.0.9"
-  resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.9.tgz#ef7aa1ad47ef600021ad7fa7991dfd56c3b5f7c8"
+fraction.js@4.0.12:
+  version "4.0.12"
+  resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.12.tgz#0526d47c65a5fb4854df78bc77f7bec708d7b8c3"
+  integrity sha512-8Z1K0VTG4hzYY7kA/1sj4/r1/RWLBD3xwReT/RCrUCbzPszjNQCCsy3ktkU/eaEqX3MYa4pY37a52eiBlPMlhA==
 
 fragment-cache@^0.2.1:
   version "0.2.1"
@@ -3229,6 +4258,26 @@ from2@^2.1.0:
     inherits "^2.0.1"
     readable-stream "^2.0.0"
 
+fs-extra@^0.30.0:
+  version "0.30.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
+  integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=
+  dependencies:
+    graceful-fs "^4.1.2"
+    jsonfile "^2.1.0"
+    klaw "^1.0.0"
+    path-is-absolute "^1.0.0"
+    rimraf "^2.2.8"
+
+fs-extra@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
+  integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
+  dependencies:
+    graceful-fs "^4.1.2"
+    jsonfile "^4.0.0"
+    universalify "^0.1.0"
+
 fs-minipass@^1.2.5:
   version "1.2.5"
   resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
@@ -3276,9 +4325,10 @@ function.prototype.name@^1.1.0:
     function-bind "^1.1.1"
     is-callable "^1.1.3"
 
-fuse.js@^3.0.1, fuse.js@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.2.1.tgz#6320cb94ce56ec9755c89ade775bcdbb0358d425"
+fuzzy-search@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/fuzzy-search/-/fuzzy-search-3.0.1.tgz#14a4964508a9607d6e9a88818e7ff634108260b6"
+  integrity sha512-rjUvzdsMlOyarm0oD5k6zVQwgvt4Tb5Xe3YdIGU+Vogw54+ueAGPUTMU2B9jfPQEie5cD11i/S9J9d+MNBSQ3Q==
 
 gauge@~2.7.3:
   version "2.7.4"
@@ -3299,10 +4349,6 @@ gaze@^1.0.0:
   dependencies:
     globule "^1.0.0"
 
-generate-page-webpack-plugin@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/generate-page-webpack-plugin/-/generate-page-webpack-plugin-1.1.0.tgz#5940c9c6bdbfa03b1a4ef8f909875d5ebafbd3af"
-
 get-caller-file@^1.0.1:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
@@ -3336,9 +4382,10 @@ glob-to-regexp@^0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
 
-glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.1:
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1:
   version "7.1.3"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
+  integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
   dependencies:
     fs.realpath "^1.0.0"
     inflight "^1.0.4"
@@ -3347,11 +4394,14 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.1:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-global-modules-path@^2.1.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/global-modules-path/-/global-modules-path-2.3.0.tgz#b0e2bac6beac39745f7db5c59d26a36a0b94f7dc"
+global-modules@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+  integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+  dependencies:
+    global-prefix "^3.0.0"
 
-global-modules@1.0.0, global-modules@^1.0.0:
+global-modules@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
   dependencies:
@@ -3369,6 +4419,15 @@ global-prefix@^1.0.1:
     is-windows "^1.0.1"
     which "^1.2.14"
 
+global-prefix@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+  integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+  dependencies:
+    ini "^1.3.5"
+    kind-of "^6.0.2"
+    which "^1.3.1"
+
 global@^4.3.2:
   version "4.3.2"
   resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
@@ -3380,16 +4439,13 @@ globals@^11.1.0:
   version "11.7.0"
   resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673"
 
-globals@^9.18.0:
-  version "9.18.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
-
-globby@8.0.1:
-  version "8.0.1"
-  resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50"
+globby@8.0.2:
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d"
+  integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==
   dependencies:
     array-union "^1.0.1"
-    dir-glob "^2.0.0"
+    dir-glob "2.0.0"
     fast-glob "^2.0.2"
     glob "^7.1.2"
     ignore "^3.3.5"
@@ -3414,9 +4470,20 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2:
   version "4.1.11"
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
 
-gzip-size@4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-4.1.0.tgz#8ae096257eabe7d69c45be2b67c448124ffb517c"
+graceful-fs@^4.1.15, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
+  version "4.1.15"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
+  integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
+
+gud@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
+  integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==
+
+gzip-size@5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80"
+  integrity sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==
   dependencies:
     duplexer "^0.1.1"
     pify "^3.0.0"
@@ -3425,13 +4492,6 @@ har-schema@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
 
-har-validator@~5.0.3:
-  version "5.0.3"
-  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
-  dependencies:
-    ajv "^5.1.0"
-    har-schema "^2.0.0"
-
 har-validator@~5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29"
@@ -3484,7 +4544,7 @@ has-values@^1.0.0:
     is-number "^3.0.0"
     kind-of "^4.0.0"
 
-has@^1.0.1:
+has@^1.0.1, has@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
   dependencies:
@@ -3504,6 +4564,17 @@ hash.js@^1.0.0, hash.js@^1.0.3:
     inherits "^2.0.3"
     minimalistic-assert "^1.0.1"
 
+hast-util-from-parse5@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.0.tgz#a505a05766e0f96e389bfb0b1dd809eeefcef47b"
+  integrity sha512-A7ev5OseS/J15214cvDdcI62uwovJO2PB60Xhnq7kaxvvQRFDEccuqbkrFXU03GPBGopdPqlpQBRqIcDS/Fjbg==
+  dependencies:
+    ccount "^1.0.3"
+    hastscript "^5.0.0"
+    property-information "^5.0.0"
+    web-namespaces "^1.1.2"
+    xtend "^4.0.1"
+
 hast-util-parse-selector@^2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.0.tgz#2175f18cdd697308fc3431d5c29a9e48dfa4817a"
@@ -3517,10 +4588,37 @@ hastscript@^4.0.0:
     property-information "^4.0.0"
     space-separated-tokens "^1.0.0"
 
+hastscript@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.0.0.tgz#fee10382c1bc4ba3f1be311521d368c047d2c43a"
+  integrity sha512-xJtuJ8D42Xtq5yJrnDg/KAIxl2cXBXKoiIJwmWX9XMf8113qHTGl/Bf7jEsxmENJ4w6q4Tfl8s/Y6mEZo8x8qw==
+  dependencies:
+    comma-separated-tokens "^1.0.0"
+    hast-util-parse-selector "^2.2.0"
+    property-information "^5.0.1"
+    space-separated-tokens "^1.0.0"
+
+he@1.2.x:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
 highlight.js@~9.12.0:
   version "9.12.0"
   resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e"
 
+history@^4.7.2:
+  version "4.9.0"
+  resolved "https://registry.yarnpkg.com/history/-/history-4.9.0.tgz#84587c2068039ead8af769e9d6a6860a14fa1bca"
+  integrity sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA==
+  dependencies:
+    "@babel/runtime" "^7.1.2"
+    loose-envify "^1.2.0"
+    resolve-pathname "^2.2.0"
+    tiny-invariant "^1.0.2"
+    tiny-warning "^1.0.0"
+    value-equal "^0.4.0"
+
 hmac-drbg@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@@ -3529,16 +4627,17 @@ hmac-drbg@^1.0.0:
     minimalistic-assert "^1.0.0"
     minimalistic-crypto-utils "^1.0.1"
 
-hoist-non-react-statics@1.x.x, hoist-non-react-statics@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb"
+hoist-non-react-statics@^2.3.1:
+  version "2.5.5"
+  resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
+  integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
 
-home-or-tmp@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+hoist-non-react-statics@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b"
+  integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==
   dependencies:
-    os-homedir "^1.0.0"
-    os-tmpdir "^1.0.1"
+    react-is "^16.7.0"
 
 homedir-polyfill@^1.0.1:
   version "1.0.1"
@@ -3554,6 +4653,43 @@ html-entities@^1.2.0:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
 
+html-minifier@^3.5.20:
+  version "3.5.21"
+  resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c"
+  integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==
+  dependencies:
+    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"
+
+html-webpack-plugin@^4.0.0-beta.2:
+  version "4.0.0-beta.5"
+  resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.5.tgz#2c53083c1151bfec20479b1f8aaf0039e77b5513"
+  integrity sha512-y5l4lGxOW3pz3xBTFdfB9rnnrWRPVxlAhX6nrBYIcW+2k2zC3mSp/3DxlWVCMBfnO6UAnoF8OcFn0IMy6kaKAQ==
+  dependencies:
+    html-minifier "^3.5.20"
+    loader-utils "^1.1.0"
+    lodash "^4.17.11"
+    pretty-error "^2.1.1"
+    tapable "^1.1.0"
+    util.promisify "1.0.0"
+
+htmlparser2@^3.3.0:
+  version "3.10.1"
+  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
+  integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
+  dependencies:
+    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"
+
 http-errors@1.6.2:
   version "1.6.2"
   resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
@@ -3588,15 +4724,11 @@ https-browserify@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
 
-hyphenate-style-name@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b"
-
 iconv-lite@0.4.19:
   version "0.4.19"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
 
-iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
+iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
   version "0.4.24"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
   dependencies:
@@ -3606,11 +4738,12 @@ icss-replace-symbols@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
 
-icss-utils@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962"
+icss-utils@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.0.tgz#339dbbffb9f8729a243b701e1c29d4cc58c52f0e"
+  integrity sha512-3DEun4VOeMvSczifM3F2cKQrDQ5Pj6WKhkOq6HD4QTnDUAq8MQRxy5TX6Sy1iY6WPBe4gQ3p5vTECjbIkglkkQ==
   dependencies:
-    postcss "^6.0.1"
+    postcss "^7.0.14"
 
 ieee754@^1.1.4:
   version "1.1.12"
@@ -3630,9 +4763,15 @@ ignore@^3.3.5:
   version "3.3.10"
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
 
-immutable@^3.8.1:
-  version "3.8.2"
-  resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3"
+immer@1.10.0:
+  version "1.10.0"
+  resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d"
+  integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==
+
+immer@^1.12.0:
+  version "1.12.1"
+  resolved "https://registry.yarnpkg.com/immer/-/immer-1.12.1.tgz#40c6e5b292c00560836c2993bda3a24379d466f5"
+  integrity sha512-3fmKM6ovaqDt0CdC9daXpNi5x/YCYS3i4cwLdTVkhJdk5jrDXoPs7lCm3IqM3yhfSnz4tjjxbRG2CziQ7m8ztg==
 
 import-cwd@^2.0.0:
   version "2.1.0"
@@ -3640,17 +4779,26 @@ import-cwd@^2.0.0:
   dependencies:
     import-from "^2.1.0"
 
+import-fresh@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+  integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+  dependencies:
+    caller-path "^2.0.0"
+    resolve-from "^3.0.0"
+
 import-from@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
   dependencies:
     resolve-from "^3.0.0"
 
-import-local@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"
+import-local@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+  integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
   dependencies:
-    pkg-dir "^2.0.0"
+    pkg-dir "^3.0.0"
     resolve-cwd "^2.0.0"
 
 imurmurhash@^0.1.4:
@@ -3667,6 +4815,11 @@ indent-string@^2.1.0:
   dependencies:
     repeating "^2.0.0"
 
+indexes-of@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+  integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
+
 indexof@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
@@ -3686,60 +4839,61 @@ inherits@2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
 
-ini@^1.3.4, ini@~1.3.0:
+ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
   version "1.3.5"
   resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
 
-inline-style-prefixer@^3.0.6:
-  version "3.0.8"
-  resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534"
-  dependencies:
-    bowser "^1.7.3"
-    css-in-js-utils "^2.0.0"
-
-inquirer@5.1.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.1.0.tgz#19da508931892328abbbdd4c477f1efc65abfd67"
+inquirer@6.2.1:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.1.tgz#9943fc4882161bdb0b0c9276769c75b32dbfcd52"
+  integrity sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==
   dependencies:
     ansi-escapes "^3.0.0"
     chalk "^2.0.0"
     cli-cursor "^2.1.0"
     cli-width "^2.0.0"
-    external-editor "^2.1.0"
+    external-editor "^3.0.0"
     figures "^2.0.0"
-    lodash "^4.3.0"
+    lodash "^4.17.10"
     mute-stream "0.0.7"
     run-async "^2.2.0"
-    rxjs "^5.5.2"
+    rxjs "^6.1.0"
     string-width "^2.1.0"
-    strip-ansi "^4.0.0"
+    strip-ansi "^5.0.0"
     through "^2.3.6"
 
-inquirer@^6.0.0:
-  version "6.2.0"
-  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8"
+inquirer@^6.2.0:
+  version "6.2.2"
+  resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406"
+  integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==
   dependencies:
-    ansi-escapes "^3.0.0"
-    chalk "^2.0.0"
+    ansi-escapes "^3.2.0"
+    chalk "^2.4.2"
     cli-cursor "^2.1.0"
     cli-width "^2.0.0"
-    external-editor "^3.0.0"
+    external-editor "^3.0.3"
     figures "^2.0.0"
-    lodash "^4.17.10"
+    lodash "^4.17.11"
     mute-stream "0.0.7"
     run-async "^2.2.0"
-    rxjs "^6.1.0"
+    rxjs "^6.4.0"
     string-width "^2.1.0"
-    strip-ansi "^4.0.0"
+    strip-ansi "^5.0.0"
     through "^2.3.6"
 
 interpret@^1.0.0, interpret@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
 
-invariant@^2.2.2:
+interpret@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
+  integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
+
+invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4:
   version "2.2.4"
   resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+  integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
   dependencies:
     loose-envify "^1.0.0"
 
@@ -3751,6 +4905,11 @@ invert-kv@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
 
+ip@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+  integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
+
 ipaddr.js@1.8.0:
   version "1.8.0"
   resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e"
@@ -3788,10 +4947,15 @@ is-binary-path@^1.0.0:
   dependencies:
     binary-extensions "^1.0.0"
 
-is-buffer@^1.1.5:
+is-buffer@^1.0.2, is-buffer@^1.1.5:
   version "1.1.6"
   resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
 
+is-buffer@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725"
+  integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==
+
 is-builtin-module@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
@@ -3876,6 +5040,11 @@ is-fullwidth-code-point@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
 
+is-function@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
+  integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=
+
 is-glob@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
@@ -3898,6 +5067,11 @@ is-number@^3.0.0:
   dependencies:
     kind-of "^3.0.2"
 
+is-plain-obj@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+  integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
 is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
@@ -3914,9 +5088,10 @@ is-regex@^1.0.4:
   dependencies:
     has "^1.0.1"
 
-is-root@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5"
+is-root@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.0.0.tgz#838d1e82318144e5a6f77819d90207645acc7019"
+  integrity sha512-F/pJIk8QD6OX5DNhRB7hWamLsUilmkDGho48KbgZ6xg/lmAZXHxzXQ91jzB3yRSw5kdQGGGc4yz8HYhTYIMWPg==
 
 is-stream@^1.0.1, is-stream@^1.1.0:
   version "1.1.0"
@@ -3926,6 +5101,13 @@ is-symbol@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
 
+is-symbol@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
+  integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
+  dependencies:
+    has-symbols "^1.0.0"
+
 is-typedarray@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@@ -3979,18 +5161,33 @@ js-base64@^2.1.8:
   version "2.4.9"
   resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03"
 
+js-beautify@^1.8.9:
+  version "1.9.0"
+  resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.9.0.tgz#2562fcdee340f9f962ae2ec4a8a40e7aaa6d964f"
+  integrity sha512-P0skmY4IDjfLiVrx+GLDeme8w5G0R1IGXgccVU5HP2VM3lRblH7qN2LTea5vZAxrDjpZBD0Jv+ahpjwVcbz/rw==
+  dependencies:
+    config-chain "^1.1.12"
+    editorconfig "^0.15.2"
+    glob "^7.1.3"
+    mkdirp "~0.5.0"
+    nopt "~4.0.1"
+
 js-levenshtein@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.3.tgz#3ef627df48ec8cf24bacf05c0f184ff30ef413c5"
 
-js-tokens@^3.0.0, js-tokens@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
-
 "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
 
+js-yaml@^3.12.0:
+  version "3.13.0"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.0.tgz#38ee7178ac0eea2c97ff6d96fff4b18c7d8cf98e"
+  integrity sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==
+  dependencies:
+    argparse "^1.0.7"
+    esprima "^4.0.0"
+
 js-yaml@^3.9.0:
   version "3.12.0"
   resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1"
@@ -4002,10 +5199,6 @@ jsbn@~0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
 
-jsesc@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
-
 jsesc@^2.5.1:
   version "2.5.1"
   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe"
@@ -4030,7 +5223,7 @@ json-schema@0.2.3:
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
 
-json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
+json-stringify-safe@~5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
 
@@ -4038,7 +5231,7 @@ json3@^3.3.2:
   version "3.3.2"
   resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
 
-json5@^0.5.0, json5@^0.5.1:
+json5@^0.5.0:
   version "0.5.1"
   resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
 
@@ -4048,12 +5241,27 @@ json5@^1.0.1:
   dependencies:
     minimist "^1.2.0"
 
-json5@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/json5/-/json5-2.0.1.tgz#3d6d0d1066039eb50984e66a7840e4f4b7a2c660"
+json5@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850"
+  integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==
   dependencies:
     minimist "^1.2.0"
 
+jsonfile@^2.1.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
+  integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+jsonfile@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+  integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
 jsonify@~0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
@@ -4071,6 +5279,13 @@ keycode@^2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04"
 
+kind-of@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5"
+  integrity sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=
+  dependencies:
+    is-buffer "^1.0.2"
+
 kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
   version "3.2.2"
   resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
@@ -4091,6 +5306,34 @@ kind-of@^6.0.0, kind-of@^6.0.2:
   version "6.0.2"
   resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
 
+klaw@^1.0.0:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
+  integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk=
+  optionalDependencies:
+    graceful-fs "^4.1.9"
+
+lazy-cache@^0.2.3:
+  version "0.2.7"
+  resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65"
+  integrity sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=
+
+lazy-cache@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+  integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+
+lazy-universal-dotenv@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-2.0.0.tgz#e015ad9f77be9ef811956d53ea9519b1c0ab0214"
+  integrity sha512-1Wi0zgZMfRLaRAK21g3odYuU+HE1d85Loe2tb44YhcNwIzhmD49mTPR9aKckpB9Q9Q9mA+hUMLI2xlkcCAe3yw==
+  dependencies:
+    "@babel/runtime" "^7.0.0"
+    app-root-dir "^1.0.2"
+    core-js "^2.5.7"
+    dotenv "^6.0.0"
+    dotenv-expand "^4.2.0"
+
 lcid@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
@@ -4125,6 +5368,15 @@ loader-utils@1.1.0, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.
     emojis-list "^2.0.0"
     json5 "^0.5.0"
 
+loader-utils@1.2.3, loader-utils@^1.2.1, loader-utils@^1.2.3:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
+  integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^2.0.0"
+    json5 "^1.0.1"
+
 locate-path@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@@ -4139,18 +5391,15 @@ locate-path@^3.0.0:
     p-locate "^3.0.0"
     path-exists "^3.0.0"
 
-lodash._getnative@^3.0.0:
-  version "3.9.1"
-  resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
+lodash-es@^4.17.11:
+  version "4.17.11"
+  resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.11.tgz#145ab4a7ac5c5e52a3531fb4f310255a152b4be0"
+  integrity sha512-DHb1ub+rMjjrxqlB3H56/6MXtm1lSksDp2rA2cNWjG8mlDUYFhUj3Di2Zn5IwSU87xLv8tNIQ7sSwE/YOX/D/Q==
 
 lodash.assign@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
 
-lodash.camelcase@^4.3.0:
-  version "4.3.0"
-  resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
-
 lodash.clonedeep@^4.3.2:
   version "4.5.0"
   resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
@@ -4159,17 +5408,10 @@ lodash.debounce@^4.0.8:
   version "4.0.8"
   resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
 
-lodash.flattendeep@^4.4.0:
-  version "4.4.0"
-  resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
-
-lodash.isarguments@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
-
-lodash.isarray@^3.0.0:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+lodash.get@^4.4.2:
+  version "4.4.2"
+  resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+  integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
 
 lodash.isequal@^4.5.0:
   version "4.5.0"
@@ -4179,17 +5421,10 @@ lodash.isplainobject@^4.0.6:
   version "4.0.6"
   resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
 
-lodash.keys@^3.1.2:
-  version "3.1.2"
-  resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
-  dependencies:
-    lodash._getnative "^3.0.0"
-    lodash.isarguments "^3.0.0"
-    lodash.isarray "^3.0.0"
-
-lodash.mergewith@^4.6.0:
+lodash.mergewith@^4.6.0, lodash.mergewith@^4.6.1:
   version "4.6.1"
   resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
+  integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==
 
 lodash.pick@^4.4.0:
   version "4.4.0"
@@ -4211,7 +5446,7 @@ lodash.throttle@^4.1.1:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
 
-lodash@^4.0.0, lodash@^4.0.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@~4.17.10:
+lodash@>4.17.4, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.5, lodash@~4.17.10:
   version "4.17.11"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
 
@@ -4228,19 +5463,24 @@ loglevelnext@^1.0.1:
     es6-symbol "^3.1.1"
     object.assign "^4.1.0"
 
-loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
   dependencies:
     js-tokens "^3.0.0 || ^4.0.0"
 
-loud-rejection@^1.0.0, loud-rejection@^1.6.0:
+loud-rejection@^1.0.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
   dependencies:
     currently-unhandled "^0.4.1"
     signal-exit "^3.0.0"
 
+lower-case@^1.1.1:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+  integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw=
+
 lowlight@~1.9.1:
   version "1.9.2"
   resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.2.tgz#0b9127e3cec2c3021b7795dd81005c709a42fdd1"
@@ -4248,13 +5488,28 @@ lowlight@~1.9.1:
     fault "^1.0.2"
     highlight.js "~9.12.0"
 
-lru-cache@^4.0.1, lru-cache@^4.1.1:
+lru-cache@^4.0.1:
   version "4.1.3"
   resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
   dependencies:
     pseudomap "^1.0.2"
     yallist "^2.1.2"
 
+lru-cache@^4.1.5:
+  version "4.1.5"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+  dependencies:
+    pseudomap "^1.0.2"
+    yallist "^2.1.2"
+
+lru-cache@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+  integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+  dependencies:
+    yallist "^3.0.2"
+
 make-dir@^1.0.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
@@ -4283,27 +5538,41 @@ map-obj@^1.0.0, map-obj@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
 
+map-or-similar@^1.5.0:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08"
+  integrity sha1-beJlMXSt+12e3DPGnT6Sobdvrwg=
+
 map-visit@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
   dependencies:
     object-visit "^1.0.0"
 
+markdown-to-jsx@^6.9.1:
+  version "6.9.3"
+  resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.9.3.tgz#31719e3c54517ba9805db81d53701b89f5d2ed7e"
+  integrity sha512-iXteiv317VZd1vk/PBH5MWMD4r0XWekoWCHRVVadBcnCtxavhtfV1UaEaQgq9KyckTv31L60ASh5ZVVrOh37Qg==
+  dependencies:
+    prop-types "^15.6.2"
+    unquote "^1.1.0"
+
 material-colors@^1.2.1:
   version "1.2.6"
   resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46"
 
-mathjs@^5.1.2:
-  version "5.1.2"
-  resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-5.1.2.tgz#dab9352d9e50c235a51926666d4aba5936c7b33f"
+mathjs@^5.8.0:
+  version "5.8.0"
+  resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-5.8.0.tgz#25e36843db3b577f89193d1b7d299c27eab58ed7"
+  integrity sha512-hFHcxpG9IwNKP50NLg8PUnYSWUUotyJs1HAn9GTosJ6Q9LBNd2owSB/DvFm9vG88IkhGlo8evE+aiAzBweVK6A==
   dependencies:
     complex.js "2.0.11"
-    decimal.js "10.0.1"
-    escape-latex "1.1.1"
-    fraction.js "4.0.9"
+    decimal.js "10.1.1"
+    escape-latex "1.2.0"
+    fraction.js "4.0.12"
     javascript-natural-sort "0.7.1"
     seed-random "2.2.0"
-    tiny-emitter "2.0.2"
+    tiny-emitter "2.1.0"
     typed-function "1.1.0"
 
 md5.js@^1.3.4:
@@ -4313,6 +5582,11 @@ md5.js@^1.3.4:
     hash-base "^3.0.0"
     inherits "^2.0.1"
 
+mdn-data@~1.1.0:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01"
+  integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==
+
 media-typer@0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
@@ -4325,7 +5599,19 @@ mem@^4.0.0:
     mimic-fn "^1.0.0"
     p-is-promise "^1.1.0"
 
-memory-fs@^0.4.0, memory-fs@~0.4.1:
+memoize-one@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.0.0.tgz#d55007dffefb8de7546659a1722a5d42e128286e"
+  integrity sha512-7g0+ejkOaI9w5x6LvQwmj68kUj6rxROywPSCqmclG/HBacmFnZqhVscQ8kovkn9FBCNJmOz6SY42+jnvZzDWdw==
+
+memoizerific@^1.11.3:
+  version "1.11.3"
+  resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a"
+  integrity sha1-fIekZGREwy11Q4VwkF8tvRsagFo=
+  dependencies:
+    map-or-similar "^1.5.0"
+
+memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1:
   version "0.4.1"
   resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
   dependencies:
@@ -4347,6 +5633,15 @@ meow@^3.7.0:
     redent "^1.0.0"
     trim-newlines "^1.0.0"
 
+merge-deep@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/merge-deep/-/merge-deep-3.0.2.tgz#f39fa100a4f1bd34ff29f7d2bf4508fbb8d83ad2"
+  integrity sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==
+  dependencies:
+    arr-union "^3.1.0"
+    clone-deep "^0.2.4"
+    kind-of "^3.0.2"
+
 merge-descriptors@1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
@@ -4359,7 +5654,7 @@ methods@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
 
-micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^3.1.9:
+micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^3.1.9:
   version "3.1.10"
   resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
   dependencies:
@@ -4388,7 +5683,7 @@ mime-db@~1.36.0:
   version "1.36.0"
   resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397"
 
-mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19:
+mime-types@^2.1.12, mime-types@~2.1.18, mime-types@~2.1.19:
   version "2.1.20"
   resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19"
   dependencies:
@@ -4412,6 +5707,15 @@ min-document@^2.19.0:
   dependencies:
     dom-walk "^0.1.0"
 
+mini-css-extract-plugin@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz#ac0059b02b9692515a637115b0cc9fed3a35c7b0"
+  integrity sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==
+  dependencies:
+    loader-utils "^1.1.0"
+    schema-utils "^1.0.0"
+    webpack-sources "^1.1.0"
+
 minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
@@ -4447,9 +5751,10 @@ minizlib@^1.1.0:
   dependencies:
     minipass "^2.2.1"
 
-mississippi@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f"
+mississippi@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+  integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
   dependencies:
     concat-stream "^1.5.0"
     duplexify "^3.4.2"
@@ -4457,7 +5762,7 @@ mississippi@^2.0.0:
     flush-write-stream "^1.0.0"
     from2 "^2.1.0"
     parallel-transform "^1.1.0"
-    pump "^2.0.1"
+    pump "^3.0.0"
     pumpify "^1.3.3"
     stream-each "^1.1.0"
     through2 "^2.0.0"
@@ -4476,15 +5781,16 @@ mixin-object@^2.0.1:
     for-in "^0.1.3"
     is-extendable "^0.1.1"
 
-"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0:
+"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
   version "0.5.1"
   resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
   dependencies:
     minimist "0.0.8"
 
-moment@^2.22.2:
-  version "2.22.2"
-  resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66"
+moment@^2.24.0:
+  version "2.24.0"
+  resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
+  integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
 
 move-concurrently@^1.0.1:
   version "1.0.1"
@@ -4553,6 +5859,13 @@ nice-try@^1.0.4:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
 
+no-case@^2.2.0:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
+  integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
+  dependencies:
+    lower-case "^1.1.1"
+
 node-dir@^0.1.10:
   version "0.1.17"
   resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5"
@@ -4566,6 +5879,11 @@ node-fetch@^1.0.1:
     encoding "^0.1.11"
     is-stream "^1.0.1"
 
+node-fetch@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5"
+  integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==
+
 node-gyp@^3.8.0:
   version "3.8.0"
   resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
@@ -4626,15 +5944,17 @@ node-pre-gyp@^0.10.0:
     semver "^5.3.0"
     tar "^4"
 
-node-releases@^1.0.0-alpha.11:
-  version "1.0.0-alpha.11"
-  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.11.tgz#73c810acc2e5b741a17ddfbb39dfca9ab9359d8a"
+node-releases@^1.1.11, node-releases@^1.1.3:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.11.tgz#9a0841a4b0d92b7d5141ed179e764f42ad22724a"
+  integrity sha512-8v1j5KfP+s5WOTa1spNUAOfreajQPN12JXbRR0oDE+YrJBQCXBnNqUDj27EKpPLOoSiU3tKi3xGPB+JaOdUEQQ==
   dependencies:
     semver "^5.3.0"
 
-node-sass@^4.9.3:
-  version "4.9.3"
-  resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.3.tgz#f407cf3d66f78308bb1e346b24fa428703196224"
+node-sass@^4.11.0:
+  version "4.11.0"
+  resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a"
+  integrity sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==
   dependencies:
     async-foreach "^0.1.3"
     chalk "^1.1.1"
@@ -4651,20 +5971,26 @@ node-sass@^4.9.3:
     nan "^2.10.0"
     node-gyp "^3.8.0"
     npmlog "^4.0.0"
-    request "2.87.0"
+    request "^2.88.0"
     sass-graph "^2.2.4"
     stdout-stream "^1.4.0"
     "true-case-path" "^1.0.2"
 
+node-version@^1.0.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.2.0.tgz#34fde3ffa8e1149bd323983479dda620e1b5060d"
+  integrity sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==
+
 "nopt@2 || 3":
   version "3.0.6"
   resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
   dependencies:
     abbrev "1"
 
-nopt@^4.0.1:
+nopt@^4.0.1, nopt@~4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+  integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
   dependencies:
     abbrev "1"
     osenv "^0.1.4"
@@ -4690,6 +6016,11 @@ normalize-path@^2.1.1:
   dependencies:
     remove-trailing-separator "^1.0.1"
 
+normalize-path@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
 normalize-range@^0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
@@ -4720,6 +6051,13 @@ npm-run-path@^2.0.0:
     gauge "~2.7.3"
     set-blocking "~2.0.0"
 
+nth-check@^1.0.2, nth-check@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+  integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+  dependencies:
+    boolbase "~1.0.0"
+
 num2fraction@^1.2.2:
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
@@ -4728,18 +6066,10 @@ number-is-nan@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
 
-oauth-sign@~0.8.2:
-  version "0.8.2"
-  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
-
 oauth-sign@~0.9.0:
   version "0.9.0"
   resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
 
-object-assign@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
-
 object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@@ -4817,6 +6147,16 @@ object.values@^1.0.4:
     function-bind "^1.1.0"
     has "^1.0.1"
 
+object.values@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9"
+  integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.12.0"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+
 on-finished@~2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
@@ -4835,15 +6175,24 @@ onetime@^2.0.0:
   dependencies:
     mimic-fn "^1.0.0"
 
-opn@5.3.0:
-  version "5.3.0"
-  resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c"
+opn@5.4.0:
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035"
+  integrity sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==
+  dependencies:
+    is-wsl "^1.1.0"
+
+opn@^5.4.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
+  integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==
   dependencies:
     is-wsl "^1.1.0"
 
-original@>=0.0.5:
+original@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
+  integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==
   dependencies:
     url-parse "^1.4.3"
 
@@ -4869,7 +6218,7 @@ os-locale@^3.0.0:
     lcid "^2.0.0"
     mem "^4.0.0"
 
-os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
+os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
 
@@ -4936,6 +6285,13 @@ parallel-transform@^1.1.0:
     inherits "^2.0.3"
     readable-stream "^2.1.5"
 
+param-case@2.1.x:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
+  integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc=
+  dependencies:
+    no-case "^2.2.0"
+
 parse-asn1@^5.0.0:
   version "5.1.1"
   resolved "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8"
@@ -4974,6 +6330,11 @@ parse-passwd@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
 
+parse5@^5.0.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
+  integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==
+
 parseurl@~1.3.2:
   version "1.3.2"
   resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
@@ -5000,7 +6361,7 @@ path-exists@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
 
-path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
+path-is-absolute@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
 
@@ -5008,7 +6369,7 @@ path-key@^2.0.0, path-key@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
 
-path-parse@^1.0.5:
+path-parse@^1.0.5, path-parse@^1.0.6:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
 
@@ -5062,12 +6423,6 @@ pinkie@^2.0.0:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
 
-pkg-dir@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
-  dependencies:
-    find-up "^2.1.0"
-
 pkg-dir@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
@@ -5080,6 +6435,18 @@ pkg-up@2.0.0:
   dependencies:
     find-up "^2.1.0"
 
+polished@^2.3.3:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/polished/-/polished-2.3.3.tgz#bdbaba962ba8271b0e11aa287f2befd4c87be99a"
+  integrity sha512-59V4fDbdxtH4I1m9TWxFsoGJbC8nnOpUYo5uFmvMfKp9Qh+6suo4VMUle1TGIIUZIGxfkW+Rs485zPk0wcwR2Q==
+  dependencies:
+    "@babel/runtime" "^7.2.0"
+
+popper.js@^1.14.4:
+  version "1.14.7"
+  resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.7.tgz#e31ec06cfac6a97a53280c3e55e4e0c860e7738e"
+  integrity sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ==
+
 posix-character-classes@^0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
@@ -5106,46 +6473,57 @@ postcss-loader@^3.0.0:
     postcss-load-config "^2.0.0"
     schema-utils "^1.0.0"
 
-postcss-modules-extract-imports@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85"
+postcss-modules-extract-imports@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e"
+  integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==
   dependencies:
-    postcss "^6.0.1"
+    postcss "^7.0.5"
 
-postcss-modules-local-by-default@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
+postcss-modules-local-by-default@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63"
+  integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==
   dependencies:
-    css-selector-tokenizer "^0.7.0"
-    postcss "^6.0.1"
+    postcss "^7.0.6"
+    postcss-selector-parser "^6.0.0"
+    postcss-value-parser "^3.3.1"
 
-postcss-modules-scope@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
+postcss-modules-scope@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb"
+  integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==
   dependencies:
-    css-selector-tokenizer "^0.7.0"
-    postcss "^6.0.1"
+    postcss "^7.0.6"
+    postcss-selector-parser "^6.0.0"
 
-postcss-modules-values@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
+postcss-modules-values@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64"
+  integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==
   dependencies:
     icss-replace-symbols "^1.1.0"
-    postcss "^6.0.1"
+    postcss "^7.0.6"
 
-postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
+postcss-selector-parser@^6.0.0:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c"
+  integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==
+  dependencies:
+    cssesc "^3.0.0"
+    indexes-of "^1.0.1"
+    uniq "^1.0.1"
+
+postcss-value-parser@^3.3.0:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
 
-postcss@^6.0.1, postcss@^6.0.23:
-  version "6.0.23"
-  resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
-  dependencies:
-    chalk "^2.4.1"
-    source-map "^0.6.1"
-    supports-color "^5.4.0"
+postcss-value-parser@^3.3.1:
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+  integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
 
-postcss@^7.0.0, postcss@^7.0.2:
+postcss@^7.0.0:
   version "7.0.2"
   resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.2.tgz#7b5a109de356804e27f95a960bef0e4d5bc9bb18"
   dependencies:
@@ -5153,9 +6531,32 @@ postcss@^7.0.0, postcss@^7.0.2:
     source-map "^0.6.1"
     supports-color "^5.4.0"
 
-prettier@^1.14.0, prettier@^1.14.2:
-  version "1.14.2"
-  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.2.tgz#0ac1c6e1a90baa22a62925f41963c841983282f9"
+postcss@^7.0.14, postcss@^7.0.5, postcss@^7.0.6:
+  version "7.0.14"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5"
+  integrity sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==
+  dependencies:
+    chalk "^2.4.2"
+    source-map "^0.6.1"
+    supports-color "^6.1.0"
+
+prettier@^1.16.4:
+  version "1.16.4"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717"
+  integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==
+
+pretty-error@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
+  integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=
+  dependencies:
+    renderkid "^2.0.1"
+    utila "~0.4"
+
+pretty-hrtime@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
+  integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=
 
 prismjs@^1.8.4, prismjs@~1.15.0:
   version "1.15.0"
@@ -5163,7 +6564,7 @@ prismjs@^1.8.4, prismjs@~1.15.0:
   optionalDependencies:
     clipboard "^2.0.0"
 
-private@^0.1.6, private@^0.1.8, private@~0.1.5:
+private@^0.1.6, private@~0.1.5:
   version "0.1.8"
   resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
 
@@ -5183,6 +6584,11 @@ promise-inflight@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
 
+promise-polyfill@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057"
+  integrity sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc=
+
 promise.prototype.finally@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.0.tgz#66f161b1643636e50e7cf201dc1b84a857f3864e"
@@ -5197,19 +6603,40 @@ promise@^7.1.1:
   dependencies:
     asap "~2.0.3"
 
-prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0, prop-types@^15.6.2:
+prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2:
   version "15.6.2"
   resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102"
   dependencies:
     loose-envify "^1.3.1"
     object-assign "^4.1.1"
 
+prop-types@^15.6.1:
+  version "15.7.2"
+  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+  integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+  dependencies:
+    loose-envify "^1.4.0"
+    object-assign "^4.1.1"
+    react-is "^16.8.1"
+
 property-information@^4.0.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/property-information/-/property-information-4.2.0.tgz#f0e66e07cbd6fed31d96844d958d153ad3eb486e"
   dependencies:
     xtend "^4.0.1"
 
+property-information@^5.0.0, property-information@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.0.1.tgz#c3b09f4f5750b1634c0b24205adbf78f18bdf94f"
+  integrity sha512-nAtBDVeSwFM3Ot/YxT7s4NqZmqXI7lLzf46BThvotEtYf2uk2yH0ACYuWQkJ7gxKs49PPtKVY0UlDGkyN9aJlw==
+  dependencies:
+    xtend "^4.0.1"
+
+proto-list@~1.2.1:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+  integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
+
 proxy-addr@~2.0.3:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93"
@@ -5239,13 +6666,21 @@ public-encrypt@^4.0.0:
     parse-asn1 "^5.0.0"
     randombytes "^2.0.1"
 
-pump@^2.0.0, pump@^2.0.1:
+pump@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
   dependencies:
     end-of-stream "^1.1.0"
     once "^1.3.1"
 
+pump@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+  dependencies:
+    end-of-stream "^1.1.0"
+    once "^1.3.1"
+
 pumpify@^1.3.3:
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
@@ -5266,11 +6701,16 @@ punycode@^2.1.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
 
+q@^1.1.2:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+  integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
 qs@6.5.1:
   version "6.5.1"
   resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
 
-qs@^6.5.2, qs@~6.5.1, qs@~6.5.2:
+qs@^6.5.2, qs@~6.5.2:
   version "6.5.2"
   resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
 
@@ -5286,6 +6726,18 @@ querystringify@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz#fa3ed6e68eb15159457c89b37bc6472833195755"
 
+raf@^3.4.0:
+  version "3.4.1"
+  resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
+  integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
+  dependencies:
+    performance-now "^2.1.0"
+
+ramda@^0.21.0:
+  version "0.21.0"
+  resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35"
+  integrity sha1-oAGr7bP/YQd9T/HVd9RN536NCjU=
+
 randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
@@ -5312,9 +6764,13 @@ raw-body@2.3.2:
     iconv-lite "0.4.19"
     unpipe "1.0.0"
 
-raw-loader@^0.5.1:
-  version "0.5.1"
-  resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
+raw-loader@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-1.0.0.tgz#3f9889e73dadbda9a424bce79809b4133ad46405"
+  integrity sha512-Uqy5AqELpytJTRxYT4fhltcKPj0TyaEpzJDcGz7DFJi+pQOOi3GjR/DOdxTkTsF+NzhnldIoG6TORaBlInUuqA==
+  dependencies:
+    loader-utils "^1.1.0"
+    schema-utils "^1.0.0"
 
 rc@^1.2.7:
   version "1.2.8"
@@ -5325,85 +6781,130 @@ rc@^1.2.7:
     minimist "^1.2.0"
     strip-json-comments "~2.0.1"
 
-react-color@^2.14.1:
-  version "2.14.1"
-  resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.14.1.tgz#db8ad4f45d81e74896fc2e1c99508927c6d084e0"
+react-clientside-effect@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.0.tgz#db823695f75e9616a5e4dd6d908e5ea627fb2516"
+  integrity sha512-cVIsGG7SNHsQsCP4+fw7KFUB0HiYiU8hbvL640XaLCbZ31aK8/lj0qOKJ2K+xRjuQz/IM4Q4qclI0aEqTtcXtA==
+  dependencies:
+    "@babel/runtime" "^7.0.0"
+    shallowequal "^1.1.0"
+
+react-color@^2.17.0:
+  version "2.17.0"
+  resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.17.0.tgz#e14b8a11f4e89163f65a34c8b43faf93f7f02aaa"
+  integrity sha512-kJfE5tSaFe6GzalXOHksVjqwCPAsTl+nzS9/BWfP7j3EXbQ4IiLAF9sZGNzk3uq7HfofGYgjmcUgh0JP7xAQ0w==
   dependencies:
-    lodash "^4.0.1"
+    "@icons/material" "^0.2.4"
+    lodash ">4.17.4"
     material-colors "^1.2.1"
     prop-types "^15.5.10"
     reactcss "^1.2.0"
     tinycolor2 "^1.4.1"
 
-react-datetime@^2.15.0:
-  version "2.15.0"
-  resolved "https://registry.yarnpkg.com/react-datetime/-/react-datetime-2.15.0.tgz#a8f7da6c58b6b45dbeea32d4e8485db17614e12c"
-  dependencies:
-    create-react-class "^15.5.2"
-    object-assign "^3.0.0"
-    prop-types "^15.5.7"
-    react-onclickoutside "^6.5.0"
-
-react-dev-utils@6.0.0-next.3e165448:
-  version "6.0.0-next.3e165448"
-  resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-6.0.0-next.3e165448.tgz#d573ed0ba692f6cee23166f99204e5761df0897c"
+react-dev-utils@^7.0.0, react-dev-utils@^7.0.1:
+  version "7.0.5"
+  resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-7.0.5.tgz#cb95375d01ae71ca27b3c7616006ef7a77d14e8e"
+  integrity sha512-zJnqqb0x6gd63E3xoz5pXAxBPNaW75Hyz7GgQp0qPhMroBCRQtRvG67AoTZZY1z4yCYVJQZAfQJFdnea0Ujbug==
   dependencies:
-    "@babel/code-frame" "7.0.0-beta.46"
+    "@babel/code-frame" "7.0.0"
     address "1.0.3"
-    browserslist "3.2.6"
-    chalk "2.4.1"
+    browserslist "4.4.1"
+    chalk "2.4.2"
     cross-spawn "6.0.5"
     detect-port-alt "1.1.6"
     escape-string-regexp "1.0.5"
     filesize "3.6.1"
-    find-pkg "1.0.0"
-    global-modules "1.0.0"
-    globby "8.0.1"
-    gzip-size "4.1.0"
-    inquirer "5.1.0"
-    is-root "1.0.0"
-    opn "5.3.0"
+    find-up "3.0.0"
+    global-modules "2.0.0"
+    globby "8.0.2"
+    gzip-size "5.0.0"
+    immer "1.10.0"
+    inquirer "6.2.1"
+    is-root "2.0.0"
+    loader-utils "1.2.3"
+    opn "5.4.0"
     pkg-up "2.0.0"
-    react-error-overlay "5.0.0-next.3e165448"
+    react-error-overlay "^5.1.4"
     recursive-readdir "2.2.2"
     shell-quote "1.6.1"
-    sockjs-client "1.1.4"
-    strip-ansi "4.0.0"
+    sockjs-client "1.3.0"
+    strip-ansi "5.0.0"
     text-table "0.2.0"
 
-react-docgen@^3.0.0-rc.1:
-  version "3.0.0-rc.1"
-  resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-3.0.0-rc.1.tgz#a4e33dba1454459294276afdec87ef3958167eb0"
+react-docgen@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-3.0.0.tgz#79c6e1b1870480c3c2bc1a65bede0577a11c38cd"
+  integrity sha512-2UseoLWabFNXuk1Foz4VDPSIAkxz+1Hmmq4qijzUmYHDq0ZSloKDLXtGLpQRcAi/M76hRpPtH1rV4BI5jNAOnQ==
   dependencies:
-    "@babel/parser" "7.0.0-beta.53"
+    "@babel/parser" "^7.1.3"
+    "@babel/runtime" "^7.0.0"
     async "^2.1.4"
-    babel-runtime "^6.9.2"
-    commander "^2.9.0"
+    commander "^2.19.0"
     doctrine "^2.0.0"
     node-dir "^0.1.10"
-    recast "^0.15.0"
+    recast "^0.16.0"
 
-react-dom@^16.5.1:
-  version "16.5.1"
-  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.5.1.tgz#29d0c5a01ed3b6b4c14309aa91af6ec4eb4f292c"
+react-dom@^16.8.1, react-dom@^16.8.4:
+  version "16.8.4"
+  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.4.tgz#1061a8e01a2b3b0c8160037441c3bf00a0e3bc48"
+  integrity sha512-Ob2wK7XG2tUDt7ps7LtLzGYYB6DXMCLj0G5fO6WeEICtT4/HdpOi7W/xLzZnR6RCG1tYza60nMdqtxzA8FaPJQ==
   dependencies:
     loose-envify "^1.1.0"
     object-assign "^4.1.1"
     prop-types "^15.6.2"
-    schedule "^0.4.0"
-
-react-error-overlay@5.0.0-next.3e165448:
-  version "5.0.0-next.3e165448"
-  resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-5.0.0-next.3e165448.tgz#2cbd10780c1fa9c7e35d6e443773e18948b7ee49"
+    scheduler "^0.13.4"
 
-react-fuzzy@^0.5.2:
-  version "0.5.2"
-  resolved "https://registry.yarnpkg.com/react-fuzzy/-/react-fuzzy-0.5.2.tgz#fc13bf6f0b785e5fefe908724efebec4935eaefe"
+react-draggable@^3.1.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-3.2.1.tgz#45d09a9a227988dc85674b23ab3c75b6e820dae5"
+  integrity sha512-r+3Bs9InID2lyIEbR8UIRVtpn4jgu1ArFEZgIy8vibJjijLSdNLX7rH9U68BBVD4RD9v44RXbaK4EHLyKXzNQw==
   dependencies:
-    babel-runtime "^6.23.0"
     classnames "^2.2.5"
-    fuse.js "^3.0.1"
-    prop-types "^15.5.9"
+    prop-types "^15.6.0"
+
+react-error-overlay@^5.1.4:
+  version "5.1.4"
+  resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-5.1.4.tgz#88dfb88857c18ceb3b9f95076f850d7121776991"
+  integrity sha512-fp+U98OMZcnduQ+NSEiQa4s/XMsbp+5KlydmkbESOw4P69iWZ68ZMFM5a2BuE0FgqPBKApJyRuYHR95jM8lAmg==
+
+react-fast-compare@^2.0.2:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
+  integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
+
+react-focus-lock@^1.17.7:
+  version "1.18.3"
+  resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-1.18.3.tgz#19d84afeab935c0b5de196922f71db7c481baba4"
+  integrity sha512-4fPAHnsr8oCYPgVmcMZ8NbAE9jm/OshPjXEM5PHseu2lDernzm/b1sHhYzZUO4OoW9D/u1AQsV6n4trRllow7w==
+  dependencies:
+    "@babel/runtime" "^7.0.0"
+    focus-lock "^0.6.0"
+    prop-types "^15.6.2"
+    react-clientside-effect "^1.2.0"
+
+react-helmet-async@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-0.2.0.tgz#d20d8725c1dcdcc95d54e281a1040af47c3abffa"
+  integrity sha512-xo8oN+SUt0YkgQscKPTqhZZIOn5ni18FMv/H3KuBDt5+yAXTGktPEf3HU2EyufbHAF0TQ8qI+JrA3ILnjVfqNA==
+  dependencies:
+    invariant "^2.2.4"
+    prop-types "^15.6.1"
+    react-fast-compare "^2.0.2"
+    shallowequal "^1.0.2"
+
+react-hotkeys@2.0.0-pre4:
+  version "2.0.0-pre4"
+  resolved "https://registry.yarnpkg.com/react-hotkeys/-/react-hotkeys-2.0.0-pre4.tgz#a1c248a51bdba4282c36bf3204f80d58abc73333"
+  integrity sha512-oa+UncSWyOwMK3GExt+oELXaR7T3ItgcMolsupQFdKvwkEhVAluJd5rYczsRSQpQlVkdNoHG46De2NUeuS+88Q==
+  dependencies:
+    prop-types "^15.6.1"
+
+react-input-autosize@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.1.tgz#ec428fa15b1592994fb5f9aa15bb1eb6baf420f8"
+  integrity sha512-3+K4CD13iE4lQQ2WlF8PuV5htfmTRLH6MDnfndHM6LuBRszuXnuyIfE7nhSKt8AzRBZ50bu0sAhkNMeS5pxQQA==
+  dependencies:
+    prop-types "^15.5.8"
 
 react-inspector@^2.3.0:
   version "2.3.0"
@@ -5412,37 +6913,77 @@ react-inspector@^2.3.0:
     babel-runtime "^6.26.0"
     is-dom "^1.0.9"
 
-react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4:
+react-inspector@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-2.3.1.tgz#f0eb7f520669b545b441af9d38ec6d706e5f649c"
+  integrity sha512-tUUK7t3KWgZEIUktOYko5Ic/oYwvjEvQUFAGC1UeMeDaQ5za2yZFtItJa2RTwBJB//NxPr000WQK6sEbqC6y0Q==
+  dependencies:
+    babel-runtime "^6.26.0"
+    is-dom "^1.0.9"
+    prop-types "^15.6.1"
+
+react-is@^16.7.0, react-is@^16.8.1:
+  version "16.8.4"
+  resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.4.tgz#90f336a68c3a29a096a3d648ab80e87ec61482a2"
+  integrity sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA==
+
+react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
+  integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
 
-react-modal@^3.5.1:
-  version "3.5.1"
-  resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.5.1.tgz#33d38527def90ea324848f7d63e53acc4468a451"
+react-modal@^3.8.1:
+  version "3.8.1"
+  resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.8.1.tgz#7300f94a6f92a2e17994de0be6ccb61734464c9e"
+  integrity sha512-aLKeZM9pgXpIKVwopRHMuvqKWiBajkqisDA8UzocdCF6S4fyKVfLWmZR5G1Q0ODBxxxxf2XIwiCP8G/11GJAuw==
   dependencies:
     exenv "^1.2.0"
     prop-types "^15.5.10"
     react-lifecycles-compat "^3.0.0"
     warning "^3.0.0"
 
-react-onclickoutside@^6.5.0:
-  version "6.7.1"
-  resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.7.1.tgz#6a5b5b8b4eae6b776259712c89c8a2b36b17be93"
-
-react-split-pane@^0.1.82:
-  version "0.1.84"
-  resolved "https://registry.yarnpkg.com/react-split-pane/-/react-split-pane-0.1.84.tgz#b9c1499cbc40b09cf29953ee6f5ff1039d31906e"
-  dependencies:
-    inline-style-prefixer "^3.0.6"
-    prop-types "^15.5.10"
-    react-lifecycles-compat "^3.0.4"
-    react-style-proptype "^3.0.0"
+react-popper-tooltip@^2.8.0:
+  version "2.8.1"
+  resolved "https://registry.yarnpkg.com/react-popper-tooltip/-/react-popper-tooltip-2.8.1.tgz#bbaec88b729e3b7e9f26521857e7f908bccdecf3"
+  integrity sha512-eL0PT5yz9H9lkG934TMh7czZWwDlqFady7CcJKMP5RcmBxTFBY4U7k71FEyxNaHd07nhMhUwbk0/Fgf2yw3LEg==
+  dependencies:
+    "@babel/runtime" "^7.3.4"
+    react-popper "^1.3.3"
+
+react-popper@^1.3.3:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.3.tgz#2c6cef7515a991256b4f0536cd4bdcb58a7b6af6"
+  integrity sha512-ynMZBPkXONPc5K4P5yFWgZx5JGAUIP3pGGLNs58cfAPgK67olx7fmLp+AdpZ0+GoQ+ieFDa/z4cdV6u7sioH6w==
+  dependencies:
+    "@babel/runtime" "^7.1.2"
+    create-react-context "<=0.2.2"
+    popper.js "^1.14.4"
+    prop-types "^15.6.1"
+    typed-styles "^0.0.7"
+    warning "^4.0.2"
+
+react-resize-detector@^3.2.1:
+  version "3.4.0"
+  resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-3.4.0.tgz#2ccd399958a0efe9b7c52c5db5a13d87e47cd585"
+  integrity sha512-T96I8Iqa1hGWyooeFA2Sl6FdPoMhXWINfEKg2/EJLxhP37+/94VNuyuyz9CRqpmApD83IWRR+lbB3r0ADMoKJg==
+  dependencies:
+    lodash "^4.17.11"
+    lodash-es "^4.17.11"
+    prop-types "^15.6.2"
+    resize-observer-polyfill "^1.5.1"
 
-react-style-proptype@^3.0.0:
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/react-style-proptype/-/react-style-proptype-3.2.2.tgz#d8e998e62ce79ec35b087252b90f19f1c33968a0"
+react-select@^2.3.0:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/react-select/-/react-select-2.4.2.tgz#27da80e3880e92b081be607207bebdf63bcf4f3a"
+  integrity sha512-5xFOQ6JJktkY5NTaHrc6x9mKwIjhNIiBkGic1j71uyY+ulFpRFra6f4WKLd9fuCylk4WjLpO5zDhdF4CAcwFzA==
   dependencies:
-    prop-types "^15.5.4"
+    classnames "^2.2.5"
+    emotion "^9.1.2"
+    memoize-one "^5.0.0"
+    prop-types "^15.6.0"
+    raf "^3.4.0"
+    react-input-autosize "^2.2.1"
+    react-transition-group "^2.2.1"
 
 react-syntax-highlighter@^8.0.1:
   version "8.0.1"
@@ -5460,16 +7001,17 @@ react-textarea-autosize@^7.0.4:
   dependencies:
     prop-types "^15.6.0"
 
-react-transition-group@^2.0.0:
-  version "2.4.0"
-  resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.4.0.tgz#1d9391fabfd82e016f26fabd1eec329dbd922b5a"
+react-transition-group@^2.2.1:
+  version "2.6.1"
+  resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.6.1.tgz#abf4a95e2f13fb9ba83a970a896fedbc5c4856a2"
+  integrity sha512-9DHwCy0aOYEe35frlEN68N9ut/THDQBLnVoQuKTvzF4/s3tk7lqkefCqxK2Nv96fOh6JXk6tQtliygk6tl3bQA==
   dependencies:
     dom-helpers "^3.3.1"
-    loose-envify "^1.3.1"
+    loose-envify "^1.4.0"
     prop-types "^15.6.2"
     react-lifecycles-compat "^3.0.4"
 
-react@^16.4.0, react@^16.5.1:
+react@^16.4.0:
   version "16.5.1"
   resolved "https://registry.yarnpkg.com/react/-/react-16.5.1.tgz#8cb8e9f8cdcb4bde41c9a138bfbf907e66132372"
   dependencies:
@@ -5478,12 +7020,27 @@ react@^16.4.0, react@^16.5.1:
     prop-types "^15.6.2"
     schedule "^0.4.0"
 
+react@^16.8.1, react@^16.8.4:
+  version "16.8.4"
+  resolved "https://registry.yarnpkg.com/react/-/react-16.8.4.tgz#fdf7bd9ae53f03a9c4cd1a371432c206be1c4768"
+  integrity sha512-0GQ6gFXfUH7aZcjGVymlPOASTuSjlQL4ZtVC5YKH+3JL6bBLCVO21DknzmaPlI90LN253ojj02nsapy+j7wIjg==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+    prop-types "^15.6.2"
+    scheduler "^0.13.4"
+
 reactcss@^1.2.0:
   version "1.2.3"
   resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd"
   dependencies:
     lodash "^4.0.1"
 
+reactjs-popup@^1.3.2:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/reactjs-popup/-/reactjs-popup-1.3.2.tgz#7f7861443fc5edfb0184da1d01838dbd5db690cd"
+  integrity sha512-BwfaOkKpLHNHxSmiMcX/yc61twJvjGbJ/SBE+fYovJudFlaZDYXGPSp+3dTCE0UoNsEqF8oc/pNkYlGgmrnsrw==
+
 read-pkg-up@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
@@ -5511,6 +7068,15 @@ read-pkg@^1.0.0:
     string_decoder "~1.1.1"
     util-deprecate "~1.0.1"
 
+readable-stream@^3.1.1:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d"
+  integrity sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
 readdirp@^2.0.0:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
@@ -5519,11 +7085,22 @@ readdirp@^2.0.0:
     micromatch "^3.1.10"
     readable-stream "^2.0.2"
 
-recast@^0.15.0:
-  version "0.15.5"
-  resolved "https://registry.yarnpkg.com/recast/-/recast-0.15.5.tgz#6871177ee26720be80d7624e4283d5c855a5cb0b"
+recast@^0.14.7:
+  version "0.14.7"
+  resolved "https://registry.yarnpkg.com/recast/-/recast-0.14.7.tgz#4f1497c2b5826d42a66e8e3c9d80c512983ff61d"
+  integrity sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A==
+  dependencies:
+    ast-types "0.11.3"
+    esprima "~4.0.0"
+    private "~0.1.5"
+    source-map "~0.6.1"
+
+recast@^0.16.0:
+  version "0.16.2"
+  resolved "https://registry.yarnpkg.com/recast/-/recast-0.16.2.tgz#3796ebad5fe49ed85473b479cd6df554ad725dc2"
+  integrity sha512-O/7qXi51DPjRVdbrpNzoBQH5dnAPQNbfoOFyRiUwreTMJfIHYOEBzwuH+c0+/BTSJ3CQyKs6ILSWXhESH6Op3A==
   dependencies:
-    ast-types "0.11.5"
+    ast-types "0.11.7"
     esprima "~4.0.0"
     private "~0.1.5"
     source-map "~0.6.1"
@@ -5534,6 +7111,18 @@ rechoir@^0.6.2:
   dependencies:
     resolve "^1.1.6"
 
+recompose@^0.30.0:
+  version "0.30.0"
+  resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0"
+  integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==
+  dependencies:
+    "@babel/runtime" "^7.0.0"
+    change-emitter "^0.1.2"
+    fbjs "^0.8.1"
+    hoist-non-react-statics "^2.3.1"
+    react-lifecycles-compat "^3.0.2"
+    symbol-observable "^1.0.4"
+
 recursive-readdir@2.2.2:
   version "2.2.2"
   resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f"
@@ -5547,13 +7136,6 @@ redent@^1.0.0:
     indent-string "^2.1.0"
     strip-indent "^1.0.1"
 
-redux@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.0.tgz#aa698a92b729315d22b34a0553d7e6533555cc03"
-  dependencies:
-    loose-envify "^1.1.0"
-    symbol-observable "^1.2.0"
-
 refractor@^2.4.1:
   version "2.6.0"
   resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.6.0.tgz#6b0d88f654c8534eefed3329a35bc7bb74ae0979"
@@ -5568,7 +7150,14 @@ regenerate-unicode-properties@^7.0.0:
   dependencies:
     regenerate "^1.4.0"
 
-regenerate@^1.2.1, regenerate@^1.4.0:
+regenerate-unicode-properties@^8.0.2:
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662"
+  integrity sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==
+  dependencies:
+    regenerate "^1.4.0"
+
+regenerate@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
 
@@ -5576,16 +7165,28 @@ regenerator-runtime@^0.11.0:
   version "0.11.1"
   resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
 
-regenerator-runtime@^0.12.0:
+regenerator-runtime@^0.12.0, regenerator-runtime@^0.12.1:
   version "0.12.1"
   resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
 
+regenerator-runtime@^0.13.2:
+  version "0.13.2"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447"
+  integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==
+
 regenerator-transform@^0.13.3:
   version "0.13.3"
   resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb"
   dependencies:
     private "^0.1.6"
 
+regenerator-transform@^0.13.4:
+  version "0.13.4"
+  resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.4.tgz#18f6763cf1382c69c36df76c6ce122cc694284fb"
+  integrity sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==
+  dependencies:
+    private "^0.1.6"
+
 regex-not@^1.0.0, regex-not@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
@@ -5593,21 +7194,18 @@ regex-not@^1.0.0, regex-not@^1.0.2:
     extend-shallow "^3.0.2"
     safe-regex "^1.1.0"
 
+regexp-tree@^0.1.0:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.5.tgz#7cd71fca17198d04b4176efd79713f2998009397"
+  integrity sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==
+
 regexp.prototype.flags@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c"
   dependencies:
     define-properties "^1.1.2"
 
-regexpu-core@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
-  dependencies:
-    regenerate "^1.2.1"
-    regjsgen "^0.2.0"
-    regjsparser "^0.1.4"
-
-regexpu-core@^4.1.3, regexpu-core@^4.2.0:
+regexpu-core@^4.1.3:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d"
   dependencies:
@@ -5618,19 +7216,26 @@ regexpu-core@^4.1.3, regexpu-core@^4.2.0:
     unicode-match-property-ecmascript "^1.0.4"
     unicode-match-property-value-ecmascript "^1.0.2"
 
-regjsgen@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
+regexpu-core@^4.5.4:
+  version "4.5.4"
+  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae"
+  integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==
+  dependencies:
+    regenerate "^1.4.0"
+    regenerate-unicode-properties "^8.0.2"
+    regjsgen "^0.5.0"
+    regjsparser "^0.6.0"
+    unicode-match-property-ecmascript "^1.0.4"
+    unicode-match-property-value-ecmascript "^1.1.0"
 
 regjsgen@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.4.0.tgz#c1eb4c89a209263f8717c782591523913ede2561"
 
-regjsparser@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
-  dependencies:
-    jsesc "~0.5.0"
+regjsgen@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd"
+  integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==
 
 regjsparser@^0.3.0:
   version "0.3.0"
@@ -5638,6 +7243,27 @@ regjsparser@^0.3.0:
   dependencies:
     jsesc "~0.5.0"
 
+regjsparser@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c"
+  integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==
+  dependencies:
+    jsesc "~0.5.0"
+
+rehype-parse@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.0.tgz#f681555f2598165bee2c778b39f9073d17b16bca"
+  integrity sha512-V2OjMD0xcSt39G4uRdMTqDXXm6HwkUbLMDayYKA/d037j8/OtVSQ+tqKwYWOuyBeoCs/3clXRe30VUjeMDTBSA==
+  dependencies:
+    hast-util-from-parse5 "^5.0.0"
+    parse5 "^5.0.0"
+    xtend "^4.0.1"
+
+relateurl@0.2.x:
+  version "0.2.7"
+  resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+  integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
+
 remove-trailing-separator@^1.0.1:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
@@ -5646,6 +7272,17 @@ render-fragment@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/render-fragment/-/render-fragment-0.1.1.tgz#b231f259b7eee333d34256aee0ef3169be7bef30"
 
+renderkid@^2.0.1:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149"
+  integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==
+  dependencies:
+    css-select "^1.1.0"
+    dom-converter "^0.2"
+    htmlparser2 "^3.3.0"
+    strip-ansi "^3.0.0"
+    utila "^0.4.0"
+
 repeat-element@^1.1.2:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
@@ -5660,32 +7297,12 @@ repeating@^2.0.0:
   dependencies:
     is-finite "^1.0.0"
 
-request@2.87.0:
-  version "2.87.0"
-  resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e"
-  dependencies:
-    aws-sign2 "~0.7.0"
-    aws4 "^1.6.0"
-    caseless "~0.12.0"
-    combined-stream "~1.0.5"
-    extend "~3.0.1"
-    forever-agent "~0.6.1"
-    form-data "~2.3.1"
-    har-validator "~5.0.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.17"
-    oauth-sign "~0.8.2"
-    performance-now "^2.1.0"
-    qs "~6.5.1"
-    safe-buffer "^5.1.1"
-    tough-cookie "~2.3.3"
-    tunnel-agent "^0.6.0"
-    uuid "^3.1.0"
+replace-ext@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
+  integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
 
-request@^2.87.0:
+request@^2.87.0, request@^2.88.0:
   version "2.88.0"
   resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
   dependencies:
@@ -5726,13 +7343,18 @@ requires-port@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
 
+resize-observer-polyfill@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
+  integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
+
 resolve-cwd@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
   dependencies:
     resolve-from "^3.0.0"
 
-resolve-dir@^1.0.0:
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
   dependencies:
@@ -5743,6 +7365,16 @@ resolve-from@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
 
+resolve-from@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-pathname@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879"
+  integrity sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==
+
 resolve-url@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
@@ -5753,6 +7385,13 @@ resolve@^1.1.6, resolve@^1.3.2, resolve@^1.8.1:
   dependencies:
     path-parse "^1.0.5"
 
+resolve@^1.10.0:
+  version "1.10.0"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba"
+  integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==
+  dependencies:
+    path-parse "^1.0.6"
+
 restore-cursor@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
@@ -5770,6 +7409,13 @@ rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
   dependencies:
     glob "^7.0.5"
 
+rimraf@^2.2.8:
+  version "2.6.3"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+  integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+  dependencies:
+    glob "^7.1.3"
+
 ripemd160@^2.0.0, ripemd160@^2.0.1:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
@@ -5789,18 +7435,19 @@ run-queue@^1.0.0, run-queue@^1.0.3:
   dependencies:
     aproba "^1.1.1"
 
-rxjs@^5.5.2:
-  version "5.5.12"
-  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc"
-  dependencies:
-    symbol-observable "1.0.1"
-
 rxjs@^6.1.0:
   version "6.3.2"
   resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.2.tgz#6a688b16c4e6e980e62ea805ec30648e1c60907f"
   dependencies:
     tslib "^1.9.0"
 
+rxjs@^6.4.0:
+  version "6.4.0"
+  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504"
+  integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==
+  dependencies:
+    tslib "^1.9.0"
+
 safe-buffer@5.1.1:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
@@ -5809,6 +7456,11 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2,
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
 
+safe-eval@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/safe-eval/-/safe-eval-0.4.1.tgz#e54ba5a1bbdec795d488f6c8765e0c2a78b4cdc0"
+  integrity sha512-wmiu4RSYVZ690RP1+cv/LxfPK1dIlEN35aW7iv4SMYdqDrHbkll4+NJcHmKm7PbCuI1df1otOcPwgcc2iFR85g==
+
 safe-regex@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
@@ -5839,7 +7491,7 @@ sass-loader@^7.1.0:
     pify "^3.0.0"
     semver "^5.5.0"
 
-sax@^1.2.4:
+sax@^1.2.4, sax@~1.2.4:
   version "1.2.4"
   resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
 
@@ -5849,7 +7501,15 @@ schedule@^0.4.0:
   dependencies:
     object-assign "^4.1.1"
 
-schema-utils@^0.4.4, schema-utils@^0.4.5:
+scheduler@^0.13.4:
+  version "0.13.4"
+  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.4.tgz#8fef05e7a3580c76c0364d2df5e550e4c9140298"
+  integrity sha512-cvSOlRPxOHs5dAhP9yiS/6IDmVAVxmk33f0CtTJRkmUWcb1Us+t7b1wqdzoC0REw2muC9V5f1L/w5R5uKGaepA==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+
+schema-utils@^0.4.5:
   version "0.4.7"
   resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
   dependencies:
@@ -5883,6 +7543,11 @@ select@^1.1.2:
   version "5.5.1"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
 
+semver@^5.6.0:
+  version "5.6.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
+  integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
+
 semver@~5.3.0:
   version "5.3.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
@@ -5969,6 +7634,16 @@ sha.js@^2.4.0, sha.js@^2.4.8:
     inherits "^2.0.1"
     safe-buffer "^5.0.1"
 
+shallow-clone@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060"
+  integrity sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=
+  dependencies:
+    is-extendable "^0.1.1"
+    kind-of "^2.0.1"
+    lazy-cache "^0.2.3"
+    mixin-object "^2.0.1"
+
 shallow-clone@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571"
@@ -5977,15 +7652,10 @@ shallow-clone@^1.0.0:
     kind-of "^5.0.0"
     mixin-object "^2.0.1"
 
-shallowequal@^0.2.2:
-  version "0.2.2"
-  resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-0.2.2.tgz#1e32fd5bcab6ad688a4812cb0cc04efc75c7014e"
-  dependencies:
-    lodash.keys "^3.1.2"
-
-shallowequal@^1.1.0:
+shallowequal@^1.0.2, shallowequal@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+  integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
 
 shebang-command@^1.2.0:
   version "1.2.0"
@@ -6014,6 +7684,11 @@ shelljs@^0.8.2:
     interpret "^1.0.0"
     rechoir "^0.6.2"
 
+sigmund@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
+  integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=
+
 signal-exit@^3.0.0, signal-exit@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
@@ -6049,16 +7724,17 @@ snapdragon@^0.8.1:
     source-map-resolve "^0.5.0"
     use "^3.1.0"
 
-sockjs-client@1.1.4:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12"
+sockjs-client@1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177"
+  integrity sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==
   dependencies:
-    debug "^2.6.6"
-    eventsource "0.1.6"
-    faye-websocket "~0.11.0"
-    inherits "^2.0.1"
+    debug "^3.2.5"
+    eventsource "^1.0.7"
+    faye-websocket "~0.11.1"
+    inherits "^2.0.3"
     json3 "^3.3.2"
-    url-parse "^1.1.8"
+    url-parse "^1.4.3"
 
 source-list-map@^2.0.0:
   version "2.0.0"
@@ -6081,12 +7757,6 @@ source-map-resolve@^0.5.0:
     source-map-url "^0.4.0"
     urix "^0.1.0"
 
-source-map-support@^0.4.15:
-  version "0.4.18"
-  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
-  dependencies:
-    source-map "^0.5.6"
-
 source-map-support@^0.5.3:
   version "0.5.9"
   resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f"
@@ -6094,6 +7764,14 @@ source-map-support@^0.5.3:
     buffer-from "^1.0.0"
     source-map "^0.6.0"
 
+source-map-support@~0.5.10:
+  version "0.5.11"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.11.tgz#efac2ce0800355d026326a0ca23e162aeac9a4e2"
+  integrity sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
 source-map-url@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
@@ -6104,11 +7782,11 @@ source-map@^0.4.2:
   dependencies:
     amdefine ">=0.0.4"
 
-source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7:
+source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7:
   version "0.5.7"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
 
-source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
 
@@ -6122,6 +7800,13 @@ space-separated-tokens@^1.0.0:
   dependencies:
     trim "0.0.1"
 
+spawn-promise@^0.1.8:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/spawn-promise/-/spawn-promise-0.1.8.tgz#a5bea98814c48f52cbe02720e7fe2d6fc3b5119a"
+  integrity sha512-pTkEOFxvYLq9SaI1d8bwepj0yD9Yyz65+4e979YZLv/L3oYPxZpDTabcm6e+KIZniGK9mQ+LGrwB5s1v2z67nQ==
+  dependencies:
+    co "^4.6.0"
+
 spdx-correct@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"
@@ -6169,11 +7854,17 @@ sshpk@^1.7.0:
     jsbn "~0.1.0"
     tweetnacl "~0.14.0"
 
-ssri@^5.2.4:
-  version "5.3.0"
-  resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06"
+ssri@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+  integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
   dependencies:
-    safe-buffer "^5.1.1"
+    figgy-pudding "^3.5.1"
+
+stable@^0.1.8:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+  integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
 
 static-extend@^0.1.1:
   version "0.1.2"
@@ -6239,6 +7930,15 @@ string-width@^1.0.1, string-width@^1.0.2:
     is-fullwidth-code-point "^2.0.0"
     strip-ansi "^4.0.0"
 
+string-width@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+  integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+  dependencies:
+    emoji-regex "^7.0.1"
+    is-fullwidth-code-point "^2.0.0"
+    strip-ansi "^5.1.0"
+
 string.prototype.matchall@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-3.0.0.tgz#66f4d8dd5c6c6cea4dffb55ec5f3184a8dd0dd59"
@@ -6271,11 +7971,19 @@ string_decoder@^1.0.0, string_decoder@~1.1.1:
   dependencies:
     safe-buffer "~5.1.0"
 
-strip-ansi@4.0.0, strip-ansi@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+string_decoder@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
+  integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==
   dependencies:
-    ansi-regex "^3.0.0"
+    safe-buffer "~5.1.0"
+
+strip-ansi@5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f"
+  integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==
+  dependencies:
+    ansi-regex "^4.0.0"
 
 strip-ansi@^3.0.0, strip-ansi@^3.0.1:
   version "3.0.1"
@@ -6283,6 +7991,19 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1:
   dependencies:
     ansi-regex "^2.0.0"
 
+strip-ansi@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+  dependencies:
+    ansi-regex "^3.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+  dependencies:
+    ansi-regex "^4.1.0"
+
 strip-bom@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
@@ -6307,12 +8028,13 @@ strip-json-comments@~2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
 
-style-loader@^0.23.0:
-  version "0.23.0"
-  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.0.tgz#8377fefab68416a2e05f1cabd8c3a3acfcce74f1"
+style-loader@^0.23.1:
+  version "0.23.1"
+  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
+  integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==
   dependencies:
     loader-utils "^1.1.0"
-    schema-utils "^0.4.5"
+    schema-utils "^1.0.0"
 
 stylis-rule-sheet@^0.0.10:
   version "0.0.10"
@@ -6326,12 +8048,19 @@ supports-color@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
 
-supports-color@^5.3.0, supports-color@^5.4.0:
+supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0:
   version "5.5.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
   dependencies:
     has-flag "^3.0.0"
 
+supports-color@^6.1.0:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+  integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+  dependencies:
+    has-flag "^3.0.0"
+
 svg-url-loader@^2.3.2:
   version "2.3.2"
   resolved "https://registry.yarnpkg.com/svg-url-loader/-/svg-url-loader-2.3.2.tgz#dd86b26c19fe3b914f04ea10ef39594eade04464"
@@ -6339,13 +8068,30 @@ svg-url-loader@^2.3.2:
     file-loader "1.1.11"
     loader-utils "1.1.0"
 
-symbol-observable@1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
-
-symbol-observable@^1.2.0:
+svgo@^1.1.1:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.2.0.tgz#305a8fc0f4f9710828c65039bb93d5793225ffc3"
+  integrity sha512-xBfxJxfk4UeVN8asec9jNxHiv3UAMv/ujwBWGYvQhhMb2u3YTGKkiybPcLFDLq7GLLWE9wa73e0/m8L5nTzQbw==
+  dependencies:
+    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.28"
+    css-url-regex "^1.1.0"
+    csso "^3.5.1"
+    js-yaml "^3.12.0"
+    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"
+
+symbol-observable@^1.0.4:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+  integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
 
 symbol.prototype.description@^1.0.0:
   version "1.0.0"
@@ -6377,6 +8123,50 @@ tar@^4:
     safe-buffer "^5.1.2"
     yallist "^3.0.2"
 
+telejson@^2.1.0, telejson@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/telejson/-/telejson-2.1.1.tgz#cd8835ce90198c9341078dbe80849e39d1a2b73c"
+  integrity sha512-tc9Jdrhro4zzYgN6y5DNzCXIyIsWT7znGEfK7G4KMPF0X0tC2cVw2SPKnJObao/cxP7/FSnG8bJe0JD390My5g==
+  dependencies:
+    global "^4.3.2"
+    is-function "^1.0.1"
+    is-regex "^1.0.4"
+    is-symbol "^1.0.2"
+    isobject "^3.0.1"
+    lodash.get "^4.4.2"
+    memoizerific "^1.11.3"
+    safe-eval "^0.4.1"
+
+term-size@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
+  integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=
+  dependencies:
+    execa "^0.7.0"
+
+terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.2.1:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz#3f98bc902fac3e5d0de730869f50668561262ec8"
+  integrity sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==
+  dependencies:
+    cacache "^11.0.2"
+    find-cache-dir "^2.0.0"
+    schema-utils "^1.0.0"
+    serialize-javascript "^1.4.0"
+    source-map "^0.6.1"
+    terser "^3.16.1"
+    webpack-sources "^1.1.0"
+    worker-farm "^1.5.2"
+
+terser@^3.16.1:
+  version "3.17.0"
+  resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2"
+  integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==
+  dependencies:
+    commander "^2.19.0"
+    source-map "~0.6.1"
+    source-map-support "~0.5.10"
+
 text-table@0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
@@ -6398,10 +8188,25 @@ timers-browserify@^2.0.4:
   dependencies:
     setimmediate "^1.0.4"
 
-tiny-emitter@2.0.2, tiny-emitter@^2.0.0:
+tiny-emitter@2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
+  integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
+
+tiny-emitter@^2.0.0:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c"
 
+tiny-invariant@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.3.tgz#91efaaa0269ccb6271f0296aeedb05fc3e067b7a"
+  integrity sha512-ytQx8T4DL8PjlX53yYzcIC0WhIZbpR0p1qcYjw2pHu3w6UtgWwFJQ/02cnhOnBBhlFx/edUIfcagCaQSe3KMWg==
+
+tiny-warning@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.2.tgz#1dfae771ee1a04396bdfde27a3adcebc6b648b28"
+  integrity sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q==
+
 tinycolor2@^1.4.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
@@ -6416,10 +8221,6 @@ to-arraybuffer@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
 
-to-fast-properties@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
-
 to-fast-properties@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
@@ -6450,18 +8251,13 @@ toggle-selection@^1.0.3:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
 
-touch@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/touch/-/touch-1.0.0.tgz#449cbe2dbae5a8c8038e30d71fa0ff464947c4de"
+touch@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/touch/-/touch-2.0.2.tgz#ca0b2a3ae3211246a61b16ba9e6cbf1596287164"
+  integrity sha512-qjNtvsFXTRq7IuMLweVgFxmEuQ6gLbRs2jQxL80TtZ31dEKWYIxRXquij6w6VimyDek5hD3PytljHmEtAs2u0A==
   dependencies:
     nopt "~1.0.10"
 
-tough-cookie@~2.3.3:
-  version "2.3.4"
-  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
-  dependencies:
-    punycode "^1.4.1"
-
 tough-cookie@~2.4.3:
   version "2.4.3"
   resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
@@ -6481,15 +8277,21 @@ trim@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
 
+trough@^1.0.0:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24"
+  integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==
+
 "true-case-path@^1.0.2":
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d"
   dependencies:
     glob "^7.1.2"
 
-ts-loader@^5.1.1:
-  version "5.1.1"
-  resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-5.1.1.tgz#361eeae3cc3c6f63d2e9f421dba90c4b14659aa6"
+ts-loader@^5.3.3:
+  version "5.3.3"
+  resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-5.3.3.tgz#8b4af042e773132d86b3c99ef0acf3b4d325f473"
+  integrity sha512-KwF1SplmOJepnoZ4eRIloH/zXL195F51skt7reEsS6jvDqzgc/YSbz9b8E07GxIUwLXdcD4ssrJu6v8CwaTafA==
   dependencies:
     chalk "^2.3.0"
     enhanced-resolve "^4.0.0"
@@ -6544,38 +8346,32 @@ typed-function@1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-1.1.0.tgz#ea149706e0fb42aca1791c053a6d94ccd6c4fdcb"
 
+typed-styles@^0.0.7:
+  version "0.0.7"
+  resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9"
+  integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==
+
 typedarray@^0.0.6:
   version "0.0.6"
   resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
 
-typescript@^3.0.3:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.3.tgz#4853b3e275ecdaa27f78fda46dc273a7eb7fc1c8"
+typescript@^3.3.4000:
+  version "3.3.4000"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.3.4000.tgz#76b0f89cfdbf97827e1112d64f283f1151d6adf0"
+  integrity sha512-jjOcCZvpkl2+z7JFn0yBOoLQyLoIkNZAs/fYJkUG6VKy6zLPHJGfQJYFHzibB6GJaF/8QrcECtlQ5cpvRHSMEA==
 
 ua-parser-js@^0.7.18:
   version "0.7.18"
   resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed"
 
-uglify-es@^3.3.4:
-  version "3.3.9"
-  resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677"
+uglify-js@3.4.x:
+  version "3.4.10"
+  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"
+  integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==
   dependencies:
-    commander "~2.13.0"
+    commander "~2.19.0"
     source-map "~0.6.1"
 
-uglifyjs-webpack-plugin@^1.2.4:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz#75f548160858163a08643e086d5fefe18a5d67de"
-  dependencies:
-    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"
-
 unicode-canonical-property-names-ecmascript@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
@@ -6591,10 +8387,29 @@ unicode-match-property-value-ecmascript@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4"
 
+unicode-match-property-value-ecmascript@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277"
+  integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==
+
 unicode-property-aliases-ecmascript@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0"
 
+unified@^7.0.2:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/unified/-/unified-7.1.0.tgz#5032f1c1ee3364bd09da12e27fdd4a7553c7be13"
+  integrity sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==
+  dependencies:
+    "@types/unist" "^2.0.0"
+    "@types/vfile" "^3.0.0"
+    bail "^1.0.0"
+    extend "^3.0.0"
+    is-plain-obj "^1.1.0"
+    trough "^1.0.0"
+    vfile "^3.0.0"
+    x-is-string "^0.1.0"
+
 union-value@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
@@ -6604,9 +8419,15 @@ union-value@^1.0.0:
     is-extendable "^0.1.1"
     set-value "^0.4.3"
 
-unique-filename@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3"
+uniq@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+  integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
+
+unique-filename@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+  integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
   dependencies:
     unique-slug "^2.0.0"
 
@@ -6616,20 +8437,25 @@ unique-slug@^2.0.0:
   dependencies:
     imurmurhash "^0.1.4"
 
-universal-dotenv@^1.9.0:
-  version "1.9.0"
-  resolved "https://registry.yarnpkg.com/universal-dotenv/-/universal-dotenv-1.9.0.tgz#6a30638dbc70deaccc79d7556fcfe01d5a7e1cb0"
-  dependencies:
-    "@babel/runtime" "^7.0.0-rc.1"
-    app-root-dir "^1.0.2"
-    core-js "^2.5.7"
-    dotenv "^6.0.0"
-    dotenv-expand "^4.2.0"
+unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6"
+  integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==
+
+universalify@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
 
 unpipe@1.0.0, unpipe@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
 
+unquote@^1.1.0, unquote@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+  integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=
+
 unset-value@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
@@ -6641,6 +8467,11 @@ upath@^1.0.5:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd"
 
+upper-case@^1.1.1:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+  integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=
+
 uri-js@^4.2.2:
   version "4.2.2"
   resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
@@ -6651,19 +8482,16 @@ urix@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
 
-url-join@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a"
-
-url-loader@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.1.tgz#4d1f3b4f90dde89f02c008e662d604d7511167c1"
+url-loader@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8"
+  integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==
   dependencies:
     loader-utils "^1.1.0"
     mime "^2.0.3"
     schema-utils "^1.0.0"
 
-url-parse@^1.1.8, url-parse@^1.4.3:
+url-parse@^1.4.3:
   version "1.4.3"
   resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.3.tgz#bfaee455c889023219d757e045fa6a684ec36c15"
   dependencies:
@@ -6681,11 +8509,11 @@ use@^3.1.0:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
 
-util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
 
-util.promisify@^1.0.0:
+util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
   dependencies:
@@ -6704,6 +8532,11 @@ util@^0.10.3:
   dependencies:
     inherits "2.0.3"
 
+utila@^0.4.0, utila@~0.4:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+  integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
+
 utils-merge@1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
@@ -6712,9 +8545,10 @@ uuid@^3.1.0, uuid@^3.3.2:
   version "3.3.2"
   resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
 
-v8-compile-cache@^2.0.0:
+v8-compile-cache@^2.0.2:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c"
+  integrity sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==
 
 validate-npm-package-license@^3.0.1:
   version "3.0.4"
@@ -6723,23 +8557,15 @@ validate-npm-package-license@^3.0.1:
     spdx-correct "^3.0.0"
     spdx-expression-parse "^3.0.0"
 
+value-equal@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7"
+  integrity sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==
+
 vary@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
 
-velocity-animate@^1.4.0:
-  version "1.5.2"
-  resolved "https://registry.yarnpkg.com/velocity-animate/-/velocity-animate-1.5.2.tgz#5a351d75fca2a92756f5c3867548b873f6c32105"
-
-velocity-react@^1.3.1:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/velocity-react/-/velocity-react-1.4.1.tgz#1d0b41859cdf2521c08a8b57f44e93ed2d54b5fc"
-  dependencies:
-    lodash "^4.17.5"
-    prop-types "^15.5.8"
-    react-transition-group "^2.0.0"
-    velocity-animate "^1.4.0"
-
 verror@1.10.0:
   version "1.10.0"
   resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
@@ -6748,6 +8574,23 @@ verror@1.10.0:
     core-util-is "1.0.2"
     extsprintf "^1.2.0"
 
+vfile-message@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1"
+  integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==
+  dependencies:
+    unist-util-stringify-position "^1.1.1"
+
+vfile@^3.0.0, vfile@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803"
+  integrity sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==
+  dependencies:
+    is-buffer "^2.0.0"
+    replace-ext "1.0.0"
+    unist-util-stringify-position "^1.0.0"
+    vfile-message "^1.0.0"
+
 vm-browserify@0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
@@ -6760,6 +8603,13 @@ warning@^3.0.0:
   dependencies:
     loose-envify "^1.0.0"
 
+warning@^4.0.2:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
+  integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
+  dependencies:
+    loose-envify "^1.0.0"
+
 watchpack@^1.5.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
@@ -6768,36 +8618,42 @@ watchpack@^1.5.0:
     graceful-fs "^4.1.2"
     neo-async "^2.5.0"
 
-webpack-cli@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.1.0.tgz#d71a83687dcfeb758fdceeb0fe042f96bcf62994"
+web-namespaces@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.2.tgz#c8dc267ab639505276bae19e129dbd6ae72b22b4"
+  integrity sha512-II+n2ms4mPxK+RnIxRPOw3zwF2jRscdJIUE9BfkKHm4FYEg9+biIoTMnaZF5MpemE3T+VhMLrhbyD4ilkPCSbg==
+
+webpack-cli@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.0.tgz#55c8a74cae1e88117f9dda3a801c7272e93ca318"
+  integrity sha512-t1M7G4z5FhHKJ92WRKwZ1rtvi7rHc0NZoZRbSkol0YKl4HvcC8+DsmGDmK7MmZxHSAetHagiOsjOB6MmzC2TUw==
   dependencies:
     chalk "^2.4.1"
     cross-spawn "^6.0.5"
-    enhanced-resolve "^4.0.0"
-    global-modules-path "^2.1.0"
-    import-local "^1.0.0"
-    inquirer "^6.0.0"
+    enhanced-resolve "^4.1.0"
+    findup-sync "^2.0.0"
+    global-modules "^1.0.0"
+    import-local "^2.0.0"
     interpret "^1.1.0"
     loader-utils "^1.1.0"
-    supports-color "^5.4.0"
-    v8-compile-cache "^2.0.0"
-    yargs "^12.0.1"
+    supports-color "^5.5.0"
+    v8-compile-cache "^2.0.2"
+    yargs "^12.0.5"
 
-webpack-dev-middleware@^3.2.0:
-  version "3.3.0"
-  resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.3.0.tgz#8104daf4d4f65defe06ee2eaaeea612a7c541462"
+webpack-dev-middleware@^3.5.1:
+  version "3.6.1"
+  resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.6.1.tgz#91f2531218a633a99189f7de36045a331a4b9cd4"
+  integrity sha512-XQmemun8QJexMEvNFbD2BIg4eSKrmSIMrTfnl2nql2Sc6OGAYFyb8rwuYrCjl/IiEYYuyTEiimMscu7EXji/Dw==
   dependencies:
-    loud-rejection "^1.6.0"
-    memory-fs "~0.4.1"
+    memory-fs "^0.4.1"
     mime "^2.3.1"
     range-parser "^1.0.3"
-    url-join "^4.0.0"
     webpack-log "^2.0.0"
 
-webpack-hot-middleware@^2.22.3:
-  version "2.24.0"
-  resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.24.0.tgz#d67ae5107edff29debbab3631a424c998856fd47"
+webpack-hot-middleware@^2.24.3:
+  version "2.24.3"
+  resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.24.3.tgz#5bb76259a8fc0d97463ab517640ba91d3382d4a6"
+  integrity sha512-pPlmcdoR2Fn6UhYjAhp1g/IJy1Yc9hD+T6O9mjRcWV2pFbBjIFoJXhP0CoD0xPOhWJuWXuZXGBga9ybbOdzXpg==
   dependencies:
     ansi-html "0.0.7"
     html-entities "^1.2.0"
@@ -6824,23 +8680,32 @@ webpack-node-externals@^1.7.2:
   version "1.7.2"
   resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz#6e1ee79ac67c070402ba700ef033a9b8d52ac4e3"
 
-webpack-sources@^1.1.0, webpack-sources@^1.2.0:
+webpack-sources@^1.1.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.2.0.tgz#18181e0d013fce096faf6f8e6d41eeffffdceac2"
   dependencies:
     source-list-map "^2.0.0"
     source-map "~0.6.1"
 
-webpack@^4.17.1, webpack@^4.19.0:
-  version "4.19.0"
-  resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.19.0.tgz#252296c8af2d21c0994911007defdb3913a7bc66"
+webpack-sources@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85"
+  integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==
   dependencies:
-    "@webassemblyjs/ast" "1.7.6"
-    "@webassemblyjs/helper-module-context" "1.7.6"
-    "@webassemblyjs/wasm-edit" "1.7.6"
-    "@webassemblyjs/wasm-parser" "1.7.6"
-    acorn "^5.6.2"
-    acorn-dynamic-import "^3.0.0"
+    source-list-map "^2.0.0"
+    source-map "~0.6.1"
+
+webpack@^4.29.0, webpack@^4.29.6:
+  version "4.29.6"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.6.tgz#66bf0ec8beee4d469f8b598d3988ff9d8d90e955"
+  integrity sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw==
+  dependencies:
+    "@webassemblyjs/ast" "1.8.5"
+    "@webassemblyjs/helper-module-context" "1.8.5"
+    "@webassemblyjs/wasm-edit" "1.8.5"
+    "@webassemblyjs/wasm-parser" "1.8.5"
+    acorn "^6.0.5"
+    acorn-dynamic-import "^4.0.0"
     ajv "^6.1.0"
     ajv-keywords "^3.1.0"
     chrome-trace-event "^1.0.0"
@@ -6854,11 +8719,11 @@ webpack@^4.17.1, webpack@^4.19.0:
     mkdirp "~0.5.0"
     neo-async "^2.5.0"
     node-libs-browser "^2.0.0"
-    schema-utils "^0.4.4"
+    schema-utils "^1.0.0"
     tapable "^1.1.0"
-    uglifyjs-webpack-plugin "^1.2.4"
+    terser-webpack-plugin "^1.1.0"
     watchpack "^1.5.0"
-    webpack-sources "^1.2.0"
+    webpack-sources "^1.3.0"
 
 websocket-driver@>=0.5.1:
   version "0.7.0"
@@ -6883,7 +8748,7 @@ which-module@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
 
-which@1, which@^1.2.14, which@^1.2.9:
+which@1, which@^1.2.14, which@^1.2.9, which@^1.3.1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
   dependencies:
@@ -6895,6 +8760,13 @@ wide-align@^1.1.0:
   dependencies:
     string-width "^1.0.2 || 2"
 
+widest-line@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
+  integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==
+  dependencies:
+    string-width "^2.1.1"
+
 worker-farm@^1.5.2:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0"
@@ -6912,9 +8784,10 @@ wrappy@1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
 
-xregexp@4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"
+x-is-string@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82"
+  integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=
 
 xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
   version "4.0.1"
@@ -6936,11 +8809,13 @@ yallist@^3.0.0, yallist@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"
 
-yargs-parser@^10.1.0:
-  version "10.1.0"
-  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
+yargs-parser@^11.1.1:
+  version "11.1.1"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
+  integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==
   dependencies:
-    camelcase "^4.1.0"
+    camelcase "^5.0.0"
+    decamelize "^1.2.0"
 
 yargs-parser@^5.0.0:
   version "5.0.0"
@@ -6948,12 +8823,13 @@ yargs-parser@^5.0.0:
   dependencies:
     camelcase "^3.0.0"
 
-yargs@^12.0.1:
-  version "12.0.2"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc"
+yargs@^12.0.5:
+  version "12.0.5"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
+  integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
   dependencies:
     cliui "^4.0.0"
-    decamelize "^2.0.0"
+    decamelize "^1.2.0"
     find-up "^3.0.0"
     get-caller-file "^1.0.1"
     os-locale "^3.0.0"
@@ -6963,7 +8839,7 @@ yargs@^12.0.1:
     string-width "^2.0.0"
     which-module "^2.0.0"
     y18n "^3.2.1 || ^4.0.0"
-    yargs-parser "^10.1.0"
+    yargs-parser "^11.1.1"
 
 yargs@^7.0.0:
   version "7.1.0"

From 643bdc6712ab270ceea2ce4decf4f3668a3f1e5e Mon Sep 17 00:00:00 2001
From: Dylan Vorster <dylanvorster.dv@gmail.com>
Date: Thu, 21 Mar 2019 16:47:13 +0200
Subject: [PATCH 2/6] more prettier

---
 .editorconfig                                 |   6 +-
 demos/demo-standard/index.story.tsx           | 130 +++---
 demos/index.tsx                               |   6 +-
 package.json                                  |   2 +-
 src/AbstractElementFactory.ts                 |  30 +-
 src/CanvasEngine.ts                           | 408 +++++++++---------
 src/CanvasLayerFactory.tsx                    |  18 +-
 src/base-models/BaseModel.ts                  | 212 ++++-----
 src/base-models/GraphModel.ts                 | 196 ++++-----
 src/base-models/GraphModelOrdered.ts          | 136 +++---
 src/event-bus/Action.ts                       |  14 +-
 src/event-bus/Event.ts                        |  34 +-
 src/event-bus/EventBus.ts                     | 128 +++---
 src/event-bus/InlineAction.ts                 |  16 +-
 src/event-bus/actions/DeselectModelsAction.ts |  28 +-
 src/event-bus/actions/SelectCanvasAction.ts   |  26 +-
 src/event-bus/actions/SelectElementAction.ts  |  38 +-
 src/event-bus/actions/ZoomCanvasAction.ts     |  58 +--
 src/event-bus/events/ModelEvent.ts            |  12 +-
 src/event-bus/events/elements.ts              |  26 +-
 src/event-bus/events/key.ts                   |  26 +-
 src/event-bus/events/mouse.ts                 |  72 ++--
 src/geometry/Point.ts                         | 108 ++---
 src/geometry/Polygon.ts                       | 266 ++++++------
 src/geometry/Rectangle.ts                     | 118 ++---
 src/history/HistoryBank.ts                    |  94 ++--
 src/history/HistoryState.ts                   |   4 +-
 src/models-canvas/CanvasElementModel.ts       | 154 +++----
 src/models-canvas/CanvasGroupModel.ts         |   8 +-
 src/models-canvas/CanvasLayerModel.ts         | 104 ++---
 src/models-canvas/CanvasModel.ts              | 186 ++++----
 .../ellipse/EllipseElementFactory.tsx         |  20 +-
 .../ellipse/EllipseElementModel.tsx           |  96 ++---
 .../ellipse/EllipseElementWidget.tsx          |  34 +-
 src/primitives/grid/GridElementFactory.tsx    |  20 +-
 src/primitives/grid/GridElementModel.ts       |  62 +--
 src/primitives/grid/GridElementWidget.tsx     | 104 ++---
 src/primitives/paper/PaperElementFactory.tsx  |  20 +-
 src/primitives/paper/PaperElementModel.ts     |  78 ++--
 src/primitives/paper/PaperElementWidget.tsx   |  36 +-
 .../rectangle/RectangleElementFactory.tsx     |  20 +-
 .../rectangle/RectangleElementModel.ts        |  56 +--
 .../rectangle/RectangleElementWidget.tsx      |  42 +-
 .../selection/SelectionElementFactory.tsx     |  32 +-
 .../selection/SelectionElementModel.ts        |  80 ++--
 .../selection/SelectionElementWidget.tsx      |  18 +-
 .../selection/SelectionGroupWidget.tsx        | 160 +++----
 .../AbstractDisplacementState.ts              |  42 +-
 src/state-machine/AbstractState.ts            |  88 ++--
 .../AbstractStateMachineInput.ts              |   8 +-
 src/state-machine/StateMachine.ts             | 166 +++----
 src/state-machine/input/KeyInput.ts           |  50 +--
 src/state-machine/input/ModelAnchorInput.ts   |  32 +-
 src/state-machine/input/ModelElementInput.ts  |  36 +-
 src/state-machine/input/ModelRotateInput.ts   |  12 +-
 src/state-machine/input/MouseDownInput.ts     |  44 +-
 src/state-machine/states/DefaultState.ts      |   8 +-
 .../states/ResizeDimensionsState.ts           | 108 ++---
 .../states/ResizeOriginDimensionState.ts      | 110 ++---
 .../states/RotateElementsState.ts             |  98 ++---
 .../states/SelectElementsState.ts             |  10 +-
 .../states/TranslateCanvasState.ts            |  30 +-
 .../states/TranslateElementState.ts           |  56 +--
 src/tracking/DimensionTracker.ts              |  48 +--
 src/tracking/DimensionTrackerWidget.tsx       |  78 ++--
 src/tracking/VirtualDimensionTracker.ts       |  36 +-
 src/widgets/AnchorWidget.tsx                  |  52 +--
 src/widgets/CanvasLayerWidget.tsx             |  78 ++--
 src/widgets/CanvasWidget.tsx                  | 266 ++++++------
 src/widgets/SmartAnchorWidget.tsx             |  74 ++--
 70 files changed, 2536 insertions(+), 2536 deletions(-)

diff --git a/.editorconfig b/.editorconfig
index d566baa..5fd5daf 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,9 +1,9 @@
 [*]
-indent_style = tab
-indent_size = 4
+indent_style = space
+indent_size = 2
 trim_trailing_whitespace = true
 
 # Some exceptions
-[{package.json}]
+[{package.json,*.yml}]
 indent_style = space
 indent_size = 2
diff --git a/demos/demo-standard/index.story.tsx b/demos/demo-standard/index.story.tsx
index ec7efb0..3cf43ef 100644
--- a/demos/demo-standard/index.story.tsx
+++ b/demos/demo-standard/index.story.tsx
@@ -11,69 +11,69 @@ import { GridElementModel } from '../../src/primitives/grid/GridElementModel';
 import { PaperElementModel } from '../../src/primitives/paper/PaperElementModel';
 
 storiesOf('Simple Usage', module).add('Full example', () => {
-	//setup canvas engine
-	let engine = new CanvasEngine();
-	engine.enableDebugMode(true);
-	engine.installDefaults();
-
-	let model = new CanvasModel();
-	model.setOffset(100, 100);
-	model.setZoomLevel(1);
-	engine.setModel(model);
-
-	// grid layer
-	let layer2 = new CanvasLayerModel();
-	layer2.setSVG(true);
-	layer2.setTransformable(false);
-	model.addLayer(layer2);
-
-	let gridModel = new GridElementModel();
-	layer2.addModel(gridModel);
-
-	let gridModel2 = new GridElementModel();
-	gridModel2.sizeX = 200;
-	gridModel2.sizeY = 200;
-	gridModel2.color = 'cyan';
-	gridModel2.thickness = 2;
-	layer2.addModel(gridModel2);
-
-	// paper layer
-	let paperLayer = new CanvasLayerModel();
-	paperLayer.setSVG(false);
-	paperLayer.setTransformable(true);
-	let paper = new PaperElementModel();
-	paperLayer.addModel(paper);
-	model.addLayer(paperLayer);
-
-	// add layer
-	let layer = new CanvasLayerModel();
-	layer.setSVG(true);
-	layer.setTransformable(true);
-	model.addLayer(layer);
-
-	// squares
-	let squareModel = new RectangleElementModel();
-	squareModel.dimensions.updateDimensions(-100, -100, 100, 100);
-
-	let squareModel2 = new RectangleElementModel();
-	squareModel2.dimensions.updateDimensions(300, 300, 50, 70);
-
-	let squareModel3 = new RectangleElementModel();
-	squareModel3.dimensions.updateDimensions(420, 420, 50, 70);
-
-	layer.addModels([squareModel, squareModel2, squareModel3]);
-
-	button('Fit Width', () => {
-		engine.getCanvasWidget().zoomToFit(15);
-	});
-
-	button('Undo', () => {
-		engine.getHistoryBank().goBackward();
-	});
-
-	button('Redo', () => {
-		engine.getHistoryBank().goForward();
-	});
-
-	return <CanvasWidget className={'demo-canvas'} engine={engine} />;
+  //setup canvas engine
+  let engine = new CanvasEngine();
+  engine.enableDebugMode(true);
+  engine.installDefaults();
+
+  let model = new CanvasModel();
+  model.setOffset(100, 100);
+  model.setZoomLevel(1);
+  engine.setModel(model);
+
+  // grid layer
+  let layer2 = new CanvasLayerModel();
+  layer2.setSVG(true);
+  layer2.setTransformable(false);
+  model.addLayer(layer2);
+
+  let gridModel = new GridElementModel();
+  layer2.addModel(gridModel);
+
+  let gridModel2 = new GridElementModel();
+  gridModel2.sizeX = 200;
+  gridModel2.sizeY = 200;
+  gridModel2.color = 'cyan';
+  gridModel2.thickness = 2;
+  layer2.addModel(gridModel2);
+
+  // paper layer
+  let paperLayer = new CanvasLayerModel();
+  paperLayer.setSVG(false);
+  paperLayer.setTransformable(true);
+  let paper = new PaperElementModel();
+  paperLayer.addModel(paper);
+  model.addLayer(paperLayer);
+
+  // add layer
+  let layer = new CanvasLayerModel();
+  layer.setSVG(true);
+  layer.setTransformable(true);
+  model.addLayer(layer);
+
+  // squares
+  let squareModel = new RectangleElementModel();
+  squareModel.dimensions.updateDimensions(-100, -100, 100, 100);
+
+  let squareModel2 = new RectangleElementModel();
+  squareModel2.dimensions.updateDimensions(300, 300, 50, 70);
+
+  let squareModel3 = new RectangleElementModel();
+  squareModel3.dimensions.updateDimensions(420, 420, 50, 70);
+
+  layer.addModels([squareModel, squareModel2, squareModel3]);
+
+  button('Fit Width', () => {
+    engine.getCanvasWidget().zoomToFit(15);
+  });
+
+  button('Undo', () => {
+    engine.getHistoryBank().goBackward();
+  });
+
+  button('Redo', () => {
+    engine.getHistoryBank().goForward();
+  });
+
+  return <CanvasWidget className={'demo-canvas'} engine={engine} />;
 });
diff --git a/demos/index.tsx b/demos/index.tsx
index bb3d5ea..0e3be02 100644
--- a/demos/index.tsx
+++ b/demos/index.tsx
@@ -10,7 +10,7 @@ import '../src/sass/main.scss';
 addDecorator(withKnobs);
 
 setOptions({
-	name: 'STORM React Canvas',
-	url: 'https://github.com/projectstorm/react-canvas',
-	addonPanelInRight: true
+  name: 'STORM React Canvas',
+  url: 'https://github.com/projectstorm/react-canvas',
+  addonPanelInRight: true
 });
diff --git a/package.json b/package.json
index ff8f9d9..0f37b3c 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
 	"main": "./dist/main.js",
 	"typings": "./dist/@types/src/main",
 	"scripts": {
-		"pretty": "prettier --use-tabs --write \"{src,demos,tests}/**/*.{ts,tsx}\" --print-width 120",
+		"pretty": "prettier --write \"{src,demos,tests}/**/*.{ts,tsx}\" --print-width 120",
 		"storybook": "start-storybook -p 9001 -c .storybook",
 		"storybook:build": "build-storybook -c .storybook -o .out",
 		"storybook:github": "storybook-to-ghpages"
diff --git a/src/AbstractElementFactory.ts b/src/AbstractElementFactory.ts
index ffe71d1..7e9020a 100644
--- a/src/AbstractElementFactory.ts
+++ b/src/AbstractElementFactory.ts
@@ -3,24 +3,24 @@ import { AbstractState } from './state-machine/AbstractState';
 import { BaseModel } from './base-models/BaseModel';
 
 export abstract class AbstractElementFactory<T extends BaseModel = BaseModel> {
-	public type: string;
-	protected directiveProcessors;
-	protected engine: CanvasEngine;
+  public type: string;
+  protected directiveProcessors;
+  protected engine: CanvasEngine;
 
-	constructor(type: string) {
-		this.type = type;
-		this.directiveProcessors = [];
-	}
+  constructor(type: string) {
+    this.type = type;
+    this.directiveProcessors = [];
+  }
 
-	setEngine(engine: CanvasEngine) {
-		this.engine = engine;
-	}
+  setEngine(engine: CanvasEngine) {
+    this.engine = engine;
+  }
 
-	getCanvasStates(): AbstractState[] {
-		return [];
-	}
+  getCanvasStates(): AbstractState[] {
+    return [];
+  }
 
-	abstract generateModel(): T;
+  abstract generateModel(): T;
 
-	abstract generateWidget(engine: CanvasEngine, model: T): JSX.Element;
+  abstract generateWidget(engine: CanvasEngine, model: T): JSX.Element;
 }
diff --git a/src/CanvasEngine.ts b/src/CanvasEngine.ts
index 5b6924f..3f7d202 100644
--- a/src/CanvasEngine.ts
+++ b/src/CanvasEngine.ts
@@ -32,239 +32,239 @@ import { DeselectModelsAction } from './event-bus/actions/DeselectModelsAction';
 export class CanvasEngineError extends Error {}
 
 export interface CanvasEngineListener<T> {
-	modelChanged?: (event: BaseEvent & { model: T; oldModel: T }) => any;
+  modelChanged?: (event: BaseEvent & { model: T; oldModel: T }) => any;
 }
 
 export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObject<CanvasEngineListener<T>> {
-	protected elementFactories: { [type: string]: AbstractElementFactory };
-	protected model: T;
-	protected stateMachine: StateMachine;
-	protected canvasWidget;
-	protected historyBank: HistoryBank;
-	protected eventBus: EventBus;
-	protected debugMode: boolean;
+  protected elementFactories: { [type: string]: AbstractElementFactory };
+  protected model: T;
+  protected stateMachine: StateMachine;
+  protected canvasWidget;
+  protected historyBank: HistoryBank;
+  protected eventBus: EventBus;
+  protected debugMode: boolean;
 
-	private modelListener: string;
-	debugLayer: CanvasLayerModel;
+  private modelListener: string;
+  debugLayer: CanvasLayerModel;
 
-	constructor() {
-		super();
-		this.elementFactories = {};
-		this.model = null;
-		this.canvasWidget = null;
-		this.stateMachine = new StateMachine();
-		this.historyBank = new HistoryBank();
-		this.eventBus = new EventBus();
-		this.modelListener = null;
-		this.debugMode = false;
+  constructor() {
+    super();
+    this.elementFactories = {};
+    this.model = null;
+    this.canvasWidget = null;
+    this.stateMachine = new StateMachine();
+    this.historyBank = new HistoryBank();
+    this.eventBus = new EventBus();
+    this.modelListener = null;
+    this.debugMode = false;
 
-		if (Toolkit.TESTING) {
-			Toolkit.TESTING_UID = 0;
-		}
-	}
+    if (Toolkit.TESTING) {
+      Toolkit.TESTING_UID = 0;
+    }
+  }
 
-	enableDebugMode(debug: boolean) {
-		this.debugMode = debug;
-		if (debug) {
-			// debug layer
-			this.debugLayer = new CanvasLayerModel();
-			this.debugLayer.setSVG(true);
-			this.debugLayer.setTransformable(true);
-		}
-	}
+  enableDebugMode(debug: boolean) {
+    this.debugMode = debug;
+    if (debug) {
+      // debug layer
+      this.debugLayer = new CanvasLayerModel();
+      this.debugLayer.setSVG(true);
+      this.debugLayer.setTransformable(true);
+    }
+  }
 
-	getEventBus(): EventBus {
-		return this.eventBus;
-	}
+  getEventBus(): EventBus {
+    return this.eventBus;
+  }
 
-	getHistoryBank(): HistoryBank {
-		return this.historyBank;
-	}
+  getHistoryBank(): HistoryBank {
+    return this.historyBank;
+  }
 
-	getStateMachine(): StateMachine {
-		return this.stateMachine;
-	}
+  getStateMachine(): StateMachine {
+    return this.stateMachine;
+  }
 
-	setModel(model: T) {
-		// uninstall the old model
-		if (this.modelListener) {
-			this.model.removeListener(this.modelListener);
-		}
-		let oldModel = this.model;
-		this.model = model;
-		this.iterateListeners('Model changed', (listener, event) => {
-			if (listener.modelChanged) {
-				listener.modelChanged({ ...event, model: model, oldModel: oldModel });
-			}
-		});
+  setModel(model: T) {
+    // uninstall the old model
+    if (this.modelListener) {
+      this.model.removeListener(this.modelListener);
+    }
+    let oldModel = this.model;
+    this.model = model;
+    this.iterateListeners('Model changed', (listener, event) => {
+      if (listener.modelChanged) {
+        listener.modelChanged({ ...event, model: model, oldModel: oldModel });
+      }
+    });
 
-		// install the new model
-		if (model) {
-			this.modelListener = model.addListener({
-				delegateEvent: event => {
-					this.eventBus.fireEvent(new ModelEvent(event));
-				}
-			});
-		} else {
-			this.modelListener = null;
-		}
-	}
+    // install the new model
+    if (model) {
+      this.modelListener = model.addListener({
+        delegateEvent: event => {
+          this.eventBus.fireEvent(new ModelEvent(event));
+        }
+      });
+    } else {
+      this.modelListener = null;
+    }
+  }
 
-	getModel(): T {
-		return this.model;
-	}
+  getModel(): T {
+    return this.model;
+  }
 
-	generateEntityFor(type: string): BaseModel {
-		return this.elementFactories[type].generateModel();
-	}
+  generateEntityFor(type: string): BaseModel {
+    return this.elementFactories[type].generateModel();
+  }
 
-	deserialize(data: any) {
-		let event = new DeserializeEvent(data, this);
-		this.model.deSerialize(event);
-		this.canvasWidget.forceUpdate();
-	}
+  deserialize(data: any) {
+    let event = new DeserializeEvent(data, this);
+    this.model.deSerialize(event);
+    this.canvasWidget.forceUpdate();
+  }
 
-	installHistoryBank() {
-		this.stateMachine.addListener({
-			stateChanged: event => {
-				if (this.model) {
-					this.historyBank.pushState(this.model.serialize());
-				}
-			}
-		});
-		this.historyBank.addListener({
-			forward: event => {
-				this.deserialize(event.state);
-			},
-			backward: event => {
-				this.deserialize(event.state);
-			}
-		});
-	}
+  installHistoryBank() {
+    this.stateMachine.addListener({
+      stateChanged: event => {
+        if (this.model) {
+          this.historyBank.pushState(this.model.serialize());
+        }
+      }
+    });
+    this.historyBank.addListener({
+      forward: event => {
+        this.deserialize(event.state);
+      },
+      backward: event => {
+        this.deserialize(event.state);
+      }
+    });
+  }
 
-	repaint() {
-		if (this.canvasWidget) {
-			if (this.debugMode) {
-				this.model.layers.moveModelToFront(this.debugLayer);
-				this.debugLayer.clearEntities();
-				_.forEach(this.model.getElements(), element => {
-					let dimensions = element.getDimensions();
-					if (dimensions) {
-						this.debugLayer.addModels(
-							_.map(EllipseElementModel.createPointCloudFrom(dimensions, 3 / this.model.getZoomLevel()), point => {
-								point.background = 'mediumpurple';
-								return point;
-							})
-						);
-					}
-				});
-			}
+  repaint() {
+    if (this.canvasWidget) {
+      if (this.debugMode) {
+        this.model.layers.moveModelToFront(this.debugLayer);
+        this.debugLayer.clearEntities();
+        _.forEach(this.model.getElements(), element => {
+          let dimensions = element.getDimensions();
+          if (dimensions) {
+            this.debugLayer.addModels(
+              _.map(EllipseElementModel.createPointCloudFrom(dimensions, 3 / this.model.getZoomLevel()), point => {
+                point.background = 'mediumpurple';
+                return point;
+              })
+            );
+          }
+        });
+      }
 
-			this.canvasWidget.forceUpdate();
-		}
-	}
+      this.canvasWidget.forceUpdate();
+    }
+  }
 
-	installDefaultInteractivity() {
-		// selection layer
-		let selectionLayer = new CanvasLayerModel();
-		selectionLayer.setSVG(false);
-		selectionLayer.setTransformable(false);
+  installDefaultInteractivity() {
+    // selection layer
+    let selectionLayer = new CanvasLayerModel();
+    selectionLayer.setSVG(false);
+    selectionLayer.setTransformable(false);
 
-		// listen for a new model
-		this.addListener({
-			modelChanged: event => {
-				if (event.oldModel) {
-					event.oldModel.removeLayer(selectionLayer);
-					if (this.debugLayer) {
-						event.oldModel.removeLayer(this.debugLayer);
-					}
-				}
-				if (event.model) {
-					event.model.addLayer(selectionLayer);
-					if (this.debugLayer) {
-						event.model.addLayer(this.debugLayer);
-					}
-				}
-			}
-		});
+    // listen for a new model
+    this.addListener({
+      modelChanged: event => {
+        if (event.oldModel) {
+          event.oldModel.removeLayer(selectionLayer);
+          if (this.debugLayer) {
+            event.oldModel.removeLayer(this.debugLayer);
+          }
+        }
+        if (event.model) {
+          event.model.addLayer(selectionLayer);
+          if (this.debugLayer) {
+            event.model.addLayer(this.debugLayer);
+          }
+        }
+      }
+    });
 
-		this.eventBus.registerAction(
-			new InlineAction(ModelEvent.NAME, (event: ModelEvent) => {
-				// setup a combo box for when there are models
-				if (event.modelEvent.name === 'selection changed') {
-					selectionLayer.clearEntities();
-					this.model.layers.moveModelToFront(selectionLayer);
-					let selected = _.filter(this.model.getElements(), element => {
-						return element.isSelected();
-					});
-					if (selected.length > 0) {
-						let model = new SelectionElementModel();
-						model.setModels(selected);
-						selectionLayer.addModel(model);
-						this.canvasWidget.forceUpdate();
-					}
-				}
-			})
-		);
-	}
+    this.eventBus.registerAction(
+      new InlineAction(ModelEvent.NAME, (event: ModelEvent) => {
+        // setup a combo box for when there are models
+        if (event.modelEvent.name === 'selection changed') {
+          selectionLayer.clearEntities();
+          this.model.layers.moveModelToFront(selectionLayer);
+          let selected = _.filter(this.model.getElements(), element => {
+            return element.isSelected();
+          });
+          if (selected.length > 0) {
+            let model = new SelectionElementModel();
+            model.setModels(selected);
+            selectionLayer.addModel(model);
+            this.canvasWidget.forceUpdate();
+          }
+        }
+      })
+    );
+  }
 
-	registerElementFactory(factory: AbstractElementFactory) {
-		this.elementFactories[factory.type] = factory;
-		factory.setEngine(this);
-		_.forEach(factory.getCanvasStates(), state => {
-			this.stateMachine.addState(state);
-		});
-	}
+  registerElementFactory(factory: AbstractElementFactory) {
+    this.elementFactories[factory.type] = factory;
+    factory.setEngine(this);
+    _.forEach(factory.getCanvasStates(), state => {
+      this.stateMachine.addState(state);
+    });
+  }
 
-	installDefaults() {
-		// element factories
-		this.registerElementFactory(new CanvasLayerFactory());
-		this.registerElementFactory(new RectangleElementFactory());
-		this.registerElementFactory(new SelectionElementFactory());
-		this.registerElementFactory(new GridElementFactory());
-		this.registerElementFactory(new EllipseElementFactory());
-		this.registerElementFactory(new PaperElementFactory());
+  installDefaults() {
+    // element factories
+    this.registerElementFactory(new CanvasLayerFactory());
+    this.registerElementFactory(new RectangleElementFactory());
+    this.registerElementFactory(new SelectionElementFactory());
+    this.registerElementFactory(new GridElementFactory());
+    this.registerElementFactory(new EllipseElementFactory());
+    this.registerElementFactory(new PaperElementFactory());
 
-		// install actions
-		KeyInput.installActions(this.stateMachine, this.eventBus);
-		MouseDownInput.installActions(this.stateMachine, this.eventBus);
-		ModelElementInput.installActions(this.stateMachine, this.eventBus);
-		this.eventBus.registerAction(new ZoomCanvasAction(this));
-		this.eventBus.registerAction(new DeselectModelsAction(this));
+    // install actions
+    KeyInput.installActions(this.stateMachine, this.eventBus);
+    MouseDownInput.installActions(this.stateMachine, this.eventBus);
+    ModelElementInput.installActions(this.stateMachine, this.eventBus);
+    this.eventBus.registerAction(new ZoomCanvasAction(this));
+    this.eventBus.registerAction(new DeselectModelsAction(this));
 
-		// possible states
-		this.stateMachine.addState(new SelectElementsState(this));
-		this.stateMachine.addState(new TranslateElementState(this));
-		this.stateMachine.addState(new TranslateCanvasState(this));
-		this.stateMachine.addState(new DefaultState(this));
+    // possible states
+    this.stateMachine.addState(new SelectElementsState(this));
+    this.stateMachine.addState(new TranslateElementState(this));
+    this.stateMachine.addState(new TranslateCanvasState(this));
+    this.stateMachine.addState(new DefaultState(this));
 
-		// default wiring
-		this.installHistoryBank();
-		this.installDefaultInteractivity();
+    // default wiring
+    this.installHistoryBank();
+    this.installDefaultInteractivity();
 
-		// process to set the initial state
-		this.stateMachine.process();
-	}
+    // process to set the initial state
+    this.stateMachine.process();
+  }
 
-	getCanvasWidget(): CanvasWidget {
-		return this.canvasWidget;
-	}
+  getCanvasWidget(): CanvasWidget {
+    return this.canvasWidget;
+  }
 
-	setCanvasWidget(widget: CanvasWidget) {
-		this.canvasWidget = widget;
-		if (widget) {
-			this.historyBank.pushState(this.model.serialize());
-		}
-	}
+  setCanvasWidget(widget: CanvasWidget) {
+    this.canvasWidget = widget;
+    if (widget) {
+      this.historyBank.pushState(this.model.serialize());
+    }
+  }
 
-	getFactory(type: string): AbstractElementFactory {
-		if (!this.elementFactories[type]) {
-			throw new CanvasEngineError('Cannot find Element factory with type: ' + type);
-		}
-		return this.elementFactories[type];
-	}
+  getFactory(type: string): AbstractElementFactory {
+    if (!this.elementFactories[type]) {
+      throw new CanvasEngineError('Cannot find Element factory with type: ' + type);
+    }
+    return this.elementFactories[type];
+  }
 
-	getFactoryForElement(element: BaseModel): AbstractElementFactory {
-		return this.getFactory(element.getType());
-	}
+  getFactoryForElement(element: BaseModel): AbstractElementFactory {
+    return this.getFactory(element.getType());
+  }
 }
diff --git a/src/CanvasLayerFactory.tsx b/src/CanvasLayerFactory.tsx
index 90832c1..b357b16 100644
--- a/src/CanvasLayerFactory.tsx
+++ b/src/CanvasLayerFactory.tsx
@@ -5,15 +5,15 @@ import { CanvasEngine } from './CanvasEngine';
 import { CanvasLayerWidget } from './widgets/CanvasLayerWidget';
 
 export class CanvasLayerFactory extends AbstractElementFactory<CanvasLayerModel> {
-	constructor() {
-		super('layer');
-	}
+  constructor() {
+    super('layer');
+  }
 
-	generateModel(): CanvasLayerModel {
-		return new CanvasLayerModel();
-	}
+  generateModel(): CanvasLayerModel {
+    return new CanvasLayerModel();
+  }
 
-	generateWidget(engine: CanvasEngine, model: CanvasLayerModel): JSX.Element {
-		return <CanvasLayerWidget engine={engine} layer={model} />;
-	}
+  generateWidget(engine: CanvasEngine, model: CanvasLayerModel): JSX.Element {
+    return <CanvasLayerWidget engine={engine} layer={model} />;
+  }
 }
diff --git a/src/base-models/BaseModel.ts b/src/base-models/BaseModel.ts
index 31241e2..b7ea22c 100644
--- a/src/base-models/BaseModel.ts
+++ b/src/base-models/BaseModel.ts
@@ -2,120 +2,120 @@ import { BaseEvent, BaseListener, BaseObject, Toolkit } from '@projectstorm/reac
 import { CanvasEngine } from '../CanvasEngine';
 
 export interface Serializable {
-	_type: string;
-	id: string;
+  _type: string;
+  id: string;
 }
 
 export interface BaseModelListener<T extends BaseModel = BaseModel> extends BaseListener<T> {
-	lockChanged?(event: BaseEvent<T> & { locked: boolean });
-	delegateEvent?(event: BaseEvent<T>);
+  lockChanged?(event: BaseEvent<T> & { locked: boolean });
+  delegateEvent?(event: BaseEvent<T>);
 }
 
 export class DeserializeEvent {
-	data: { [p: string]: any };
-	engine: CanvasEngine;
-	cache: { [id: string]: BaseModel };
-
-	constructor(data: any, engine: CanvasEngine) {
-		this.cache = {};
-		this.data = data;
-		this.engine = engine;
-	}
-
-	subset(key: string): DeserializeEvent {
-		let event = new DeserializeEvent(this.data[key], this.engine);
-		event.cache = this.cache;
-		return event;
-	}
+  data: { [p: string]: any };
+  engine: CanvasEngine;
+  cache: { [id: string]: BaseModel };
+
+  constructor(data: any, engine: CanvasEngine) {
+    this.cache = {};
+    this.data = data;
+    this.engine = engine;
+  }
+
+  subset(key: string): DeserializeEvent {
+    let event = new DeserializeEvent(this.data[key], this.engine);
+    event.cache = this.cache;
+    return event;
+  }
 }
 
 export class BaseModel<
-	PARENT extends BaseModel<any, BaseModelListener> = any,
-	LISTENER extends BaseModelListener = BaseListener
+  PARENT extends BaseModel<any, BaseModelListener> = any,
+  LISTENER extends BaseModelListener = BaseListener
 > extends BaseObject<LISTENER> {
-	protected parent: PARENT;
-	protected id: string;
-	protected type: string;
-	protected locked: boolean;
-	private parentListener: string;
-
-	constructor(type: string) {
-		super();
-		this.id = Toolkit.UID();
-		this.type = type;
-		this.parentListener = null;
-	}
-
-	isLocked(): boolean {
-		return this.locked || (this.parent && this.parent.isLocked());
-	}
-
-	setParent(parent: PARENT) {
-		if (this.parentListener) {
-			this.parent.removeListener(this.parentListener);
-		}
-		this.parent = parent;
-		if (parent) {
-			this.parentListener = parent.addListener({
-				delegateEvent: event => {
-					if (parent.parent) {
-						parent.parent.iterateListeners('delegating event', listener => {
-							if (listener.delegateEvent) {
-								listener.delegateEvent(event);
-							}
-						});
-					}
-				}
-			});
-		}
-	}
-
-	getType(): string {
-		return this.type;
-	}
-
-	getParent(): PARENT {
-		return this.parent;
-	}
-
-	public clearListeners() {
-		this.listeners = {};
-	}
-
-	iterateListeners(name: string, cb: (t: LISTENER, event: BaseEvent) => any) {
-		// optionally delegate the event up the stack so the event bus can grab it
-		if (this.parent) {
-			this.parent.iterateListeners(name, (listener, event) => {
-				if (listener.delegateEvent) {
-					listener.delegateEvent(event);
-				}
-			});
-		}
-		return super.iterateListeners(name, cb);
-	}
-
-	public deSerialize(event: DeserializeEvent) {
-		this.id = event.data.id;
-		this.locked = !!event.data.locked;
-		if (event.data['parent']) {
-			if (!event.cache[event.data['parent']]) {
-				throw 'Cannot deserialize, because of missing parent';
-			}
-			this.setParent(event.cache[event.data['parent']] as any);
-		}
-		event.cache[this.id] = this;
-	}
-
-	public serialize(): Serializable & any {
-		return {
-			_type: this.type,
-			id: this.id,
-			parent: this.parent && this.parent.id,
-			locked: this.locked
-		};
-	}
-
-	public getID() {
-		return this.id;
-	}
+  protected parent: PARENT;
+  protected id: string;
+  protected type: string;
+  protected locked: boolean;
+  private parentListener: string;
+
+  constructor(type: string) {
+    super();
+    this.id = Toolkit.UID();
+    this.type = type;
+    this.parentListener = null;
+  }
+
+  isLocked(): boolean {
+    return this.locked || (this.parent && this.parent.isLocked());
+  }
+
+  setParent(parent: PARENT) {
+    if (this.parentListener) {
+      this.parent.removeListener(this.parentListener);
+    }
+    this.parent = parent;
+    if (parent) {
+      this.parentListener = parent.addListener({
+        delegateEvent: event => {
+          if (parent.parent) {
+            parent.parent.iterateListeners('delegating event', listener => {
+              if (listener.delegateEvent) {
+                listener.delegateEvent(event);
+              }
+            });
+          }
+        }
+      });
+    }
+  }
+
+  getType(): string {
+    return this.type;
+  }
+
+  getParent(): PARENT {
+    return this.parent;
+  }
+
+  public clearListeners() {
+    this.listeners = {};
+  }
+
+  iterateListeners(name: string, cb: (t: LISTENER, event: BaseEvent) => any) {
+    // optionally delegate the event up the stack so the event bus can grab it
+    if (this.parent) {
+      this.parent.iterateListeners(name, (listener, event) => {
+        if (listener.delegateEvent) {
+          listener.delegateEvent(event);
+        }
+      });
+    }
+    return super.iterateListeners(name, cb);
+  }
+
+  public deSerialize(event: DeserializeEvent) {
+    this.id = event.data.id;
+    this.locked = !!event.data.locked;
+    if (event.data['parent']) {
+      if (!event.cache[event.data['parent']]) {
+        throw 'Cannot deserialize, because of missing parent';
+      }
+      this.setParent(event.cache[event.data['parent']] as any);
+    }
+    event.cache[this.id] = this;
+  }
+
+  public serialize(): Serializable & any {
+    return {
+      _type: this.type,
+      id: this.id,
+      parent: this.parent && this.parent.id,
+      locked: this.locked
+    };
+  }
+
+  public getID() {
+    return this.id;
+  }
 }
diff --git a/src/base-models/GraphModel.ts b/src/base-models/GraphModel.ts
index 4bb1f20..4f98625 100644
--- a/src/base-models/GraphModel.ts
+++ b/src/base-models/GraphModel.ts
@@ -3,110 +3,110 @@ import * as _ from 'lodash';
 import { BaseEvent } from '@projectstorm/react-core';
 
 export interface GraphModelListener<CHILD = BaseModel> extends BaseModelListener {
-	modelsAdded?: (event: BaseEvent & { models: CHILD[] }) => any;
+  modelsAdded?: (event: BaseEvent & { models: CHILD[] }) => any;
 
-	modelsRemoved?: (event: BaseEvent & { models: CHILD[] }) => any;
+  modelsRemoved?: (event: BaseEvent & { models: CHILD[] }) => any;
 }
 
 /**
  * Model that supports graph traversal
  */
 export class GraphModel<
-	CHILD extends BaseModel = BaseModel,
-	PARENT extends BaseModel = BaseModel,
-	LISTENER extends GraphModelListener<CHILD> = GraphModelListener
+  CHILD extends BaseModel = BaseModel,
+  PARENT extends BaseModel = BaseModel,
+  LISTENER extends GraphModelListener<CHILD> = GraphModelListener
 > extends BaseModel<PARENT, LISTENER> {
-	protected children: { [id: string]: CHILD };
-	protected parentDelegate: BaseModel;
-
-	constructor(type: string = 'graph') {
-		super(type);
-		this.children = {};
-		this.parentDelegate = this;
-	}
-
-	setParentDelegate(parent: BaseModel) {
-		this.parentDelegate = parent;
-	}
-
-	count(): number {
-		return _.values(this.children).length;
-	}
-
-	addModels(entities: CHILD[]) {
-		_.forEach(entities, entity => {
-			this.children[entity.getID()] = entity;
-			entity.setParent(this.parentDelegate);
-		});
-		this.iterateListeners('children added', (listener, event) => {
-			if (listener.modelsAdded) {
-				listener.modelsAdded({ ...event, models: entities });
-			}
-		});
-	}
-
-	addModel(entity: CHILD) {
-		this.addModels([entity]);
-	}
-
-	removeModels(entities: CHILD[]) {
-		_.forEach(entities, entity => {
-			delete this.children[entity.getID()];
-			entity.setParent(null);
-		});
-
-		this.iterateListeners('children removed', (listener, event) => {
-			if (listener.modelsRemoved) {
-				listener.modelsRemoved({ ...event, models: entities });
-			}
-		});
-	}
-
-	removeModel(entity: CHILD | string) {
-		if (typeof entity === 'string') {
-			entity = this.getModel(entity);
-		}
-		this.removeModels([entity]);
-	}
-
-	getModel(id: string): CHILD {
-		return this.children[id];
-	}
-
-	serialize(): Serializable {
-		return {
-			...super.serialize(),
-			entities: _.mapValues(this.children, value => {
-				return value.serialize();
-			})
-		};
-	}
-
-	deSerialize(event: DeserializeEvent): void {
-		super.deSerialize(event);
-		let entities = event.subset('entities');
-		this.children = _.mapValues(entities.data, (entity: any, index) => {
-			let entityOb = event.engine.generateEntityFor(entity._type);
-			entityOb.deSerialize(entities.subset(index));
-			return entityOb;
-		}) as any;
-	}
-
-	getEntities(): { [id: string]: CHILD } {
-		return this.children;
-	}
-
-	clearEntities() {
-		this.removeModels(_.values(this.children));
-	}
-
-	getAllEntities(): CHILD[] {
-		return _.flatMap(this.children, entity => {
-			let arr = [entity];
-			if (entity instanceof GraphModel) {
-				arr = arr.concat(entity.getAllEntities());
-			}
-			return arr;
-		});
-	}
+  protected children: { [id: string]: CHILD };
+  protected parentDelegate: BaseModel;
+
+  constructor(type: string = 'graph') {
+    super(type);
+    this.children = {};
+    this.parentDelegate = this;
+  }
+
+  setParentDelegate(parent: BaseModel) {
+    this.parentDelegate = parent;
+  }
+
+  count(): number {
+    return _.values(this.children).length;
+  }
+
+  addModels(entities: CHILD[]) {
+    _.forEach(entities, entity => {
+      this.children[entity.getID()] = entity;
+      entity.setParent(this.parentDelegate);
+    });
+    this.iterateListeners('children added', (listener, event) => {
+      if (listener.modelsAdded) {
+        listener.modelsAdded({ ...event, models: entities });
+      }
+    });
+  }
+
+  addModel(entity: CHILD) {
+    this.addModels([entity]);
+  }
+
+  removeModels(entities: CHILD[]) {
+    _.forEach(entities, entity => {
+      delete this.children[entity.getID()];
+      entity.setParent(null);
+    });
+
+    this.iterateListeners('children removed', (listener, event) => {
+      if (listener.modelsRemoved) {
+        listener.modelsRemoved({ ...event, models: entities });
+      }
+    });
+  }
+
+  removeModel(entity: CHILD | string) {
+    if (typeof entity === 'string') {
+      entity = this.getModel(entity);
+    }
+    this.removeModels([entity]);
+  }
+
+  getModel(id: string): CHILD {
+    return this.children[id];
+  }
+
+  serialize(): Serializable {
+    return {
+      ...super.serialize(),
+      entities: _.mapValues(this.children, value => {
+        return value.serialize();
+      })
+    };
+  }
+
+  deSerialize(event: DeserializeEvent): void {
+    super.deSerialize(event);
+    let entities = event.subset('entities');
+    this.children = _.mapValues(entities.data, (entity: any, index) => {
+      let entityOb = event.engine.generateEntityFor(entity._type);
+      entityOb.deSerialize(entities.subset(index));
+      return entityOb;
+    }) as any;
+  }
+
+  getEntities(): { [id: string]: CHILD } {
+    return this.children;
+  }
+
+  clearEntities() {
+    this.removeModels(_.values(this.children));
+  }
+
+  getAllEntities(): CHILD[] {
+    return _.flatMap(this.children, entity => {
+      let arr = [entity];
+      if (entity instanceof GraphModel) {
+        arr = arr.concat(entity.getAllEntities());
+      }
+      return arr;
+    });
+  }
 }
diff --git a/src/base-models/GraphModelOrdered.ts b/src/base-models/GraphModelOrdered.ts
index 3aac6a4..3b7e8aa 100644
--- a/src/base-models/GraphModelOrdered.ts
+++ b/src/base-models/GraphModelOrdered.ts
@@ -3,83 +3,83 @@ import { BaseModel, DeserializeEvent } from './BaseModel';
 import * as _ from 'lodash';
 
 export class GraphModelOrdered<
-	CHILD extends BaseModel,
-	PARENT extends BaseModel,
-	LISTENER extends GraphModelListener<CHILD> = any
+  CHILD extends BaseModel,
+  PARENT extends BaseModel,
+  LISTENER extends GraphModelListener<CHILD> = any
 > extends GraphModel<CHILD, PARENT, LISTENER> {
-	protected entitiesOrdered: CHILD[];
+  protected entitiesOrdered: CHILD[];
 
-	constructor(type: string = 'graph') {
-		super(type);
-		this.entitiesOrdered = [];
-	}
+  constructor(type: string = 'graph') {
+    super(type);
+    this.entitiesOrdered = [];
+  }
 
-	getArray(): CHILD[] {
-		return this.entitiesOrdered;
-	}
+  getArray(): CHILD[] {
+    return this.entitiesOrdered;
+  }
 
-	serialize() {
-		return {
-			...super.serialize(),
-			entitiesOrdered: _.map(this.entitiesOrdered, entity => {
-				return entity.getID();
-			})
-		};
-	}
+  serialize() {
+    return {
+      ...super.serialize(),
+      entitiesOrdered: _.map(this.entitiesOrdered, entity => {
+        return entity.getID();
+      })
+    };
+  }
 
-	deSerialize(event: DeserializeEvent): void {
-		super.deSerialize(event);
-		this.entitiesOrdered = _.map(event.data['entitiesOrdered'], entityID => {
-			return this.children[entityID];
-		});
-	}
+  deSerialize(event: DeserializeEvent): void {
+    super.deSerialize(event);
+    this.entitiesOrdered = _.map(event.data['entitiesOrdered'], entityID => {
+      return this.children[entityID];
+    });
+  }
 
-	addModels(entities: CHILD[], position?: number) {
-		super.addModels(entities);
-		if (position == null) {
-			this.entitiesOrdered = this.entitiesOrdered.concat(entities);
-		} else {
-			this.entitiesOrdered.splice(position, 0, ...entities);
-		}
-	}
+  addModels(entities: CHILD[], position?: number) {
+    super.addModels(entities);
+    if (position == null) {
+      this.entitiesOrdered = this.entitiesOrdered.concat(entities);
+    } else {
+      this.entitiesOrdered.splice(position, 0, ...entities);
+    }
+  }
 
-	addModel(entity: CHILD, position?: number) {
-		this.addModels([entity], position);
-	}
+  addModel(entity: CHILD, position?: number) {
+    this.addModels([entity], position);
+  }
 
-	removeModels(entities: CHILD[]) {
-		for (let i = this.entitiesOrdered.length; i >= 0; i--) {
-			let index = this.entitiesOrdered.indexOf(this.entitiesOrdered[i]);
-			if (index !== -1) {
-				this.entitiesOrdered.splice(index, 1);
-			}
-		}
-		super.removeModels(entities);
-	}
+  removeModels(entities: CHILD[]) {
+    for (let i = this.entitiesOrdered.length; i >= 0; i--) {
+      let index = this.entitiesOrdered.indexOf(this.entitiesOrdered[i]);
+      if (index !== -1) {
+        this.entitiesOrdered.splice(index, 1);
+      }
+    }
+    super.removeModels(entities);
+  }
 
-	moveModelToBack(element: CHILD) {
-		let index = this.entitiesOrdered.indexOf(element);
-		if (index === -1) {
-			return;
-		}
-		this.entitiesOrdered.splice(0, 0, element);
-	}
+  moveModelToBack(element: CHILD) {
+    let index = this.entitiesOrdered.indexOf(element);
+    if (index === -1) {
+      return;
+    }
+    this.entitiesOrdered.splice(0, 0, element);
+  }
 
-	moveModelToFront(element: CHILD) {
-		let index = this.entitiesOrdered.indexOf(element);
-		if (index === -1) {
-			return;
-		}
-		this.entitiesOrdered.splice(index, 1);
-		this.entitiesOrdered.push(element);
-	}
+  moveModelToFront(element: CHILD) {
+    let index = this.entitiesOrdered.indexOf(element);
+    if (index === -1) {
+      return;
+    }
+    this.entitiesOrdered.splice(index, 1);
+    this.entitiesOrdered.push(element);
+  }
 
-	moveModel(element: CHILD, newIndex: number) {
-		let index = this.entitiesOrdered.indexOf(element);
-		if (index === -1) {
-			return;
-		}
-		this.entitiesOrdered.splice(index, 1);
-		this.entitiesOrdered.splice(newIndex, 0, element);
-	}
+  moveModel(element: CHILD, newIndex: number) {
+    let index = this.entitiesOrdered.indexOf(element);
+    if (index === -1) {
+      return;
+    }
+    this.entitiesOrdered.splice(index, 1);
+    this.entitiesOrdered.splice(newIndex, 0, element);
+  }
 }
diff --git a/src/event-bus/Action.ts b/src/event-bus/Action.ts
index 8157026..0dbcfc5 100644
--- a/src/event-bus/Action.ts
+++ b/src/event-bus/Action.ts
@@ -2,13 +2,13 @@ import { Event } from './Event';
 import { Toolkit } from '@projectstorm/react-core';
 
 export abstract class Action<T extends Event = Event> {
-	targetEvent: string;
-	id: string;
+  targetEvent: string;
+  id: string;
 
-	constructor(targetEvent: string) {
-		this.targetEvent = targetEvent;
-		this.id = Toolkit.UID();
-	}
+  constructor(targetEvent: string) {
+    this.targetEvent = targetEvent;
+    this.id = Toolkit.UID();
+  }
 
-	abstract doAction(event: T);
+  abstract doAction(event: T);
 }
diff --git a/src/event-bus/Event.ts b/src/event-bus/Event.ts
index d8d4e19..ba23460 100644
--- a/src/event-bus/Event.ts
+++ b/src/event-bus/Event.ts
@@ -1,24 +1,24 @@
 import { Action } from './Action';
 
 export class Event {
-	stopped: boolean;
-	source: any;
-	name: string;
-	actionsFired: Action[];
+  stopped: boolean;
+  source: any;
+  name: string;
+  actionsFired: Action[];
 
-	constructor(name: string, source: any) {
-		this.name = name;
-		this.source = source;
-		this.stopped = false;
-		this.actionsFired = [];
-	}
+  constructor(name: string, source: any) {
+    this.name = name;
+    this.source = source;
+    this.stopped = false;
+    this.actionsFired = [];
+  }
 
-	fire(action: Action) {
-		action.doAction(this);
-		this.actionsFired.push(action);
-	}
+  fire(action: Action) {
+    action.doAction(this);
+    this.actionsFired.push(action);
+  }
 
-	stopPropagation() {
-		this.stopped = true;
-	}
+  stopPropagation() {
+    this.stopped = true;
+  }
 }
diff --git a/src/event-bus/EventBus.ts b/src/event-bus/EventBus.ts
index de828f0..fa42d2a 100644
--- a/src/event-bus/EventBus.ts
+++ b/src/event-bus/EventBus.ts
@@ -4,81 +4,81 @@ import * as _ from 'lodash';
 import { BaseEvent, BaseListener, BaseObject } from '@projectstorm/react-core';
 
 export interface EventBusListener extends BaseListener {
-	eventWillFire?: (event: BaseEvent & { event: Event }) => any;
-	eventDidFire?: (event: BaseEvent & { event: Event }) => any;
+  eventWillFire?: (event: BaseEvent & { event: Event }) => any;
+  eventDidFire?: (event: BaseEvent & { event: Event }) => any;
 }
 
 export class EventBus extends BaseObject<EventBusListener> {
-	actions: {
-		[targetEvent: string]: {
-			[id: string]: Action;
-		};
-	};
+  actions: {
+    [targetEvent: string]: {
+      [id: string]: Action;
+    };
+  };
 
-	constructor() {
-		super();
-		this.actions = {};
-	}
+  constructor() {
+    super();
+    this.actions = {};
+  }
 
-	unRegisterAction(action: Action) {
-		if (!this.actions[action.targetEvent]) {
-			return;
-		}
+  unRegisterAction(action: Action) {
+    if (!this.actions[action.targetEvent]) {
+      return;
+    }
 
-		if (!this.actions[action.targetEvent][action.id]) {
-			return;
-		}
+    if (!this.actions[action.targetEvent][action.id]) {
+      return;
+    }
 
-		delete this.actions[action.targetEvent][action.id];
+    delete this.actions[action.targetEvent][action.id];
 
-		if (_.keys(this.actions[action.targetEvent]).length === 0) {
-			delete this.actions[action.targetEvent];
-		}
-	}
+    if (_.keys(this.actions[action.targetEvent]).length === 0) {
+      delete this.actions[action.targetEvent];
+    }
+  }
 
-	registerAction(action: Action): Action {
-		if (!this.actions[action.targetEvent]) {
-			this.actions[action.targetEvent] = {};
-		}
-		this.actions[action.targetEvent][action.id] = action;
-		return action;
-	}
+  registerAction(action: Action): Action {
+    if (!this.actions[action.targetEvent]) {
+      this.actions[action.targetEvent] = {};
+    }
+    this.actions[action.targetEvent][action.id] = action;
+    return action;
+  }
 
-	fireEvent(event: Event) {
-		if (!this.actions[event.name]) {
-			return;
-		}
+  fireEvent(event: Event) {
+    if (!this.actions[event.name]) {
+      return;
+    }
 
-		// before the event fires
-		this.iterateListeners('event will fire', (listener, baseEvent) => {
-			if (listener.eventWillFire) {
-				listener.eventWillFire({
-					...baseEvent,
-					event: event
-				});
-			}
-		});
+    // before the event fires
+    this.iterateListeners('event will fire', (listener, baseEvent) => {
+      if (listener.eventWillFire) {
+        listener.eventWillFire({
+          ...baseEvent,
+          event: event
+        });
+      }
+    });
 
-		let processedActions = {};
-		do {
-			_.some(this.actions[event.name], action => {
-				if (event.stopped) {
-					return true;
-				}
-				processedActions[action.id] = action;
-				event.fire(action);
-			});
-		} while (!event.stopped && _.keys(this.actions[event.name]).length !== _.keys(processedActions).length);
+    let processedActions = {};
+    do {
+      _.some(this.actions[event.name], action => {
+        if (event.stopped) {
+          return true;
+        }
+        processedActions[action.id] = action;
+        event.fire(action);
+      });
+    } while (!event.stopped && _.keys(this.actions[event.name]).length !== _.keys(processedActions).length);
 
-		if (event.actionsFired.length > 0) {
-			this.iterateListeners('event did fire', (listener, baseEvent) => {
-				if (listener.eventDidFire) {
-					listener.eventDidFire({
-						...baseEvent,
-						event: event
-					});
-				}
-			});
-		}
-	}
+    if (event.actionsFired.length > 0) {
+      this.iterateListeners('event did fire', (listener, baseEvent) => {
+        if (listener.eventDidFire) {
+          listener.eventDidFire({
+            ...baseEvent,
+            event: event
+          });
+        }
+      });
+    }
+  }
 }
diff --git a/src/event-bus/InlineAction.ts b/src/event-bus/InlineAction.ts
index 2a3c281..113c320 100644
--- a/src/event-bus/InlineAction.ts
+++ b/src/event-bus/InlineAction.ts
@@ -2,14 +2,14 @@ import { Action } from './Action';
 import { Event } from './Event';
 
 export class InlineAction<T extends Event> extends Action<T> {
-	cb: (event: T) => any;
+  cb: (event: T) => any;
 
-	constructor(name: string, callback: (event: T) => any) {
-		super(name);
-		this.cb = callback;
-	}
+  constructor(name: string, callback: (event: T) => any) {
+    super(name);
+    this.cb = callback;
+  }
 
-	doAction(event: T) {
-		return this.cb(event);
-	}
+  doAction(event: T) {
+    return this.cb(event);
+  }
 }
diff --git a/src/event-bus/actions/DeselectModelsAction.ts b/src/event-bus/actions/DeselectModelsAction.ts
index 2953f9f..8b07470 100644
--- a/src/event-bus/actions/DeselectModelsAction.ts
+++ b/src/event-bus/actions/DeselectModelsAction.ts
@@ -4,20 +4,20 @@ import { CanvasEngine } from '../../CanvasEngine';
 import * as _ from 'lodash';
 
 export class DeselectModelsAction extends Action<KeyDownEvent> {
-	engine: CanvasEngine;
+  engine: CanvasEngine;
 
-	constructor(engine: CanvasEngine) {
-		super(KeyDownEvent.NAME);
-		this.engine = engine;
-	}
+  constructor(engine: CanvasEngine) {
+    super(KeyDownEvent.NAME);
+    this.engine = engine;
+  }
 
-	doAction(event: KeyDownEvent) {
-		if (event.key === 'Escape') {
-			let entities = this.engine.getModel().getSelectedEntities();
-			_.forEach(entities, entity => {
-				entity.setSelected(false);
-			});
-			this.engine.repaint();
-		}
-	}
+  doAction(event: KeyDownEvent) {
+    if (event.key === 'Escape') {
+      let entities = this.engine.getModel().getSelectedEntities();
+      _.forEach(entities, entity => {
+        entity.setSelected(false);
+      });
+      this.engine.repaint();
+    }
+  }
 }
diff --git a/src/event-bus/actions/SelectCanvasAction.ts b/src/event-bus/actions/SelectCanvasAction.ts
index fb1312f..0f079ef 100644
--- a/src/event-bus/actions/SelectCanvasAction.ts
+++ b/src/event-bus/actions/SelectCanvasAction.ts
@@ -4,19 +4,19 @@ import * as _ from 'lodash';
 import { CanvasEngine } from '../../CanvasEngine';
 
 export class SelectCanvasAction extends Action<MouseDownEvent> {
-	engine: CanvasEngine;
+  engine: CanvasEngine;
 
-	constructor(engine: CanvasEngine) {
-		super(MouseDownEvent.NAME);
-		this.engine = engine;
-	}
+  constructor(engine: CanvasEngine) {
+    super(MouseDownEvent.NAME);
+    this.engine = engine;
+  }
 
-	doAction(event: MouseDownEvent) {
-		event.stopPropagation();
-		let entities = this.engine.getModel().getSelectedEntities();
-		_.forEach(entities, entity => {
-			entity.setSelected(false);
-		});
-		this.engine.repaint();
-	}
+  doAction(event: MouseDownEvent) {
+    event.stopPropagation();
+    let entities = this.engine.getModel().getSelectedEntities();
+    _.forEach(entities, entity => {
+      entity.setSelected(false);
+    });
+    this.engine.repaint();
+  }
 }
diff --git a/src/event-bus/actions/SelectElementAction.ts b/src/event-bus/actions/SelectElementAction.ts
index 6dbf755..b127485 100644
--- a/src/event-bus/actions/SelectElementAction.ts
+++ b/src/event-bus/actions/SelectElementAction.ts
@@ -4,25 +4,25 @@ import * as _ from 'lodash';
 import { CanvasEngine } from '../../CanvasEngine';
 
 export class SelectElementAction extends Action<PressElementEvent> {
-	engine: CanvasEngine;
-	selectMultiple: boolean;
+  engine: CanvasEngine;
+  selectMultiple: boolean;
 
-	constructor(engine: CanvasEngine, selectMultiple: boolean = false) {
-		super(PressElementEvent.NAME);
-		this.engine = engine;
-		this.selectMultiple = selectMultiple;
-	}
+  constructor(engine: CanvasEngine, selectMultiple: boolean = false) {
+    super(PressElementEvent.NAME);
+    this.engine = engine;
+    this.selectMultiple = selectMultiple;
+  }
 
-	doAction(event: PressElementEvent) {
-		event.stopPropagation();
-		if (!event.element.isSelected()) {
-			if (!this.selectMultiple) {
-				_.forEach(this.engine.getModel().getSelectedEntities(), entity => {
-					entity.setSelected(false);
-				});
-			}
-			event.element.setSelected(true);
-			this.engine.repaint();
-		}
-	}
+  doAction(event: PressElementEvent) {
+    event.stopPropagation();
+    if (!event.element.isSelected()) {
+      if (!this.selectMultiple) {
+        _.forEach(this.engine.getModel().getSelectedEntities(), entity => {
+          entity.setSelected(false);
+        });
+      }
+      event.element.setSelected(true);
+      this.engine.repaint();
+    }
+  }
 }
diff --git a/src/event-bus/actions/ZoomCanvasAction.ts b/src/event-bus/actions/ZoomCanvasAction.ts
index a20a021..7196234 100644
--- a/src/event-bus/actions/ZoomCanvasAction.ts
+++ b/src/event-bus/actions/ZoomCanvasAction.ts
@@ -3,42 +3,42 @@ import { MouseWheelEvent } from '../events/mouse';
 import { CanvasEngine } from '../../CanvasEngine';
 
 export class ZoomCanvasAction extends Action<MouseWheelEvent> {
-	engine: CanvasEngine;
+  engine: CanvasEngine;
 
-	constructor(engine: CanvasEngine) {
-		super(MouseWheelEvent.NAME);
-		this.engine = engine;
-	}
+  constructor(engine: CanvasEngine) {
+    super(MouseWheelEvent.NAME);
+    this.engine = engine;
+  }
 
-	doAction(event: MouseWheelEvent) {
-		const model = this.engine.getModel();
-		const canvas = this.engine.getCanvasWidget();
+  doAction(event: MouseWheelEvent) {
+    const model = this.engine.getModel();
+    const canvas = this.engine.getCanvasWidget();
 
-		let newZoomFactor = model.getZoomLevel() + event.amount / 100.0;
-		if (newZoomFactor <= 0.1) {
-			return;
-		}
+    let newZoomFactor = model.getZoomLevel() + event.amount / 100.0;
+    if (newZoomFactor <= 0.1) {
+      return;
+    }
 
-		const oldZoomFactor = model.getZoomLevel();
+    const oldZoomFactor = model.getZoomLevel();
 
-		const boundingRect = canvas.dimension.realDimensions;
-		const clientWidth = boundingRect.getWidth();
-		const clientHeight = boundingRect.getHeight();
+    const boundingRect = canvas.dimension.realDimensions;
+    const clientWidth = boundingRect.getWidth();
+    const clientHeight = boundingRect.getHeight();
 
-		// compute difference between rect before and after scroll
-		const widthDiff = clientWidth * newZoomFactor - clientWidth * oldZoomFactor;
-		const heightDiff = clientHeight * newZoomFactor - clientHeight * oldZoomFactor;
+    // compute difference between rect before and after scroll
+    const widthDiff = clientWidth * newZoomFactor - clientWidth * oldZoomFactor;
+    const heightDiff = clientHeight * newZoomFactor - clientHeight * oldZoomFactor;
 
-		// compute mouse coords relative to canvas
-		const clientX = event.mouseX - boundingRect.getTopLeft().x;
-		const clientY = event.mouseY - boundingRect.getTopLeft().y;
+    // compute mouse coords relative to canvas
+    const clientX = event.mouseX - boundingRect.getTopLeft().x;
+    const clientY = event.mouseY - boundingRect.getTopLeft().y;
 
-		// compute width and height increment factor
-		const xFactor = (clientX - model.getOffsetX()) / oldZoomFactor / clientWidth;
-		const yFactor = (clientY - model.getOffsetY()) / oldZoomFactor / clientHeight;
+    // compute width and height increment factor
+    const xFactor = (clientX - model.getOffsetX()) / oldZoomFactor / clientWidth;
+    const yFactor = (clientY - model.getOffsetY()) / oldZoomFactor / clientHeight;
 
-		model.setZoomLevel(newZoomFactor);
-		model.setOffset(model.getOffsetX() - widthDiff * xFactor, model.getOffsetY() - heightDiff * yFactor);
-		this.engine.repaint();
-	}
+    model.setZoomLevel(newZoomFactor);
+    model.setOffset(model.getOffsetX() - widthDiff * xFactor, model.getOffsetY() - heightDiff * yFactor);
+    this.engine.repaint();
+  }
 }
diff --git a/src/event-bus/events/ModelEvent.ts b/src/event-bus/events/ModelEvent.ts
index 8de1e3b..24024b5 100644
--- a/src/event-bus/events/ModelEvent.ts
+++ b/src/event-bus/events/ModelEvent.ts
@@ -2,12 +2,12 @@ import { Event } from '../Event';
 import { BaseEvent } from '@projectstorm/react-core';
 
 export class ModelEvent extends Event {
-	modelEvent: BaseEvent;
+  modelEvent: BaseEvent;
 
-	static NAME = 'model-delegate-event';
+  static NAME = 'model-delegate-event';
 
-	constructor(modelEvent: BaseEvent) {
-		super(ModelEvent.NAME, modelEvent.source);
-		this.modelEvent = modelEvent;
-	}
+  constructor(modelEvent: BaseEvent) {
+    super(ModelEvent.NAME, modelEvent.source);
+    this.modelEvent = modelEvent;
+  }
 }
diff --git a/src/event-bus/events/elements.ts b/src/event-bus/events/elements.ts
index 31157f4..af4d734 100644
--- a/src/event-bus/events/elements.ts
+++ b/src/event-bus/events/elements.ts
@@ -2,26 +2,26 @@ import { Event } from '../Event';
 import { CanvasElementModel } from '../../models-canvas/CanvasElementModel';
 
 export class ElementEvent extends Event {
-	element: CanvasElementModel;
+  element: CanvasElementModel;
 
-	constructor(name: string, source: any, element: CanvasElementModel) {
-		super(name, source);
-		this.element = element;
-	}
+  constructor(name: string, source: any, element: CanvasElementModel) {
+    super(name, source);
+    this.element = element;
+  }
 }
 
 export class PressElementEvent extends ElementEvent {
-	static NAME = 'press-element';
+  static NAME = 'press-element';
 
-	constructor(source: any, element: CanvasElementModel) {
-		super(PressElementEvent.NAME, source, element);
-	}
+  constructor(source: any, element: CanvasElementModel) {
+    super(PressElementEvent.NAME, source, element);
+  }
 }
 
 export class UnPressElementEvent extends ElementEvent {
-	static NAME = 'unpress-element';
+  static NAME = 'unpress-element';
 
-	constructor(source: any, element: CanvasElementModel) {
-		super(UnPressElementEvent.NAME, source, element);
-	}
+  constructor(source: any, element: CanvasElementModel) {
+    super(UnPressElementEvent.NAME, source, element);
+  }
 }
diff --git a/src/event-bus/events/key.ts b/src/event-bus/events/key.ts
index 57eaa1e..baf4eb6 100644
--- a/src/event-bus/events/key.ts
+++ b/src/event-bus/events/key.ts
@@ -1,26 +1,26 @@
 import { Event } from '../Event';
 
 export abstract class KeyEvent extends Event {
-	key: string;
+  key: string;
 
-	constructor(name: string, source: any, key: string) {
-		super(name, source);
-		this.key = key;
-	}
+  constructor(name: string, source: any, key: string) {
+    super(name, source);
+    this.key = key;
+  }
 }
 
 export class KeyDownEvent extends KeyEvent {
-	static NAME = 'key-down';
+  static NAME = 'key-down';
 
-	constructor(source: any, key: string) {
-		super(KeyDownEvent.NAME, source, key);
-	}
+  constructor(source: any, key: string) {
+    super(KeyDownEvent.NAME, source, key);
+  }
 }
 
 export class KeyUpEvent extends KeyEvent {
-	static NAME = 'key-up';
+  static NAME = 'key-up';
 
-	constructor(source: any, key: string) {
-		super(KeyUpEvent.NAME, source, key);
-	}
+  constructor(source: any, key: string) {
+    super(KeyUpEvent.NAME, source, key);
+  }
 }
diff --git a/src/event-bus/events/mouse.ts b/src/event-bus/events/mouse.ts
index 2aabe74..10330f5 100644
--- a/src/event-bus/events/mouse.ts
+++ b/src/event-bus/events/mouse.ts
@@ -4,57 +4,57 @@ import * as _ from 'lodash';
 import { CanvasEngine } from '../../CanvasEngine';
 
 export abstract class MouseEvent extends Event {
-	mouseX: number;
-	mouseY: number;
-
-	constructor(name: string, source: any, mouseX: number, mouseY: number) {
-		super(name, source);
-		this.mouseX = mouseX;
-		this.mouseY = mouseY;
-	}
-
-	getCanvasCoordinates(engine: CanvasEngine): { x: number; y: number } {
-		let model = engine.getModel();
-		let canDimensions = engine.getCanvasWidget().dimension.realDimensions;
-
-		return {
-			x: (this.mouseX - canDimensions.getTopLeft().x - model.getOffsetX()) / model.getZoomLevel(),
-			y: (this.mouseY - canDimensions.getTopLeft().y - model.getOffsetY()) / model.getZoomLevel()
-		};
-	}
+  mouseX: number;
+  mouseY: number;
+
+  constructor(name: string, source: any, mouseX: number, mouseY: number) {
+    super(name, source);
+    this.mouseX = mouseX;
+    this.mouseY = mouseY;
+  }
+
+  getCanvasCoordinates(engine: CanvasEngine): { x: number; y: number } {
+    let model = engine.getModel();
+    let canDimensions = engine.getCanvasWidget().dimension.realDimensions;
+
+    return {
+      x: (this.mouseX - canDimensions.getTopLeft().x - model.getOffsetX()) / model.getZoomLevel(),
+      y: (this.mouseY - canDimensions.getTopLeft().y - model.getOffsetY()) / model.getZoomLevel()
+    };
+  }
 }
 
 export class MouseDownEvent extends MouseEvent {
-	static NAME = 'mouse-down';
+  static NAME = 'mouse-down';
 
-	constructor(source: any, mouseX: number, mouseY: number) {
-		super(MouseDownEvent.NAME, source, mouseX, mouseY);
-	}
+  constructor(source: any, mouseX: number, mouseY: number) {
+    super(MouseDownEvent.NAME, source, mouseX, mouseY);
+  }
 }
 
 export class MouseUpEvent extends MouseEvent {
-	static NAME = 'mouse-up';
+  static NAME = 'mouse-up';
 
-	constructor(source: any, mouseX: number, mouseY: number) {
-		super(MouseUpEvent.NAME, source, mouseX, mouseY);
-	}
+  constructor(source: any, mouseX: number, mouseY: number) {
+    super(MouseUpEvent.NAME, source, mouseX, mouseY);
+  }
 }
 
 export class MouseMoveEvent extends MouseEvent {
-	static NAME = 'mouse-move';
+  static NAME = 'mouse-move';
 
-	constructor(source: any, mouseX: number, mouseY: number) {
-		super(MouseMoveEvent.NAME, source, mouseX, mouseY);
-	}
+  constructor(source: any, mouseX: number, mouseY: number) {
+    super(MouseMoveEvent.NAME, source, mouseX, mouseY);
+  }
 }
 
 export class MouseWheelEvent extends MouseEvent {
-	amount: number;
+  amount: number;
 
-	static NAME = 'mouse-wheel';
+  static NAME = 'mouse-wheel';
 
-	constructor(source: any, mouseX: number, mouseY: number, amount: number) {
-		super(MouseWheelEvent.NAME, source, mouseX, mouseY);
-		this.amount = amount;
-	}
+  constructor(source: any, mouseX: number, mouseY: number, amount: number) {
+    super(MouseWheelEvent.NAME, source, mouseX, mouseY);
+    this.amount = amount;
+  }
 }
diff --git a/src/geometry/Point.ts b/src/geometry/Point.ts
index 07f28b1..5faa926 100644
--- a/src/geometry/Point.ts
+++ b/src/geometry/Point.ts
@@ -2,70 +2,70 @@ import * as mathjs from 'mathjs';
 import Matrix = mathjs.Matrix;
 
 export class Point {
-	x: number;
-	y: number;
+  x: number;
+  y: number;
 
-	constructor(x: number, y: number) {
-		this.x = x;
-		this.y = y;
-	}
+  constructor(x: number, y: number) {
+    this.x = x;
+    this.y = y;
+  }
 
-	translate(x: number, y: number) {
-		this.x += x;
-		this.y += y;
-	}
+  translate(x: number, y: number) {
+    this.x += x;
+    this.y += y;
+  }
 
-	clone() {
-		return new Point(this.x, this.y);
-	}
+  clone() {
+    return new Point(this.x, this.y);
+  }
 
-	public asMatrix() {
-		return mathjs.matrix([[this.x], [this.y], [1]]);
-	}
+  public asMatrix() {
+    return mathjs.matrix([[this.x], [this.y], [1]]);
+  }
 
-	transform(matrix: Matrix) {
-		let final = mathjs.multiply(matrix, this.asMatrix());
-		this.x = final.get([0, 0]);
-		this.y = final.get([1, 0]);
-	}
+  transform(matrix: Matrix) {
+    let final = mathjs.multiply(matrix, this.asMatrix());
+    this.x = final.get([0, 0]);
+    this.y = final.get([1, 0]);
+  }
 
-	public static middlePoint(pointA: Point, pointB: Point): Point {
-		return new Point((pointB.x + pointA.x) / 2, (pointB.y + pointA.y) / 2);
-	}
+  public static middlePoint(pointA: Point, pointB: Point): Point {
+    return new Point((pointB.x + pointA.x) / 2, (pointB.y + pointA.y) / 2);
+  }
 
-	public static multiply(...matrices: Matrix[]): Matrix {
-		let m: Matrix = matrices[0];
-		for (let i = 1; i < matrices.length; i++) {
-			m = mathjs.multiply(m, matrices[i]);
-		}
-		return m;
-	}
+  public static multiply(...matrices: Matrix[]): Matrix {
+    let m: Matrix = matrices[0];
+    for (let i = 1; i < matrices.length; i++) {
+      m = mathjs.multiply(m, matrices[i]);
+    }
+    return m;
+  }
 
-	public static scaleMatrix(x: number, y: number): Matrix {
-		return mathjs.matrix([[x, 0, 0], [0, y, 0], [0, 0, 1]]);
-	}
+  public static scaleMatrix(x: number, y: number): Matrix {
+    return mathjs.matrix([[x, 0, 0], [0, y, 0], [0, 0, 1]]);
+  }
 
-	public static translateMatrix(x: number, y: number): Matrix {
-		return mathjs.matrix([[1, 0, x], [0, 1, y], [0, 0, 1]]);
-	}
+  public static translateMatrix(x: number, y: number): Matrix {
+    return mathjs.matrix([[1, 0, x], [0, 1, y], [0, 0, 1]]);
+  }
 
-	public static rotateMatrix(deg: number): Matrix {
-		return mathjs.matrix([[Math.cos(deg), -1 * Math.sin(deg), 0], [Math.sin(deg), Math.cos(deg), 0], [0, 0, 1]]);
-	}
+  public static rotateMatrix(deg: number): Matrix {
+    return mathjs.matrix([[Math.cos(deg), -1 * Math.sin(deg), 0], [Math.sin(deg), Math.cos(deg), 0], [0, 0, 1]]);
+  }
 
-	static createScaleMatrix(x, y, origin: Point): Matrix {
-		return this.multiply(
-			Point.translateMatrix(origin.x, origin.y),
-			Point.scaleMatrix(x, y),
-			Point.translateMatrix(-origin.x, -origin.y)
-		);
-	}
+  static createScaleMatrix(x, y, origin: Point): Matrix {
+    return this.multiply(
+      Point.translateMatrix(origin.x, origin.y),
+      Point.scaleMatrix(x, y),
+      Point.translateMatrix(-origin.x, -origin.y)
+    );
+  }
 
-	static createRotateMatrix(deg: number, origin: Point): Matrix {
-		return this.multiply(
-			Point.translateMatrix(origin.x, origin.y),
-			Point.rotateMatrix(deg),
-			Point.translateMatrix(-origin.x, -origin.y)
-		);
-	}
+  static createRotateMatrix(deg: number, origin: Point): Matrix {
+    return this.multiply(
+      Point.translateMatrix(origin.x, origin.y),
+      Point.rotateMatrix(deg),
+      Point.translateMatrix(-origin.x, -origin.y)
+    );
+  }
 }
diff --git a/src/geometry/Polygon.ts b/src/geometry/Polygon.ts
index 7bfdfec..f607ea2 100644
--- a/src/geometry/Polygon.ts
+++ b/src/geometry/Polygon.ts
@@ -5,137 +5,137 @@ import { CanvasModel } from '../models-canvas/CanvasModel';
 import { Matrix } from 'mathjs';
 
 export class Polygon {
-	protected points: Point[];
-
-	constructor(points: Point[] = []) {
-		this.points = points;
-	}
-
-	getSVGPoints(): string {
-		return _.map(this.points, point => {
-			return point.x + ',' + point.y;
-		}).join(' ');
-	}
-
-	serialize() {
-		return _.map(this.points, point => {
-			return [point.x, point.y];
-		});
-	}
-
-	deserialize(data: any) {
-		this.points = _.map(data, point => {
-			return new Point(point[0], point[1]);
-		});
-	}
-
-	scale(x, y, origin: Point) {
-		let matrix = Point.createScaleMatrix(x, y, origin);
-		_.forEach(this.points, point => {
-			point.transform(matrix);
-		});
-	}
-
-	transform(matrix: Matrix) {
-		_.forEach(this.points, point => {
-			point.transform(matrix);
-		});
-	}
-
-	setPoints(points: Point[]) {
-		this.points = points;
-	}
-
-	getPoints(): Point[] {
-		return this.points;
-	}
-
-	translate(offsetX: number, offsetY: number) {
-		_.forEach(this.points, point => {
-			point.translate(offsetX, offsetY);
-		});
-	}
-
-	doClone(ob: this) {
-		this.points = _.map(ob.points, point => {
-			return point.clone();
-		});
-	}
-
-	clone(): this {
-		let ob = Object.create(this);
-		ob.doClone(this);
-		return ob;
-	}
-
-	toRealDimensions(model: CanvasModel): this {
-		let dim = this.clone();
-		dim.scale(model.getZoomLevel(), model.getZoomLevel(), new Point(0, 0));
-		dim.translate(model.offsetX, model.offsetY);
-		return dim;
-	}
-
-	getOrigin(): Point {
-		if (this.points.length === 0) {
-			return null;
-		}
-		let dimensions = this.getBoundingBox();
-		return Point.middlePoint(dimensions.getTopLeft(), dimensions.getBottomRight());
-	}
-
-	static boundingBoxFromPolygons(polygons: Polygon[]): Rectangle {
-		return Polygon.boundingBoxFromPoints(
-			_.flatMap(polygons, polygon => {
-				return polygon.getPoints();
-			})
-		);
-	}
-
-	static boundingBoxFromPoints(points: Point[]): Rectangle {
-		let minX = points[0].x;
-		let maxX = points[0].x;
-		let minY = points[0].y;
-		let maxY = points[0].y;
-
-		for (let i = 1; i < points.length; i++) {
-			if (points[i].x < minX) {
-				minX = points[i].x;
-			}
-			if (points[i].x > maxX) {
-				maxX = points[i].x;
-			}
-			if (points[i].y < minY) {
-				minY = points[i].y;
-			}
-			if (points[i].y > maxY) {
-				maxY = points[i].y;
-			}
-		}
-
-		return new Rectangle(new Point(minX, minY), new Point(maxX, minY), new Point(maxX, maxY), new Point(minX, maxY));
-	}
-
-	getBoundingBox(): Rectangle {
-		let minX = this.points[0].x;
-		let maxX = this.points[0].x;
-		let minY = this.points[0].y;
-		let maxY = this.points[0].y;
-
-		for (let i = 1; i < this.points.length; i++) {
-			if (this.points[i].x < minX) {
-				minX = this.points[i].x;
-			}
-			if (this.points[i].x > maxX) {
-				maxX = this.points[i].x;
-			}
-			if (this.points[i].y < minY) {
-				minY = this.points[i].y;
-			}
-			if (this.points[i].y > maxY) {
-				maxY = this.points[i].y;
-			}
-		}
-
-		return new Rectangle(new Point(minX, minY), new Point(maxX, minY), new Point(maxX, maxY), new Point(minX, maxY));
-	}
+  protected points: Point[];
+
+  constructor(points: Point[] = []) {
+    this.points = points;
+  }
+
+  getSVGPoints(): string {
+    return _.map(this.points, point => {
+      return point.x + ',' + point.y;
+    }).join(' ');
+  }
+
+  serialize() {
+    return _.map(this.points, point => {
+      return [point.x, point.y];
+    });
+  }
+
+  deserialize(data: any) {
+    this.points = _.map(data, point => {
+      return new Point(point[0], point[1]);
+    });
+  }
+
+  scale(x, y, origin: Point) {
+    let matrix = Point.createScaleMatrix(x, y, origin);
+    _.forEach(this.points, point => {
+      point.transform(matrix);
+    });
+  }
+
+  transform(matrix: Matrix) {
+    _.forEach(this.points, point => {
+      point.transform(matrix);
+    });
+  }
+
+  setPoints(points: Point[]) {
+    this.points = points;
+  }
+
+  getPoints(): Point[] {
+    return this.points;
+  }
+
+  translate(offsetX: number, offsetY: number) {
+    _.forEach(this.points, point => {
+      point.translate(offsetX, offsetY);
+    });
+  }
+
+  doClone(ob: this) {
+    this.points = _.map(ob.points, point => {
+      return point.clone();
+    });
+  }
+
+  clone(): this {
+    let ob = Object.create(this);
+    ob.doClone(this);
+    return ob;
+  }
+
+  toRealDimensions(model: CanvasModel): this {
+    let dim = this.clone();
+    dim.scale(model.getZoomLevel(), model.getZoomLevel(), new Point(0, 0));
+    dim.translate(model.offsetX, model.offsetY);
+    return dim;
+  }
+
+  getOrigin(): Point {
+    if (this.points.length === 0) {
+      return null;
+    }
+    let dimensions = this.getBoundingBox();
+    return Point.middlePoint(dimensions.getTopLeft(), dimensions.getBottomRight());
+  }
+
+  static boundingBoxFromPolygons(polygons: Polygon[]): Rectangle {
+    return Polygon.boundingBoxFromPoints(
+      _.flatMap(polygons, polygon => {
+        return polygon.getPoints();
+      })
+    );
+  }
+
+  static boundingBoxFromPoints(points: Point[]): Rectangle {
+    let minX = points[0].x;
+    let maxX = points[0].x;
+    let minY = points[0].y;
+    let maxY = points[0].y;
+
+    for (let i = 1; i < points.length; i++) {
+      if (points[i].x < minX) {
+        minX = points[i].x;
+      }
+      if (points[i].x > maxX) {
+        maxX = points[i].x;
+      }
+      if (points[i].y < minY) {
+        minY = points[i].y;
+      }
+      if (points[i].y > maxY) {
+        maxY = points[i].y;
+      }
+    }
+
+    return new Rectangle(new Point(minX, minY), new Point(maxX, minY), new Point(maxX, maxY), new Point(minX, maxY));
+  }
+
+  getBoundingBox(): Rectangle {
+    let minX = this.points[0].x;
+    let maxX = this.points[0].x;
+    let minY = this.points[0].y;
+    let maxY = this.points[0].y;
+
+    for (let i = 1; i < this.points.length; i++) {
+      if (this.points[i].x < minX) {
+        minX = this.points[i].x;
+      }
+      if (this.points[i].x > maxX) {
+        maxX = this.points[i].x;
+      }
+      if (this.points[i].y < minY) {
+        minY = this.points[i].y;
+      }
+      if (this.points[i].y > maxY) {
+        maxY = this.points[i].y;
+      }
+    }
+
+    return new Rectangle(new Point(minX, minY), new Point(maxX, minY), new Point(maxX, maxY), new Point(minX, maxY));
+  }
 }
diff --git a/src/geometry/Rectangle.ts b/src/geometry/Rectangle.ts
index 9cfb550..bd8b36e 100644
--- a/src/geometry/Rectangle.ts
+++ b/src/geometry/Rectangle.ts
@@ -2,77 +2,77 @@ import { Polygon } from './Polygon';
 import { Point } from './Point';
 
 export class Rectangle extends Polygon {
-	constructor(tl: Point, tr: Point, br: Point, bl: Point);
-	constructor(position: Point, width: number, height: number);
-	constructor(x?: number, y?: number, width?: number, height?: number);
+  constructor(tl: Point, tr: Point, br: Point, bl: Point);
+  constructor(position: Point, width: number, height: number);
+  constructor(x?: number, y?: number, width?: number, height?: number);
 
-	constructor(a: any = 0, b: any = 0, c: any = 0, d: any = 0) {
-		if (a instanceof Point && b instanceof Point && c instanceof Point && d instanceof Point) {
-			super([a, b, c, d]);
-		} else if (a instanceof Point) {
-			super([a, new Point(a.x + b, a.y), new Point(a.x + b, a.y + c), new Point(a.x, a.y + c)]);
-		} else {
-			super(Rectangle.pointsFromBounds(a, b, c, d));
-		}
-	}
+  constructor(a: any = 0, b: any = 0, c: any = 0, d: any = 0) {
+    if (a instanceof Point && b instanceof Point && c instanceof Point && d instanceof Point) {
+      super([a, b, c, d]);
+    } else if (a instanceof Point) {
+      super([a, new Point(a.x + b, a.y), new Point(a.x + b, a.y + c), new Point(a.x, a.y + c)]);
+    } else {
+      super(Rectangle.pointsFromBounds(a, b, c, d));
+    }
+  }
 
-	static pointsFromBounds(x: number, y: number, width: number, height: number): Point[] {
-		return [new Point(x, y), new Point(x + width, y), new Point(x + width, y + height), new Point(x, y + height)];
-	}
+  static pointsFromBounds(x: number, y: number, width: number, height: number): Point[] {
+    return [new Point(x, y), new Point(x + width, y), new Point(x + width, y + height), new Point(x, y + height)];
+  }
 
-	updateDimensions(x: number, y: number, width: number, height: number) {
-		this.points = Rectangle.pointsFromBounds(x, y, width, height);
-	}
+  updateDimensions(x: number, y: number, width: number, height: number) {
+    this.points = Rectangle.pointsFromBounds(x, y, width, height);
+  }
 
-	setPoints(points: Point[]) {
-		if (points.length !== 4) {
-			throw 'Rectangles must always have 4 points';
-		}
-		super.setPoints(points);
-	}
+  setPoints(points: Point[]) {
+    if (points.length !== 4) {
+      throw 'Rectangles must always have 4 points';
+    }
+    super.setPoints(points);
+  }
 
-	getWidth(): number {
-		return Math.sqrt(
-			Math.pow(this.getTopLeft().x - this.getTopRight().x, 2) + Math.pow(this.getTopLeft().y - this.getTopRight().y, 2)
-		);
-	}
+  getWidth(): number {
+    return Math.sqrt(
+      Math.pow(this.getTopLeft().x - this.getTopRight().x, 2) + Math.pow(this.getTopLeft().y - this.getTopRight().y, 2)
+    );
+  }
 
-	getHeight(): number {
-		return Math.sqrt(
-			Math.pow(this.getBottomLeft().x - this.getTopLeft().x, 2) +
-				Math.pow(this.getBottomLeft().y - this.getTopLeft().y, 2)
-		);
-	}
+  getHeight(): number {
+    return Math.sqrt(
+      Math.pow(this.getBottomLeft().x - this.getTopLeft().x, 2) +
+        Math.pow(this.getBottomLeft().y - this.getTopLeft().y, 2)
+    );
+  }
 
-	getTopMiddle(): Point {
-		return Point.middlePoint(this.getTopLeft(), this.getTopRight());
-	}
+  getTopMiddle(): Point {
+    return Point.middlePoint(this.getTopLeft(), this.getTopRight());
+  }
 
-	getBottomMiddle(): Point {
-		return Point.middlePoint(this.getBottomLeft(), this.getBottomRight());
-	}
+  getBottomMiddle(): Point {
+    return Point.middlePoint(this.getBottomLeft(), this.getBottomRight());
+  }
 
-	getLeftMiddle(): Point {
-		return Point.middlePoint(this.getBottomLeft(), this.getTopLeft());
-	}
+  getLeftMiddle(): Point {
+    return Point.middlePoint(this.getBottomLeft(), this.getTopLeft());
+  }
 
-	getRightMiddle(): Point {
-		return Point.middlePoint(this.getBottomRight(), this.getTopRight());
-	}
+  getRightMiddle(): Point {
+    return Point.middlePoint(this.getBottomRight(), this.getTopRight());
+  }
 
-	getTopLeft(): Point {
-		return this.points[0];
-	}
+  getTopLeft(): Point {
+    return this.points[0];
+  }
 
-	getTopRight(): Point {
-		return this.points[1];
-	}
+  getTopRight(): Point {
+    return this.points[1];
+  }
 
-	getBottomRight(): Point {
-		return this.points[2];
-	}
+  getBottomRight(): Point {
+    return this.points[2];
+  }
 
-	getBottomLeft(): Point {
-		return this.points[3];
-	}
+  getBottomLeft(): Point {
+    return this.points[3];
+  }
 }
diff --git a/src/history/HistoryBank.ts b/src/history/HistoryBank.ts
index a08eab5..5da2185 100644
--- a/src/history/HistoryBank.ts
+++ b/src/history/HistoryBank.ts
@@ -3,55 +3,55 @@ import { BaseEvent, BaseListener, BaseObject } from '@projectstorm/react-core';
 import { HistoryState } from './HistoryState';
 
 export interface HistoryBankListener extends BaseListener<HistoryBank> {
-	forward?(event: BaseEvent<HistoryBank> & { state: HistoryState });
+  forward?(event: BaseEvent<HistoryBank> & { state: HistoryState });
 
-	backward?(event: BaseEvent<HistoryBank> & { state: HistoryState });
+  backward?(event: BaseEvent<HistoryBank> & { state: HistoryState });
 }
 
 export class HistoryBank extends BaseObject<HistoryBankListener> {
-	history: HistoryState[];
-	pointer: number;
-
-	constructor() {
-		super();
-		this.history = [];
-		this.pointer = 0;
-	}
-
-	pushState(state: HistoryState) {
-		// state is equal, ignore pushing it
-		if (_.isEqual(this.history[this.pointer], state)) {
-			return;
-		}
-
-		this.pointer++;
-		this.history.splice(this.pointer);
-		this.history.push(state);
-	}
-
-	goForward() {
-		// cant go anymore forward
-		if (this.pointer === this.history.length - 1) {
-			return;
-		}
-		this.pointer++;
-		this.iterateListeners('history moved forward', (listener, event) => {
-			if (listener.forward) {
-				listener.forward({ ...event, state: this.history[this.pointer] });
-			}
-		});
-	}
-
-	goBackward() {
-		// cant go anymore backward
-		if (this.pointer <= 0) {
-			return;
-		}
-		this.pointer--;
-		this.iterateListeners('history moved backward', (listener, event) => {
-			if (listener.backward) {
-				listener.backward({ ...event, state: this.history[this.pointer] });
-			}
-		});
-	}
+  history: HistoryState[];
+  pointer: number;
+
+  constructor() {
+    super();
+    this.history = [];
+    this.pointer = 0;
+  }
+
+  pushState(state: HistoryState) {
+    // state is equal, ignore pushing it
+    if (_.isEqual(this.history[this.pointer], state)) {
+      return;
+    }
+
+    this.pointer++;
+    this.history.splice(this.pointer);
+    this.history.push(state);
+  }
+
+  goForward() {
+    // cant go anymore forward
+    if (this.pointer === this.history.length - 1) {
+      return;
+    }
+    this.pointer++;
+    this.iterateListeners('history moved forward', (listener, event) => {
+      if (listener.forward) {
+        listener.forward({ ...event, state: this.history[this.pointer] });
+      }
+    });
+  }
+
+  goBackward() {
+    // cant go anymore backward
+    if (this.pointer <= 0) {
+      return;
+    }
+    this.pointer--;
+    this.iterateListeners('history moved backward', (listener, event) => {
+      if (listener.backward) {
+        listener.backward({ ...event, state: this.history[this.pointer] });
+      }
+    });
+  }
 }
diff --git a/src/history/HistoryState.ts b/src/history/HistoryState.ts
index c84816e..f5d2df0 100644
--- a/src/history/HistoryState.ts
+++ b/src/history/HistoryState.ts
@@ -1,4 +1,4 @@
 export interface HistoryState {
-	name: string;
-	state: any;
+  name: string;
+  state: any;
 }
diff --git a/src/models-canvas/CanvasElementModel.ts b/src/models-canvas/CanvasElementModel.ts
index 940e28a..8f15c6e 100644
--- a/src/models-canvas/CanvasElementModel.ts
+++ b/src/models-canvas/CanvasElementModel.ts
@@ -4,86 +4,86 @@ import { BaseModel, BaseModelListener, DeserializeEvent } from '../base-models/B
 import { BaseEvent } from '@projectstorm/react-core';
 
 export interface CanvasElementModelListener<T extends CanvasElementModel = any> extends BaseModelListener<T> {
-	selectionChanged?(event: BaseEvent<CanvasElementModel> & { selected: boolean });
+  selectionChanged?(event: BaseEvent<CanvasElementModel> & { selected: boolean });
 
-	lockChanged?(event: BaseEvent<CanvasElementModel> & { locked: boolean });
+  lockChanged?(event: BaseEvent<CanvasElementModel> & { locked: boolean });
 }
 
 export abstract class CanvasElementModel<
-	T extends CanvasElementModelListener = CanvasElementModelListener
+  T extends CanvasElementModelListener = CanvasElementModelListener
 > extends BaseModel<CanvasLayerModel, CanvasElementModelListener> {
-	protected selected: boolean;
-	protected locked: boolean;
-
-	constructor(type: string) {
-		super(type);
-		this.type = type;
-		this.selected = false;
-		this.locked = false;
-	}
-
-	serialize() {
-		return {
-			...super.serialize(),
-			selected: this.selected,
-			locked: this.locked
-		};
-	}
-
-	deSerialize(event: DeserializeEvent): void {
-		super.deSerialize(event);
-		this.selected = !!event.data['selected'];
-		this.locked = !!event.data['locked'];
-	}
-
-	setSelected(selected: boolean) {
-		this.selected = selected;
-		this.iterateListeners('selection changed', (listener, event: any) => {
-			if (listener.selectionChanged) {
-				event.selected = selected;
-				listener.selectionChanged(event);
-			}
-		});
-	}
-
-	setLocked(locked: boolean) {
-		this.locked = locked;
-		this.iterateListeners('lock changed', (listener, event: any) => {
-			if (listener.lockChanged) {
-				event.locked = locked;
-				listener.lockChanged(event);
-			}
-		});
-	}
-
-	isSelected(): boolean {
-		return this.selected;
-	}
-
-	isLocked(): boolean {
-		return this.getParent().isLocked();
-	}
-
-	abstract getDimensions(): Rectangle;
-
-	abstract setDimensions(dimensions: Rectangle);
-
-	moveToLayer(layer: CanvasLayerModel) {
-		if (this.parent) {
-			this.parent.removeModel(this);
-		}
-		layer.addModel(this);
-	}
-
-	moveToFront() {
-		this.parent.moveModelToFront(this);
-	}
-
-	moveToBack() {
-		this.parent.moveModelToBack(this);
-	}
-
-	moveTo(index: number) {
-		this.parent.moveModel(this, index);
-	}
+  protected selected: boolean;
+  protected locked: boolean;
+
+  constructor(type: string) {
+    super(type);
+    this.type = type;
+    this.selected = false;
+    this.locked = false;
+  }
+
+  serialize() {
+    return {
+      ...super.serialize(),
+      selected: this.selected,
+      locked: this.locked
+    };
+  }
+
+  deSerialize(event: DeserializeEvent): void {
+    super.deSerialize(event);
+    this.selected = !!event.data['selected'];
+    this.locked = !!event.data['locked'];
+  }
+
+  setSelected(selected: boolean) {
+    this.selected = selected;
+    this.iterateListeners('selection changed', (listener, event: any) => {
+      if (listener.selectionChanged) {
+        event.selected = selected;
+        listener.selectionChanged(event);
+      }
+    });
+  }
+
+  setLocked(locked: boolean) {
+    this.locked = locked;
+    this.iterateListeners('lock changed', (listener, event: any) => {
+      if (listener.lockChanged) {
+        event.locked = locked;
+        listener.lockChanged(event);
+      }
+    });
+  }
+
+  isSelected(): boolean {
+    return this.selected;
+  }
+
+  isLocked(): boolean {
+    return this.getParent().isLocked();
+  }
+
+  abstract getDimensions(): Rectangle;
+
+  abstract setDimensions(dimensions: Rectangle);
+
+  moveToLayer(layer: CanvasLayerModel) {
+    if (this.parent) {
+      this.parent.removeModel(this);
+    }
+    layer.addModel(this);
+  }
+
+  moveToFront() {
+    this.parent.moveModelToFront(this);
+  }
+
+  moveToBack() {
+    this.parent.moveModelToBack(this);
+  }
+
+  moveTo(index: number) {
+    this.parent.moveModel(this, index);
+  }
 }
diff --git a/src/models-canvas/CanvasGroupModel.ts b/src/models-canvas/CanvasGroupModel.ts
index 077a0b5..10f9365 100644
--- a/src/models-canvas/CanvasGroupModel.ts
+++ b/src/models-canvas/CanvasGroupModel.ts
@@ -2,9 +2,9 @@ import { CanvasElementModel } from './CanvasElementModel';
 import { Rectangle } from '../geometry/Rectangle';
 
 export class CanvasGroupModel extends CanvasElementModel {
-	getDimensions(): Rectangle {
-		return undefined;
-	}
+  getDimensions(): Rectangle {
+    return undefined;
+  }
 
-	setDimensions(dimensions: Rectangle) {}
+  setDimensions(dimensions: Rectangle) {}
 }
diff --git a/src/models-canvas/CanvasLayerModel.ts b/src/models-canvas/CanvasLayerModel.ts
index a3e3130..37e11fd 100644
--- a/src/models-canvas/CanvasLayerModel.ts
+++ b/src/models-canvas/CanvasLayerModel.ts
@@ -4,57 +4,57 @@ import { DeserializeEvent, Serializable } from '../base-models/BaseModel';
 import { GraphModelOrdered } from '../base-models/GraphModelOrdered';
 
 export class CanvasLayerModel<T extends CanvasElementModel = CanvasElementModel> extends GraphModelOrdered<
-	T,
-	CanvasModel
+  T,
+  CanvasModel
 > {
-	protected name: string;
-	protected svg: boolean;
-	protected transform: boolean;
-
-	constructor(name: string = 'Layer') {
-		super('layer');
-		this.name = name;
-		this.svg = false;
-		this.transform = true;
-	}
-
-	deSerialize(event: DeserializeEvent): void {
-		super.deSerialize(event);
-		this.name = event.data['name'];
-		this.svg = event.data['svg'];
-		this.transform = event.data['transform'];
-	}
-
-	serialize(): Serializable & any {
-		return {
-			...super.serialize(),
-			name: this.name,
-			svg: this.svg,
-			transform: this.transform
-		};
-	}
-
-	setTransformable(transform: boolean) {
-		this.transform = transform;
-	}
-
-	setName(name: string) {
-		this.name = name;
-	}
-
-	setSVG(svg: boolean) {
-		this.svg = svg;
-	}
-
-	getName() {
-		return this.name;
-	}
-
-	isSVG() {
-		return this.svg;
-	}
-
-	isTransformable() {
-		return this.transform;
-	}
+  protected name: string;
+  protected svg: boolean;
+  protected transform: boolean;
+
+  constructor(name: string = 'Layer') {
+    super('layer');
+    this.name = name;
+    this.svg = false;
+    this.transform = true;
+  }
+
+  deSerialize(event: DeserializeEvent): void {
+    super.deSerialize(event);
+    this.name = event.data['name'];
+    this.svg = event.data['svg'];
+    this.transform = event.data['transform'];
+  }
+
+  serialize(): Serializable & any {
+    return {
+      ...super.serialize(),
+      name: this.name,
+      svg: this.svg,
+      transform: this.transform
+    };
+  }
+
+  setTransformable(transform: boolean) {
+    this.transform = transform;
+  }
+
+  setName(name: string) {
+    this.name = name;
+  }
+
+  setSVG(svg: boolean) {
+    this.svg = svg;
+  }
+
+  getName() {
+    return this.name;
+  }
+
+  isSVG() {
+    return this.svg;
+  }
+
+  isTransformable() {
+    return this.transform;
+  }
 }
diff --git a/src/models-canvas/CanvasModel.ts b/src/models-canvas/CanvasModel.ts
index e2cbfe6..d42e905 100644
--- a/src/models-canvas/CanvasModel.ts
+++ b/src/models-canvas/CanvasModel.ts
@@ -6,101 +6,101 @@ import { GraphModelOrdered } from '../base-models/GraphModelOrdered';
 import { BaseEvent } from '@projectstorm/react-core';
 
 export interface CanvasModelListener<T extends CanvasModel = any> extends BaseModelListener<T> {
-	offsetUpdated?(event: BaseEvent<T> & { offsetX: number; offsetY: number }): void;
+  offsetUpdated?(event: BaseEvent<T> & { offsetX: number; offsetY: number }): void;
 
-	zoomUpdated?(event: BaseEvent<T> & { zoom: number }): void;
+  zoomUpdated?(event: BaseEvent<T> & { zoom: number }): void;
 }
 
 export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> extends BaseModel<null, T> {
-	selectedLayer: CanvasLayerModel;
-	layers: GraphModelOrdered<CanvasLayerModel, CanvasModel>;
-
-	//control variables
-	offsetX: number;
-	offsetY: number;
-	zoom: number;
-
-	constructor() {
-		super('canvas');
-		this.selectedLayer = null;
-		this.layers = new GraphModelOrdered('layers');
-		this.layers.setParentDelegate(this);
-		this.offsetX = 0;
-		this.offsetY = 0;
-		this.zoom = 1;
-	}
-
-	serialize(): any {
-		return {
-			...super.serialize(),
-			layers: this.layers.serialize(),
-			offsetX: this.offsetX,
-			offsetY: this.offsetY,
-			zoom: this.zoom
-		};
-	}
-
-	deSerialize(event: DeserializeEvent): void {
-		super.deSerialize(event);
-		this.layers.deSerialize(event.subset('layers'));
-		this.offsetX = event.data['offsetX'];
-		this.offsetY = event.data['offsetY'];
-		this.zoom = event.data['zoom'];
-	}
-
-	getOffsetY() {
-		return this.offsetY;
-	}
-
-	getOffsetX() {
-		return this.offsetX;
-	}
-
-	getZoomLevel() {
-		return this.zoom;
-	}
-
-	setZoomLevel(zoom: number) {
-		this.zoom = zoom;
-		this.iterateListeners('zoom changed', (listener: CanvasModelListener, event) => {
-			if (listener.zoomUpdated) {
-				listener.zoomUpdated({ ...event, zoom: zoom });
-			}
-		});
-	}
-
-	setZoomPercent(percent: number) {
-		this.setZoomLevel(percent / 100.0);
-	}
-
-	setOffset(offsetX: number, offsetY: number) {
-		this.offsetX = offsetX;
-		this.offsetY = offsetY;
-		this.iterateListeners('offset changed', (listener: CanvasModelListener, event) => {
-			if (listener.offsetUpdated) {
-				listener.offsetUpdated({ ...event, offsetX: offsetX, offsetY: offsetY });
-			}
-		});
-	}
-
-	removeLayer(layer: CanvasLayerModel) {
-		this.layers.removeModel(layer);
-	}
-
-	addLayer(layer: CanvasLayerModel) {
-		this.layers.addModel(layer);
-		this.selectedLayer = layer;
-	}
-
-	getElements(): CanvasElementModel[] {
-		return _.flatMap(this.layers.getEntities(), layer => {
-			return _.values(layer.getEntities());
-		});
-	}
-
-	getSelectedEntities(): CanvasElementModel[] {
-		return _.filter(this.getElements(), element => {
-			return element.isSelected();
-		});
-	}
+  selectedLayer: CanvasLayerModel;
+  layers: GraphModelOrdered<CanvasLayerModel, CanvasModel>;
+
+  //control variables
+  offsetX: number;
+  offsetY: number;
+  zoom: number;
+
+  constructor() {
+    super('canvas');
+    this.selectedLayer = null;
+    this.layers = new GraphModelOrdered('layers');
+    this.layers.setParentDelegate(this);
+    this.offsetX = 0;
+    this.offsetY = 0;
+    this.zoom = 1;
+  }
+
+  serialize(): any {
+    return {
+      ...super.serialize(),
+      layers: this.layers.serialize(),
+      offsetX: this.offsetX,
+      offsetY: this.offsetY,
+      zoom: this.zoom
+    };
+  }
+
+  deSerialize(event: DeserializeEvent): void {
+    super.deSerialize(event);
+    this.layers.deSerialize(event.subset('layers'));
+    this.offsetX = event.data['offsetX'];
+    this.offsetY = event.data['offsetY'];
+    this.zoom = event.data['zoom'];
+  }
+
+  getOffsetY() {
+    return this.offsetY;
+  }
+
+  getOffsetX() {
+    return this.offsetX;
+  }
+
+  getZoomLevel() {
+    return this.zoom;
+  }
+
+  setZoomLevel(zoom: number) {
+    this.zoom = zoom;
+    this.iterateListeners('zoom changed', (listener: CanvasModelListener, event) => {
+      if (listener.zoomUpdated) {
+        listener.zoomUpdated({ ...event, zoom: zoom });
+      }
+    });
+  }
+
+  setZoomPercent(percent: number) {
+    this.setZoomLevel(percent / 100.0);
+  }
+
+  setOffset(offsetX: number, offsetY: number) {
+    this.offsetX = offsetX;
+    this.offsetY = offsetY;
+    this.iterateListeners('offset changed', (listener: CanvasModelListener, event) => {
+      if (listener.offsetUpdated) {
+        listener.offsetUpdated({ ...event, offsetX: offsetX, offsetY: offsetY });
+      }
+    });
+  }
+
+  removeLayer(layer: CanvasLayerModel) {
+    this.layers.removeModel(layer);
+  }
+
+  addLayer(layer: CanvasLayerModel) {
+    this.layers.addModel(layer);
+    this.selectedLayer = layer;
+  }
+
+  getElements(): CanvasElementModel[] {
+    return _.flatMap(this.layers.getEntities(), layer => {
+      return _.values(layer.getEntities());
+    });
+  }
+
+  getSelectedEntities(): CanvasElementModel[] {
+    return _.filter(this.getElements(), element => {
+      return element.isSelected();
+    });
+  }
 }
diff --git a/src/primitives/ellipse/EllipseElementFactory.tsx b/src/primitives/ellipse/EllipseElementFactory.tsx
index 9fa7c6a..c921fc2 100644
--- a/src/primitives/ellipse/EllipseElementFactory.tsx
+++ b/src/primitives/ellipse/EllipseElementFactory.tsx
@@ -5,17 +5,17 @@ import { EllipseElementWidget } from './EllipseElementWidget';
 import * as React from 'react';
 
 export class EllipseElementFactory extends AbstractElementFactory<EllipseElementModel> {
-	static NAME = 'primitive-circle';
+  static NAME = 'primitive-circle';
 
-	constructor() {
-		super(EllipseElementFactory.NAME);
-	}
+  constructor() {
+    super(EllipseElementFactory.NAME);
+  }
 
-	generateModel(): EllipseElementModel {
-		return new EllipseElementModel();
-	}
+  generateModel(): EllipseElementModel {
+    return new EllipseElementModel();
+  }
 
-	generateWidget(engine: CanvasEngine, model: EllipseElementModel): JSX.Element {
-		return <EllipseElementWidget model={model} />;
-	}
+  generateWidget(engine: CanvasEngine, model: EllipseElementModel): JSX.Element {
+    return <EllipseElementWidget model={model} />;
+  }
 }
diff --git a/src/primitives/ellipse/EllipseElementModel.tsx b/src/primitives/ellipse/EllipseElementModel.tsx
index 4ed9aef..0a0f6fd 100644
--- a/src/primitives/ellipse/EllipseElementModel.tsx
+++ b/src/primitives/ellipse/EllipseElementModel.tsx
@@ -7,59 +7,59 @@ import { DeserializeEvent } from '../../base-models/BaseModel';
 import { EllipseElementFactory } from './EllipseElementFactory';
 
 export class EllipseElementModel extends CanvasElementModel {
-	radiusX: number;
-	radiusY: number;
-	center: Point;
-	background: string;
+  radiusX: number;
+  radiusY: number;
+  center: Point;
+  background: string;
 
-	constructor() {
-		super(EllipseElementFactory.NAME);
-		this.radiusX = 5;
-		this.radiusY = 5;
-		this.center = new Point(0, 0);
-		this.background = 'rgb(0,192,255)';
-	}
+  constructor() {
+    super(EllipseElementFactory.NAME);
+    this.radiusX = 5;
+    this.radiusY = 5;
+    this.center = new Point(0, 0);
+    this.background = 'rgb(0,192,255)';
+  }
 
-	static createPointCloud(points: Point[], radius: number = 5) {
-		return _.map(points, point => {
-			let model = new EllipseElementModel();
-			model.radiusX = radius;
-			model.radiusY = radius;
-			model.center = point.clone();
-			return model;
-		});
-	}
+  static createPointCloud(points: Point[], radius: number = 5) {
+    return _.map(points, point => {
+      let model = new EllipseElementModel();
+      model.radiusX = radius;
+      model.radiusY = radius;
+      model.center = point.clone();
+      return model;
+    });
+  }
 
-	static createPointCloudFrom(rectangle: Polygon, radius: number = 5): EllipseElementModel[] {
-		return EllipseElementModel.createPointCloud(rectangle.getPoints().concat(rectangle.getOrigin()), radius);
-	}
+  static createPointCloudFrom(rectangle: Polygon, radius: number = 5): EllipseElementModel[] {
+    return EllipseElementModel.createPointCloud(rectangle.getPoints().concat(rectangle.getOrigin()), radius);
+  }
 
-	getDimensions(): Rectangle {
-		return new Rectangle(
-			this.center.x - this.radiusX,
-			this.center.y - this.radiusY,
-			this.radiusX * 2,
-			this.radiusY * 2
-		);
-	}
+  getDimensions(): Rectangle {
+    return new Rectangle(
+      this.center.x - this.radiusX,
+      this.center.y - this.radiusY,
+      this.radiusX * 2,
+      this.radiusY * 2
+    );
+  }
 
-	deSerialize(event: DeserializeEvent): void {
-		super.deSerialize(event);
-		this.radiusX = event.data['radiusX'];
-		this.radiusY = event.data['radiusY'];
-		this.background = event.data['background'];
-		this.center = new Point(event.data['centerX'], event.data['centerY']);
-	}
+  deSerialize(event: DeserializeEvent): void {
+    super.deSerialize(event);
+    this.radiusX = event.data['radiusX'];
+    this.radiusY = event.data['radiusY'];
+    this.background = event.data['background'];
+    this.center = new Point(event.data['centerX'], event.data['centerY']);
+  }
 
-	serialize() {
-		return {
-			...super.serialize(),
-			radiusX: this.radiusX,
-			radiusY: this.radiusY,
-			centerX: this.center.x,
-			centerY: this.center.y
-		};
-	}
+  serialize() {
+    return {
+      ...super.serialize(),
+      radiusX: this.radiusX,
+      radiusY: this.radiusY,
+      centerX: this.center.x,
+      centerY: this.center.y
+    };
+  }
 
-	setDimensions(dimensions: Rectangle) {}
+  setDimensions(dimensions: Rectangle) {}
 }
diff --git a/src/primitives/ellipse/EllipseElementWidget.tsx b/src/primitives/ellipse/EllipseElementWidget.tsx
index 718c935..a8a8a41 100644
--- a/src/primitives/ellipse/EllipseElementWidget.tsx
+++ b/src/primitives/ellipse/EllipseElementWidget.tsx
@@ -3,27 +3,27 @@ import { EllipseElementModel } from './EllipseElementModel';
 import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
 
 export interface EllipseElementWidgetProps extends BaseWidgetProps {
-	model: EllipseElementModel;
+  model: EllipseElementModel;
 }
 
 export interface EllipseElementWidgetState {}
 
 export class EllipseElementWidget extends BaseWidget<EllipseElementWidgetProps, EllipseElementWidgetState> {
-	constructor(props: EllipseElementWidgetProps) {
-		super('src-ellipsse-element', props);
-		this.state = {};
-	}
+  constructor(props: EllipseElementWidgetProps) {
+    super('src-ellipsse-element', props);
+    this.state = {};
+  }
 
-	render() {
-		return (
-			<ellipse
-				{...this.getProps()}
-				cx={this.props.model.center.x}
-				cy={this.props.model.center.y}
-				rx={this.props.model.radiusX}
-				ry={this.props.model.radiusX}
-				fill={this.props.model.background}
-			/>
-		);
-	}
+  render() {
+    return (
+      <ellipse
+        {...this.getProps()}
+        cx={this.props.model.center.x}
+        cy={this.props.model.center.y}
+        rx={this.props.model.radiusX}
+        ry={this.props.model.radiusX}
+        fill={this.props.model.background}
+      />
+    );
+  }
 }
diff --git a/src/primitives/grid/GridElementFactory.tsx b/src/primitives/grid/GridElementFactory.tsx
index 92bd5a6..52833bd 100644
--- a/src/primitives/grid/GridElementFactory.tsx
+++ b/src/primitives/grid/GridElementFactory.tsx
@@ -5,17 +5,17 @@ import { GridElementWidget } from './GridElementWidget';
 import * as React from 'react';
 
 export class GridElementFactory extends AbstractElementFactory<GridElementModel> {
-	static NAME = 'primitive-grid';
+  static NAME = 'primitive-grid';
 
-	constructor() {
-		super(GridElementFactory.NAME);
-	}
+  constructor() {
+    super(GridElementFactory.NAME);
+  }
 
-	generateModel(): GridElementModel {
-		return new GridElementModel();
-	}
+  generateModel(): GridElementModel {
+    return new GridElementModel();
+  }
 
-	generateWidget(engine: CanvasEngine, model: GridElementModel): JSX.Element {
-		return <GridElementWidget engine={engine} model={model} />;
-	}
+  generateWidget(engine: CanvasEngine, model: GridElementModel): JSX.Element {
+    return <GridElementWidget engine={engine} model={model} />;
+  }
 }
diff --git a/src/primitives/grid/GridElementModel.ts b/src/primitives/grid/GridElementModel.ts
index 839a6c9..9364126 100644
--- a/src/primitives/grid/GridElementModel.ts
+++ b/src/primitives/grid/GridElementModel.ts
@@ -4,40 +4,40 @@ import { DeserializeEvent } from '../../base-models/BaseModel';
 import { GridElementFactory } from './GridElementFactory';
 
 export class GridElementModel extends CanvasElementModel {
-	sizeX: number;
-	sizeY: number;
-	color: string;
-	thickness: number;
+  sizeX: number;
+  sizeY: number;
+  color: string;
+  thickness: number;
 
-	constructor() {
-		super(GridElementFactory.NAME);
-		this.sizeX = 50;
-		this.sizeY = 50;
-		this.color = 'rgba(0,0,0,0.1)';
-		this.thickness = 1;
-	}
+  constructor() {
+    super(GridElementFactory.NAME);
+    this.sizeX = 50;
+    this.sizeY = 50;
+    this.color = 'rgba(0,0,0,0.1)';
+    this.thickness = 1;
+  }
 
-	getDimensions(): Rectangle {
-		return undefined;
-	}
+  getDimensions(): Rectangle {
+    return undefined;
+  }
 
-	setDimensions(dimensions: Rectangle) {}
+  setDimensions(dimensions: Rectangle) {}
 
-	deSerialize(event: DeserializeEvent): void {
-		super.deSerialize(event);
-		this.sizeX = event.data['sizeX'];
-		this.sizeY = event.data['sizeY'];
-		this.color = event.data['color'];
-		this.thickness = event.data['thickness'];
-	}
+  deSerialize(event: DeserializeEvent): void {
+    super.deSerialize(event);
+    this.sizeX = event.data['sizeX'];
+    this.sizeY = event.data['sizeY'];
+    this.color = event.data['color'];
+    this.thickness = event.data['thickness'];
+  }
 
-	serialize(): { selected: boolean } {
-		return {
-			...super.serialize(),
-			sizeX: this.sizeX,
-			sizeY: this.sizeY,
-			color: this.color,
-			thickness: this.thickness
-		};
-	}
+  serialize(): { selected: boolean } {
+    return {
+      ...super.serialize(),
+      sizeX: this.sizeX,
+      sizeY: this.sizeY,
+      color: this.color,
+      thickness: this.thickness
+    };
+  }
 }
diff --git a/src/primitives/grid/GridElementWidget.tsx b/src/primitives/grid/GridElementWidget.tsx
index 45ffce4..d0bf000 100644
--- a/src/primitives/grid/GridElementWidget.tsx
+++ b/src/primitives/grid/GridElementWidget.tsx
@@ -4,64 +4,64 @@ import { GridElementModel } from './GridElementModel';
 import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
 
 export interface GridElementWidgetProps extends BaseWidgetProps {
-	engine: CanvasEngine;
-	model: GridElementModel;
+  engine: CanvasEngine;
+  model: GridElementModel;
 }
 
 export interface GridElementWidgetState {}
 
 export class GridElementWidget extends BaseWidget<GridElementWidgetProps, GridElementWidgetState> {
-	constructor(props: GridElementWidgetProps) {
-		super('src-grid-element', props);
-		this.state = {};
-	}
+  constructor(props: GridElementWidgetProps) {
+    super('src-grid-element', props);
+    this.state = {};
+  }
 
-	render() {
-		let childrenX = [];
-		let offsetX =
-			this.props.engine.getModel().offsetX % (this.props.model.sizeX * this.props.engine.getModel().getZoomLevel());
-		let spacingX = this.props.model.sizeX * this.props.engine.getModel().getZoomLevel();
-		let totalChildrenX = this.props.engine.getCanvasWidget().dimension.realDimensions.getWidth() / spacingX;
-		for (let i = 0; i < totalChildrenX; i++) {
-			let x = offsetX + spacingX * i;
-			childrenX.push(
-				<line
-					key={'x-' + i}
-					stroke={this.props.model.color}
-					strokeWidth={this.props.model.thickness}
-					y1={0}
-					y2={this.props.engine.getCanvasWidget().dimension.realDimensions.getHeight()}
-					x1={x}
-					x2={x}
-				/>
-			);
-		}
+  render() {
+    let childrenX = [];
+    let offsetX =
+      this.props.engine.getModel().offsetX % (this.props.model.sizeX * this.props.engine.getModel().getZoomLevel());
+    let spacingX = this.props.model.sizeX * this.props.engine.getModel().getZoomLevel();
+    let totalChildrenX = this.props.engine.getCanvasWidget().dimension.realDimensions.getWidth() / spacingX;
+    for (let i = 0; i < totalChildrenX; i++) {
+      let x = offsetX + spacingX * i;
+      childrenX.push(
+        <line
+          key={'x-' + i}
+          stroke={this.props.model.color}
+          strokeWidth={this.props.model.thickness}
+          y1={0}
+          y2={this.props.engine.getCanvasWidget().dimension.realDimensions.getHeight()}
+          x1={x}
+          x2={x}
+        />
+      );
+    }
 
-		let childrenY = [];
-		let offsetY =
-			this.props.engine.getModel().offsetY % (this.props.model.sizeY * this.props.engine.getModel().getZoomLevel());
-		let spacingY = this.props.model.sizeY * this.props.engine.getModel().getZoomLevel();
-		let totalChildrenY = this.props.engine.getCanvasWidget().dimension.realDimensions.getHeight() / spacingY;
-		for (let i = 0; i < totalChildrenY; i++) {
-			let y = offsetY + spacingY * i;
-			childrenY.push(
-				<line
-					key={'y-' + i}
-					stroke={this.props.model.color}
-					strokeWidth={this.props.model.thickness}
-					x1={0}
-					x2={this.props.engine.getCanvasWidget().dimension.realDimensions.getWidth()}
-					y1={y}
-					y2={y}
-				/>
-			);
-		}
+    let childrenY = [];
+    let offsetY =
+      this.props.engine.getModel().offsetY % (this.props.model.sizeY * this.props.engine.getModel().getZoomLevel());
+    let spacingY = this.props.model.sizeY * this.props.engine.getModel().getZoomLevel();
+    let totalChildrenY = this.props.engine.getCanvasWidget().dimension.realDimensions.getHeight() / spacingY;
+    for (let i = 0; i < totalChildrenY; i++) {
+      let y = offsetY + spacingY * i;
+      childrenY.push(
+        <line
+          key={'y-' + i}
+          stroke={this.props.model.color}
+          strokeWidth={this.props.model.thickness}
+          x1={0}
+          x2={this.props.engine.getCanvasWidget().dimension.realDimensions.getWidth()}
+          y1={y}
+          y2={y}
+        />
+      );
+    }
 
-		return (
-			<g {...this.getProps()}>
-				{childrenX}
-				{childrenY}
-			</g>
-		);
-	}
+    return (
+      <g {...this.getProps()}>
+        {childrenX}
+        {childrenY}
+      </g>
+    );
+  }
 }
diff --git a/src/primitives/paper/PaperElementFactory.tsx b/src/primitives/paper/PaperElementFactory.tsx
index c169d42..1b7817d 100644
--- a/src/primitives/paper/PaperElementFactory.tsx
+++ b/src/primitives/paper/PaperElementFactory.tsx
@@ -5,17 +5,17 @@ import { PaperElementWidget } from './PaperElementWidget';
 import * as React from 'react';
 
 export class PaperElementFactory extends AbstractElementFactory<PaperElementModel> {
-	static NAME = 'primitive-paper';
+  static NAME = 'primitive-paper';
 
-	constructor() {
-		super(PaperElementFactory.NAME);
-	}
+  constructor() {
+    super(PaperElementFactory.NAME);
+  }
 
-	generateModel(): PaperElementModel {
-		return new PaperElementModel();
-	}
+  generateModel(): PaperElementModel {
+    return new PaperElementModel();
+  }
 
-	generateWidget(engine: CanvasEngine, model: PaperElementModel): JSX.Element {
-		return <PaperElementWidget model={model} />;
-	}
+  generateWidget(engine: CanvasEngine, model: PaperElementModel): JSX.Element {
+    return <PaperElementWidget model={model} />;
+  }
 }
diff --git a/src/primitives/paper/PaperElementModel.ts b/src/primitives/paper/PaperElementModel.ts
index fde897f..dcfe5e4 100644
--- a/src/primitives/paper/PaperElementModel.ts
+++ b/src/primitives/paper/PaperElementModel.ts
@@ -3,43 +3,43 @@ import { Rectangle } from '../../geometry/Rectangle';
 import { PaperElementFactory } from './PaperElementFactory';
 
 export class PaperElementModel extends CanvasElementModel {
-	dimensions: Rectangle;
-
-	protected width: number;
-	protected height: number;
-	protected dpi: number;
-
-	static INCH = 25.4; //mm
-
-	constructor() {
-		super(PaperElementFactory.NAME);
-		this.dimensions = new Rectangle();
-		this.setA4();
-	}
-
-	setA4() {
-		this.updateDimensions(210, 297, 300);
-	}
-
-	updateDimensions(width: number, height: number, dpi: number) {
-		this.width = width;
-		this.height = height;
-		this.dpi = dpi;
-		this.recomputeDimensions();
-	}
-
-	recomputeDimensions() {
-		this.dimensions = new Rectangle(
-			0,
-			0,
-			(this.width * this.dpi) / PaperElementModel.INCH,
-			(this.height * this.dpi) / PaperElementModel.INCH
-		);
-	}
-
-	getDimensions(): Rectangle {
-		return this.dimensions;
-	}
-
-	setDimensions(dimensions: Rectangle) {}
+  dimensions: Rectangle;
+
+  protected width: number;
+  protected height: number;
+  protected dpi: number;
+
+  static INCH = 25.4; //mm
+
+  constructor() {
+    super(PaperElementFactory.NAME);
+    this.dimensions = new Rectangle();
+    this.setA4();
+  }
+
+  setA4() {
+    this.updateDimensions(210, 297, 300);
+  }
+
+  updateDimensions(width: number, height: number, dpi: number) {
+    this.width = width;
+    this.height = height;
+    this.dpi = dpi;
+    this.recomputeDimensions();
+  }
+
+  recomputeDimensions() {
+    this.dimensions = new Rectangle(
+      0,
+      0,
+      (this.width * this.dpi) / PaperElementModel.INCH,
+      (this.height * this.dpi) / PaperElementModel.INCH
+    );
+  }
+
+  getDimensions(): Rectangle {
+    return this.dimensions;
+  }
+
+  setDimensions(dimensions: Rectangle) {}
 }
diff --git a/src/primitives/paper/PaperElementWidget.tsx b/src/primitives/paper/PaperElementWidget.tsx
index 948a774..de34637 100644
--- a/src/primitives/paper/PaperElementWidget.tsx
+++ b/src/primitives/paper/PaperElementWidget.tsx
@@ -3,26 +3,26 @@ import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
 import { PaperElementModel } from './PaperElementModel';
 
 export interface PaperElementWidgetProps extends BaseWidgetProps {
-	model: PaperElementModel;
+  model: PaperElementModel;
 }
 
 export class PaperElementWidget extends BaseWidget<PaperElementWidgetProps> {
-	constructor(props) {
-		super('src-paper', props);
-	}
+  constructor(props) {
+    super('src-paper', props);
+  }
 
-	render() {
-		const dim = this.props.model.getDimensions();
-		return (
-			<div
-				{...this.getProps()}
-				style={{
-					top: 0,
-					left: 0,
-					width: dim.getWidth(),
-					height: dim.getHeight()
-				}}
-			/>
-		);
-	}
+  render() {
+    const dim = this.props.model.getDimensions();
+    return (
+      <div
+        {...this.getProps()}
+        style={{
+          top: 0,
+          left: 0,
+          width: dim.getWidth(),
+          height: dim.getHeight()
+        }}
+      />
+    );
+  }
 }
diff --git a/src/primitives/rectangle/RectangleElementFactory.tsx b/src/primitives/rectangle/RectangleElementFactory.tsx
index 0503675..d064e4a 100644
--- a/src/primitives/rectangle/RectangleElementFactory.tsx
+++ b/src/primitives/rectangle/RectangleElementFactory.tsx
@@ -5,17 +5,17 @@ import * as React from 'react';
 import { CanvasEngine } from '../../CanvasEngine';
 
 export class RectangleElementFactory extends AbstractElementFactory<RectangleElementModel> {
-	static NAME = 'primitive-rectangle';
+  static NAME = 'primitive-rectangle';
 
-	constructor() {
-		super(RectangleElementFactory.NAME);
-	}
+  constructor() {
+    super(RectangleElementFactory.NAME);
+  }
 
-	generateModel(): RectangleElementModel {
-		return new RectangleElementModel();
-	}
+  generateModel(): RectangleElementModel {
+    return new RectangleElementModel();
+  }
 
-	generateWidget(engine: CanvasEngine, model: RectangleElementModel): JSX.Element {
-		return <RectangleElementWidget engine={engine} model={model} />;
-	}
+  generateWidget(engine: CanvasEngine, model: RectangleElementModel): JSX.Element {
+    return <RectangleElementWidget engine={engine} model={model} />;
+  }
 }
diff --git a/src/primitives/rectangle/RectangleElementModel.ts b/src/primitives/rectangle/RectangleElementModel.ts
index e6d30ad..283c55e 100644
--- a/src/primitives/rectangle/RectangleElementModel.ts
+++ b/src/primitives/rectangle/RectangleElementModel.ts
@@ -4,37 +4,37 @@ import { DeserializeEvent } from '../../base-models/BaseModel';
 import { RectangleElementFactory } from './RectangleElementFactory';
 
 export class RectangleElementModel extends CanvasElementModel {
-	border: number;
-	borderColor: string;
-	background: string;
-	dimensions: Rectangle;
+  border: number;
+  borderColor: string;
+  background: string;
+  dimensions: Rectangle;
 
-	constructor() {
-		super(RectangleElementFactory.NAME);
-		this.border = 2;
-		this.borderColor = 'black';
-		this.background = 'rgb(0,192,255)';
-		this.dimensions = new Rectangle(0, 0, 100, 100);
-		this.selected = false;
-	}
+  constructor() {
+    super(RectangleElementFactory.NAME);
+    this.border = 2;
+    this.borderColor = 'black';
+    this.background = 'rgb(0,192,255)';
+    this.dimensions = new Rectangle(0, 0, 100, 100);
+    this.selected = false;
+  }
 
-	serialize() {
-		return {
-			...super.serialize(),
-			dimensions: this.dimensions.serialize()
-		};
-	}
+  serialize() {
+    return {
+      ...super.serialize(),
+      dimensions: this.dimensions.serialize()
+    };
+  }
 
-	deSerialize(event: DeserializeEvent): void {
-		super.deSerialize(event);
-		this.dimensions.deserialize(event.data['dimensions']);
-	}
+  deSerialize(event: DeserializeEvent): void {
+    super.deSerialize(event);
+    this.dimensions.deserialize(event.data['dimensions']);
+  }
 
-	getDimensions(): Rectangle {
-		return this.dimensions;
-	}
+  getDimensions(): Rectangle {
+    return this.dimensions;
+  }
 
-	setDimensions(dimensions: Rectangle) {
-		this.dimensions = dimensions;
-	}
+  setDimensions(dimensions: Rectangle) {
+    this.dimensions = dimensions;
+  }
 }
diff --git a/src/primitives/rectangle/RectangleElementWidget.tsx b/src/primitives/rectangle/RectangleElementWidget.tsx
index 6c1389f..bac36e9 100644
--- a/src/primitives/rectangle/RectangleElementWidget.tsx
+++ b/src/primitives/rectangle/RectangleElementWidget.tsx
@@ -5,31 +5,31 @@ import { CanvasEngine } from '../../CanvasEngine';
 import { PressElementEvent, UnPressElementEvent } from '../../event-bus/events/elements';
 
 export interface SquareElementWidgetProps extends BaseWidgetProps {
-	model: RectangleElementModel;
-	engine: CanvasEngine;
+  model: RectangleElementModel;
+  engine: CanvasEngine;
 }
 
 export interface SquareElementWidgetState {}
 
 export class RectangleElementWidget extends BaseWidget<SquareElementWidgetProps, SquareElementWidgetState> {
-	constructor(props: SquareElementWidgetProps) {
-		super('src-primitive-rectangle', props);
-		this.state = {};
-	}
+  constructor(props: SquareElementWidgetProps) {
+    super('src-primitive-rectangle', props);
+    this.state = {};
+  }
 
-	render() {
-		let dimensions = this.props.model.dimensions;
-		return (
-			<polygon
-				{...this.getProps()}
-				points={dimensions.getSVGPoints()}
-				onMouseDown={event => {
-					this.props.engine.getEventBus().fireEvent(new PressElementEvent(this, this.props.model));
-				}}
-				onMouseUp={event => {
-					this.props.engine.getEventBus().fireEvent(new UnPressElementEvent(this, this.props.model));
-				}}
-			/>
-		);
-	}
+  render() {
+    let dimensions = this.props.model.dimensions;
+    return (
+      <polygon
+        {...this.getProps()}
+        points={dimensions.getSVGPoints()}
+        onMouseDown={event => {
+          this.props.engine.getEventBus().fireEvent(new PressElementEvent(this, this.props.model));
+        }}
+        onMouseUp={event => {
+          this.props.engine.getEventBus().fireEvent(new UnPressElementEvent(this, this.props.model));
+        }}
+      />
+    );
+  }
 }
diff --git a/src/primitives/selection/SelectionElementFactory.tsx b/src/primitives/selection/SelectionElementFactory.tsx
index e7cdcdb..bd052f0 100644
--- a/src/primitives/selection/SelectionElementFactory.tsx
+++ b/src/primitives/selection/SelectionElementFactory.tsx
@@ -8,23 +8,23 @@ import { ResizeOriginDimensionsState } from '../../state-machine/states/ResizeOr
 import { RotateElementsState } from '../../state-machine/states/RotateElementsState';
 
 export class SelectionElementFactory extends AbstractElementFactory<SelectionElementModel> {
-	constructor() {
-		super('selection');
-	}
+  constructor() {
+    super('selection');
+  }
 
-	generateModel(): SelectionElementModel {
-		return new SelectionElementModel();
-	}
+  generateModel(): SelectionElementModel {
+    return new SelectionElementModel();
+  }
 
-	getCanvasStates() {
-		return [
-			new ResizeOriginDimensionsState(this.engine),
-			new ResizeDimensionsState(this.engine),
-			new RotateElementsState(this.engine)
-		];
-	}
+  getCanvasStates() {
+    return [
+      new ResizeOriginDimensionsState(this.engine),
+      new ResizeDimensionsState(this.engine),
+      new RotateElementsState(this.engine)
+    ];
+  }
 
-	generateWidget(engine: CanvasEngine, model: SelectionElementModel): JSX.Element {
-		return <SelectionElementWidget engine={engine} model={model} />;
-	}
+  generateWidget(engine: CanvasEngine, model: SelectionElementModel): JSX.Element {
+    return <SelectionElementWidget engine={engine} model={model} />;
+  }
 }
diff --git a/src/primitives/selection/SelectionElementModel.ts b/src/primitives/selection/SelectionElementModel.ts
index acf396d..82093ea 100644
--- a/src/primitives/selection/SelectionElementModel.ts
+++ b/src/primitives/selection/SelectionElementModel.ts
@@ -4,44 +4,44 @@ import { Rectangle } from '../../geometry/Rectangle';
 import { DeserializeEvent } from '../../base-models/BaseModel';
 
 export class SelectionElementModel extends CanvasElementModel {
-	models: CanvasElementModel[];
-
-	constructor() {
-		super('selection');
-		this.models = [];
-	}
-
-	setModels(models: CanvasElementModel[]) {
-		this.models = models;
-	}
-
-	getModels(): CanvasElementModel[] {
-		return this.models;
-	}
-
-	getDimensions(): Rectangle {
-		return Rectangle.boundingBoxFromPolygons(
-			_.map(this.models, model => {
-				return model.getDimensions();
-			})
-		);
-	}
-
-	setDimensions(dimensions: Rectangle) {}
-
-	deSerialize(event: DeserializeEvent): void {
-		super.deSerialize(event);
-		this.models = _.map(event.data['models'], modelID => {
-			return event.cache[modelID];
-		}) as any;
-	}
-
-	serialize() {
-		return {
-			...super.serialize(),
-			models: _.map(this.models, model => {
-				return model.getID();
-			})
-		};
-	}
+  models: CanvasElementModel[];
+
+  constructor() {
+    super('selection');
+    this.models = [];
+  }
+
+  setModels(models: CanvasElementModel[]) {
+    this.models = models;
+  }
+
+  getModels(): CanvasElementModel[] {
+    return this.models;
+  }
+
+  getDimensions(): Rectangle {
+    return Rectangle.boundingBoxFromPolygons(
+      _.map(this.models, model => {
+        return model.getDimensions();
+      })
+    );
+  }
+
+  setDimensions(dimensions: Rectangle) {}
+
+  deSerialize(event: DeserializeEvent): void {
+    super.deSerialize(event);
+    this.models = _.map(event.data['models'], modelID => {
+      return event.cache[modelID];
+    }) as any;
+  }
+
+  serialize() {
+    return {
+      ...super.serialize(),
+      models: _.map(this.models, model => {
+        return model.getID();
+      })
+    };
+  }
 }
diff --git a/src/primitives/selection/SelectionElementWidget.tsx b/src/primitives/selection/SelectionElementWidget.tsx
index 98ec9be..76dc212 100644
--- a/src/primitives/selection/SelectionElementWidget.tsx
+++ b/src/primitives/selection/SelectionElementWidget.tsx
@@ -5,19 +5,19 @@ import { CanvasEngine } from '../../CanvasEngine';
 import { SelectionElementModel } from './SelectionElementModel';
 
 export interface SelectionElementWidgetProps extends BaseWidgetProps {
-	engine: CanvasEngine;
-	model: SelectionElementModel;
+  engine: CanvasEngine;
+  model: SelectionElementModel;
 }
 
 export interface SelectionElementWidgetState {}
 
 export class SelectionElementWidget extends BaseWidget<SelectionElementWidgetProps, SelectionElementWidgetState> {
-	constructor(props: SelectionElementWidgetProps) {
-		super('src-selection-group', props);
-		this.state = {};
-	}
+  constructor(props: SelectionElementWidgetProps) {
+    super('src-selection-group', props);
+    this.state = {};
+  }
 
-	render() {
-		return <SelectionGroupWidget model={this.props.model} engine={this.props.engine} />;
-	}
+  render() {
+    return <SelectionGroupWidget model={this.props.model} engine={this.props.engine} />;
+  }
 }
diff --git a/src/primitives/selection/SelectionGroupWidget.tsx b/src/primitives/selection/SelectionGroupWidget.tsx
index 63ad265..9a7ac9f 100644
--- a/src/primitives/selection/SelectionGroupWidget.tsx
+++ b/src/primitives/selection/SelectionGroupWidget.tsx
@@ -8,90 +8,90 @@ import { ModelRotateInput } from '../../state-machine/input/ModelRotateInput';
 import { SmartAnchorWidget } from '../../widgets/SmartAnchorWidget';
 
 export interface SelectionGroupWidgetProps extends BaseWidgetProps {
-	model: SelectionElementModel;
-	engine: CanvasEngine;
+  model: SelectionElementModel;
+  engine: CanvasEngine;
 }
 
 export interface SelectionGroupWidgetState {}
 
 export class SelectionGroupWidget extends BaseWidget<SelectionGroupWidgetProps, SelectionGroupWidgetState> {
-	constructor(props: SelectionGroupWidgetProps) {
-		super('src-selection-group', props);
-		this.state = {};
-	}
+  constructor(props: SelectionGroupWidgetProps) {
+    super('src-selection-group', props);
+    this.state = {};
+  }
 
-	render() {
-		let dimension = this.props.model.getDimensions().toRealDimensions(this.props.engine.getModel());
-		return (
-			<div
-				style={{
-					left: dimension.getTopLeft().x,
-					top: dimension.getTopLeft().y,
-					width: dimension.getWidth(),
-					height: dimension.getHeight()
-				}}
-				{...this.getProps()}>
-				<MouseWidget
-					element="div"
-					extraProps={{
-						className: this.bem('__rotate')
-					}}
-					mouseDownEvent={() => {
-						this.props.engine.getStateMachine().addInput(new ModelRotateInput(this.props.model));
-					}}
-					mouseUpEvent={() => {
-						this.props.engine.getStateMachine().removeInput(ModelRotateInput.NAME);
-					}}
-				/>
-				<SmartAnchorWidget
-					pos={ModelAnchorInputPosition.TOP_LEFT}
-					selectionModel={this.props.model}
-					engine={this.props.engine}
-					className={this.bem('__top-left')}
-				/>
-				<SmartAnchorWidget
-					pos={ModelAnchorInputPosition.TOP}
-					selectionModel={this.props.model}
-					engine={this.props.engine}
-					className={this.bem('__top')}
-				/>
-				<SmartAnchorWidget
-					pos={ModelAnchorInputPosition.TOP_RIGHT}
-					selectionModel={this.props.model}
-					engine={this.props.engine}
-					className={this.bem('__top-right')}
-				/>
-				<SmartAnchorWidget
-					pos={ModelAnchorInputPosition.LEFT}
-					selectionModel={this.props.model}
-					engine={this.props.engine}
-					className={this.bem('__left')}
-				/>
-				<SmartAnchorWidget
-					pos={ModelAnchorInputPosition.RIGHT}
-					selectionModel={this.props.model}
-					engine={this.props.engine}
-					className={this.bem('__right')}
-				/>
-				<SmartAnchorWidget
-					pos={ModelAnchorInputPosition.BOT_LEFT}
-					selectionModel={this.props.model}
-					engine={this.props.engine}
-					className={this.bem('__bot-left')}
-				/>
-				<SmartAnchorWidget
-					pos={ModelAnchorInputPosition.BOT}
-					selectionModel={this.props.model}
-					engine={this.props.engine}
-					className={this.bem('__bot')}
-				/>
-				<SmartAnchorWidget
-					pos={ModelAnchorInputPosition.BOT_RIGHT}
-					selectionModel={this.props.model}
-					engine={this.props.engine}
-					className={this.bem('__bot-right')}
-				/>
-			</div>
-		);
-	}
+  render() {
+    let dimension = this.props.model.getDimensions().toRealDimensions(this.props.engine.getModel());
+    return (
+      <div
+        style={{
+          left: dimension.getTopLeft().x,
+          top: dimension.getTopLeft().y,
+          width: dimension.getWidth(),
+          height: dimension.getHeight()
+        }}
+        {...this.getProps()}>
+        <MouseWidget
+          element="div"
+          extraProps={{
+            className: this.bem('__rotate')
+          }}
+          mouseDownEvent={() => {
+            this.props.engine.getStateMachine().addInput(new ModelRotateInput(this.props.model));
+          }}
+          mouseUpEvent={() => {
+            this.props.engine.getStateMachine().removeInput(ModelRotateInput.NAME);
+          }}
+        />
+        <SmartAnchorWidget
+          pos={ModelAnchorInputPosition.TOP_LEFT}
+          selectionModel={this.props.model}
+          engine={this.props.engine}
+          className={this.bem('__top-left')}
+        />
+        <SmartAnchorWidget
+          pos={ModelAnchorInputPosition.TOP}
+          selectionModel={this.props.model}
+          engine={this.props.engine}
+          className={this.bem('__top')}
+        />
+        <SmartAnchorWidget
+          pos={ModelAnchorInputPosition.TOP_RIGHT}
+          selectionModel={this.props.model}
+          engine={this.props.engine}
+          className={this.bem('__top-right')}
+        />
+        <SmartAnchorWidget
+          pos={ModelAnchorInputPosition.LEFT}
+          selectionModel={this.props.model}
+          engine={this.props.engine}
+          className={this.bem('__left')}
+        />
+        <SmartAnchorWidget
+          pos={ModelAnchorInputPosition.RIGHT}
+          selectionModel={this.props.model}
+          engine={this.props.engine}
+          className={this.bem('__right')}
+        />
+        <SmartAnchorWidget
+          pos={ModelAnchorInputPosition.BOT_LEFT}
+          selectionModel={this.props.model}
+          engine={this.props.engine}
+          className={this.bem('__bot-left')}
+        />
+        <SmartAnchorWidget
+          pos={ModelAnchorInputPosition.BOT}
+          selectionModel={this.props.model}
+          engine={this.props.engine}
+          className={this.bem('__bot')}
+        />
+        <SmartAnchorWidget
+          pos={ModelAnchorInputPosition.BOT_RIGHT}
+          selectionModel={this.props.model}
+          engine={this.props.engine}
+          className={this.bem('__bot-right')}
+        />
+      </div>
+    );
+  }
 }
diff --git a/src/state-machine/AbstractDisplacementState.ts b/src/state-machine/AbstractDisplacementState.ts
index e44bb96..c687254 100644
--- a/src/state-machine/AbstractDisplacementState.ts
+++ b/src/state-machine/AbstractDisplacementState.ts
@@ -6,29 +6,29 @@ import { InlineAction } from '../event-bus/InlineAction';
 import { MouseMoveEvent } from '../event-bus/events/mouse';
 
 export abstract class AbstractDisplacementState extends AbstractState {
-	initialMouse: MouseDownInput;
+  initialMouse: MouseDownInput;
 
-	constructor(name: string, engine: CanvasEngine) {
-		super(name, engine);
-		this.requireInput(MouseDownInput.NAME);
-		this.registerAction(
-			new InlineAction<MouseMoveEvent>(MouseMoveEvent.NAME, event => {
-				if (this.initialMouse) {
-					this.processDisplacement(event.mouseX - this.initialMouse.mouseX, event.mouseY - this.initialMouse.mouseY);
-				}
-			})
-		);
-	}
+  constructor(name: string, engine: CanvasEngine) {
+    super(name, engine);
+    this.requireInput(MouseDownInput.NAME);
+    this.registerAction(
+      new InlineAction<MouseMoveEvent>(MouseMoveEvent.NAME, event => {
+        if (this.initialMouse) {
+          this.processDisplacement(event.mouseX - this.initialMouse.mouseX, event.mouseY - this.initialMouse.mouseY);
+        }
+      })
+    );
+  }
 
-	abstract processDisplacement(displacementX, displacementY);
+  abstract processDisplacement(displacementX, displacementY);
 
-	activated(machine: StateMachine) {
-		super.activated(machine);
-		this.initialMouse = machine.getInput(MouseDownInput.NAME) as MouseDownInput;
-	}
+  activated(machine: StateMachine) {
+    super.activated(machine);
+    this.initialMouse = machine.getInput(MouseDownInput.NAME) as MouseDownInput;
+  }
 
-	deactivated(machine: StateMachine) {
-		super.deactivated(machine);
-		this.initialMouse = null;
-	}
+  deactivated(machine: StateMachine) {
+    super.deactivated(machine);
+    this.initialMouse = null;
+  }
 }
diff --git a/src/state-machine/AbstractState.ts b/src/state-machine/AbstractState.ts
index 43cf819..aca5674 100644
--- a/src/state-machine/AbstractState.ts
+++ b/src/state-machine/AbstractState.ts
@@ -4,48 +4,48 @@ import { CanvasEngine } from '../CanvasEngine';
 import * as _ from 'lodash';
 
 export abstract class AbstractState {
-	engine: CanvasEngine;
-	name: string;
-	requiredInputs: string[];
-	actions: Action[];
-
-	constructor(name: string, engine: CanvasEngine) {
-		this.engine = engine;
-		this.name = name;
-		this.requiredInputs = [];
-		this.actions = [];
-	}
-
-	registerAction(action: Action) {
-		this.actions.push(action);
-	}
-
-	requireInput(input: string) {
-		this.requiredInputs.push(input);
-	}
-
-	getName() {
-		return this.name;
-	}
-
-	shouldStateActivate(machine: StateMachine): boolean {
-		let keys = _.keys(machine.inputs);
-		if (_.intersection(keys, this.requiredInputs).length === this.requiredInputs.length) {
-			return true;
-		}
-
-		return false;
-	}
-
-	activated(machine: StateMachine) {
-		_.forEach(this.actions, action => {
-			this.engine.getEventBus().registerAction(action);
-		});
-	}
-
-	deactivated(machine: StateMachine) {
-		_.forEach(this.actions, action => {
-			this.engine.getEventBus().unRegisterAction(action);
-		});
-	}
+  engine: CanvasEngine;
+  name: string;
+  requiredInputs: string[];
+  actions: Action[];
+
+  constructor(name: string, engine: CanvasEngine) {
+    this.engine = engine;
+    this.name = name;
+    this.requiredInputs = [];
+    this.actions = [];
+  }
+
+  registerAction(action: Action) {
+    this.actions.push(action);
+  }
+
+  requireInput(input: string) {
+    this.requiredInputs.push(input);
+  }
+
+  getName() {
+    return this.name;
+  }
+
+  shouldStateActivate(machine: StateMachine): boolean {
+    let keys = _.keys(machine.inputs);
+    if (_.intersection(keys, this.requiredInputs).length === this.requiredInputs.length) {
+      return true;
+    }
+
+    return false;
+  }
+
+  activated(machine: StateMachine) {
+    _.forEach(this.actions, action => {
+      this.engine.getEventBus().registerAction(action);
+    });
+  }
+
+  deactivated(machine: StateMachine) {
+    _.forEach(this.actions, action => {
+      this.engine.getEventBus().unRegisterAction(action);
+    });
+  }
 }
diff --git a/src/state-machine/AbstractStateMachineInput.ts b/src/state-machine/AbstractStateMachineInput.ts
index ede342b..85b0574 100644
--- a/src/state-machine/AbstractStateMachineInput.ts
+++ b/src/state-machine/AbstractStateMachineInput.ts
@@ -1,7 +1,7 @@
 export class AbstractStateMachineInput {
-	name: string;
+  name: string;
 
-	constructor(name: string) {
-		this.name = name;
-	}
+  constructor(name: string) {
+    this.name = name;
+  }
 }
diff --git a/src/state-machine/StateMachine.ts b/src/state-machine/StateMachine.ts
index 3ce52e2..75ea0d5 100644
--- a/src/state-machine/StateMachine.ts
+++ b/src/state-machine/StateMachine.ts
@@ -4,101 +4,101 @@ import { AbstractStateMachineInput } from './AbstractStateMachineInput';
 import { BaseEvent, BaseListener, BaseObject } from '@projectstorm/react-core';
 
 export interface StateMachineListener extends BaseListener<StateMachine> {
-	stateChanged(event: BaseEvent<StateMachine> & { state: AbstractState });
+  stateChanged(event: BaseEvent<StateMachine> & { state: AbstractState });
 }
 
 export class StateMachine extends BaseObject<StateMachineListener> {
-	inputs: { [name: string]: AbstractStateMachineInput };
-	states: { [name: string]: AbstractState };
-	state: AbstractState;
+  inputs: { [name: string]: AbstractStateMachineInput };
+  states: { [name: string]: AbstractState };
+  state: AbstractState;
 
-	constructor() {
-		super();
-		this.inputs = {};
-		this.states = {};
-		this.state = null;
-	}
+  constructor() {
+    super();
+    this.inputs = {};
+    this.states = {};
+    this.state = null;
+  }
 
-	addState(state: AbstractState) {
-		if (this.states[state.getName()]) {
-			throw 'A state with name: ' + state.getName() + ' is already registered';
-		}
-		this.states[state.getName()] = state;
-	}
+  addState(state: AbstractState) {
+    if (this.states[state.getName()]) {
+      throw 'A state with name: ' + state.getName() + ' is already registered';
+    }
+    this.states[state.getName()] = state;
+  }
 
-	removeInput(type: string, fire: boolean = true) {
-		if (!this.inputs[type]) {
-			return;
-		}
+  removeInput(type: string, fire: boolean = true) {
+    if (!this.inputs[type]) {
+      return;
+    }
 
-		delete this.inputs[type];
-		if (fire) {
-			this.process();
-		}
-	}
+    delete this.inputs[type];
+    if (fire) {
+      this.process();
+    }
+  }
 
-	addInput(input: AbstractStateMachineInput, fire: boolean = true): AbstractStateMachineInput {
-		this.inputs[input.name] = input;
-		if (fire) {
-			this.process();
-		}
-		return input;
-	}
+  addInput(input: AbstractStateMachineInput, fire: boolean = true): AbstractStateMachineInput {
+    this.inputs[input.name] = input;
+    if (fire) {
+      this.process();
+    }
+    return input;
+  }
 
-	getInput(name: string): AbstractStateMachineInput {
-		return _.find(this.inputs, { name: name });
-	}
+  getInput(name: string): AbstractStateMachineInput {
+    return _.find(this.inputs, { name: name });
+  }
 
-	clearState() {
-		if (this.state) {
-			this.state.deactivated(this);
-		} else {
-			return;
-		}
-		this.state = null;
-		this.fireStateChanged();
-	}
+  clearState() {
+    if (this.state) {
+      this.state.deactivated(this);
+    } else {
+      return;
+    }
+    this.state = null;
+    this.fireStateChanged();
+  }
 
-	fireStateChanged() {
-		this.iterateListeners('state changed', (listener, event) => {
-			if (listener.stateChanged) {
-				listener.stateChanged({ ...event, state: this.state });
-			}
-		});
-	}
+  fireStateChanged() {
+    this.iterateListeners('state changed', (listener, event) => {
+      if (listener.stateChanged) {
+        listener.stateChanged({ ...event, state: this.state });
+      }
+    });
+  }
 
-	setState(state: AbstractState) {
-		// deactivate previous state
-		if (this.state && state) {
-			if (this.state.name !== state.name) {
-				this.state.deactivated(this);
-				this.state = state;
-				state.activated(this);
-				this.fireStateChanged();
-			}
-		} else {
-			// there never was a state
-			this.state = state;
-			state.activated(this);
-			this.fireStateChanged();
-		}
-	}
+  setState(state: AbstractState) {
+    // deactivate previous state
+    if (this.state && state) {
+      if (this.state.name !== state.name) {
+        this.state.deactivated(this);
+        this.state = state;
+        state.activated(this);
+        this.fireStateChanged();
+      }
+    } else {
+      // there never was a state
+      this.state = state;
+      state.activated(this);
+      this.fireStateChanged();
+    }
+  }
 
-	process() {
-		// check for possible reactions to current inputs
-		let possibleReactions = _.map(
-			_.filter(this.states, state => {
-				return state.shouldStateActivate(this);
-			}),
-			state => {
-				return state.getName();
-			}
-		);
+  process() {
+    // check for possible reactions to current inputs
+    let possibleReactions = _.map(
+      _.filter(this.states, state => {
+        return state.shouldStateActivate(this);
+      }),
+      state => {
+        return state.getName();
+      }
+    );
 
-		if (possibleReactions.length === 0) {
-			this.clearState();
-		} else if (possibleReactions.length > 0) {
-			this.setState(this.states[possibleReactions[0]]);
-		}
-	}
+    if (possibleReactions.length === 0) {
+      this.clearState();
+    } else if (possibleReactions.length > 0) {
+      this.setState(this.states[possibleReactions[0]]);
+    }
+  }
 }
diff --git a/src/state-machine/input/KeyInput.ts b/src/state-machine/input/KeyInput.ts
index c9b5c46..ccf9b01 100644
--- a/src/state-machine/input/KeyInput.ts
+++ b/src/state-machine/input/KeyInput.ts
@@ -5,36 +5,36 @@ import { KeyDownEvent, KeyUpEvent } from '../../event-bus/events/key';
 import { StateMachine } from '../StateMachine';
 
 export enum KeyCode {
-	SHIFT = 'Shift',
-	CONTROL = 'Control'
+  SHIFT = 'Shift',
+  CONTROL = 'Control'
 }
 
 export class KeyInput extends AbstractStateMachineInput {
-	key: any;
+  key: any;
 
-	static identifier(key: string) {
-		return 'key-' + key;
-	}
+  static identifier(key: string) {
+    return 'key-' + key;
+  }
 
-	constructor(key: string) {
-		super(KeyInput.identifier(key));
-		this.key = key;
-	}
+  constructor(key: string) {
+    super(KeyInput.identifier(key));
+    this.key = key;
+  }
 
-	static installActions(machine: StateMachine, eventBus: EventBus) {
-		eventBus.registerAction(
-			new InlineAction<KeyDownEvent>(KeyDownEvent.NAME, event => {
-				machine.addInput(new KeyInput(event.key));
-			})
-		);
-		eventBus.registerAction(
-			new InlineAction<KeyUpEvent>(KeyUpEvent.NAME, event => {
-				machine.removeInput(KeyInput.identifier(event.key));
-			})
-		);
-	}
+  static installActions(machine: StateMachine, eventBus: EventBus) {
+    eventBus.registerAction(
+      new InlineAction<KeyDownEvent>(KeyDownEvent.NAME, event => {
+        machine.addInput(new KeyInput(event.key));
+      })
+    );
+    eventBus.registerAction(
+      new InlineAction<KeyUpEvent>(KeyUpEvent.NAME, event => {
+        machine.removeInput(KeyInput.identifier(event.key));
+      })
+    );
+  }
 
-	isShift(): boolean {
-		return this.key === KeyCode.SHIFT;
-	}
+  isShift(): boolean {
+    return this.key === KeyCode.SHIFT;
+  }
 }
diff --git a/src/state-machine/input/ModelAnchorInput.ts b/src/state-machine/input/ModelAnchorInput.ts
index 7f88b95..5a2484c 100644
--- a/src/state-machine/input/ModelAnchorInput.ts
+++ b/src/state-machine/input/ModelAnchorInput.ts
@@ -2,25 +2,25 @@ import { SelectionElementModel } from '../../primitives/selection/SelectionEleme
 import { AbstractStateMachineInput } from '../AbstractStateMachineInput';
 
 export enum ModelAnchorInputPosition {
-	TOP,
-	TOP_LEFT,
-	TOP_RIGHT,
-	LEFT,
-	RIGHT,
-	BOT,
-	BOT_LEFT,
-	BOT_RIGHT
+  TOP,
+  TOP_LEFT,
+  TOP_RIGHT,
+  LEFT,
+  RIGHT,
+  BOT,
+  BOT_LEFT,
+  BOT_RIGHT
 }
 
 export class ModelAnchorInput extends AbstractStateMachineInput {
-	selectionModel: SelectionElementModel;
-	anchor: ModelAnchorInputPosition;
+  selectionModel: SelectionElementModel;
+  anchor: ModelAnchorInputPosition;
 
-	static NAME = 'model-anchor';
+  static NAME = 'model-anchor';
 
-	constructor(model: SelectionElementModel, anchor: ModelAnchorInputPosition) {
-		super(ModelAnchorInput.NAME);
-		this.selectionModel = model;
-		this.anchor = anchor;
-	}
+  constructor(model: SelectionElementModel, anchor: ModelAnchorInputPosition) {
+    super(ModelAnchorInput.NAME);
+    this.selectionModel = model;
+    this.anchor = anchor;
+  }
 }
diff --git a/src/state-machine/input/ModelElementInput.ts b/src/state-machine/input/ModelElementInput.ts
index 8ec20ec..7f903ef 100644
--- a/src/state-machine/input/ModelElementInput.ts
+++ b/src/state-machine/input/ModelElementInput.ts
@@ -6,25 +6,25 @@ import { StateMachine } from '../StateMachine';
 import { PressElementEvent, UnPressElementEvent } from '../../event-bus/events/elements';
 
 export class ModelElementInput extends AbstractStateMachineInput {
-	element: CanvasElementModel;
+  element: CanvasElementModel;
 
-	static NAME = 'model-element';
+  static NAME = 'model-element';
 
-	constructor(element: CanvasElementModel) {
-		super(ModelElementInput.NAME);
-		this.element = element;
-	}
+  constructor(element: CanvasElementModel) {
+    super(ModelElementInput.NAME);
+    this.element = element;
+  }
 
-	static installActions(machine: StateMachine, eventBus: EventBus) {
-		eventBus.registerAction(
-			new InlineAction<PressElementEvent>(PressElementEvent.NAME, event => {
-				machine.addInput(new ModelElementInput(event.element));
-			})
-		);
-		eventBus.registerAction(
-			new InlineAction<UnPressElementEvent>(UnPressElementEvent.NAME, event => {
-				machine.removeInput(ModelElementInput.NAME);
-			})
-		);
-	}
+  static installActions(machine: StateMachine, eventBus: EventBus) {
+    eventBus.registerAction(
+      new InlineAction<PressElementEvent>(PressElementEvent.NAME, event => {
+        machine.addInput(new ModelElementInput(event.element));
+      })
+    );
+    eventBus.registerAction(
+      new InlineAction<UnPressElementEvent>(UnPressElementEvent.NAME, event => {
+        machine.removeInput(ModelElementInput.NAME);
+      })
+    );
+  }
 }
diff --git a/src/state-machine/input/ModelRotateInput.ts b/src/state-machine/input/ModelRotateInput.ts
index a8cab9a..6723b92 100644
--- a/src/state-machine/input/ModelRotateInput.ts
+++ b/src/state-machine/input/ModelRotateInput.ts
@@ -2,12 +2,12 @@ import { SelectionElementModel } from '../../primitives/selection/SelectionEleme
 import { AbstractStateMachineInput } from '../AbstractStateMachineInput';
 
 export class ModelRotateInput extends AbstractStateMachineInput {
-	selectionModel: SelectionElementModel;
+  selectionModel: SelectionElementModel;
 
-	static NAME = 'model-rotate';
+  static NAME = 'model-rotate';
 
-	constructor(model: SelectionElementModel) {
-		super(ModelRotateInput.NAME);
-		this.selectionModel = model;
-	}
+  constructor(model: SelectionElementModel) {
+    super(ModelRotateInput.NAME);
+    this.selectionModel = model;
+  }
 }
diff --git a/src/state-machine/input/MouseDownInput.ts b/src/state-machine/input/MouseDownInput.ts
index 28109e8..4c26b48 100644
--- a/src/state-machine/input/MouseDownInput.ts
+++ b/src/state-machine/input/MouseDownInput.ts
@@ -5,29 +5,29 @@ import { StateMachine } from '../StateMachine';
 import { MouseDownEvent, MouseUpEvent } from '../../event-bus/events/mouse';
 
 export class MouseDownInput extends AbstractStateMachineInput {
-	mouseX: number;
-	mouseY: number;
-	originalEvent: MouseDownEvent;
+  mouseX: number;
+  mouseY: number;
+  originalEvent: MouseDownEvent;
 
-	static NAME = 'mouse-down';
+  static NAME = 'mouse-down';
 
-	constructor(event: MouseDownEvent) {
-		super(MouseDownInput.NAME);
-		this.mouseX = event.mouseX;
-		this.mouseY = event.mouseY;
-		this.originalEvent = event;
-	}
+  constructor(event: MouseDownEvent) {
+    super(MouseDownInput.NAME);
+    this.mouseX = event.mouseX;
+    this.mouseY = event.mouseY;
+    this.originalEvent = event;
+  }
 
-	static installActions(machine: StateMachine, eventBus: EventBus) {
-		eventBus.registerAction(
-			new InlineAction<MouseDownEvent>(MouseDownEvent.NAME, event => {
-				machine.addInput(new MouseDownInput(event));
-			})
-		);
-		eventBus.registerAction(
-			new InlineAction<MouseUpEvent>(MouseUpEvent.NAME, event => {
-				machine.removeInput(MouseDownInput.NAME);
-			})
-		);
-	}
+  static installActions(machine: StateMachine, eventBus: EventBus) {
+    eventBus.registerAction(
+      new InlineAction<MouseDownEvent>(MouseDownEvent.NAME, event => {
+        machine.addInput(new MouseDownInput(event));
+      })
+    );
+    eventBus.registerAction(
+      new InlineAction<MouseUpEvent>(MouseUpEvent.NAME, event => {
+        machine.removeInput(MouseDownInput.NAME);
+      })
+    );
+  }
 }
diff --git a/src/state-machine/states/DefaultState.ts b/src/state-machine/states/DefaultState.ts
index 431b83f..7b5e6f9 100644
--- a/src/state-machine/states/DefaultState.ts
+++ b/src/state-machine/states/DefaultState.ts
@@ -3,8 +3,8 @@ import { CanvasEngine } from '../../CanvasEngine';
 import { SelectElementAction } from '../../event-bus/actions/SelectElementAction';
 
 export class DefaultState extends AbstractState {
-	constructor(engine: CanvasEngine) {
-		super('default-state', engine);
-		this.registerAction(new SelectElementAction(engine, false));
-	}
+  constructor(engine: CanvasEngine) {
+    super('default-state', engine);
+    this.registerAction(new SelectElementAction(engine, false));
+  }
 }
diff --git a/src/state-machine/states/ResizeDimensionsState.ts b/src/state-machine/states/ResizeDimensionsState.ts
index 7d8513a..3e90046 100644
--- a/src/state-machine/states/ResizeDimensionsState.ts
+++ b/src/state-machine/states/ResizeDimensionsState.ts
@@ -8,67 +8,67 @@ import { Matrix } from 'mathjs';
 import { ModelAnchorInput, ModelAnchorInputPosition } from '../input/ModelAnchorInput';
 
 export class ResizeDimensionsState extends AbstractDisplacementState {
-	anchorInput: ModelAnchorInput;
-	initialDimensions: Rectangle[];
-	initialDimension: Rectangle;
+  anchorInput: ModelAnchorInput;
+  initialDimensions: Rectangle[];
+  initialDimension: Rectangle;
 
-	constructor(engine: CanvasEngine) {
-		super('resize-dimension', engine);
-		this.requireInput(ModelAnchorInput.NAME);
-		this.engine = engine;
-	}
+  constructor(engine: CanvasEngine) {
+    super('resize-dimension', engine);
+    this.requireInput(ModelAnchorInput.NAME);
+    this.engine = engine;
+  }
 
-	activated(machine: StateMachine) {
-		super.activated(machine);
-		// get the input handles
-		this.anchorInput = machine.getInput(ModelAnchorInput.NAME) as ModelAnchorInput;
+  activated(machine: StateMachine) {
+    super.activated(machine);
+    // get the input handles
+    this.anchorInput = machine.getInput(ModelAnchorInput.NAME) as ModelAnchorInput;
 
-		// store the initial dimensions
-		this.initialDimension = this.anchorInput.selectionModel.getDimensions().clone();
-		this.initialDimensions = _.map(this.anchorInput.selectionModel.getModels(), model => {
-			return model.getDimensions();
-		});
-	}
+    // store the initial dimensions
+    this.initialDimension = this.anchorInput.selectionModel.getDimensions().clone();
+    this.initialDimensions = _.map(this.anchorInput.selectionModel.getModels(), model => {
+      return model.getDimensions();
+    });
+  }
 
-	processDisplacement(displacementX, displacementY) {
-		const zoom = this.engine.getModel().getZoomLevel();
+  processDisplacement(displacementX, displacementY) {
+    const zoom = this.engine.getModel().getZoomLevel();
 
-		// work out the distance difference
-		const distanceX = displacementX / zoom;
-		const distanceY = displacementY / zoom;
+    // work out the distance difference
+    const distanceX = displacementX / zoom;
+    const distanceY = displacementY / zoom;
 
-		// work out the scaling factors for both positive and negative cases
-		const scaleX = (this.initialDimension.getWidth() + distanceX) / this.initialDimension.getWidth();
-		const scaleY = (this.initialDimension.getHeight() + distanceY) / this.initialDimension.getHeight();
-		const scaleX2 = (this.initialDimension.getWidth() - distanceX) / this.initialDimension.getWidth();
-		const scaleY2 = (this.initialDimension.getHeight() - distanceY) / this.initialDimension.getHeight();
+    // work out the scaling factors for both positive and negative cases
+    const scaleX = (this.initialDimension.getWidth() + distanceX) / this.initialDimension.getWidth();
+    const scaleY = (this.initialDimension.getHeight() + distanceY) / this.initialDimension.getHeight();
+    const scaleX2 = (this.initialDimension.getWidth() - distanceX) / this.initialDimension.getWidth();
+    const scaleY2 = (this.initialDimension.getHeight() - distanceY) / this.initialDimension.getHeight();
 
-		// construct the correct transform matrix
-		let transform: Matrix = null;
-		if (this.anchorInput.anchor === ModelAnchorInputPosition.TOP_LEFT) {
-			transform = Point.createScaleMatrix(scaleX2, scaleY2, this.initialDimension.getBottomRight());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.TOP) {
-			transform = Point.createScaleMatrix(1, scaleY2, this.initialDimension.getBottomMiddle());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.TOP_RIGHT) {
-			transform = Point.createScaleMatrix(scaleX, scaleY2, this.initialDimension.getBottomLeft());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.RIGHT) {
-			transform = Point.createScaleMatrix(scaleX, 1, this.initialDimension.getLeftMiddle());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.BOT_RIGHT) {
-			transform = Point.createScaleMatrix(scaleX, scaleY, this.initialDimension.getTopLeft());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.BOT) {
-			transform = Point.createScaleMatrix(1, scaleY, this.initialDimension.getTopMiddle());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.BOT_LEFT) {
-			transform = Point.createScaleMatrix(scaleX2, scaleY, this.initialDimension.getTopRight());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.LEFT) {
-			transform = Point.createScaleMatrix(scaleX2, 1, this.initialDimension.getRightMiddle());
-		}
+    // construct the correct transform matrix
+    let transform: Matrix = null;
+    if (this.anchorInput.anchor === ModelAnchorInputPosition.TOP_LEFT) {
+      transform = Point.createScaleMatrix(scaleX2, scaleY2, this.initialDimension.getBottomRight());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.TOP) {
+      transform = Point.createScaleMatrix(1, scaleY2, this.initialDimension.getBottomMiddle());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.TOP_RIGHT) {
+      transform = Point.createScaleMatrix(scaleX, scaleY2, this.initialDimension.getBottomLeft());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.RIGHT) {
+      transform = Point.createScaleMatrix(scaleX, 1, this.initialDimension.getLeftMiddle());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.BOT_RIGHT) {
+      transform = Point.createScaleMatrix(scaleX, scaleY, this.initialDimension.getTopLeft());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.BOT) {
+      transform = Point.createScaleMatrix(1, scaleY, this.initialDimension.getTopMiddle());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.BOT_LEFT) {
+      transform = Point.createScaleMatrix(scaleX2, scaleY, this.initialDimension.getTopRight());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.LEFT) {
+      transform = Point.createScaleMatrix(scaleX2, 1, this.initialDimension.getRightMiddle());
+    }
 
-		_.forEach(this.anchorInput.selectionModel.getModels(), (model, index) => {
-			let dimensions = this.initialDimensions[index].clone();
-			dimensions.transform(transform);
-			model.setDimensions(dimensions);
-		});
+    _.forEach(this.anchorInput.selectionModel.getModels(), (model, index) => {
+      let dimensions = this.initialDimensions[index].clone();
+      dimensions.transform(transform);
+      model.setDimensions(dimensions);
+    });
 
-		this.engine.repaint();
-	}
+    this.engine.repaint();
+  }
 }
diff --git a/src/state-machine/states/ResizeOriginDimensionState.ts b/src/state-machine/states/ResizeOriginDimensionState.ts
index bfa0cce..ec784fd 100644
--- a/src/state-machine/states/ResizeOriginDimensionState.ts
+++ b/src/state-machine/states/ResizeOriginDimensionState.ts
@@ -9,68 +9,68 @@ import { ModelAnchorInput, ModelAnchorInputPosition } from '../input/ModelAnchor
 import { KeyCode, KeyInput } from '../input/KeyInput';
 
 export class ResizeOriginDimensionsState extends AbstractDisplacementState {
-	anchorInput: ModelAnchorInput;
-	initialDimensions: Rectangle[];
-	initialDimension: Rectangle;
+  anchorInput: ModelAnchorInput;
+  initialDimensions: Rectangle[];
+  initialDimension: Rectangle;
 
-	constructor(engine: CanvasEngine) {
-		super('resize-origin-dimension', engine);
-		this.requireInput(ModelAnchorInput.NAME);
-		this.requireInput(KeyInput.identifier(KeyCode.SHIFT));
-		this.engine = engine;
-	}
+  constructor(engine: CanvasEngine) {
+    super('resize-origin-dimension', engine);
+    this.requireInput(ModelAnchorInput.NAME);
+    this.requireInput(KeyInput.identifier(KeyCode.SHIFT));
+    this.engine = engine;
+  }
 
-	activated(machine: StateMachine) {
-		super.activated(machine);
-		// get the input handles
-		this.anchorInput = machine.getInput(ModelAnchorInput.NAME) as ModelAnchorInput;
+  activated(machine: StateMachine) {
+    super.activated(machine);
+    // get the input handles
+    this.anchorInput = machine.getInput(ModelAnchorInput.NAME) as ModelAnchorInput;
 
-		// store the initial dimensions
-		this.initialDimension = this.anchorInput.selectionModel.getDimensions().clone();
-		this.initialDimensions = _.map(this.anchorInput.selectionModel.getModels(), model => {
-			return model.getDimensions();
-		});
-	}
+    // store the initial dimensions
+    this.initialDimension = this.anchorInput.selectionModel.getDimensions().clone();
+    this.initialDimensions = _.map(this.anchorInput.selectionModel.getModels(), model => {
+      return model.getDimensions();
+    });
+  }
 
-	processDisplacement(displacementX, displacementY) {
-		const zoom = this.engine.getModel().getZoomLevel();
+  processDisplacement(displacementX, displacementY) {
+    const zoom = this.engine.getModel().getZoomLevel();
 
-		// work out the distance difference
-		const distanceX = displacementX / zoom;
-		const distanceY = displacementY / zoom;
+    // work out the distance difference
+    const distanceX = displacementX / zoom;
+    const distanceY = displacementY / zoom;
 
-		// work out the scaling factors for both positive and negative cases
-		const scaleX = ((this.initialDimension.getWidth() + distanceX) * 2) / this.initialDimension.getWidth();
-		const scaleY = ((this.initialDimension.getHeight() + distanceY) * 2) / this.initialDimension.getHeight();
-		const scaleX2 = ((this.initialDimension.getWidth() - distanceX) * 2) / this.initialDimension.getWidth();
-		const scaleY2 = ((this.initialDimension.getHeight() - distanceY) * 2) / this.initialDimension.getHeight();
+    // work out the scaling factors for both positive and negative cases
+    const scaleX = ((this.initialDimension.getWidth() + distanceX) * 2) / this.initialDimension.getWidth();
+    const scaleY = ((this.initialDimension.getHeight() + distanceY) * 2) / this.initialDimension.getHeight();
+    const scaleX2 = ((this.initialDimension.getWidth() - distanceX) * 2) / this.initialDimension.getWidth();
+    const scaleY2 = ((this.initialDimension.getHeight() - distanceY) * 2) / this.initialDimension.getHeight();
 
-		// construct the correct transform matrix
-		let transform: Matrix = null;
-		if (this.anchorInput.anchor === ModelAnchorInputPosition.TOP_LEFT) {
-			transform = Point.createScaleMatrix(scaleX2, scaleY2, this.initialDimension.getOrigin());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.TOP) {
-			transform = Point.createScaleMatrix(1, scaleY2, this.initialDimension.getOrigin());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.TOP_RIGHT) {
-			transform = Point.createScaleMatrix(scaleX, scaleY2, this.initialDimension.getOrigin());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.RIGHT) {
-			transform = Point.createScaleMatrix(scaleX, 1, this.initialDimension.getOrigin());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.BOT_RIGHT) {
-			transform = Point.createScaleMatrix(scaleX, scaleY, this.initialDimension.getOrigin());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.BOT) {
-			transform = Point.createScaleMatrix(1, scaleY, this.initialDimension.getOrigin());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.BOT_LEFT) {
-			transform = Point.createScaleMatrix(scaleX2, scaleY, this.initialDimension.getOrigin());
-		} else if (this.anchorInput.anchor === ModelAnchorInputPosition.LEFT) {
-			transform = Point.createScaleMatrix(scaleX2, 1, this.initialDimension.getOrigin());
-		}
+    // construct the correct transform matrix
+    let transform: Matrix = null;
+    if (this.anchorInput.anchor === ModelAnchorInputPosition.TOP_LEFT) {
+      transform = Point.createScaleMatrix(scaleX2, scaleY2, this.initialDimension.getOrigin());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.TOP) {
+      transform = Point.createScaleMatrix(1, scaleY2, this.initialDimension.getOrigin());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.TOP_RIGHT) {
+      transform = Point.createScaleMatrix(scaleX, scaleY2, this.initialDimension.getOrigin());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.RIGHT) {
+      transform = Point.createScaleMatrix(scaleX, 1, this.initialDimension.getOrigin());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.BOT_RIGHT) {
+      transform = Point.createScaleMatrix(scaleX, scaleY, this.initialDimension.getOrigin());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.BOT) {
+      transform = Point.createScaleMatrix(1, scaleY, this.initialDimension.getOrigin());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.BOT_LEFT) {
+      transform = Point.createScaleMatrix(scaleX2, scaleY, this.initialDimension.getOrigin());
+    } else if (this.anchorInput.anchor === ModelAnchorInputPosition.LEFT) {
+      transform = Point.createScaleMatrix(scaleX2, 1, this.initialDimension.getOrigin());
+    }
 
-		_.forEach(this.anchorInput.selectionModel.getModels(), (model, index) => {
-			let dimensions = this.initialDimensions[index].clone();
-			dimensions.transform(transform);
-			model.setDimensions(dimensions);
-		});
+    _.forEach(this.anchorInput.selectionModel.getModels(), (model, index) => {
+      let dimensions = this.initialDimensions[index].clone();
+      dimensions.transform(transform);
+      model.setDimensions(dimensions);
+    });
 
-		this.engine.repaint();
-	}
+    this.engine.repaint();
+  }
 }
diff --git a/src/state-machine/states/RotateElementsState.ts b/src/state-machine/states/RotateElementsState.ts
index 6a94183..10e2ee4 100644
--- a/src/state-machine/states/RotateElementsState.ts
+++ b/src/state-machine/states/RotateElementsState.ts
@@ -10,61 +10,61 @@ import * as _ from 'lodash';
 import { Rectangle } from '../../geometry/Rectangle';
 
 export class RotateElementsState extends AbstractState {
-	initialMouse: MouseDownInput;
-	modelRotateInput: ModelRotateInput;
-	initialOrigin: Point;
-	initialDimensions: Rectangle[];
+  initialMouse: MouseDownInput;
+  modelRotateInput: ModelRotateInput;
+  initialOrigin: Point;
+  initialDimensions: Rectangle[];
 
-	constructor(engine: CanvasEngine) {
-		super('rotate-elements', engine);
-		this.requireInput(ModelRotateInput.NAME);
-		this.requireInput(MouseDownInput.NAME);
-		this.registerAction(
-			new InlineAction<MouseMoveEvent>(MouseMoveEvent.NAME, event => {
-				if (this.initialMouse) {
-					let degrees =
-						Math.atan2(
-							event.getCanvasCoordinates(this.engine).x -
-								this.initialMouse.originalEvent.getCanvasCoordinates(this.engine).x,
-							this.initialOrigin.y - event.getCanvasCoordinates(this.engine).y
-						) *
-						(180 / Math.PI);
+  constructor(engine: CanvasEngine) {
+    super('rotate-elements', engine);
+    this.requireInput(ModelRotateInput.NAME);
+    this.requireInput(MouseDownInput.NAME);
+    this.registerAction(
+      new InlineAction<MouseMoveEvent>(MouseMoveEvent.NAME, event => {
+        if (this.initialMouse) {
+          let degrees =
+            Math.atan2(
+              event.getCanvasCoordinates(this.engine).x -
+                this.initialMouse.originalEvent.getCanvasCoordinates(this.engine).x,
+              this.initialOrigin.y - event.getCanvasCoordinates(this.engine).y
+            ) *
+            (180 / Math.PI);
 
-					if (degrees < 0) {
-						degrees = 360.0 + degrees;
-					}
+          if (degrees < 0) {
+            degrees = 360.0 + degrees;
+          }
 
-					let transform = Point.createRotateMatrix(degrees / (180 / Math.PI), this.initialOrigin);
+          let transform = Point.createRotateMatrix(degrees / (180 / Math.PI), this.initialOrigin);
 
-					_.forEach(this.modelRotateInput.selectionModel.getModels(), (model, index) => {
-						let dimensions = this.initialDimensions[index].clone();
-						dimensions.transform(transform);
-						model.setDimensions(dimensions);
-					});
+          _.forEach(this.modelRotateInput.selectionModel.getModels(), (model, index) => {
+            let dimensions = this.initialDimensions[index].clone();
+            dimensions.transform(transform);
+            model.setDimensions(dimensions);
+          });
 
-					this.engine.repaint();
-				}
-			})
-		);
-	}
+          this.engine.repaint();
+        }
+      })
+    );
+  }
 
-	activated(machine: StateMachine) {
-		super.activated(machine);
+  activated(machine: StateMachine) {
+    super.activated(machine);
 
-		this.initialMouse = machine.getInput(MouseDownInput.NAME) as MouseDownInput;
-		this.modelRotateInput = machine.getInput(ModelRotateInput.NAME) as ModelRotateInput;
-		this.initialOrigin = this.modelRotateInput.selectionModel
-			.getDimensions()
-			.getOrigin()
-			.clone();
-		this.initialDimensions = _.map(this.modelRotateInput.selectionModel.getModels(), model => {
-			return model.getDimensions();
-		});
-	}
+    this.initialMouse = machine.getInput(MouseDownInput.NAME) as MouseDownInput;
+    this.modelRotateInput = machine.getInput(ModelRotateInput.NAME) as ModelRotateInput;
+    this.initialOrigin = this.modelRotateInput.selectionModel
+      .getDimensions()
+      .getOrigin()
+      .clone();
+    this.initialDimensions = _.map(this.modelRotateInput.selectionModel.getModels(), model => {
+      return model.getDimensions();
+    });
+  }
 
-	deactivated(machine: StateMachine) {
-		super.deactivated(machine);
-		this.initialMouse = null;
-		this.modelRotateInput = null;
-	}
+  deactivated(machine: StateMachine) {
+    super.deactivated(machine);
+    this.initialMouse = null;
+    this.modelRotateInput = null;
+  }
 }
diff --git a/src/state-machine/states/SelectElementsState.ts b/src/state-machine/states/SelectElementsState.ts
index 638e4c0..1fae8a0 100644
--- a/src/state-machine/states/SelectElementsState.ts
+++ b/src/state-machine/states/SelectElementsState.ts
@@ -4,9 +4,9 @@ import { KeyCode, KeyInput } from '../input/KeyInput';
 import { SelectElementAction } from '../../event-bus/actions/SelectElementAction';
 
 export class SelectElementsState extends AbstractState {
-	constructor(engine: CanvasEngine) {
-		super('select-elements', engine);
-		this.requireInput(KeyInput.identifier(KeyCode.SHIFT));
-		this.registerAction(new SelectElementAction(engine, true));
-	}
+  constructor(engine: CanvasEngine) {
+    super('select-elements', engine);
+    this.requireInput(KeyInput.identifier(KeyCode.SHIFT));
+    this.registerAction(new SelectElementAction(engine, true));
+  }
 }
diff --git a/src/state-machine/states/TranslateCanvasState.ts b/src/state-machine/states/TranslateCanvasState.ts
index 1decd2f..9a1d9a7 100644
--- a/src/state-machine/states/TranslateCanvasState.ts
+++ b/src/state-machine/states/TranslateCanvasState.ts
@@ -4,22 +4,22 @@ import { AbstractDisplacementState } from '../AbstractDisplacementState';
 import { SelectCanvasAction } from '../../event-bus/actions/SelectCanvasAction';
 
 export class TranslateCanvasState extends AbstractDisplacementState {
-	initialOffsetX: number;
-	initialOffsetY: number;
+  initialOffsetX: number;
+  initialOffsetY: number;
 
-	constructor(engine: CanvasEngine) {
-		super('translate-canvas', engine);
-		this.registerAction(new SelectCanvasAction(engine));
-	}
+  constructor(engine: CanvasEngine) {
+    super('translate-canvas', engine);
+    this.registerAction(new SelectCanvasAction(engine));
+  }
 
-	activated(machine: StateMachine) {
-		super.activated(machine);
-		this.initialOffsetX = this.engine.getModel().getOffsetX();
-		this.initialOffsetY = this.engine.getModel().getOffsetY();
-	}
+  activated(machine: StateMachine) {
+    super.activated(machine);
+    this.initialOffsetX = this.engine.getModel().getOffsetX();
+    this.initialOffsetY = this.engine.getModel().getOffsetY();
+  }
 
-	processDisplacement(displacementX, displacementY) {
-		this.engine.getModel().setOffset(this.initialOffsetX + displacementX, this.initialOffsetY + displacementY);
-		this.engine.repaint();
-	}
+  processDisplacement(displacementX, displacementY) {
+    this.engine.getModel().setOffset(this.initialOffsetX + displacementX, this.initialOffsetY + displacementY);
+    this.engine.repaint();
+  }
 }
diff --git a/src/state-machine/states/TranslateElementState.ts b/src/state-machine/states/TranslateElementState.ts
index 8db4da0..c04c4c4 100644
--- a/src/state-machine/states/TranslateElementState.ts
+++ b/src/state-machine/states/TranslateElementState.ts
@@ -7,37 +7,37 @@ import { ModelElementInput } from '../input/ModelElementInput';
 import { CanvasElementModel } from '../../models-canvas/CanvasElementModel';
 
 export class TranslateElementState extends AbstractDisplacementState {
-	initialPosition: { [id: string]: Rectangle };
-	initialEntities: { [id: string]: CanvasElementModel };
+  initialPosition: { [id: string]: Rectangle };
+  initialEntities: { [id: string]: CanvasElementModel };
 
-	constructor(engine: CanvasEngine) {
-		super('translate-element', engine);
-		this.requireInput(ModelElementInput.NAME);
-	}
+  constructor(engine: CanvasEngine) {
+    super('translate-element', engine);
+    this.requireInput(ModelElementInput.NAME);
+  }
 
-	activated(machine: StateMachine) {
-		super.activated(machine);
-		this.initialPosition = {};
-		this.initialEntities = {};
-		let selected = this.engine.getModel().getSelectedEntities();
-		_.forEach(selected, selected => {
-			this.initialEntities[selected.getID()] = selected;
-			this.initialPosition[selected.getID()] = selected.getDimensions().clone();
-		});
-	}
+  activated(machine: StateMachine) {
+    super.activated(machine);
+    this.initialPosition = {};
+    this.initialEntities = {};
+    let selected = this.engine.getModel().getSelectedEntities();
+    _.forEach(selected, selected => {
+      this.initialEntities[selected.getID()] = selected;
+      this.initialPosition[selected.getID()] = selected.getDimensions().clone();
+    });
+  }
 
-	processDisplacement(displacementX, displacementY) {
-		const zoom = this.engine.getModel().getZoomLevel();
+  processDisplacement(displacementX, displacementY) {
+    const zoom = this.engine.getModel().getZoomLevel();
 
-		// work out the distance difference
-		const distanceX = displacementX / zoom;
-		const distanceY = displacementY / zoom;
+    // work out the distance difference
+    const distanceX = displacementX / zoom;
+    const distanceY = displacementY / zoom;
 
-		_.forEach(this.initialPosition, (initialPosition, index) => {
-			const dim = initialPosition.clone();
-			dim.translate(distanceX, distanceY);
-			this.initialEntities[index].setDimensions(dim);
-		});
-		this.engine.repaint();
-	}
+    _.forEach(this.initialPosition, (initialPosition, index) => {
+      const dim = initialPosition.clone();
+      dim.translate(distanceX, distanceY);
+      this.initialEntities[index].setDimensions(dim);
+    });
+    this.engine.repaint();
+  }
 }
diff --git a/src/tracking/DimensionTracker.ts b/src/tracking/DimensionTracker.ts
index d58bd06..b22bfae 100644
--- a/src/tracking/DimensionTracker.ts
+++ b/src/tracking/DimensionTracker.ts
@@ -3,36 +3,36 @@ import { Rectangle } from '../geometry/Rectangle';
 import { BaseEvent, BaseListener, BaseObject } from '@projectstorm/react-core';
 
 export interface DimensionTrackerListener extends BaseListener<DimensionTracker> {
-	updated(event: BaseEvent);
+  updated(event: BaseEvent);
 }
 
 export class DimensionTracker extends BaseObject<DimensionTrackerListener> {
-	realDimensions: Rectangle;
-	enableTracking: boolean;
+  realDimensions: Rectangle;
+  enableTracking: boolean;
 
-	constructor() {
-		super();
-		this.enableTracking = true;
-		this.realDimensions = new Rectangle();
-	}
+  constructor() {
+    super();
+    this.enableTracking = true;
+    this.realDimensions = new Rectangle();
+  }
 
-	recompute(canvasEngine: CanvasEngine, clientRect: ClientRect) {
-		this.realDimensions.updateDimensions(clientRect.left, clientRect.top, clientRect.width, clientRect.height);
-	}
+  recompute(canvasEngine: CanvasEngine, clientRect: ClientRect) {
+    this.realDimensions.updateDimensions(clientRect.left, clientRect.top, clientRect.width, clientRect.height);
+  }
 
-	updateDimensions(canvasEngine: CanvasEngine, ClientRect: ClientRect) {
-		if (!this.enableTracking) {
-			return false;
-		}
+  updateDimensions(canvasEngine: CanvasEngine, ClientRect: ClientRect) {
+    if (!this.enableTracking) {
+      return false;
+    }
 
-		// store the real dimensions
-		this.recompute(canvasEngine, ClientRect);
+    // store the real dimensions
+    this.recompute(canvasEngine, ClientRect);
 
-		// fire the update event
-		this.iterateListeners('dimensions updated', (listener, event) => {
-			if (listener.updated) {
-				listener.updated(event);
-			}
-		});
-	}
+    // fire the update event
+    this.iterateListeners('dimensions updated', (listener, event) => {
+      if (listener.updated) {
+        listener.updated(event);
+      }
+    });
+  }
 }
diff --git a/src/tracking/DimensionTrackerWidget.tsx b/src/tracking/DimensionTrackerWidget.tsx
index 23006da..54b13a8 100644
--- a/src/tracking/DimensionTrackerWidget.tsx
+++ b/src/tracking/DimensionTrackerWidget.tsx
@@ -4,48 +4,48 @@ import { DimensionTracker } from './DimensionTracker';
 import { CanvasEngine } from '../CanvasEngine';
 
 export interface DimensionTrackerWidgetProps extends BaseWidgetProps {
-	dimensionTracker: DimensionTracker;
-	engine: CanvasEngine;
-	reference: { current: HTMLElement };
+  dimensionTracker: DimensionTracker;
+  engine: CanvasEngine;
+  reference: { current: HTMLElement };
 }
 
 export interface DimensionTrackerWidgetState {}
 
 export class DimensionTrackerWidget extends BaseWidget<DimensionTrackerWidgetProps, DimensionTrackerWidgetState> {
-	observer: any;
-
-	constructor(props: DimensionTrackerWidgetProps) {
-		super('src-dimension-tracker', props);
-		this.state = {};
-	}
-
-	updateDimensions() {
-		if (this.props.reference.current) {
-			this.props.dimensionTracker.updateDimensions(
-				this.props.engine,
-				this.props.reference.current.getBoundingClientRect()
-			);
-		}
-	}
-
-	componentDidMount() {
-		//if resize observer is present, rather use that
-		if (window['ResizeObserver']) {
-			this.observer = new window['ResizeObserver'](entries => {
-				this.updateDimensions();
-			});
-			this.observer.observe(this.props.reference.current);
-		}
-		this.updateDimensions();
-	}
-
-	componentDidUpdate() {
-		if (!this.observer) {
-			this.updateDimensions();
-		}
-	}
-
-	render() {
-		return this.props.children;
-	}
+  observer: any;
+
+  constructor(props: DimensionTrackerWidgetProps) {
+    super('src-dimension-tracker', props);
+    this.state = {};
+  }
+
+  updateDimensions() {
+    if (this.props.reference.current) {
+      this.props.dimensionTracker.updateDimensions(
+        this.props.engine,
+        this.props.reference.current.getBoundingClientRect()
+      );
+    }
+  }
+
+  componentDidMount() {
+    //if resize observer is present, rather use that
+    if (window['ResizeObserver']) {
+      this.observer = new window['ResizeObserver'](entries => {
+        this.updateDimensions();
+      });
+      this.observer.observe(this.props.reference.current);
+    }
+    this.updateDimensions();
+  }
+
+  componentDidUpdate() {
+    if (!this.observer) {
+      this.updateDimensions();
+    }
+  }
+
+  render() {
+    return this.props.children;
+  }
 }
diff --git a/src/tracking/VirtualDimensionTracker.ts b/src/tracking/VirtualDimensionTracker.ts
index aabac66..647c115 100644
--- a/src/tracking/VirtualDimensionTracker.ts
+++ b/src/tracking/VirtualDimensionTracker.ts
@@ -3,25 +3,25 @@ import { CanvasEngine } from '../CanvasEngine';
 import { Rectangle } from '../geometry/Rectangle';
 
 export class VirtualDimensionTracker extends DimensionTracker {
-	virtualDimensions: Rectangle;
+  virtualDimensions: Rectangle;
 
-	constructor() {
-		super();
-		this.virtualDimensions = new Rectangle();
-	}
+  constructor() {
+    super();
+    this.virtualDimensions = new Rectangle();
+  }
 
-	recompute(engine: CanvasEngine, clientRect: ClientRect) {
-		super.recompute(engine, clientRect);
+  recompute(engine: CanvasEngine, clientRect: ClientRect) {
+    super.recompute(engine, clientRect);
 
-		let model = engine.getModel();
-		let canDimensions = engine.getCanvasWidget().dimension.realDimensions;
-		// store the virtual dimensions
-		let zoomLevel = model.getZoomLevel();
-		this.virtualDimensions.updateDimensions(
-			(clientRect.left - canDimensions.getTopLeft().x - model.getOffsetX()) / zoomLevel,
-			(clientRect.top - canDimensions.getTopLeft().y - model.getOffsetY()) / zoomLevel,
-			clientRect.width / zoomLevel,
-			clientRect.height / zoomLevel
-		);
-	}
+    let model = engine.getModel();
+    let canDimensions = engine.getCanvasWidget().dimension.realDimensions;
+    // store the virtual dimensions
+    let zoomLevel = model.getZoomLevel();
+    this.virtualDimensions.updateDimensions(
+      (clientRect.left - canDimensions.getTopLeft().x - model.getOffsetX()) / zoomLevel,
+      (clientRect.top - canDimensions.getTopLeft().y - model.getOffsetY()) / zoomLevel,
+      clientRect.width / zoomLevel,
+      clientRect.height / zoomLevel
+    );
+  }
 }
diff --git a/src/widgets/AnchorWidget.tsx b/src/widgets/AnchorWidget.tsx
index d144874..e1e51d7 100644
--- a/src/widgets/AnchorWidget.tsx
+++ b/src/widgets/AnchorWidget.tsx
@@ -2,34 +2,34 @@ import { BaseWidget, BaseWidgetProps, MouseWidget } from '@projectstorm/react-co
 import * as React from 'react';
 
 export interface AnchorWidgetProps extends BaseWidgetProps {
-	selected: boolean;
-	events: {
-		mouseUp: () => any;
-		mouseDown: () => any;
-	};
+  selected: boolean;
+  events: {
+    mouseUp: () => any;
+    mouseDown: () => any;
+  };
 }
 
 export class AnchorWidget extends BaseWidget<AnchorWidgetProps> {
-	constructor(props) {
-		super('src-anchor', props);
-	}
+  constructor(props) {
+    super('src-anchor', props);
+  }
 
-	render() {
-		return (
-			<MouseWidget
-				element={'div'}
-				mouseDownEvent={() => {
-					this.props.events.mouseDown();
-				}}
-				mouseUpEvent={() => {
-					this.props.events.mouseUp();
-				}}
-				extraProps={{
-					...this.getProps({
-						'--selected': this.props.selected
-					})
-				}}
-			/>
-		);
-	}
+  render() {
+    return (
+      <MouseWidget
+        element={'div'}
+        mouseDownEvent={() => {
+          this.props.events.mouseDown();
+        }}
+        mouseUpEvent={() => {
+          this.props.events.mouseUp();
+        }}
+        extraProps={{
+          ...this.getProps({
+            '--selected': this.props.selected
+          })
+        }}
+      />
+    );
+  }
 }
diff --git a/src/widgets/CanvasLayerWidget.tsx b/src/widgets/CanvasLayerWidget.tsx
index 4e034ca..62a2512 100644
--- a/src/widgets/CanvasLayerWidget.tsx
+++ b/src/widgets/CanvasLayerWidget.tsx
@@ -5,48 +5,48 @@ import * as _ from 'lodash';
 import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
 
 export interface CanvasLayerWidgetProps extends BaseWidgetProps {
-	engine: CanvasEngine;
-	layer: CanvasLayerModel;
+  engine: CanvasEngine;
+  layer: CanvasLayerModel;
 }
 
 export interface CanvasLayerWidgetState {}
 
 export class CanvasLayerWidget extends BaseWidget<CanvasLayerWidgetProps, CanvasLayerWidgetState> {
-	constructor(props: CanvasLayerWidgetProps) {
-		super('src-canvas-layer', props);
-		this.state = {};
-	}
-
-	getProps() {
-		let canvas = this.props.engine.getModel();
-		let props = super.getProps();
-
-		// do we apply
-		if (this.props.layer.isTransformable()) {
-			props['style'] = {
-				...props['style'],
-				transform:
-					'translate(' + canvas.getOffsetX() + 'px,' + canvas.getOffsetY() + 'px) scale(' + canvas.getZoomLevel() + ')'
-			};
-		}
-
-		return props;
-	}
-
-	getChildren() {
-		return _.map(this.props.layer.getAllEntities(), element => {
-			return React.cloneElement(
-				this.props.engine.getFactoryForElement(element).generateWidget(this.props.engine, element),
-				{ key: element.getID() }
-			);
-		});
-	}
-
-	render() {
-		// it might be an SVG layer
-		if (this.props.layer.isSVG()) {
-			return <svg {...this.getProps()}>{this.getChildren()}</svg>;
-		}
-		return <div {...this.getProps()}>{this.getChildren()}</div>;
-	}
+  constructor(props: CanvasLayerWidgetProps) {
+    super('src-canvas-layer', props);
+    this.state = {};
+  }
+
+  getProps() {
+    let canvas = this.props.engine.getModel();
+    let props = super.getProps();
+
+    // do we apply
+    if (this.props.layer.isTransformable()) {
+      props['style'] = {
+        ...props['style'],
+        transform:
+          'translate(' + canvas.getOffsetX() + 'px,' + canvas.getOffsetY() + 'px) scale(' + canvas.getZoomLevel() + ')'
+      };
+    }
+
+    return props;
+  }
+
+  getChildren() {
+    return _.map(this.props.layer.getAllEntities(), element => {
+      return React.cloneElement(
+        this.props.engine.getFactoryForElement(element).generateWidget(this.props.engine, element),
+        { key: element.getID() }
+      );
+    });
+  }
+
+  render() {
+    // it might be an SVG layer
+    if (this.props.layer.isSVG()) {
+      return <svg {...this.getProps()}>{this.getChildren()}</svg>;
+    }
+    return <div {...this.getProps()}>{this.getChildren()}</div>;
+  }
 }
diff --git a/src/widgets/CanvasWidget.tsx b/src/widgets/CanvasWidget.tsx
index 3766da1..86d4aee 100644
--- a/src/widgets/CanvasWidget.tsx
+++ b/src/widgets/CanvasWidget.tsx
@@ -9,146 +9,146 @@ import { KeyDownEvent, KeyUpEvent } from '../event-bus/events/key';
 import { MouseDownEvent, MouseMoveEvent, MouseUpEvent, MouseWheelEvent } from '../event-bus/events/mouse';
 
 export interface CanvasWidgetProps extends BaseWidgetProps {
-	engine: CanvasEngine;
-	inverseZoom?: boolean;
+  engine: CanvasEngine;
+  inverseZoom?: boolean;
 }
 
 export interface CanvasWidgetState {}
 
 export class CanvasWidget extends BaseWidget<CanvasWidgetProps, CanvasWidgetState> {
-	dimension: DimensionTracker;
-	ref: { current: HTMLElement };
-
-	// handles
-	onKeyDownHandle: (event: any) => any;
-	onKeyUpHandle: (event: any) => any;
-	onMouseMoveHandle: (event: any) => any;
-	onMouseDownHandle: (event: any) => any;
-	onMouseUpHandle: (event: any) => any;
-	onMouseWheelHandle: (event: WheelEvent) => any;
-
-	constructor(props: CanvasWidgetProps) {
-		super('src-canvas', props);
-		this.state = {};
-		this.dimension = new DimensionTracker();
-
-		this.ref = (React as any).createRef();
-
-		this.onKeyDownHandle = (event: any) => {
-			this.props.engine.getEventBus().fireEvent(new KeyDownEvent(this, event.key));
-		};
-
-		this.onKeyUpHandle = (event: any) => {
-			this.props.engine.getEventBus().fireEvent(new KeyUpEvent(this, event.key));
-		};
-
-		this.onMouseMoveHandle = (event: MouseEvent) => {
-			this.props.engine.getEventBus().fireEvent(new MouseMoveEvent(this, event.clientX, event.clientY));
-		};
-
-		this.onMouseDownHandle = (event: MouseEvent) => {
-			this.props.engine.getEventBus().fireEvent(new MouseDownEvent(this, event.clientX, event.clientY));
-		};
-
-		this.onMouseUpHandle = (event: MouseEvent) => {
-			this.props.engine.getEventBus().fireEvent(new MouseUpEvent(this, event.clientX, event.clientY));
-		};
-
-		this.onMouseWheelHandle = event => {
-			this.props.engine
-				.getEventBus()
-				.fireEvent(new MouseWheelEvent(this, event.clientX, event.clientY, CanvasWidget.normalizeScrollWheel(event)));
-			event.stopPropagation();
-			event.preventDefault();
-		};
-	}
-
-	static normalizeScrollWheel(event: WheelEvent) {
-		let scrollDelta = event.deltaY;
-		// check if it is pinch gesture
-		if (event.ctrlKey && scrollDelta % 1 !== 0) {
-			/*
+  dimension: DimensionTracker;
+  ref: { current: HTMLElement };
+
+  // handles
+  onKeyDownHandle: (event: any) => any;
+  onKeyUpHandle: (event: any) => any;
+  onMouseMoveHandle: (event: any) => any;
+  onMouseDownHandle: (event: any) => any;
+  onMouseUpHandle: (event: any) => any;
+  onMouseWheelHandle: (event: WheelEvent) => any;
+
+  constructor(props: CanvasWidgetProps) {
+    super('src-canvas', props);
+    this.state = {};
+    this.dimension = new DimensionTracker();
+
+    this.ref = (React as any).createRef();
+
+    this.onKeyDownHandle = (event: any) => {
+      this.props.engine.getEventBus().fireEvent(new KeyDownEvent(this, event.key));
+    };
+
+    this.onKeyUpHandle = (event: any) => {
+      this.props.engine.getEventBus().fireEvent(new KeyUpEvent(this, event.key));
+    };
+
+    this.onMouseMoveHandle = (event: MouseEvent) => {
+      this.props.engine.getEventBus().fireEvent(new MouseMoveEvent(this, event.clientX, event.clientY));
+    };
+
+    this.onMouseDownHandle = (event: MouseEvent) => {
+      this.props.engine.getEventBus().fireEvent(new MouseDownEvent(this, event.clientX, event.clientY));
+    };
+
+    this.onMouseUpHandle = (event: MouseEvent) => {
+      this.props.engine.getEventBus().fireEvent(new MouseUpEvent(this, event.clientX, event.clientY));
+    };
+
+    this.onMouseWheelHandle = event => {
+      this.props.engine
+        .getEventBus()
+        .fireEvent(new MouseWheelEvent(this, event.clientX, event.clientY, CanvasWidget.normalizeScrollWheel(event)));
+      event.stopPropagation();
+      event.preventDefault();
+    };
+  }
+
+  static normalizeScrollWheel(event: WheelEvent) {
+    let scrollDelta = event.deltaY;
+    // check if it is pinch gesture
+    if (event.ctrlKey && scrollDelta % 1 !== 0) {
+      /*
                 Chrome and Firefox sends wheel event with deltaY that
                 have fractional part, also `ctrlKey` prop of the event is true
                 though ctrl isn't pressed
             */
-			return (scrollDelta /= 3);
-		}
-		return (scrollDelta /= 60);
-	}
-
-	componentWillMount() {
-		this.props.engine.setCanvasWidget(this);
-	}
-
-	componentDidMount() {
-		document.addEventListener('mousemove', this.onMouseMoveHandle);
-		document.addEventListener('keydown', this.onKeyDownHandle);
-		document.addEventListener('keyup', this.onKeyUpHandle);
-	}
-
-	componentWillUnmount() {
-		document.removeEventListener('mousemove', this.onMouseMoveHandle);
-		document.removeEventListener('keyup', this.onKeyUpHandle);
-		document.removeEventListener('keydown', this.onKeyDownHandle);
-		this.props.engine.setCanvasWidget(null);
-	}
-
-	getViewPort(): Rectangle {
-		let model = this.props.engine.getModel();
-		return new Rectangle(
-			-model.getOffsetX() / model.getZoomLevel(),
-			-model.getOffsetY() / model.getZoomLevel(),
-			this.dimension.realDimensions.getWidth() / model.getZoomLevel(),
-			this.dimension.realDimensions.getHeight() / model.getZoomLevel()
-		);
-	}
-
-	zoomToFit(margin: number = 0) {
-		let model = this.props.engine.getModel();
-		let bounds = Rectangle.boundingBoxFromPolygons(
-			_.filter(
-				_.map(model.getElements(), element => {
-					return element.getDimensions();
-				}),
-				el => {
-					return !!el;
-				}
-			)
-		);
-
-		let zoomFactor = Math.min(
-			(this.dimension.realDimensions.getWidth() - margin - margin) / bounds.getWidth(),
-			(this.dimension.realDimensions.getHeight() - margin - margin) / bounds.getHeight()
-		);
-
-		model.setZoomLevel(zoomFactor);
-		model.setOffset(
-			margin + -1 * bounds.getTopLeft().x * model.getZoomLevel(),
-			margin + -1 * bounds.getTopLeft().y * model.getZoomLevel()
-		);
-		this.forceUpdate();
-	}
-
-	render() {
-		return (
-			<DimensionTrackerWidget reference={this.ref} engine={this.props.engine} dimensionTracker={this.dimension}>
-				<div
-					{...this.getProps()}
-					ref={this.ref}
-					onWheel={this.onMouseWheelHandle}
-					onMouseDown={this.onMouseDownHandle}
-					onMouseUp={this.onMouseUpHandle}>
-					{_.map(this.props.engine.getModel().layers.getArray(), layer => {
-						return React.cloneElement(
-							this.props.engine.getFactoryForElement(layer).generateWidget(this.props.engine, layer),
-							{
-								key: layer.getID()
-							}
-						);
-					})}
-				</div>
-			</DimensionTrackerWidget>
-		);
-	}
+      return (scrollDelta /= 3);
+    }
+    return (scrollDelta /= 60);
+  }
+
+  componentWillMount() {
+    this.props.engine.setCanvasWidget(this);
+  }
+
+  componentDidMount() {
+    document.addEventListener('mousemove', this.onMouseMoveHandle);
+    document.addEventListener('keydown', this.onKeyDownHandle);
+    document.addEventListener('keyup', this.onKeyUpHandle);
+  }
+
+  componentWillUnmount() {
+    document.removeEventListener('mousemove', this.onMouseMoveHandle);
+    document.removeEventListener('keyup', this.onKeyUpHandle);
+    document.removeEventListener('keydown', this.onKeyDownHandle);
+    this.props.engine.setCanvasWidget(null);
+  }
+
+  getViewPort(): Rectangle {
+    let model = this.props.engine.getModel();
+    return new Rectangle(
+      -model.getOffsetX() / model.getZoomLevel(),
+      -model.getOffsetY() / model.getZoomLevel(),
+      this.dimension.realDimensions.getWidth() / model.getZoomLevel(),
+      this.dimension.realDimensions.getHeight() / model.getZoomLevel()
+    );
+  }
+
+  zoomToFit(margin: number = 0) {
+    let model = this.props.engine.getModel();
+    let bounds = Rectangle.boundingBoxFromPolygons(
+      _.filter(
+        _.map(model.getElements(), element => {
+          return element.getDimensions();
+        }),
+        el => {
+          return !!el;
+        }
+      )
+    );
+
+    let zoomFactor = Math.min(
+      (this.dimension.realDimensions.getWidth() - margin - margin) / bounds.getWidth(),
+      (this.dimension.realDimensions.getHeight() - margin - margin) / bounds.getHeight()
+    );
+
+    model.setZoomLevel(zoomFactor);
+    model.setOffset(
+      margin + -1 * bounds.getTopLeft().x * model.getZoomLevel(),
+      margin + -1 * bounds.getTopLeft().y * model.getZoomLevel()
+    );
+    this.forceUpdate();
+  }
+
+  render() {
+    return (
+      <DimensionTrackerWidget reference={this.ref} engine={this.props.engine} dimensionTracker={this.dimension}>
+        <div
+          {...this.getProps()}
+          ref={this.ref}
+          onWheel={this.onMouseWheelHandle}
+          onMouseDown={this.onMouseDownHandle}
+          onMouseUp={this.onMouseUpHandle}>
+          {_.map(this.props.engine.getModel().layers.getArray(), layer => {
+            return React.cloneElement(
+              this.props.engine.getFactoryForElement(layer).generateWidget(this.props.engine, layer),
+              {
+                key: layer.getID()
+              }
+            );
+          })}
+        </div>
+      </DimensionTrackerWidget>
+    );
+  }
 }
diff --git a/src/widgets/SmartAnchorWidget.tsx b/src/widgets/SmartAnchorWidget.tsx
index efe8cd6..ab91107 100644
--- a/src/widgets/SmartAnchorWidget.tsx
+++ b/src/widgets/SmartAnchorWidget.tsx
@@ -7,49 +7,49 @@ import { AnchorWidget } from './AnchorWidget';
 import { bool } from 'prop-types';
 
 export interface SmartAnchorWidgetProps extends BaseWidgetProps {
-	engine: CanvasEngine;
-	selectionModel: SelectionElementModel;
-	pos: ModelAnchorInputPosition;
+  engine: CanvasEngine;
+  selectionModel: SelectionElementModel;
+  pos: ModelAnchorInputPosition;
 }
 
 export interface SmartAnchorWidgetState {
-	selected: boolean;
+  selected: boolean;
 }
 
 export class SmartAnchorWidget extends BaseWidget<SmartAnchorWidgetProps, SmartAnchorWidgetState> {
-	constructor(props) {
-		super('src-anchor', props);
-		this.state = {
-			selected: false
-		};
-	}
+  constructor(props) {
+    super('src-anchor', props);
+    this.state = {
+      selected: false
+    };
+  }
 
-	componentWillUnmount() {
-		this.props.engine.getStateMachine().removeInput(ModelAnchorInput.NAME);
-	}
+  componentWillUnmount() {
+    this.props.engine.getStateMachine().removeInput(ModelAnchorInput.NAME);
+  }
 
-	render() {
-		return (
-			<AnchorWidget
-				{...this.props}
-				selected={this.state.selected}
-				events={{
-					mouseUp: () => {
-						this.props.engine.getStateMachine().removeInput(ModelAnchorInput.NAME);
-						this.setState({
-							selected: false
-						});
-					},
-					mouseDown: () => {
-						this.props.engine
-							.getStateMachine()
-							.addInput(new ModelAnchorInput(this.props.selectionModel, this.props.pos));
-						this.setState({
-							selected: true
-						});
-					}
-				}}
-			/>
-		);
-	}
+  render() {
+    return (
+      <AnchorWidget
+        {...this.props}
+        selected={this.state.selected}
+        events={{
+          mouseUp: () => {
+            this.props.engine.getStateMachine().removeInput(ModelAnchorInput.NAME);
+            this.setState({
+              selected: false
+            });
+          },
+          mouseDown: () => {
+            this.props.engine
+              .getStateMachine()
+              .addInput(new ModelAnchorInput(this.props.selectionModel, this.props.pos));
+            this.setState({
+              selected: true
+            });
+          }
+        }}
+      />
+    );
+  }
 }

From 9bfc373b1318bf08241c1054c837ddbfbacd6d75 Mon Sep 17 00:00:00 2001
From: Dylan Vorster <dylanvorster.dv@gmail.com>
Date: Thu, 21 Mar 2019 18:42:10 +0200
Subject: [PATCH 3/6] quite a bug refactor

---
 demos/demo-standard/index.story.tsx           |  24 +--
 demos/index.tsx                               |   5 +-
 docs/architecture/overview.gv                 |   3 -
 src/CanvasEngine.ts                           | 166 +++++-------------
 src/CanvasLayerFactory.tsx                    |  19 --
 .../AbstractElementFactory.ts                 |   6 +-
 src/event-bus/actions/ZoomCanvasAction.ts     |  10 +-
 src/geometry/Polygon.ts                       |   2 +-
 src/interactivity/debug-interactivity.ts      |  37 ++++
 src/interactivity/default-interactivity.ts    |  44 +++++
 src/main.ts                                   |  10 +-
 src/models-canvas/CanvasElementModel.ts       |   6 +-
 .../anchor}/AnchorWidget.tsx                  |   0
 .../anchor}/SmartAnchorWidget.tsx             |   6 +-
 .../anchor}/_AnchorWidget.scss                |   2 +-
 .../canvas/CanvasEventWrapperWidget.tsx       |  89 ++++++++++
 src/primitives-core/canvas/CanvasFactory.tsx  |  20 +++
 .../canvas}/CanvasModel.ts                    |  63 ++++++-
 .../canvas/SimpleCanvasWidget.tsx             |  26 +++
 .../canvas/SmartCanvasWidget.tsx              |  60 +++++++
 .../canvas/_SimpleCanvasWidget.scss}          |   0
 src/primitives-core/layer/LayerFactory.tsx    |  20 +++
 .../layer/LayerModel.ts}                      |  10 +-
 .../layer/SimpleLayerWidget.tsx               |  38 ++++
 .../layer/SmartLayerWidget.tsx                |  42 +++++
 .../layer/_SimpleLayerWidget.scss}            |   2 +-
 .../ellipse/EllipseElementFactory.tsx         |   2 +-
 src/primitives/grid/GridElementFactory.tsx    |   2 +-
 src/primitives/grid/GridElementWidget.tsx     |   8 +-
 src/primitives/paper/PaperElementFactory.tsx  |   2 +-
 .../rectangle/RectangleElementFactory.tsx     |   2 +-
 .../selection/SelectionElementFactory.tsx     |   2 +-
 .../selection/SelectionGroupWidget.tsx        |   4 +-
 src/sass/main.scss                            |   4 +-
 src/tracking/DimensionTracker.ts              |   7 +-
 src/tracking/DimensionTrackerWidget.tsx       |   3 -
 src/widgets/CanvasLayerWidget.tsx             |  52 ------
 src/widgets/CanvasWidget.tsx                  | 154 ----------------
 38 files changed, 533 insertions(+), 419 deletions(-)
 delete mode 100644 docs/architecture/overview.gv
 delete mode 100644 src/CanvasLayerFactory.tsx
 rename src/{ => base-factories}/AbstractElementFactory.ts (74%)
 create mode 100644 src/interactivity/debug-interactivity.ts
 create mode 100644 src/interactivity/default-interactivity.ts
 rename src/{widgets => primitives-core/anchor}/AnchorWidget.tsx (100%)
 rename src/{widgets => primitives-core/anchor}/SmartAnchorWidget.tsx (84%)
 rename src/{sass => primitives-core/anchor}/_AnchorWidget.scss (91%)
 create mode 100644 src/primitives-core/canvas/CanvasEventWrapperWidget.tsx
 create mode 100644 src/primitives-core/canvas/CanvasFactory.tsx
 rename src/{models-canvas => primitives-core/canvas}/CanvasModel.ts (58%)
 create mode 100644 src/primitives-core/canvas/SimpleCanvasWidget.tsx
 create mode 100644 src/primitives-core/canvas/SmartCanvasWidget.tsx
 rename src/{sass/_CanvasWidget.scss => primitives-core/canvas/_SimpleCanvasWidget.scss} (100%)
 create mode 100644 src/primitives-core/layer/LayerFactory.tsx
 rename src/{models-canvas/CanvasLayerModel.ts => primitives-core/layer/LayerModel.ts} (70%)
 create mode 100644 src/primitives-core/layer/SimpleLayerWidget.tsx
 create mode 100644 src/primitives-core/layer/SmartLayerWidget.tsx
 rename src/{sass/_CanvasLayerWidget.scss => primitives-core/layer/_SimpleLayerWidget.scss} (92%)
 delete mode 100644 src/widgets/CanvasLayerWidget.tsx
 delete mode 100644 src/widgets/CanvasWidget.tsx

diff --git a/demos/demo-standard/index.story.tsx b/demos/demo-standard/index.story.tsx
index 3cf43ef..2dd1420 100644
--- a/demos/demo-standard/index.story.tsx
+++ b/demos/demo-standard/index.story.tsx
@@ -1,28 +1,32 @@
-import { CanvasWidget } from '../../src/widgets/CanvasWidget';
 import * as React from 'react';
 import { CanvasEngine } from '../../src/CanvasEngine';
-import { CanvasModel } from '../../src/models-canvas/CanvasModel';
-import { CanvasLayerModel } from '../../src/models-canvas/CanvasLayerModel';
+import { CanvasModel } from '../../src/primitives-core/canvas/CanvasModel';
+import { LayerModel } from '../../src/primitives-core/layer/LayerModel';
 import { RectangleElementModel } from '../../src/primitives/rectangle/RectangleElementModel';
 
 import { storiesOf } from '@storybook/react';
 import { button } from '@storybook/addon-knobs';
 import { GridElementModel } from '../../src/primitives/grid/GridElementModel';
 import { PaperElementModel } from '../../src/primitives/paper/PaperElementModel';
+import {installDebugInteractivity} from "../../src/interactivity/debug-interactivity";
+import {installDefaultInteractivity} from "../../src/interactivity/default-interactivity";
+import {SmartCanvasWidget} from "../../src/primitives-core/canvas/SmartCanvasWidget";
 
 storiesOf('Simple Usage', module).add('Full example', () => {
   //setup canvas engine
   let engine = new CanvasEngine();
-  engine.enableDebugMode(true);
-  engine.installDefaults();
 
   let model = new CanvasModel();
   model.setOffset(100, 100);
   model.setZoomLevel(1);
   engine.setModel(model);
 
+  installDebugInteractivity(engine);
+  installDefaultInteractivity(engine);
+  engine.installDefaults();
+
   // grid layer
-  let layer2 = new CanvasLayerModel();
+  let layer2 = new LayerModel();
   layer2.setSVG(true);
   layer2.setTransformable(false);
   model.addLayer(layer2);
@@ -38,7 +42,7 @@ storiesOf('Simple Usage', module).add('Full example', () => {
   layer2.addModel(gridModel2);
 
   // paper layer
-  let paperLayer = new CanvasLayerModel();
+  let paperLayer = new LayerModel();
   paperLayer.setSVG(false);
   paperLayer.setTransformable(true);
   let paper = new PaperElementModel();
@@ -46,7 +50,7 @@ storiesOf('Simple Usage', module).add('Full example', () => {
   model.addLayer(paperLayer);
 
   // add layer
-  let layer = new CanvasLayerModel();
+  let layer = new LayerModel();
   layer.setSVG(true);
   layer.setTransformable(true);
   model.addLayer(layer);
@@ -64,7 +68,7 @@ storiesOf('Simple Usage', module).add('Full example', () => {
   layer.addModels([squareModel, squareModel2, squareModel3]);
 
   button('Fit Width', () => {
-    engine.getCanvasWidget().zoomToFit(15);
+    model.zoomToFit(15);
   });
 
   button('Undo', () => {
@@ -75,5 +79,5 @@ storiesOf('Simple Usage', module).add('Full example', () => {
     engine.getHistoryBank().goForward();
   });
 
-  return <CanvasWidget className={'demo-canvas'} engine={engine} />;
+  return <SmartCanvasWidget model={model} className={'demo-canvas'} engine={engine} />;
 });
diff --git a/demos/index.tsx b/demos/index.tsx
index 0e3be02..9ae3ad2 100644
--- a/demos/index.tsx
+++ b/demos/index.tsx
@@ -1,8 +1,7 @@
 import * as React from 'react';
-import { storiesOf, addDecorator } from '@storybook/react';
+import { addDecorator } from '@storybook/react';
 import { setOptions } from '@storybook/addon-options';
-import { withKnobs, text, boolean, number } from '@storybook/addon-knobs/react';
-import { configureViewport } from '@storybook/addon-viewport';
+import { withKnobs} from '@storybook/addon-knobs/react';
 //include the SCSS for the demo
 import './.helpers/demo.scss';
 import '../src/sass/main.scss';
diff --git a/docs/architecture/overview.gv b/docs/architecture/overview.gv
deleted file mode 100644
index 8a468a9..0000000
--- a/docs/architecture/overview.gv
+++ /dev/null
@@ -1,3 +0,0 @@
-graph g{
-
-}
\ No newline at end of file
diff --git a/src/CanvasEngine.ts b/src/CanvasEngine.ts
index 3f7d202..1a7fc2a 100644
--- a/src/CanvasEngine.ts
+++ b/src/CanvasEngine.ts
@@ -1,57 +1,57 @@
 import * as _ from 'lodash';
-import { AbstractElementFactory } from './AbstractElementFactory';
-import { RectangleElementFactory } from './primitives/rectangle/RectangleElementFactory';
-import { CanvasModel } from './models-canvas/CanvasModel';
-import { CanvasWidget } from './widgets/CanvasWidget';
-import { SelectionElementFactory } from './primitives/selection/SelectionElementFactory';
-import { StateMachine } from './state-machine/StateMachine';
-import { TranslateCanvasState } from './state-machine/states/TranslateCanvasState';
-import { GridElementFactory } from './primitives/grid/GridElementFactory';
-import { EllipseElementFactory } from './primitives/ellipse/EllipseElementFactory';
-import { TranslateElementState } from './state-machine/states/TranslateElementState';
-import { SelectElementsState } from './state-machine/states/SelectElementsState';
-import { HistoryBank } from './history/HistoryBank';
-import { CanvasLayerFactory } from './CanvasLayerFactory';
-import { EventBus } from './event-bus/EventBus';
-import { ZoomCanvasAction } from './event-bus/actions/ZoomCanvasAction';
-import { MouseDownInput } from './state-machine/input/MouseDownInput';
-import { KeyInput } from './state-machine/input/KeyInput';
-import { ModelElementInput } from './state-machine/input/ModelElementInput';
-import { DefaultState } from './state-machine/states/DefaultState';
-import { Toolkit } from '@projectstorm/react-core';
-import { CanvasLayerModel } from './models-canvas/CanvasLayerModel';
-import { SelectionElementModel } from './primitives/selection/SelectionElementModel';
-import { ModelEvent } from './event-bus/events/ModelEvent';
-import { InlineAction } from './event-bus/InlineAction';
-import { PaperElementFactory } from './primitives/paper/PaperElementFactory';
-import { BaseEvent, BaseObject } from '@projectstorm/react-core';
-import { BaseModel, DeserializeEvent } from './base-models/BaseModel';
-import { EllipseElementModel } from './primitives/ellipse/EllipseElementModel';
-import { DeselectModelsAction } from './event-bus/actions/DeselectModelsAction';
-
-export class CanvasEngineError extends Error {}
+import {AbstractElementFactory} from './base-factories/AbstractElementFactory';
+import {RectangleElementFactory} from './primitives/rectangle/RectangleElementFactory';
+import {CanvasModel} from './primitives-core/canvas/CanvasModel';
+import {SelectionElementFactory} from './primitives/selection/SelectionElementFactory';
+import {StateMachine} from './state-machine/StateMachine';
+import {TranslateCanvasState} from './state-machine/states/TranslateCanvasState';
+import {GridElementFactory} from './primitives/grid/GridElementFactory';
+import {EllipseElementFactory} from './primitives/ellipse/EllipseElementFactory';
+import {TranslateElementState} from './state-machine/states/TranslateElementState';
+import {SelectElementsState} from './state-machine/states/SelectElementsState';
+import {HistoryBank} from './history/HistoryBank';
+import {LayerFactory} from './primitives-core/layer/LayerFactory';
+import {EventBus} from './event-bus/EventBus';
+import {ZoomCanvasAction} from './event-bus/actions/ZoomCanvasAction';
+import {MouseDownInput} from './state-machine/input/MouseDownInput';
+import {KeyInput} from './state-machine/input/KeyInput';
+import {ModelElementInput} from './state-machine/input/ModelElementInput';
+import {DefaultState} from './state-machine/states/DefaultState';
+import {Toolkit} from '@projectstorm/react-core';
+import {LayerModel} from './primitives-core/layer/LayerModel';
+import {SelectionElementModel} from './primitives/selection/SelectionElementModel';
+import {ModelEvent} from './event-bus/events/ModelEvent';
+import {InlineAction} from './event-bus/InlineAction';
+import {PaperElementFactory} from './primitives/paper/PaperElementFactory';
+import {BaseEvent, BaseObject} from '@projectstorm/react-core';
+import {BaseModel, DeserializeEvent} from './base-models/BaseModel';
+import {EllipseElementModel} from './primitives/ellipse/EllipseElementModel';
+import {DeselectModelsAction} from './event-bus/actions/DeselectModelsAction';
+import {CanvasFactory} from "./primitives-core/canvas/CanvasFactory";
+import {installDefaultInteractivity} from "./interactivity/default-interactivity";
+
+export class CanvasEngineError extends Error {
+}
 
 export interface CanvasEngineListener<T> {
   modelChanged?: (event: BaseEvent & { model: T; oldModel: T }) => any;
+  repaint?: () => any;
 }
 
 export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObject<CanvasEngineListener<T>> {
   protected elementFactories: { [type: string]: AbstractElementFactory };
   protected model: T;
   protected stateMachine: StateMachine;
-  protected canvasWidget;
   protected historyBank: HistoryBank;
   protected eventBus: EventBus;
   protected debugMode: boolean;
 
   private modelListener: string;
-  debugLayer: CanvasLayerModel;
 
   constructor() {
     super();
     this.elementFactories = {};
     this.model = null;
-    this.canvasWidget = null;
     this.stateMachine = new StateMachine();
     this.historyBank = new HistoryBank();
     this.eventBus = new EventBus();
@@ -63,16 +63,6 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
     }
   }
 
-  enableDebugMode(debug: boolean) {
-    this.debugMode = debug;
-    if (debug) {
-      // debug layer
-      this.debugLayer = new CanvasLayerModel();
-      this.debugLayer.setSVG(true);
-      this.debugLayer.setTransformable(true);
-    }
-  }
-
   getEventBus(): EventBus {
     return this.eventBus;
   }
@@ -94,7 +84,7 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
     this.model = model;
     this.iterateListeners('Model changed', (listener, event) => {
       if (listener.modelChanged) {
-        listener.modelChanged({ ...event, model: model, oldModel: oldModel });
+        listener.modelChanged({...event, model: model, oldModel: oldModel});
       }
     });
 
@@ -121,7 +111,7 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
   deserialize(data: any) {
     let event = new DeserializeEvent(data, this);
     this.model.deSerialize(event);
-    this.canvasWidget.forceUpdate();
+    this.repaint();
   }
 
   installHistoryBank() {
@@ -143,69 +133,11 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
   }
 
   repaint() {
-    if (this.canvasWidget) {
-      if (this.debugMode) {
-        this.model.layers.moveModelToFront(this.debugLayer);
-        this.debugLayer.clearEntities();
-        _.forEach(this.model.getElements(), element => {
-          let dimensions = element.getDimensions();
-          if (dimensions) {
-            this.debugLayer.addModels(
-              _.map(EllipseElementModel.createPointCloudFrom(dimensions, 3 / this.model.getZoomLevel()), point => {
-                point.background = 'mediumpurple';
-                return point;
-              })
-            );
-          }
-        });
-      }
-
-      this.canvasWidget.forceUpdate();
-    }
-  }
-
-  installDefaultInteractivity() {
-    // selection layer
-    let selectionLayer = new CanvasLayerModel();
-    selectionLayer.setSVG(false);
-    selectionLayer.setTransformable(false);
-
-    // listen for a new model
-    this.addListener({
-      modelChanged: event => {
-        if (event.oldModel) {
-          event.oldModel.removeLayer(selectionLayer);
-          if (this.debugLayer) {
-            event.oldModel.removeLayer(this.debugLayer);
-          }
-        }
-        if (event.model) {
-          event.model.addLayer(selectionLayer);
-          if (this.debugLayer) {
-            event.model.addLayer(this.debugLayer);
-          }
-        }
+    this.iterateListeners('repaint', (listener) => {
+      if (listener.repaint) {
+        listener.repaint();
       }
     });
-
-    this.eventBus.registerAction(
-      new InlineAction(ModelEvent.NAME, (event: ModelEvent) => {
-        // setup a combo box for when there are models
-        if (event.modelEvent.name === 'selection changed') {
-          selectionLayer.clearEntities();
-          this.model.layers.moveModelToFront(selectionLayer);
-          let selected = _.filter(this.model.getElements(), element => {
-            return element.isSelected();
-          });
-          if (selected.length > 0) {
-            let model = new SelectionElementModel();
-            model.setModels(selected);
-            selectionLayer.addModel(model);
-            this.canvasWidget.forceUpdate();
-          }
-        }
-      })
-    );
   }
 
   registerElementFactory(factory: AbstractElementFactory) {
@@ -217,8 +149,12 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
   }
 
   installDefaults() {
+
+    // core factories
+    this.registerElementFactory(new LayerFactory());
+    this.registerElementFactory(new CanvasFactory());
+
     // element factories
-    this.registerElementFactory(new CanvasLayerFactory());
     this.registerElementFactory(new RectangleElementFactory());
     this.registerElementFactory(new SelectionElementFactory());
     this.registerElementFactory(new GridElementFactory());
@@ -229,6 +165,8 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
     KeyInput.installActions(this.stateMachine, this.eventBus);
     MouseDownInput.installActions(this.stateMachine, this.eventBus);
     ModelElementInput.installActions(this.stateMachine, this.eventBus);
+
+    // standard actions
     this.eventBus.registerAction(new ZoomCanvasAction(this));
     this.eventBus.registerAction(new DeselectModelsAction(this));
 
@@ -240,23 +178,11 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
 
     // default wiring
     this.installHistoryBank();
-    this.installDefaultInteractivity();
 
     // process to set the initial state
     this.stateMachine.process();
   }
 
-  getCanvasWidget(): CanvasWidget {
-    return this.canvasWidget;
-  }
-
-  setCanvasWidget(widget: CanvasWidget) {
-    this.canvasWidget = widget;
-    if (widget) {
-      this.historyBank.pushState(this.model.serialize());
-    }
-  }
-
   getFactory(type: string): AbstractElementFactory {
     if (!this.elementFactories[type]) {
       throw new CanvasEngineError('Cannot find Element factory with type: ' + type);
diff --git a/src/CanvasLayerFactory.tsx b/src/CanvasLayerFactory.tsx
deleted file mode 100644
index b357b16..0000000
--- a/src/CanvasLayerFactory.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import * as React from 'react';
-import { AbstractElementFactory } from './AbstractElementFactory';
-import { CanvasLayerModel } from './models-canvas/CanvasLayerModel';
-import { CanvasEngine } from './CanvasEngine';
-import { CanvasLayerWidget } from './widgets/CanvasLayerWidget';
-
-export class CanvasLayerFactory extends AbstractElementFactory<CanvasLayerModel> {
-  constructor() {
-    super('layer');
-  }
-
-  generateModel(): CanvasLayerModel {
-    return new CanvasLayerModel();
-  }
-
-  generateWidget(engine: CanvasEngine, model: CanvasLayerModel): JSX.Element {
-    return <CanvasLayerWidget engine={engine} layer={model} />;
-  }
-}
diff --git a/src/AbstractElementFactory.ts b/src/base-factories/AbstractElementFactory.ts
similarity index 74%
rename from src/AbstractElementFactory.ts
rename to src/base-factories/AbstractElementFactory.ts
index 7e9020a..590f3ed 100644
--- a/src/AbstractElementFactory.ts
+++ b/src/base-factories/AbstractElementFactory.ts
@@ -1,6 +1,6 @@
-import { CanvasEngine } from './CanvasEngine';
-import { AbstractState } from './state-machine/AbstractState';
-import { BaseModel } from './base-models/BaseModel';
+import { CanvasEngine } from '../CanvasEngine';
+import { AbstractState } from '../state-machine/AbstractState';
+import { BaseModel } from '../base-models/BaseModel';
 
 export abstract class AbstractElementFactory<T extends BaseModel = BaseModel> {
   public type: string;
diff --git a/src/event-bus/actions/ZoomCanvasAction.ts b/src/event-bus/actions/ZoomCanvasAction.ts
index 7196234..189647e 100644
--- a/src/event-bus/actions/ZoomCanvasAction.ts
+++ b/src/event-bus/actions/ZoomCanvasAction.ts
@@ -12,7 +12,6 @@ export class ZoomCanvasAction extends Action<MouseWheelEvent> {
 
   doAction(event: MouseWheelEvent) {
     const model = this.engine.getModel();
-    const canvas = this.engine.getCanvasWidget();
 
     let newZoomFactor = model.getZoomLevel() + event.amount / 100.0;
     if (newZoomFactor <= 0.1) {
@@ -21,17 +20,16 @@ export class ZoomCanvasAction extends Action<MouseWheelEvent> {
 
     const oldZoomFactor = model.getZoomLevel();
 
-    const boundingRect = canvas.dimension.realDimensions;
-    const clientWidth = boundingRect.getWidth();
-    const clientHeight = boundingRect.getHeight();
+    const clientWidth = model.viewport.getWidth();
+    const clientHeight = model.viewport.getHeight();
 
     // compute difference between rect before and after scroll
     const widthDiff = clientWidth * newZoomFactor - clientWidth * oldZoomFactor;
     const heightDiff = clientHeight * newZoomFactor - clientHeight * oldZoomFactor;
 
     // compute mouse coords relative to canvas
-    const clientX = event.mouseX - boundingRect.getTopLeft().x;
-    const clientY = event.mouseY - boundingRect.getTopLeft().y;
+    const clientX = event.mouseX - model.viewport.getTopLeft().x;
+    const clientY = event.mouseY - model.viewport.getTopLeft().y;
 
     // compute width and height increment factor
     const xFactor = (clientX - model.getOffsetX()) / oldZoomFactor / clientWidth;
diff --git a/src/geometry/Polygon.ts b/src/geometry/Polygon.ts
index f607ea2..8b02dbf 100644
--- a/src/geometry/Polygon.ts
+++ b/src/geometry/Polygon.ts
@@ -1,7 +1,7 @@
 import { Point } from './Point';
 import { Rectangle } from './Rectangle';
 import * as _ from 'lodash';
-import { CanvasModel } from '../models-canvas/CanvasModel';
+import { CanvasModel } from '../primitives-core/canvas/CanvasModel';
 import { Matrix } from 'mathjs';
 
 export class Polygon {
diff --git a/src/interactivity/debug-interactivity.ts b/src/interactivity/debug-interactivity.ts
new file mode 100644
index 0000000..158badc
--- /dev/null
+++ b/src/interactivity/debug-interactivity.ts
@@ -0,0 +1,37 @@
+import {LayerModel} from "../primitives-core/layer/LayerModel";
+import {CanvasEngine} from "../CanvasEngine";
+import * as _ from "lodash";
+import {EllipseElementModel} from "../primitives/ellipse/EllipseElementModel";
+
+export const installDebugInteractivity = (engine: CanvasEngine) => {
+  // debug layer
+  const debugLayer = new LayerModel();
+  debugLayer.setSVG(true);
+  debugLayer.setTransformable(true);
+
+  engine.addListener({
+    modelChanged: event => {
+      if (event.oldModel) {
+        event.oldModel.removeLayer(debugLayer);
+      }
+      if (event.model) {
+        event.model.addLayer(debugLayer);
+      }
+    },
+    repaint: () => {
+      engine.getModel().layers.moveModelToFront(debugLayer);
+      debugLayer.clearEntities();
+      _.forEach(engine.getModel().getElements(), element => {
+        let dimensions = element.getDimensions();
+        if (dimensions) {
+          debugLayer.addModels(
+            _.map(EllipseElementModel.createPointCloudFrom(dimensions, 3 / engine.getModel().getZoomLevel()), point => {
+              point.background = 'mediumpurple';
+              return point;
+            })
+          );
+        }
+      });
+    }
+  });
+};
\ No newline at end of file
diff --git a/src/interactivity/default-interactivity.ts b/src/interactivity/default-interactivity.ts
new file mode 100644
index 0000000..4befcad
--- /dev/null
+++ b/src/interactivity/default-interactivity.ts
@@ -0,0 +1,44 @@
+import {LayerModel} from "../primitives-core/layer/LayerModel";
+import {InlineAction} from "../event-bus/InlineAction";
+import {ModelEvent} from "../event-bus/events/ModelEvent";
+import * as _ from "lodash";
+import {SelectionElementModel} from "../primitives/selection/SelectionElementModel";
+import {CanvasEngine} from "../CanvasEngine";
+
+export const installDefaultInteractivity = (engine: CanvasEngine) => {
+  // selection layer
+  let selectionLayer = new LayerModel();
+  selectionLayer.setSVG(false);
+  selectionLayer.setTransformable(false);
+
+  // listen for a new model
+  engine.addListener({
+    modelChanged: event => {
+      if (event.oldModel) {
+        event.oldModel.removeLayer(selectionLayer);
+      }
+      if (event.model) {
+        event.model.addLayer(selectionLayer);
+      }
+    }
+  });
+
+  engine.getEventBus().registerAction(
+    new InlineAction(ModelEvent.NAME, (event: ModelEvent) => {
+      // setup a combo box for when there are models
+      if (event.modelEvent.name === 'selection changed') {
+        selectionLayer.clearEntities();
+        engine.getModel().layers.moveModelToFront(selectionLayer);
+        let selected = _.filter(engine.getModel().getElements(), element => {
+          return element.isSelected();
+        });
+        if (selected.length > 0) {
+          let model = new SelectionElementModel();
+          model.setModels(selected);
+          selectionLayer.addModel(model);
+          engine.repaint();
+        }
+      }
+    })
+  );
+};
\ No newline at end of file
diff --git a/src/main.ts b/src/main.ts
index b5be8ad..668cda9 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,9 +1,9 @@
 export * from './CanvasEngine';
-export * from './AbstractElementFactory';
-export * from './CanvasLayerFactory';
+export * from './base-factories/AbstractElementFactory';
+export * from './primitives-core/layer/LayerFactory';
 
 export * from './widgets/CanvasLayerWidget';
-export * from './widgets/AnchorWidget';
+export * from './primitives-core/anchor/AnchorWidget';
 export * from './primitives/selection/SelectionGroupWidget';
 
 export * from './geometry/Point';
@@ -15,8 +15,8 @@ export * from './base-models/GraphModel';
 export * from './base-models/GraphModelOrdered';
 
 export * from './models-canvas/CanvasElementModel';
-export * from './models-canvas/CanvasLayerModel';
-export * from './models-canvas/CanvasModel';
+export * from './primitives-core/layer/LayerModel';
+export * from './primitives-core/canvas/CanvasModel';
 
 export * from './history/HistoryBank';
 
diff --git a/src/models-canvas/CanvasElementModel.ts b/src/models-canvas/CanvasElementModel.ts
index 8f15c6e..1dc7a78 100644
--- a/src/models-canvas/CanvasElementModel.ts
+++ b/src/models-canvas/CanvasElementModel.ts
@@ -1,4 +1,4 @@
-import { CanvasLayerModel } from './CanvasLayerModel';
+import { LayerModel } from '../primitives-core/layer/LayerModel';
 import { Rectangle } from '../geometry/Rectangle';
 import { BaseModel, BaseModelListener, DeserializeEvent } from '../base-models/BaseModel';
 import { BaseEvent } from '@projectstorm/react-core';
@@ -11,7 +11,7 @@ export interface CanvasElementModelListener<T extends CanvasElementModel = any>
 
 export abstract class CanvasElementModel<
   T extends CanvasElementModelListener = CanvasElementModelListener
-> extends BaseModel<CanvasLayerModel, CanvasElementModelListener> {
+> extends BaseModel<LayerModel, CanvasElementModelListener> {
   protected selected: boolean;
   protected locked: boolean;
 
@@ -68,7 +68,7 @@ export abstract class CanvasElementModel<
 
   abstract setDimensions(dimensions: Rectangle);
 
-  moveToLayer(layer: CanvasLayerModel) {
+  moveToLayer(layer: LayerModel) {
     if (this.parent) {
       this.parent.removeModel(this);
     }
diff --git a/src/widgets/AnchorWidget.tsx b/src/primitives-core/anchor/AnchorWidget.tsx
similarity index 100%
rename from src/widgets/AnchorWidget.tsx
rename to src/primitives-core/anchor/AnchorWidget.tsx
diff --git a/src/widgets/SmartAnchorWidget.tsx b/src/primitives-core/anchor/SmartAnchorWidget.tsx
similarity index 84%
rename from src/widgets/SmartAnchorWidget.tsx
rename to src/primitives-core/anchor/SmartAnchorWidget.tsx
index ab91107..87a0b5d 100644
--- a/src/widgets/SmartAnchorWidget.tsx
+++ b/src/primitives-core/anchor/SmartAnchorWidget.tsx
@@ -1,8 +1,8 @@
 import { BaseWidget, BaseWidgetProps, MouseWidget } from '@projectstorm/react-core';
 import * as React from 'react';
-import { CanvasEngine } from '../CanvasEngine';
-import { SelectionElementModel } from '../primitives/selection/SelectionElementModel';
-import { ModelAnchorInput, ModelAnchorInputPosition } from '../state-machine/input/ModelAnchorInput';
+import { CanvasEngine } from '../../CanvasEngine';
+import { SelectionElementModel } from '../../primitives/selection/SelectionElementModel';
+import { ModelAnchorInput, ModelAnchorInputPosition } from '../../state-machine/input/ModelAnchorInput';
 import { AnchorWidget } from './AnchorWidget';
 import { bool } from 'prop-types';
 
diff --git a/src/sass/_AnchorWidget.scss b/src/primitives-core/anchor/_AnchorWidget.scss
similarity index 91%
rename from src/sass/_AnchorWidget.scss
rename to src/primitives-core/anchor/_AnchorWidget.scss
index 7663e4b..e822e33 100644
--- a/src/sass/_AnchorWidget.scss
+++ b/src/primitives-core/anchor/_AnchorWidget.scss
@@ -8,7 +8,7 @@
 	cursor: move;
 	pointer-events: all;
 
-	&:hover {
+	&:hover, &--selected {
 		border: 1px blue solid;
 		background: cyan;
 		min-width: 12px;
diff --git a/src/primitives-core/canvas/CanvasEventWrapperWidget.tsx b/src/primitives-core/canvas/CanvasEventWrapperWidget.tsx
new file mode 100644
index 0000000..ddf317d
--- /dev/null
+++ b/src/primitives-core/canvas/CanvasEventWrapperWidget.tsx
@@ -0,0 +1,89 @@
+import * as React from 'react';
+import {CanvasEngine} from "../../CanvasEngine";
+import {KeyDownEvent, KeyUpEvent} from "../../event-bus/events/key";
+import {MouseDownEvent, MouseMoveEvent, MouseUpEvent, MouseWheelEvent} from "../../event-bus/events/mouse";
+
+export interface CanvasEventWrapperWidgetProps {
+  engine: CanvasEngine;
+  inverseZoom?: boolean;
+  refObject: React.RefObject<HTMLElement>;
+}
+
+export class CanvasEventWrapperWidget extends React.Component<CanvasEventWrapperWidgetProps> {
+
+  // handles
+  onKeyDownHandle: (event: any) => any;
+  onKeyUpHandle: (event: any) => any;
+  onMouseMoveHandle: (event: any) => any;
+  onMouseDownHandle: (event: any) => any;
+  onMouseUpHandle: (event: any) => any;
+  onMouseWheelHandle: (event: any) => any;
+
+  constructor(props: CanvasEventWrapperWidgetProps) {
+    super(props);
+
+    this.onKeyDownHandle = (event: any) => {
+      this.props.engine.getEventBus().fireEvent(new KeyDownEvent(this, event.key));
+    };
+
+    this.onKeyUpHandle = (event: any) => {
+      this.props.engine.getEventBus().fireEvent(new KeyUpEvent(this, event.key));
+    };
+
+    this.onMouseMoveHandle = (event: MouseEvent) => {
+      this.props.engine.getEventBus().fireEvent(new MouseMoveEvent(this, event.clientX, event.clientY));
+    };
+
+    this.onMouseDownHandle = (event: MouseEvent) => {
+      this.props.engine.getEventBus().fireEvent(new MouseDownEvent(this, event.clientX, event.clientY));
+    };
+
+    this.onMouseUpHandle = (event: MouseEvent) => {
+      this.props.engine.getEventBus().fireEvent(new MouseUpEvent(this, event.clientX, event.clientY));
+    };
+
+    this.onMouseWheelHandle = event => {
+      this.props.engine
+        .getEventBus()
+        .fireEvent(new MouseWheelEvent(this, event.clientX, event.clientY, CanvasEventWrapperWidget.normalizeScrollWheel(event)));
+      event.stopPropagation();
+      event.preventDefault();
+    };
+  }
+
+  static normalizeScrollWheel(event: WheelEvent) {
+    let scrollDelta = event.deltaY;
+    // check if it is pinch gesture
+    if (event.ctrlKey && scrollDelta % 1 !== 0) {
+      /*
+          Chrome and Firefox sends wheel event with deltaY that
+          have fractional part, also `ctrlKey` prop of the event is true
+          though ctrl isn't pressed
+      */
+      return (scrollDelta /= 3);
+    }
+    return (scrollDelta /= 60);
+  }
+
+  componentDidMount() {
+    document.addEventListener('mousemove', this.onMouseMoveHandle);
+    document.addEventListener('keydown', this.onKeyDownHandle);
+    document.addEventListener('keyup', this.onKeyUpHandle);
+    this.props.refObject.current.addEventListener('mousedown', this.onMouseDownHandle);
+    this.props.refObject.current.addEventListener('mouseup', this.onMouseUpHandle);
+    this.props.refObject.current.addEventListener('wheel', this.onMouseWheelHandle);
+  }
+
+  componentWillUnmount() {
+    document.removeEventListener('mousemove', this.onMouseMoveHandle);
+    document.removeEventListener('keyup', this.onKeyUpHandle);
+    document.removeEventListener('keydown', this.onKeyDownHandle);
+    this.props.refObject.current.removeEventListener('mousedown', this.onMouseDownHandle);
+    this.props.refObject.current.removeEventListener('mouseup', this.onMouseUpHandle);
+    this.props.refObject.current.removeEventListener('wheel', this.onMouseWheelHandle);
+  }
+
+  render() {
+    return this.props.children
+  }
+}
diff --git a/src/primitives-core/canvas/CanvasFactory.tsx b/src/primitives-core/canvas/CanvasFactory.tsx
new file mode 100644
index 0000000..1e422e2
--- /dev/null
+++ b/src/primitives-core/canvas/CanvasFactory.tsx
@@ -0,0 +1,20 @@
+import * as React from 'react';
+import { AbstractElementFactory } from '../../base-factories/AbstractElementFactory';
+import { CanvasEngine } from '../../CanvasEngine';
+import "./_SimpleCanvasWidget.scss"
+import {CanvasModel} from "./CanvasModel";
+import {SmartCanvasWidget} from "./SmartCanvasWidget";
+
+export class CanvasFactory extends AbstractElementFactory<CanvasModel> {
+  constructor() {
+    super('canvas');
+  }
+
+  generateModel(): CanvasModel {
+    return new CanvasModel();
+  }
+
+  generateWidget(engine: CanvasEngine, model: CanvasModel): JSX.Element {
+    return <SmartCanvasWidget model={model} engine={engine} layer={model} canvasModel={model}/>;
+  }
+}
diff --git a/src/models-canvas/CanvasModel.ts b/src/primitives-core/canvas/CanvasModel.ts
similarity index 58%
rename from src/models-canvas/CanvasModel.ts
rename to src/primitives-core/canvas/CanvasModel.ts
index d42e905..35cbbb8 100644
--- a/src/models-canvas/CanvasModel.ts
+++ b/src/primitives-core/canvas/CanvasModel.ts
@@ -1,23 +1,27 @@
-import { CanvasLayerModel } from './CanvasLayerModel';
+import { LayerModel } from '../layer/LayerModel';
 import * as _ from 'lodash';
-import { CanvasElementModel } from './CanvasElementModel';
-import { BaseModel, BaseModelListener, DeserializeEvent } from '../base-models/BaseModel';
-import { GraphModelOrdered } from '../base-models/GraphModelOrdered';
+import { CanvasElementModel } from '../../models-canvas/CanvasElementModel';
+import { BaseModel, BaseModelListener, DeserializeEvent } from '../../base-models/BaseModel';
+import { GraphModelOrdered } from '../../base-models/GraphModelOrdered';
 import { BaseEvent } from '@projectstorm/react-core';
+import {Rectangle} from "../../geometry/Rectangle";
 
 export interface CanvasModelListener<T extends CanvasModel = any> extends BaseModelListener<T> {
   offsetUpdated?(event: BaseEvent<T> & { offsetX: number; offsetY: number }): void;
 
   zoomUpdated?(event: BaseEvent<T> & { zoom: number }): void;
+
+  viewportChanged?(event: BaseEvent<T> & { viewport: Rectangle });
 }
 
 export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> extends BaseModel<null, T> {
-  selectedLayer: CanvasLayerModel;
-  layers: GraphModelOrdered<CanvasLayerModel, CanvasModel>;
+  selectedLayer: LayerModel;
+  layers: GraphModelOrdered<LayerModel, CanvasModel>;
 
   //control variables
   offsetX: number;
   offsetY: number;
+  viewport: Rectangle;
   zoom: number;
 
   constructor() {
@@ -27,6 +31,7 @@ export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> ex
     this.layers.setParentDelegate(this);
     this.offsetX = 0;
     this.offsetY = 0;
+    this.viewport = new Rectangle();
     this.zoom = 1;
   }
 
@@ -60,7 +65,19 @@ export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> ex
     return this.zoom;
   }
 
+  setViewport(rect: Rectangle){
+    this.viewport = rect;
+    this.iterateListeners('viewport changed', (listener: CanvasModelListener, event) => {
+      if (listener.viewportChanged) {
+        listener.viewportChanged({ ...event, viewport: rect });
+      }
+    });
+  }
+
   setZoomLevel(zoom: number) {
+    if(zoom < 0){
+      throw new Error("Zoom cannot be below zero");
+    }
     this.zoom = zoom;
     this.iterateListeners('zoom changed', (listener: CanvasModelListener, event) => {
       if (listener.zoomUpdated) {
@@ -69,7 +86,11 @@ export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> ex
     });
   }
 
-  setZoomPercent(percent: number) {
+  setZoomPercent(percent: number | string) {
+    // also accept string like '100%'
+    if(typeof percent === 'string'){
+      percent = _.parseInt(_.trimEnd(percent, ' %'));
+    }
     this.setZoomLevel(percent / 100.0);
   }
 
@@ -83,11 +104,11 @@ export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> ex
     });
   }
 
-  removeLayer(layer: CanvasLayerModel) {
+  removeLayer(layer: LayerModel) {
     this.layers.removeModel(layer);
   }
 
-  addLayer(layer: CanvasLayerModel) {
+  addLayer(layer: LayerModel) {
     this.layers.addModel(layer);
     this.selectedLayer = layer;
   }
@@ -103,4 +124,28 @@ export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> ex
       return element.isSelected();
     });
   }
+
+  zoomToFit(margin: number = 0) {
+    let bounds = Rectangle.boundingBoxFromPolygons(
+      _.filter(
+        _.map(this.getElements(), element => {
+          return element.getDimensions();
+        }),
+        el => {
+          return !!el;
+        }
+      )
+    );
+
+    let zoomFactor = Math.min(
+      (this.viewport.getWidth() - margin - margin) / bounds.getWidth(),
+      (this.viewport.getHeight() - margin - margin) / bounds.getHeight()
+    );
+
+    this.setZoomLevel(zoomFactor);
+    this.setOffset(
+      margin + -1 * bounds.getTopLeft().x * this.zoom,
+      margin + -1 * bounds.getTopLeft().y * this.zoom
+    );
+  }
 }
diff --git a/src/primitives-core/canvas/SimpleCanvasWidget.tsx b/src/primitives-core/canvas/SimpleCanvasWidget.tsx
new file mode 100644
index 0000000..ea394a6
--- /dev/null
+++ b/src/primitives-core/canvas/SimpleCanvasWidget.tsx
@@ -0,0 +1,26 @@
+import * as React from 'react';
+import {BaseWidget, BaseWidgetProps} from '@projectstorm/react-core';
+import {DimensionTrackerWidget} from "../../tracking/DimensionTrackerWidget";
+import {DimensionTracker} from "../../tracking/DimensionTracker";
+
+export interface CanvasWidgetProps extends BaseWidgetProps {
+  forwardRef: React.RefObject<HTMLElement>
+  dimension: DimensionTracker;
+}
+
+export class SimpleCanvasWidget extends BaseWidget<CanvasWidgetProps> {
+
+  constructor(props: CanvasWidgetProps) {
+    super('src-canvas', props);
+  }
+
+  render() {
+    return (
+      <DimensionTrackerWidget reference={this.props.forwardRef} dimensionTracker={this.props.dimension}>
+        <div {...this.getProps()}  ref={this.props.forwardRef}>
+          { this.props.children }
+        </div>
+      </DimensionTrackerWidget>
+    );
+  }
+}
diff --git a/src/primitives-core/canvas/SmartCanvasWidget.tsx b/src/primitives-core/canvas/SmartCanvasWidget.tsx
new file mode 100644
index 0000000..f233949
--- /dev/null
+++ b/src/primitives-core/canvas/SmartCanvasWidget.tsx
@@ -0,0 +1,60 @@
+import * as React from 'react';
+import {BaseEvent, BaseWidget, BaseWidgetProps} from '@projectstorm/react-core';
+import * as _ from 'lodash';
+import {SimpleCanvasWidget} from "./SimpleCanvasWidget";
+import {CanvasEngine} from "../../CanvasEngine";
+import {CanvasEventWrapperWidget} from "./CanvasEventWrapperWidget";
+import {DimensionTracker} from "../../tracking/DimensionTracker";
+import {CanvasModel} from "./CanvasModel";
+import {Rectangle} from "../../geometry/Rectangle";
+
+export interface CanvasWidgetProps extends BaseWidgetProps {
+  model: CanvasModel;
+  engine: CanvasEngine;
+  inverseZoom?: boolean;
+}
+
+export interface CanvasWidgetState {}
+
+export class SmartCanvasWidget extends BaseWidget<CanvasWidgetProps, CanvasWidgetState> {
+
+  ref: React.RefObject<HTMLElement>;
+  dimension: DimensionTracker;
+  dimensionListener: any;
+
+  constructor(props: CanvasWidgetProps) {
+    super('src-canvas', props);
+    this.state = {};
+    this.ref = React.createRef();
+    this.dimension = new DimensionTracker();
+  }
+
+  componentDidMount(): void {
+    this.dimensionListener = this.dimension.addListener({
+      updated: (event: BaseEvent<any>) => {
+        this.props.model.setViewport(this.dimension.realDimensions);
+      }
+    })
+  }
+
+  componentWillUnmount(): void {
+    this.dimension.removeListener(this.dimensionListener);
+  }
+
+  render() {
+    return (
+        <CanvasEventWrapperWidget refObject={this.ref} engine={this.props.engine}>
+          <SimpleCanvasWidget forwardRef={this.ref} dimension={this.dimension}>
+            {_.map(this.props.engine.getModel().layers.getArray(), layer => {
+              return React.cloneElement(
+                this.props.engine.getFactoryForElement(layer).generateWidget(this.props.engine, layer),
+                {
+                  key: layer.getID()
+                }
+              );
+            })}
+          </SimpleCanvasWidget>
+        </CanvasEventWrapperWidget>
+    );
+  }
+}
diff --git a/src/sass/_CanvasWidget.scss b/src/primitives-core/canvas/_SimpleCanvasWidget.scss
similarity index 100%
rename from src/sass/_CanvasWidget.scss
rename to src/primitives-core/canvas/_SimpleCanvasWidget.scss
diff --git a/src/primitives-core/layer/LayerFactory.tsx b/src/primitives-core/layer/LayerFactory.tsx
new file mode 100644
index 0000000..fb6c5c0
--- /dev/null
+++ b/src/primitives-core/layer/LayerFactory.tsx
@@ -0,0 +1,20 @@
+import * as React from 'react';
+import { AbstractElementFactory } from '../../base-factories/AbstractElementFactory';
+import { LayerModel } from './LayerModel';
+import { CanvasEngine } from '../../CanvasEngine';
+import {SmartLayerWidget} from "./SmartLayerWidget";
+import "./_SimpleLayerWidget.scss"
+
+export class LayerFactory extends AbstractElementFactory<LayerModel> {
+  constructor() {
+    super('layer');
+  }
+
+  generateModel(): LayerModel {
+    return new LayerModel();
+  }
+
+  generateWidget(engine: CanvasEngine, model: LayerModel): JSX.Element {
+    return <SmartLayerWidget engine={engine} layer={model}  canvasModel={engine.getModel()}/>;
+  }
+}
diff --git a/src/models-canvas/CanvasLayerModel.ts b/src/primitives-core/layer/LayerModel.ts
similarity index 70%
rename from src/models-canvas/CanvasLayerModel.ts
rename to src/primitives-core/layer/LayerModel.ts
index 37e11fd..caa8f42 100644
--- a/src/models-canvas/CanvasLayerModel.ts
+++ b/src/primitives-core/layer/LayerModel.ts
@@ -1,9 +1,9 @@
-import { CanvasElementModel } from './CanvasElementModel';
-import { CanvasModel } from './CanvasModel';
-import { DeserializeEvent, Serializable } from '../base-models/BaseModel';
-import { GraphModelOrdered } from '../base-models/GraphModelOrdered';
+import { CanvasElementModel } from '../../models-canvas/CanvasElementModel';
+import { CanvasModel } from '../canvas/CanvasModel';
+import { DeserializeEvent, Serializable } from '../../base-models/BaseModel';
+import { GraphModelOrdered } from '../../base-models/GraphModelOrdered';
 
-export class CanvasLayerModel<T extends CanvasElementModel = CanvasElementModel> extends GraphModelOrdered<
+export class LayerModel<T extends CanvasElementModel = CanvasElementModel> extends GraphModelOrdered<
   T,
   CanvasModel
 > {
diff --git a/src/primitives-core/layer/SimpleLayerWidget.tsx b/src/primitives-core/layer/SimpleLayerWidget.tsx
new file mode 100644
index 0000000..0945074
--- /dev/null
+++ b/src/primitives-core/layer/SimpleLayerWidget.tsx
@@ -0,0 +1,38 @@
+import * as React from 'react';
+import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
+
+export interface SimpleLayerWidgetProps extends BaseWidgetProps {
+  offsetX?: number;
+  offsetY?: number;
+  zoom?: number;
+  svg: boolean;
+}
+
+export class SimpleLayerWidget extends BaseWidget<SimpleLayerWidgetProps> {
+  constructor(props: SimpleLayerWidgetProps) {
+    super('src-layer', props);
+    this.state = {};
+  }
+
+  getProps() {
+    let props = super.getProps();
+
+    if(this.props.offsetY || this.props.offsetY || this.props.zoom){
+      // do we apply
+      props['style'] = {
+        ...props['style'],
+        transform:
+          'translate(' + (this.props.offsetX || 0) + 'px,' + (this.props.offsetY || 0) + 'px) scale(' + (this.props.zoom || 0) + ')'
+      };
+    }
+    return props;
+  }
+
+  render() {
+    // it might be an SVG layer
+    if (this.props.svg) {
+      return <svg {...this.getProps()}>{this.props.children}</svg>;
+    }
+    return <div {...this.getProps()}>{this.props.children}</div>;
+  }
+}
diff --git a/src/primitives-core/layer/SmartLayerWidget.tsx b/src/primitives-core/layer/SmartLayerWidget.tsx
new file mode 100644
index 0000000..e618598
--- /dev/null
+++ b/src/primitives-core/layer/SmartLayerWidget.tsx
@@ -0,0 +1,42 @@
+import * as React from 'react';
+import * as _ from 'lodash';
+import {CanvasEngine} from "../../CanvasEngine";
+import {LayerModel} from "./LayerModel";
+import {SimpleLayerWidget} from "./SimpleLayerWidget";
+import {CanvasModel} from "../canvas/CanvasModel";
+
+export interface SmartLayerWidgetProps {
+  engine: CanvasEngine;
+  layer: LayerModel;
+  canvasModel: CanvasModel;
+}
+
+export class SmartLayerWidget extends React.Component<SmartLayerWidgetProps> {
+  constructor(props: SmartLayerWidgetProps) {
+    super(props);
+    this.state = {};
+  }
+
+  getChildren() {
+    return _.map(this.props.layer.getAllEntities(), element => {
+      return React.cloneElement(
+        this.props.engine.getFactoryForElement(element).generateWidget(this.props.engine, element),
+        { key: element.getID() }
+      );
+    });
+  }
+
+  render() {
+    return (
+      <SimpleLayerWidget
+        svg={this.props.layer.isSVG()}
+        engine={this.props.engine}
+        offsetX={this.props.canvasModel.getOffsetX()}
+        offsetY={this.props.canvasModel.getOffsetY()}
+        zoom={this.props.canvasModel.getZoomLevel()}
+      >
+        {this.getChildren()}
+      </SimpleLayerWidget>
+    )
+  }
+}
diff --git a/src/sass/_CanvasLayerWidget.scss b/src/primitives-core/layer/_SimpleLayerWidget.scss
similarity index 92%
rename from src/sass/_CanvasLayerWidget.scss
rename to src/primitives-core/layer/_SimpleLayerWidget.scss
index 191fb28..402a4b2 100644
--- a/src/sass/_CanvasLayerWidget.scss
+++ b/src/primitives-core/layer/_SimpleLayerWidget.scss
@@ -1,4 +1,4 @@
-.src-canvas-layer {
+.src-layer {
 	position: absolute;
 	height: 100%;
 	width: 100%;
diff --git a/src/primitives/ellipse/EllipseElementFactory.tsx b/src/primitives/ellipse/EllipseElementFactory.tsx
index c921fc2..ef88271 100644
--- a/src/primitives/ellipse/EllipseElementFactory.tsx
+++ b/src/primitives/ellipse/EllipseElementFactory.tsx
@@ -1,4 +1,4 @@
-import { AbstractElementFactory } from '../../AbstractElementFactory';
+import { AbstractElementFactory } from '../../base-factories/AbstractElementFactory';
 import { EllipseElementModel } from './EllipseElementModel';
 import { CanvasEngine } from '../../CanvasEngine';
 import { EllipseElementWidget } from './EllipseElementWidget';
diff --git a/src/primitives/grid/GridElementFactory.tsx b/src/primitives/grid/GridElementFactory.tsx
index 52833bd..b12b53f 100644
--- a/src/primitives/grid/GridElementFactory.tsx
+++ b/src/primitives/grid/GridElementFactory.tsx
@@ -1,4 +1,4 @@
-import { AbstractElementFactory } from '../../AbstractElementFactory';
+import { AbstractElementFactory } from '../../base-factories/AbstractElementFactory';
 import { GridElementModel } from './GridElementModel';
 import { CanvasEngine } from '../../CanvasEngine';
 import { GridElementWidget } from './GridElementWidget';
diff --git a/src/primitives/grid/GridElementWidget.tsx b/src/primitives/grid/GridElementWidget.tsx
index d0bf000..4a1b8ec 100644
--- a/src/primitives/grid/GridElementWidget.tsx
+++ b/src/primitives/grid/GridElementWidget.tsx
@@ -21,7 +21,7 @@ export class GridElementWidget extends BaseWidget<GridElementWidgetProps, GridEl
     let offsetX =
       this.props.engine.getModel().offsetX % (this.props.model.sizeX * this.props.engine.getModel().getZoomLevel());
     let spacingX = this.props.model.sizeX * this.props.engine.getModel().getZoomLevel();
-    let totalChildrenX = this.props.engine.getCanvasWidget().dimension.realDimensions.getWidth() / spacingX;
+    let totalChildrenX = this.props.engine.getModel().width / spacingX;
     for (let i = 0; i < totalChildrenX; i++) {
       let x = offsetX + spacingX * i;
       childrenX.push(
@@ -30,7 +30,7 @@ export class GridElementWidget extends BaseWidget<GridElementWidgetProps, GridEl
           stroke={this.props.model.color}
           strokeWidth={this.props.model.thickness}
           y1={0}
-          y2={this.props.engine.getCanvasWidget().dimension.realDimensions.getHeight()}
+          y2={this.props.engine.getModel().height}
           x1={x}
           x2={x}
         />
@@ -41,7 +41,7 @@ export class GridElementWidget extends BaseWidget<GridElementWidgetProps, GridEl
     let offsetY =
       this.props.engine.getModel().offsetY % (this.props.model.sizeY * this.props.engine.getModel().getZoomLevel());
     let spacingY = this.props.model.sizeY * this.props.engine.getModel().getZoomLevel();
-    let totalChildrenY = this.props.engine.getCanvasWidget().dimension.realDimensions.getHeight() / spacingY;
+    let totalChildrenY = this.props.engine.getModel().height / spacingY;
     for (let i = 0; i < totalChildrenY; i++) {
       let y = offsetY + spacingY * i;
       childrenY.push(
@@ -50,7 +50,7 @@ export class GridElementWidget extends BaseWidget<GridElementWidgetProps, GridEl
           stroke={this.props.model.color}
           strokeWidth={this.props.model.thickness}
           x1={0}
-          x2={this.props.engine.getCanvasWidget().dimension.realDimensions.getWidth()}
+          x2={this.props.engine.getModel().width}
           y1={y}
           y2={y}
         />
diff --git a/src/primitives/paper/PaperElementFactory.tsx b/src/primitives/paper/PaperElementFactory.tsx
index 1b7817d..499e6aa 100644
--- a/src/primitives/paper/PaperElementFactory.tsx
+++ b/src/primitives/paper/PaperElementFactory.tsx
@@ -1,4 +1,4 @@
-import { AbstractElementFactory } from '../../AbstractElementFactory';
+import { AbstractElementFactory } from '../../base-factories/AbstractElementFactory';
 import { PaperElementModel } from './PaperElementModel';
 import { CanvasEngine } from '../../CanvasEngine';
 import { PaperElementWidget } from './PaperElementWidget';
diff --git a/src/primitives/rectangle/RectangleElementFactory.tsx b/src/primitives/rectangle/RectangleElementFactory.tsx
index d064e4a..52a8128 100644
--- a/src/primitives/rectangle/RectangleElementFactory.tsx
+++ b/src/primitives/rectangle/RectangleElementFactory.tsx
@@ -1,4 +1,4 @@
-import { AbstractElementFactory } from '../../AbstractElementFactory';
+import { AbstractElementFactory } from '../../base-factories/AbstractElementFactory';
 import { RectangleElementModel } from './RectangleElementModel';
 import { RectangleElementWidget } from './RectangleElementWidget';
 import * as React from 'react';
diff --git a/src/primitives/selection/SelectionElementFactory.tsx b/src/primitives/selection/SelectionElementFactory.tsx
index bd052f0..bf04355 100644
--- a/src/primitives/selection/SelectionElementFactory.tsx
+++ b/src/primitives/selection/SelectionElementFactory.tsx
@@ -1,4 +1,4 @@
-import { AbstractElementFactory } from '../../AbstractElementFactory';
+import { AbstractElementFactory } from '../../base-factories/AbstractElementFactory';
 import { SelectionElementModel } from './SelectionElementModel';
 import { CanvasEngine } from '../../CanvasEngine';
 import { SelectionElementWidget } from './SelectionElementWidget';
diff --git a/src/primitives/selection/SelectionGroupWidget.tsx b/src/primitives/selection/SelectionGroupWidget.tsx
index 9a7ac9f..6854c31 100644
--- a/src/primitives/selection/SelectionGroupWidget.tsx
+++ b/src/primitives/selection/SelectionGroupWidget.tsx
@@ -1,11 +1,11 @@
 import * as React from 'react';
 import { BaseWidget, BaseWidgetProps, MouseWidget } from '@projectstorm/react-core';
-import { AnchorWidget } from '../../widgets/AnchorWidget';
+import { AnchorWidget } from '../../primitives-core/anchor/AnchorWidget';
 import { CanvasEngine } from '../../CanvasEngine';
 import { SelectionElementModel } from './SelectionElementModel';
 import { ModelAnchorInputPosition } from '../../state-machine/input/ModelAnchorInput';
 import { ModelRotateInput } from '../../state-machine/input/ModelRotateInput';
-import { SmartAnchorWidget } from '../../widgets/SmartAnchorWidget';
+import { SmartAnchorWidget } from '../../primitives-core/anchor/SmartAnchorWidget';
 
 export interface SelectionGroupWidgetProps extends BaseWidgetProps {
   model: SelectionElementModel;
diff --git a/src/sass/main.scss b/src/sass/main.scss
index 8ab8fd1..4bb1d50 100644
--- a/src/sass/main.scss
+++ b/src/sass/main.scss
@@ -1,5 +1,3 @@
-@import "CanvasWidget";
-@import "CanvasLayerWidget";
+@import "../primitives-core/canvas/SimpleCanvasWidget";
 @import "SelectionGroupWidget";
-@import "AnchorWidget";
 @import "PaperElementWidget";
diff --git a/src/tracking/DimensionTracker.ts b/src/tracking/DimensionTracker.ts
index b22bfae..d566307 100644
--- a/src/tracking/DimensionTracker.ts
+++ b/src/tracking/DimensionTracker.ts
@@ -1,4 +1,3 @@
-import { CanvasEngine } from '../CanvasEngine';
 import { Rectangle } from '../geometry/Rectangle';
 import { BaseEvent, BaseListener, BaseObject } from '@projectstorm/react-core';
 
@@ -16,17 +15,17 @@ export class DimensionTracker extends BaseObject<DimensionTrackerListener> {
     this.realDimensions = new Rectangle();
   }
 
-  recompute(canvasEngine: CanvasEngine, clientRect: ClientRect) {
+  recompute(clientRect: ClientRect) {
     this.realDimensions.updateDimensions(clientRect.left, clientRect.top, clientRect.width, clientRect.height);
   }
 
-  updateDimensions(canvasEngine: CanvasEngine, ClientRect: ClientRect) {
+  updateDimensions(ClientRect: ClientRect) {
     if (!this.enableTracking) {
       return false;
     }
 
     // store the real dimensions
-    this.recompute(canvasEngine, ClientRect);
+    this.recompute(ClientRect);
 
     // fire the update event
     this.iterateListeners('dimensions updated', (listener, event) => {
diff --git a/src/tracking/DimensionTrackerWidget.tsx b/src/tracking/DimensionTrackerWidget.tsx
index 54b13a8..7edfa0c 100644
--- a/src/tracking/DimensionTrackerWidget.tsx
+++ b/src/tracking/DimensionTrackerWidget.tsx
@@ -1,11 +1,9 @@
 import * as React from 'react';
 import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
 import { DimensionTracker } from './DimensionTracker';
-import { CanvasEngine } from '../CanvasEngine';
 
 export interface DimensionTrackerWidgetProps extends BaseWidgetProps {
   dimensionTracker: DimensionTracker;
-  engine: CanvasEngine;
   reference: { current: HTMLElement };
 }
 
@@ -22,7 +20,6 @@ export class DimensionTrackerWidget extends BaseWidget<DimensionTrackerWidgetPro
   updateDimensions() {
     if (this.props.reference.current) {
       this.props.dimensionTracker.updateDimensions(
-        this.props.engine,
         this.props.reference.current.getBoundingClientRect()
       );
     }
diff --git a/src/widgets/CanvasLayerWidget.tsx b/src/widgets/CanvasLayerWidget.tsx
deleted file mode 100644
index 62a2512..0000000
--- a/src/widgets/CanvasLayerWidget.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import * as React from 'react';
-import { CanvasEngine } from '../CanvasEngine';
-import { CanvasLayerModel } from '../models-canvas/CanvasLayerModel';
-import * as _ from 'lodash';
-import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
-
-export interface CanvasLayerWidgetProps extends BaseWidgetProps {
-  engine: CanvasEngine;
-  layer: CanvasLayerModel;
-}
-
-export interface CanvasLayerWidgetState {}
-
-export class CanvasLayerWidget extends BaseWidget<CanvasLayerWidgetProps, CanvasLayerWidgetState> {
-  constructor(props: CanvasLayerWidgetProps) {
-    super('src-canvas-layer', props);
-    this.state = {};
-  }
-
-  getProps() {
-    let canvas = this.props.engine.getModel();
-    let props = super.getProps();
-
-    // do we apply
-    if (this.props.layer.isTransformable()) {
-      props['style'] = {
-        ...props['style'],
-        transform:
-          'translate(' + canvas.getOffsetX() + 'px,' + canvas.getOffsetY() + 'px) scale(' + canvas.getZoomLevel() + ')'
-      };
-    }
-
-    return props;
-  }
-
-  getChildren() {
-    return _.map(this.props.layer.getAllEntities(), element => {
-      return React.cloneElement(
-        this.props.engine.getFactoryForElement(element).generateWidget(this.props.engine, element),
-        { key: element.getID() }
-      );
-    });
-  }
-
-  render() {
-    // it might be an SVG layer
-    if (this.props.layer.isSVG()) {
-      return <svg {...this.getProps()}>{this.getChildren()}</svg>;
-    }
-    return <div {...this.getProps()}>{this.getChildren()}</div>;
-  }
-}
diff --git a/src/widgets/CanvasWidget.tsx b/src/widgets/CanvasWidget.tsx
deleted file mode 100644
index 86d4aee..0000000
--- a/src/widgets/CanvasWidget.tsx
+++ /dev/null
@@ -1,154 +0,0 @@
-import * as React from 'react';
-import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
-import { CanvasEngine } from '../CanvasEngine';
-import * as _ from 'lodash';
-import { DimensionTrackerWidget } from '../tracking/DimensionTrackerWidget';
-import { DimensionTracker } from '../tracking/DimensionTracker';
-import { Rectangle } from '../geometry/Rectangle';
-import { KeyDownEvent, KeyUpEvent } from '../event-bus/events/key';
-import { MouseDownEvent, MouseMoveEvent, MouseUpEvent, MouseWheelEvent } from '../event-bus/events/mouse';
-
-export interface CanvasWidgetProps extends BaseWidgetProps {
-  engine: CanvasEngine;
-  inverseZoom?: boolean;
-}
-
-export interface CanvasWidgetState {}
-
-export class CanvasWidget extends BaseWidget<CanvasWidgetProps, CanvasWidgetState> {
-  dimension: DimensionTracker;
-  ref: { current: HTMLElement };
-
-  // handles
-  onKeyDownHandle: (event: any) => any;
-  onKeyUpHandle: (event: any) => any;
-  onMouseMoveHandle: (event: any) => any;
-  onMouseDownHandle: (event: any) => any;
-  onMouseUpHandle: (event: any) => any;
-  onMouseWheelHandle: (event: WheelEvent) => any;
-
-  constructor(props: CanvasWidgetProps) {
-    super('src-canvas', props);
-    this.state = {};
-    this.dimension = new DimensionTracker();
-
-    this.ref = (React as any).createRef();
-
-    this.onKeyDownHandle = (event: any) => {
-      this.props.engine.getEventBus().fireEvent(new KeyDownEvent(this, event.key));
-    };
-
-    this.onKeyUpHandle = (event: any) => {
-      this.props.engine.getEventBus().fireEvent(new KeyUpEvent(this, event.key));
-    };
-
-    this.onMouseMoveHandle = (event: MouseEvent) => {
-      this.props.engine.getEventBus().fireEvent(new MouseMoveEvent(this, event.clientX, event.clientY));
-    };
-
-    this.onMouseDownHandle = (event: MouseEvent) => {
-      this.props.engine.getEventBus().fireEvent(new MouseDownEvent(this, event.clientX, event.clientY));
-    };
-
-    this.onMouseUpHandle = (event: MouseEvent) => {
-      this.props.engine.getEventBus().fireEvent(new MouseUpEvent(this, event.clientX, event.clientY));
-    };
-
-    this.onMouseWheelHandle = event => {
-      this.props.engine
-        .getEventBus()
-        .fireEvent(new MouseWheelEvent(this, event.clientX, event.clientY, CanvasWidget.normalizeScrollWheel(event)));
-      event.stopPropagation();
-      event.preventDefault();
-    };
-  }
-
-  static normalizeScrollWheel(event: WheelEvent) {
-    let scrollDelta = event.deltaY;
-    // check if it is pinch gesture
-    if (event.ctrlKey && scrollDelta % 1 !== 0) {
-      /*
-                Chrome and Firefox sends wheel event with deltaY that
-                have fractional part, also `ctrlKey` prop of the event is true
-                though ctrl isn't pressed
-            */
-      return (scrollDelta /= 3);
-    }
-    return (scrollDelta /= 60);
-  }
-
-  componentWillMount() {
-    this.props.engine.setCanvasWidget(this);
-  }
-
-  componentDidMount() {
-    document.addEventListener('mousemove', this.onMouseMoveHandle);
-    document.addEventListener('keydown', this.onKeyDownHandle);
-    document.addEventListener('keyup', this.onKeyUpHandle);
-  }
-
-  componentWillUnmount() {
-    document.removeEventListener('mousemove', this.onMouseMoveHandle);
-    document.removeEventListener('keyup', this.onKeyUpHandle);
-    document.removeEventListener('keydown', this.onKeyDownHandle);
-    this.props.engine.setCanvasWidget(null);
-  }
-
-  getViewPort(): Rectangle {
-    let model = this.props.engine.getModel();
-    return new Rectangle(
-      -model.getOffsetX() / model.getZoomLevel(),
-      -model.getOffsetY() / model.getZoomLevel(),
-      this.dimension.realDimensions.getWidth() / model.getZoomLevel(),
-      this.dimension.realDimensions.getHeight() / model.getZoomLevel()
-    );
-  }
-
-  zoomToFit(margin: number = 0) {
-    let model = this.props.engine.getModel();
-    let bounds = Rectangle.boundingBoxFromPolygons(
-      _.filter(
-        _.map(model.getElements(), element => {
-          return element.getDimensions();
-        }),
-        el => {
-          return !!el;
-        }
-      )
-    );
-
-    let zoomFactor = Math.min(
-      (this.dimension.realDimensions.getWidth() - margin - margin) / bounds.getWidth(),
-      (this.dimension.realDimensions.getHeight() - margin - margin) / bounds.getHeight()
-    );
-
-    model.setZoomLevel(zoomFactor);
-    model.setOffset(
-      margin + -1 * bounds.getTopLeft().x * model.getZoomLevel(),
-      margin + -1 * bounds.getTopLeft().y * model.getZoomLevel()
-    );
-    this.forceUpdate();
-  }
-
-  render() {
-    return (
-      <DimensionTrackerWidget reference={this.ref} engine={this.props.engine} dimensionTracker={this.dimension}>
-        <div
-          {...this.getProps()}
-          ref={this.ref}
-          onWheel={this.onMouseWheelHandle}
-          onMouseDown={this.onMouseDownHandle}
-          onMouseUp={this.onMouseUpHandle}>
-          {_.map(this.props.engine.getModel().layers.getArray(), layer => {
-            return React.cloneElement(
-              this.props.engine.getFactoryForElement(layer).generateWidget(this.props.engine, layer),
-              {
-                key: layer.getID()
-              }
-            );
-          })}
-        </div>
-      </DimensionTrackerWidget>
-    );
-  }
-}

From e6352b6a1aa3088fbdba923bf69bbb096cefb6af Mon Sep 17 00:00:00 2001
From: Dylan Vorster <dylanvorster.dv@gmail.com>
Date: Thu, 21 Mar 2019 18:45:08 +0200
Subject: [PATCH 4/6] forgot about this

---
 src/primitives-core/canvas/SmartCanvasWidget.tsx | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/primitives-core/canvas/SmartCanvasWidget.tsx b/src/primitives-core/canvas/SmartCanvasWidget.tsx
index f233949..99cac76 100644
--- a/src/primitives-core/canvas/SmartCanvasWidget.tsx
+++ b/src/primitives-core/canvas/SmartCanvasWidget.tsx
@@ -6,7 +6,6 @@ import {CanvasEngine} from "../../CanvasEngine";
 import {CanvasEventWrapperWidget} from "./CanvasEventWrapperWidget";
 import {DimensionTracker} from "../../tracking/DimensionTracker";
 import {CanvasModel} from "./CanvasModel";
-import {Rectangle} from "../../geometry/Rectangle";
 
 export interface CanvasWidgetProps extends BaseWidgetProps {
   model: CanvasModel;
@@ -21,6 +20,7 @@ export class SmartCanvasWidget extends BaseWidget<CanvasWidgetProps, CanvasWidge
   ref: React.RefObject<HTMLElement>;
   dimension: DimensionTracker;
   dimensionListener: any;
+  engineListener: any;
 
   constructor(props: CanvasWidgetProps) {
     super('src-canvas', props);
@@ -34,11 +34,17 @@ export class SmartCanvasWidget extends BaseWidget<CanvasWidgetProps, CanvasWidge
       updated: (event: BaseEvent<any>) => {
         this.props.model.setViewport(this.dimension.realDimensions);
       }
+    });
+    this.engineListener = this.props.engine.addListener({
+      repaint: () => {
+        this.forceUpdate();
+      }
     })
   }
 
   componentWillUnmount(): void {
     this.dimension.removeListener(this.dimensionListener);
+    this.props.engine.removeListener(this.engineListener);
   }
 
   render() {

From 4a3f4b9add18c404039db40b97b53a3dab6da5ca Mon Sep 17 00:00:00 2001
From: Dylan Vorster <dylanvorster.dv@gmail.com>
Date: Thu, 21 Mar 2019 18:53:27 +0200
Subject: [PATCH 5/6] wip

---
 demos/demo-standard/index.story.tsx               | 3 ++-
 src/CanvasEngine.ts                               | 5 -----
 src/geometry/Polygon.ts                           | 4 ++++
 src/primitives-core/canvas/SimpleCanvasWidget.tsx | 2 +-
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/demos/demo-standard/index.story.tsx b/demos/demo-standard/index.story.tsx
index 2dd1420..7b4e077 100644
--- a/demos/demo-standard/index.story.tsx
+++ b/demos/demo-standard/index.story.tsx
@@ -21,9 +21,9 @@ storiesOf('Simple Usage', module).add('Full example', () => {
   model.setZoomLevel(1);
   engine.setModel(model);
 
+  engine.installDefaults();
   installDebugInteractivity(engine);
   installDefaultInteractivity(engine);
-  engine.installDefaults();
 
   // grid layer
   let layer2 = new LayerModel();
@@ -64,6 +64,7 @@ storiesOf('Simple Usage', module).add('Full example', () => {
 
   let squareModel3 = new RectangleElementModel();
   squareModel3.dimensions.updateDimensions(420, 420, 50, 70);
+  squareModel3.dimensions.rotate(33);
 
   layer.addModels([squareModel, squareModel2, squareModel3]);
 
diff --git a/src/CanvasEngine.ts b/src/CanvasEngine.ts
index 1a7fc2a..1ab4555 100644
--- a/src/CanvasEngine.ts
+++ b/src/CanvasEngine.ts
@@ -18,17 +18,12 @@ import {KeyInput} from './state-machine/input/KeyInput';
 import {ModelElementInput} from './state-machine/input/ModelElementInput';
 import {DefaultState} from './state-machine/states/DefaultState';
 import {Toolkit} from '@projectstorm/react-core';
-import {LayerModel} from './primitives-core/layer/LayerModel';
-import {SelectionElementModel} from './primitives/selection/SelectionElementModel';
 import {ModelEvent} from './event-bus/events/ModelEvent';
-import {InlineAction} from './event-bus/InlineAction';
 import {PaperElementFactory} from './primitives/paper/PaperElementFactory';
 import {BaseEvent, BaseObject} from '@projectstorm/react-core';
 import {BaseModel, DeserializeEvent} from './base-models/BaseModel';
-import {EllipseElementModel} from './primitives/ellipse/EllipseElementModel';
 import {DeselectModelsAction} from './event-bus/actions/DeselectModelsAction';
 import {CanvasFactory} from "./primitives-core/canvas/CanvasFactory";
-import {installDefaultInteractivity} from "./interactivity/default-interactivity";
 
 export class CanvasEngineError extends Error {
 }
diff --git a/src/geometry/Polygon.ts b/src/geometry/Polygon.ts
index 8b02dbf..2080dd0 100644
--- a/src/geometry/Polygon.ts
+++ b/src/geometry/Polygon.ts
@@ -50,6 +50,10 @@ export class Polygon {
     return this.points;
   }
 
+  rotate(degrees: number){
+    this.transform(Point.createRotateMatrix(degrees / (180 / Math.PI), this.getOrigin()))
+  }
+
   translate(offsetX: number, offsetY: number) {
     _.forEach(this.points, point => {
       point.translate(offsetX, offsetY);
diff --git a/src/primitives-core/canvas/SimpleCanvasWidget.tsx b/src/primitives-core/canvas/SimpleCanvasWidget.tsx
index ea394a6..4199a65 100644
--- a/src/primitives-core/canvas/SimpleCanvasWidget.tsx
+++ b/src/primitives-core/canvas/SimpleCanvasWidget.tsx
@@ -17,7 +17,7 @@ export class SimpleCanvasWidget extends BaseWidget<CanvasWidgetProps> {
   render() {
     return (
       <DimensionTrackerWidget reference={this.props.forwardRef} dimensionTracker={this.props.dimension}>
-        <div {...this.getProps()}  ref={this.props.forwardRef}>
+        <div {...this.getProps()} ref={this.props.forwardRef}>
           { this.props.children }
         </div>
       </DimensionTrackerWidget>

From d6da5813daa9520e3f5e282ebd3a6609278f4e90 Mon Sep 17 00:00:00 2001
From: Dylan Vorster <dylanvorster.dv@gmail.com>
Date: Thu, 21 Mar 2019 18:54:01 +0200
Subject: [PATCH 6/6] pretty and added rotate to polygons

---
 demos/demo-standard/index.story.tsx           |  6 +-
 demos/index.tsx                               |  2 +-
 src/CanvasEngine.ts                           | 60 +++++++++----------
 src/geometry/Polygon.ts                       |  4 +-
 src/interactivity/debug-interactivity.ts      | 10 ++--
 src/interactivity/default-interactivity.ts    | 14 ++---
 .../canvas/CanvasEventWrapperWidget.tsx       | 13 ++--
 src/primitives-core/canvas/CanvasFactory.tsx  |  8 +--
 src/primitives-core/canvas/CanvasModel.ts     | 15 ++---
 .../canvas/SimpleCanvasWidget.tsx             | 11 ++--
 .../canvas/SmartCanvasWidget.tsx              | 39 ++++++------
 src/primitives-core/layer/LayerFactory.tsx    |  6 +-
 src/primitives-core/layer/LayerModel.ts       |  5 +-
 .../layer/SimpleLayerWidget.tsx               | 10 +++-
 .../layer/SmartLayerWidget.tsx                | 13 ++--
 src/tracking/DimensionTrackerWidget.tsx       |  4 +-
 16 files changed, 107 insertions(+), 113 deletions(-)

diff --git a/demos/demo-standard/index.story.tsx b/demos/demo-standard/index.story.tsx
index 7b4e077..ef6fb59 100644
--- a/demos/demo-standard/index.story.tsx
+++ b/demos/demo-standard/index.story.tsx
@@ -8,9 +8,9 @@ import { storiesOf } from '@storybook/react';
 import { button } from '@storybook/addon-knobs';
 import { GridElementModel } from '../../src/primitives/grid/GridElementModel';
 import { PaperElementModel } from '../../src/primitives/paper/PaperElementModel';
-import {installDebugInteractivity} from "../../src/interactivity/debug-interactivity";
-import {installDefaultInteractivity} from "../../src/interactivity/default-interactivity";
-import {SmartCanvasWidget} from "../../src/primitives-core/canvas/SmartCanvasWidget";
+import { installDebugInteractivity } from '../../src/interactivity/debug-interactivity';
+import { installDefaultInteractivity } from '../../src/interactivity/default-interactivity';
+import { SmartCanvasWidget } from '../../src/primitives-core/canvas/SmartCanvasWidget';
 
 storiesOf('Simple Usage', module).add('Full example', () => {
   //setup canvas engine
diff --git a/demos/index.tsx b/demos/index.tsx
index 9ae3ad2..4f5e6ed 100644
--- a/demos/index.tsx
+++ b/demos/index.tsx
@@ -1,7 +1,7 @@
 import * as React from 'react';
 import { addDecorator } from '@storybook/react';
 import { setOptions } from '@storybook/addon-options';
-import { withKnobs} from '@storybook/addon-knobs/react';
+import { withKnobs } from '@storybook/addon-knobs/react';
 //include the SCSS for the demo
 import './.helpers/demo.scss';
 import '../src/sass/main.scss';
diff --git a/src/CanvasEngine.ts b/src/CanvasEngine.ts
index 1ab4555..4d2fc70 100644
--- a/src/CanvasEngine.ts
+++ b/src/CanvasEngine.ts
@@ -1,32 +1,31 @@
 import * as _ from 'lodash';
-import {AbstractElementFactory} from './base-factories/AbstractElementFactory';
-import {RectangleElementFactory} from './primitives/rectangle/RectangleElementFactory';
-import {CanvasModel} from './primitives-core/canvas/CanvasModel';
-import {SelectionElementFactory} from './primitives/selection/SelectionElementFactory';
-import {StateMachine} from './state-machine/StateMachine';
-import {TranslateCanvasState} from './state-machine/states/TranslateCanvasState';
-import {GridElementFactory} from './primitives/grid/GridElementFactory';
-import {EllipseElementFactory} from './primitives/ellipse/EllipseElementFactory';
-import {TranslateElementState} from './state-machine/states/TranslateElementState';
-import {SelectElementsState} from './state-machine/states/SelectElementsState';
-import {HistoryBank} from './history/HistoryBank';
-import {LayerFactory} from './primitives-core/layer/LayerFactory';
-import {EventBus} from './event-bus/EventBus';
-import {ZoomCanvasAction} from './event-bus/actions/ZoomCanvasAction';
-import {MouseDownInput} from './state-machine/input/MouseDownInput';
-import {KeyInput} from './state-machine/input/KeyInput';
-import {ModelElementInput} from './state-machine/input/ModelElementInput';
-import {DefaultState} from './state-machine/states/DefaultState';
-import {Toolkit} from '@projectstorm/react-core';
-import {ModelEvent} from './event-bus/events/ModelEvent';
-import {PaperElementFactory} from './primitives/paper/PaperElementFactory';
-import {BaseEvent, BaseObject} from '@projectstorm/react-core';
-import {BaseModel, DeserializeEvent} from './base-models/BaseModel';
-import {DeselectModelsAction} from './event-bus/actions/DeselectModelsAction';
-import {CanvasFactory} from "./primitives-core/canvas/CanvasFactory";
-
-export class CanvasEngineError extends Error {
-}
+import { AbstractElementFactory } from './base-factories/AbstractElementFactory';
+import { RectangleElementFactory } from './primitives/rectangle/RectangleElementFactory';
+import { CanvasModel } from './primitives-core/canvas/CanvasModel';
+import { SelectionElementFactory } from './primitives/selection/SelectionElementFactory';
+import { StateMachine } from './state-machine/StateMachine';
+import { TranslateCanvasState } from './state-machine/states/TranslateCanvasState';
+import { GridElementFactory } from './primitives/grid/GridElementFactory';
+import { EllipseElementFactory } from './primitives/ellipse/EllipseElementFactory';
+import { TranslateElementState } from './state-machine/states/TranslateElementState';
+import { SelectElementsState } from './state-machine/states/SelectElementsState';
+import { HistoryBank } from './history/HistoryBank';
+import { LayerFactory } from './primitives-core/layer/LayerFactory';
+import { EventBus } from './event-bus/EventBus';
+import { ZoomCanvasAction } from './event-bus/actions/ZoomCanvasAction';
+import { MouseDownInput } from './state-machine/input/MouseDownInput';
+import { KeyInput } from './state-machine/input/KeyInput';
+import { ModelElementInput } from './state-machine/input/ModelElementInput';
+import { DefaultState } from './state-machine/states/DefaultState';
+import { Toolkit } from '@projectstorm/react-core';
+import { ModelEvent } from './event-bus/events/ModelEvent';
+import { PaperElementFactory } from './primitives/paper/PaperElementFactory';
+import { BaseEvent, BaseObject } from '@projectstorm/react-core';
+import { BaseModel, DeserializeEvent } from './base-models/BaseModel';
+import { DeselectModelsAction } from './event-bus/actions/DeselectModelsAction';
+import { CanvasFactory } from './primitives-core/canvas/CanvasFactory';
+
+export class CanvasEngineError extends Error {}
 
 export interface CanvasEngineListener<T> {
   modelChanged?: (event: BaseEvent & { model: T; oldModel: T }) => any;
@@ -79,7 +78,7 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
     this.model = model;
     this.iterateListeners('Model changed', (listener, event) => {
       if (listener.modelChanged) {
-        listener.modelChanged({...event, model: model, oldModel: oldModel});
+        listener.modelChanged({ ...event, model: model, oldModel: oldModel });
       }
     });
 
@@ -128,7 +127,7 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
   }
 
   repaint() {
-    this.iterateListeners('repaint', (listener) => {
+    this.iterateListeners('repaint', listener => {
       if (listener.repaint) {
         listener.repaint();
       }
@@ -144,7 +143,6 @@ export class CanvasEngine<T extends CanvasModel = CanvasModel> extends BaseObjec
   }
 
   installDefaults() {
-
     // core factories
     this.registerElementFactory(new LayerFactory());
     this.registerElementFactory(new CanvasFactory());
diff --git a/src/geometry/Polygon.ts b/src/geometry/Polygon.ts
index 2080dd0..45500ab 100644
--- a/src/geometry/Polygon.ts
+++ b/src/geometry/Polygon.ts
@@ -50,8 +50,8 @@ export class Polygon {
     return this.points;
   }
 
-  rotate(degrees: number){
-    this.transform(Point.createRotateMatrix(degrees / (180 / Math.PI), this.getOrigin()))
+  rotate(degrees: number) {
+    this.transform(Point.createRotateMatrix(degrees / (180 / Math.PI), this.getOrigin()));
   }
 
   translate(offsetX: number, offsetY: number) {
diff --git a/src/interactivity/debug-interactivity.ts b/src/interactivity/debug-interactivity.ts
index 158badc..dce8a11 100644
--- a/src/interactivity/debug-interactivity.ts
+++ b/src/interactivity/debug-interactivity.ts
@@ -1,7 +1,7 @@
-import {LayerModel} from "../primitives-core/layer/LayerModel";
-import {CanvasEngine} from "../CanvasEngine";
-import * as _ from "lodash";
-import {EllipseElementModel} from "../primitives/ellipse/EllipseElementModel";
+import { LayerModel } from '../primitives-core/layer/LayerModel';
+import { CanvasEngine } from '../CanvasEngine';
+import * as _ from 'lodash';
+import { EllipseElementModel } from '../primitives/ellipse/EllipseElementModel';
 
 export const installDebugInteractivity = (engine: CanvasEngine) => {
   // debug layer
@@ -34,4 +34,4 @@ export const installDebugInteractivity = (engine: CanvasEngine) => {
       });
     }
   });
-};
\ No newline at end of file
+};
diff --git a/src/interactivity/default-interactivity.ts b/src/interactivity/default-interactivity.ts
index 4befcad..84fc4e9 100644
--- a/src/interactivity/default-interactivity.ts
+++ b/src/interactivity/default-interactivity.ts
@@ -1,9 +1,9 @@
-import {LayerModel} from "../primitives-core/layer/LayerModel";
-import {InlineAction} from "../event-bus/InlineAction";
-import {ModelEvent} from "../event-bus/events/ModelEvent";
-import * as _ from "lodash";
-import {SelectionElementModel} from "../primitives/selection/SelectionElementModel";
-import {CanvasEngine} from "../CanvasEngine";
+import { LayerModel } from '../primitives-core/layer/LayerModel';
+import { InlineAction } from '../event-bus/InlineAction';
+import { ModelEvent } from '../event-bus/events/ModelEvent';
+import * as _ from 'lodash';
+import { SelectionElementModel } from '../primitives/selection/SelectionElementModel';
+import { CanvasEngine } from '../CanvasEngine';
 
 export const installDefaultInteractivity = (engine: CanvasEngine) => {
   // selection layer
@@ -41,4 +41,4 @@ export const installDefaultInteractivity = (engine: CanvasEngine) => {
       }
     })
   );
-};
\ No newline at end of file
+};
diff --git a/src/primitives-core/canvas/CanvasEventWrapperWidget.tsx b/src/primitives-core/canvas/CanvasEventWrapperWidget.tsx
index ddf317d..ace466f 100644
--- a/src/primitives-core/canvas/CanvasEventWrapperWidget.tsx
+++ b/src/primitives-core/canvas/CanvasEventWrapperWidget.tsx
@@ -1,7 +1,7 @@
 import * as React from 'react';
-import {CanvasEngine} from "../../CanvasEngine";
-import {KeyDownEvent, KeyUpEvent} from "../../event-bus/events/key";
-import {MouseDownEvent, MouseMoveEvent, MouseUpEvent, MouseWheelEvent} from "../../event-bus/events/mouse";
+import { CanvasEngine } from '../../CanvasEngine';
+import { KeyDownEvent, KeyUpEvent } from '../../event-bus/events/key';
+import { MouseDownEvent, MouseMoveEvent, MouseUpEvent, MouseWheelEvent } from '../../event-bus/events/mouse';
 
 export interface CanvasEventWrapperWidgetProps {
   engine: CanvasEngine;
@@ -10,7 +10,6 @@ export interface CanvasEventWrapperWidgetProps {
 }
 
 export class CanvasEventWrapperWidget extends React.Component<CanvasEventWrapperWidgetProps> {
-
   // handles
   onKeyDownHandle: (event: any) => any;
   onKeyUpHandle: (event: any) => any;
@@ -45,7 +44,9 @@ export class CanvasEventWrapperWidget extends React.Component<CanvasEventWrapper
     this.onMouseWheelHandle = event => {
       this.props.engine
         .getEventBus()
-        .fireEvent(new MouseWheelEvent(this, event.clientX, event.clientY, CanvasEventWrapperWidget.normalizeScrollWheel(event)));
+        .fireEvent(
+          new MouseWheelEvent(this, event.clientX, event.clientY, CanvasEventWrapperWidget.normalizeScrollWheel(event))
+        );
       event.stopPropagation();
       event.preventDefault();
     };
@@ -84,6 +85,6 @@ export class CanvasEventWrapperWidget extends React.Component<CanvasEventWrapper
   }
 
   render() {
-    return this.props.children
+    return this.props.children;
   }
 }
diff --git a/src/primitives-core/canvas/CanvasFactory.tsx b/src/primitives-core/canvas/CanvasFactory.tsx
index 1e422e2..8450480 100644
--- a/src/primitives-core/canvas/CanvasFactory.tsx
+++ b/src/primitives-core/canvas/CanvasFactory.tsx
@@ -1,9 +1,9 @@
 import * as React from 'react';
 import { AbstractElementFactory } from '../../base-factories/AbstractElementFactory';
 import { CanvasEngine } from '../../CanvasEngine';
-import "./_SimpleCanvasWidget.scss"
-import {CanvasModel} from "./CanvasModel";
-import {SmartCanvasWidget} from "./SmartCanvasWidget";
+import './_SimpleCanvasWidget.scss';
+import { CanvasModel } from './CanvasModel';
+import { SmartCanvasWidget } from './SmartCanvasWidget';
 
 export class CanvasFactory extends AbstractElementFactory<CanvasModel> {
   constructor() {
@@ -15,6 +15,6 @@ export class CanvasFactory extends AbstractElementFactory<CanvasModel> {
   }
 
   generateWidget(engine: CanvasEngine, model: CanvasModel): JSX.Element {
-    return <SmartCanvasWidget model={model} engine={engine} layer={model} canvasModel={model}/>;
+    return <SmartCanvasWidget model={model} engine={engine} layer={model} canvasModel={model} />;
   }
 }
diff --git a/src/primitives-core/canvas/CanvasModel.ts b/src/primitives-core/canvas/CanvasModel.ts
index 35cbbb8..3c5591c 100644
--- a/src/primitives-core/canvas/CanvasModel.ts
+++ b/src/primitives-core/canvas/CanvasModel.ts
@@ -4,7 +4,7 @@ import { CanvasElementModel } from '../../models-canvas/CanvasElementModel';
 import { BaseModel, BaseModelListener, DeserializeEvent } from '../../base-models/BaseModel';
 import { GraphModelOrdered } from '../../base-models/GraphModelOrdered';
 import { BaseEvent } from '@projectstorm/react-core';
-import {Rectangle} from "../../geometry/Rectangle";
+import { Rectangle } from '../../geometry/Rectangle';
 
 export interface CanvasModelListener<T extends CanvasModel = any> extends BaseModelListener<T> {
   offsetUpdated?(event: BaseEvent<T> & { offsetX: number; offsetY: number }): void;
@@ -65,7 +65,7 @@ export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> ex
     return this.zoom;
   }
 
-  setViewport(rect: Rectangle){
+  setViewport(rect: Rectangle) {
     this.viewport = rect;
     this.iterateListeners('viewport changed', (listener: CanvasModelListener, event) => {
       if (listener.viewportChanged) {
@@ -75,8 +75,8 @@ export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> ex
   }
 
   setZoomLevel(zoom: number) {
-    if(zoom < 0){
-      throw new Error("Zoom cannot be below zero");
+    if (zoom < 0) {
+      throw new Error('Zoom cannot be below zero');
     }
     this.zoom = zoom;
     this.iterateListeners('zoom changed', (listener: CanvasModelListener, event) => {
@@ -88,7 +88,7 @@ export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> ex
 
   setZoomPercent(percent: number | string) {
     // also accept string like '100%'
-    if(typeof percent === 'string'){
+    if (typeof percent === 'string') {
       percent = _.parseInt(_.trimEnd(percent, ' %'));
     }
     this.setZoomLevel(percent / 100.0);
@@ -143,9 +143,6 @@ export class CanvasModel<T extends CanvasModelListener = CanvasModelListener> ex
     );
 
     this.setZoomLevel(zoomFactor);
-    this.setOffset(
-      margin + -1 * bounds.getTopLeft().x * this.zoom,
-      margin + -1 * bounds.getTopLeft().y * this.zoom
-    );
+    this.setOffset(margin + -1 * bounds.getTopLeft().x * this.zoom, margin + -1 * bounds.getTopLeft().y * this.zoom);
   }
 }
diff --git a/src/primitives-core/canvas/SimpleCanvasWidget.tsx b/src/primitives-core/canvas/SimpleCanvasWidget.tsx
index 4199a65..e63f36f 100644
--- a/src/primitives-core/canvas/SimpleCanvasWidget.tsx
+++ b/src/primitives-core/canvas/SimpleCanvasWidget.tsx
@@ -1,15 +1,14 @@
 import * as React from 'react';
-import {BaseWidget, BaseWidgetProps} from '@projectstorm/react-core';
-import {DimensionTrackerWidget} from "../../tracking/DimensionTrackerWidget";
-import {DimensionTracker} from "../../tracking/DimensionTracker";
+import { BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
+import { DimensionTrackerWidget } from '../../tracking/DimensionTrackerWidget';
+import { DimensionTracker } from '../../tracking/DimensionTracker';
 
 export interface CanvasWidgetProps extends BaseWidgetProps {
-  forwardRef: React.RefObject<HTMLElement>
+  forwardRef: React.RefObject<HTMLElement>;
   dimension: DimensionTracker;
 }
 
 export class SimpleCanvasWidget extends BaseWidget<CanvasWidgetProps> {
-
   constructor(props: CanvasWidgetProps) {
     super('src-canvas', props);
   }
@@ -18,7 +17,7 @@ export class SimpleCanvasWidget extends BaseWidget<CanvasWidgetProps> {
     return (
       <DimensionTrackerWidget reference={this.props.forwardRef} dimensionTracker={this.props.dimension}>
         <div {...this.getProps()} ref={this.props.forwardRef}>
-          { this.props.children }
+          {this.props.children}
         </div>
       </DimensionTrackerWidget>
     );
diff --git a/src/primitives-core/canvas/SmartCanvasWidget.tsx b/src/primitives-core/canvas/SmartCanvasWidget.tsx
index 99cac76..d8bd209 100644
--- a/src/primitives-core/canvas/SmartCanvasWidget.tsx
+++ b/src/primitives-core/canvas/SmartCanvasWidget.tsx
@@ -1,11 +1,11 @@
 import * as React from 'react';
-import {BaseEvent, BaseWidget, BaseWidgetProps} from '@projectstorm/react-core';
+import { BaseEvent, BaseWidget, BaseWidgetProps } from '@projectstorm/react-core';
 import * as _ from 'lodash';
-import {SimpleCanvasWidget} from "./SimpleCanvasWidget";
-import {CanvasEngine} from "../../CanvasEngine";
-import {CanvasEventWrapperWidget} from "./CanvasEventWrapperWidget";
-import {DimensionTracker} from "../../tracking/DimensionTracker";
-import {CanvasModel} from "./CanvasModel";
+import { SimpleCanvasWidget } from './SimpleCanvasWidget';
+import { CanvasEngine } from '../../CanvasEngine';
+import { CanvasEventWrapperWidget } from './CanvasEventWrapperWidget';
+import { DimensionTracker } from '../../tracking/DimensionTracker';
+import { CanvasModel } from './CanvasModel';
 
 export interface CanvasWidgetProps extends BaseWidgetProps {
   model: CanvasModel;
@@ -16,7 +16,6 @@ export interface CanvasWidgetProps extends BaseWidgetProps {
 export interface CanvasWidgetState {}
 
 export class SmartCanvasWidget extends BaseWidget<CanvasWidgetProps, CanvasWidgetState> {
-
   ref: React.RefObject<HTMLElement>;
   dimension: DimensionTracker;
   dimensionListener: any;
@@ -39,7 +38,7 @@ export class SmartCanvasWidget extends BaseWidget<CanvasWidgetProps, CanvasWidge
       repaint: () => {
         this.forceUpdate();
       }
-    })
+    });
   }
 
   componentWillUnmount(): void {
@@ -49,18 +48,18 @@ export class SmartCanvasWidget extends BaseWidget<CanvasWidgetProps, CanvasWidge
 
   render() {
     return (
-        <CanvasEventWrapperWidget refObject={this.ref} engine={this.props.engine}>
-          <SimpleCanvasWidget forwardRef={this.ref} dimension={this.dimension}>
-            {_.map(this.props.engine.getModel().layers.getArray(), layer => {
-              return React.cloneElement(
-                this.props.engine.getFactoryForElement(layer).generateWidget(this.props.engine, layer),
-                {
-                  key: layer.getID()
-                }
-              );
-            })}
-          </SimpleCanvasWidget>
-        </CanvasEventWrapperWidget>
+      <CanvasEventWrapperWidget refObject={this.ref} engine={this.props.engine}>
+        <SimpleCanvasWidget forwardRef={this.ref} dimension={this.dimension}>
+          {_.map(this.props.engine.getModel().layers.getArray(), layer => {
+            return React.cloneElement(
+              this.props.engine.getFactoryForElement(layer).generateWidget(this.props.engine, layer),
+              {
+                key: layer.getID()
+              }
+            );
+          })}
+        </SimpleCanvasWidget>
+      </CanvasEventWrapperWidget>
     );
   }
 }
diff --git a/src/primitives-core/layer/LayerFactory.tsx b/src/primitives-core/layer/LayerFactory.tsx
index fb6c5c0..63d4ac3 100644
--- a/src/primitives-core/layer/LayerFactory.tsx
+++ b/src/primitives-core/layer/LayerFactory.tsx
@@ -2,8 +2,8 @@ import * as React from 'react';
 import { AbstractElementFactory } from '../../base-factories/AbstractElementFactory';
 import { LayerModel } from './LayerModel';
 import { CanvasEngine } from '../../CanvasEngine';
-import {SmartLayerWidget} from "./SmartLayerWidget";
-import "./_SimpleLayerWidget.scss"
+import { SmartLayerWidget } from './SmartLayerWidget';
+import './_SimpleLayerWidget.scss';
 
 export class LayerFactory extends AbstractElementFactory<LayerModel> {
   constructor() {
@@ -15,6 +15,6 @@ export class LayerFactory extends AbstractElementFactory<LayerModel> {
   }
 
   generateWidget(engine: CanvasEngine, model: LayerModel): JSX.Element {
-    return <SmartLayerWidget engine={engine} layer={model}  canvasModel={engine.getModel()}/>;
+    return <SmartLayerWidget engine={engine} layer={model} canvasModel={engine.getModel()} />;
   }
 }
diff --git a/src/primitives-core/layer/LayerModel.ts b/src/primitives-core/layer/LayerModel.ts
index caa8f42..d741e86 100644
--- a/src/primitives-core/layer/LayerModel.ts
+++ b/src/primitives-core/layer/LayerModel.ts
@@ -3,10 +3,7 @@ import { CanvasModel } from '../canvas/CanvasModel';
 import { DeserializeEvent, Serializable } from '../../base-models/BaseModel';
 import { GraphModelOrdered } from '../../base-models/GraphModelOrdered';
 
-export class LayerModel<T extends CanvasElementModel = CanvasElementModel> extends GraphModelOrdered<
-  T,
-  CanvasModel
-> {
+export class LayerModel<T extends CanvasElementModel = CanvasElementModel> extends GraphModelOrdered<T, CanvasModel> {
   protected name: string;
   protected svg: boolean;
   protected transform: boolean;
diff --git a/src/primitives-core/layer/SimpleLayerWidget.tsx b/src/primitives-core/layer/SimpleLayerWidget.tsx
index 0945074..971ad19 100644
--- a/src/primitives-core/layer/SimpleLayerWidget.tsx
+++ b/src/primitives-core/layer/SimpleLayerWidget.tsx
@@ -17,12 +17,18 @@ export class SimpleLayerWidget extends BaseWidget<SimpleLayerWidgetProps> {
   getProps() {
     let props = super.getProps();
 
-    if(this.props.offsetY || this.props.offsetY || this.props.zoom){
+    if (this.props.offsetY || this.props.offsetY || this.props.zoom) {
       // do we apply
       props['style'] = {
         ...props['style'],
         transform:
-          'translate(' + (this.props.offsetX || 0) + 'px,' + (this.props.offsetY || 0) + 'px) scale(' + (this.props.zoom || 0) + ')'
+          'translate(' +
+          (this.props.offsetX || 0) +
+          'px,' +
+          (this.props.offsetY || 0) +
+          'px) scale(' +
+          (this.props.zoom || 0) +
+          ')'
       };
     }
     return props;
diff --git a/src/primitives-core/layer/SmartLayerWidget.tsx b/src/primitives-core/layer/SmartLayerWidget.tsx
index e618598..200dfcf 100644
--- a/src/primitives-core/layer/SmartLayerWidget.tsx
+++ b/src/primitives-core/layer/SmartLayerWidget.tsx
@@ -1,9 +1,9 @@
 import * as React from 'react';
 import * as _ from 'lodash';
-import {CanvasEngine} from "../../CanvasEngine";
-import {LayerModel} from "./LayerModel";
-import {SimpleLayerWidget} from "./SimpleLayerWidget";
-import {CanvasModel} from "../canvas/CanvasModel";
+import { CanvasEngine } from '../../CanvasEngine';
+import { LayerModel } from './LayerModel';
+import { SimpleLayerWidget } from './SimpleLayerWidget';
+import { CanvasModel } from '../canvas/CanvasModel';
 
 export interface SmartLayerWidgetProps {
   engine: CanvasEngine;
@@ -33,10 +33,9 @@ export class SmartLayerWidget extends React.Component<SmartLayerWidgetProps> {
         engine={this.props.engine}
         offsetX={this.props.canvasModel.getOffsetX()}
         offsetY={this.props.canvasModel.getOffsetY()}
-        zoom={this.props.canvasModel.getZoomLevel()}
-      >
+        zoom={this.props.canvasModel.getZoomLevel()}>
         {this.getChildren()}
       </SimpleLayerWidget>
-    )
+    );
   }
 }
diff --git a/src/tracking/DimensionTrackerWidget.tsx b/src/tracking/DimensionTrackerWidget.tsx
index 7edfa0c..b484320 100644
--- a/src/tracking/DimensionTrackerWidget.tsx
+++ b/src/tracking/DimensionTrackerWidget.tsx
@@ -19,9 +19,7 @@ export class DimensionTrackerWidget extends BaseWidget<DimensionTrackerWidgetPro
 
   updateDimensions() {
     if (this.props.reference.current) {
-      this.props.dimensionTracker.updateDimensions(
-        this.props.reference.current.getBoundingClientRect()
-      );
+      this.props.dimensionTracker.updateDimensions(this.props.reference.current.getBoundingClientRect());
     }
   }