diff --git a/.babelrc b/.babelrc
new file mode 100644
index 0000000..2b7bafa
--- /dev/null
+++ b/.babelrc
@@ -0,0 +1,3 @@
+{
+ "presets": ["@babel/preset-env", "@babel/preset-react"]
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..12b0846
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+build/
+node_modules/
+config.js
diff --git a/config.example.js b/config.example.js
new file mode 100644
index 0000000..140f041
--- /dev/null
+++ b/config.example.js
@@ -0,0 +1,17 @@
+module.exports = {
+ title: 'EXAMPLE_TITLE',
+ SERVER_ROOT: 'http://localhost:4040',
+ EVENT_EXT: '/api//MAP2D_dev/rows',
+ CATEGORY_EXT: '/api//MAP2D_dev_category/rows',
+ EVENT_DESC_ROOT: '/api//MAP2D_dev/ids',
+ TAG_TREE_EXT: '/api//MAP2D_dev_tags/tree',
+ SITES_EXT: '/api//MAP2D_dev_sites/rows',
+ MAP_ANCHOR: [27.5813121, -18.5161798],
+ INCOMING_DATETIME_FORMAT: '%m/%d/%YT%H:%M',
+ MAPBOX_TOKEN: 'SOME_MAPBOX_TOKEN',
+ features: {
+ USE_TAGS: false,
+ USE_SEARCH: false,
+ USE_SITES: false
+ }
+}
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..c6a9001
--- /dev/null
+++ b/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+ TimeMap - Forensic Architecture
+
+
+
+
+
+
+
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..34953ed
--- /dev/null
+++ b/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "guerrero",
+ "version": "0.1.0",
+ "description": "",
+ "homepage": "",
+ "private": true,
+ "scripts": {
+ "dev": "webpack-dev-server --content-base static --mode development",
+ "build": "NODE_ENV=production webpack --mode production"
+ },
+ "dependencies": {
+ "babel-polyfill": "^6.26.0",
+ "d3": "^4.9.1",
+ "es6-promise": "^4.1.1",
+ "joi": "^14.0.1",
+ "leaflet": "^1.0.3",
+ "leaflet-polylinedecorator": "^1.3.2",
+ "normalizr": "^3.2.3",
+ "object-hash": "^1.3.0",
+ "react": "^15.5.4",
+ "react-dom": "^15.5.4",
+ "react-redux": "^5.0.4",
+ "react-tabs": "^1.0.0",
+ "redux": "^3.6.0",
+ "redux-thunk": "^2.2.0",
+ "reselect": "^3.0.1",
+ "uuid": "^3.1.0",
+ "video.js": "^5.19.2",
+ "whatwg-fetch": "^2.0.3"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.1.2",
+ "@babel/preset-env": "^7.1.0",
+ "@babel/preset-react": "^7.0.0",
+ "babel-loader": "^8.0.4",
+ "css-loader": "^1.0.0",
+ "file-loader": "^2.0.0",
+ "html-webpack-plugin": "^3.2.0",
+ "mini-css-extract-plugin": "^0.4.4",
+ "node-sass": "^4.9.4",
+ "redux-devtools": "^3.4.0",
+ "sass-loader": "^7.1.0",
+ "style-loader": "^0.23.1",
+ "webpack": "^4.20.2",
+ "webpack-cli": "^3.1.2",
+ "webpack-dev-server": "^3.1.9"
+ }
+}
diff --git a/src/actions/index.js b/src/actions/index.js
new file mode 100644
index 0000000..70c501d
--- /dev/null
+++ b/src/actions/index.js
@@ -0,0 +1,242 @@
+// TODO: relegate these URLs entirely to environment variables
+const EVENT_DATA_URL = `${process.env.SERVER_ROOT}${process.env.EVENT_EXT}`;
+const CATEGORY_URL = `${process.env.SERVER_ROOT}${process.env.CATEGORY_EXT}`;
+const TAG_TREE_URL = `${process.env.SERVER_ROOT}${process.env.TAG_TREE_EXT}`;
+const SITES_URL = `${process.env.SERVER_ROOT}${process.env.SITES_EXT}`;
+const eventUrlMap = (event) => `${process.env.SERVER_ROOT}${process.env.EVENT_DESC_ROOT}/${(event.id) ? event.id : event}`
+
+/*
+* Create an error notification object
+* Types: ['error', 'warning', 'good', 'neural']
+*/
+function makeError(type, id, message) {
+ return {
+ type: 'error',
+ id,
+ message: `${type} ${id}: ${message}`
+ }
+}
+
+export function fetchDomain() {
+ let events = [];
+ let categories = [];
+ let sites = [];
+ let notifications = [];
+ let tags = {};
+
+ function makeError(domainType) {
+ notifications.push({
+ message: `Something went wrong fetching ${domainType}. Check the URL or try disabling them in the config file.`,
+ type: 'error'
+ });
+ }
+
+ return dispatch => {
+ dispatch(toggleFetchingDomain());
+ const promises = [];
+
+ const eventPromise = fetch(EVENT_DATA_URL)
+ .then(response => response.json())
+ .then(jsonEv => { events = jsonEv; })
+ .catch(err => { makeError('events')});
+ promises.push(eventPromise);
+
+ const catPromise = fetch(CATEGORY_URL)
+ .then(response => response.json())
+ .then(jsonCat => { categories = jsonCat; })
+ .catch(err => { makeError('categories')});
+ promises.push(catPromise);
+
+ if (process.env.features.USE_SITES) {
+ const sitesPromise = fetch(SITES_URL)
+ .then(response => response.json())
+ .then(jsonSites => { sites = jsonSites; })
+ .catch(err => { makeError('sites')});
+ promises.push(sitesPromise);
+ }
+
+ if (process.env.features.USE_TAGS) {
+ const tagTreePromise = fetch(TAG_TREE_URL)
+ .then(response => response.json())
+ .then(jsonTagTree => { tags = jsonTagTree; })
+ .catch(err => { makeError('tags')});
+ promises.push(tagTreePromise);
+ }
+
+ return Promise.all(promises)
+ .then(reponse => {
+ dispatch(toggleFetchingDomain());
+ return { events, categories, sites, tags, notifications };
+ })
+ .catch(err => {
+ dispatch(fetchError(err.message))
+ dispatch(toggleFetchingDomain());
+ })
+ };
+}
+
+export const FETCH_ERROR = 'FETCH_ERROR';
+export function fetchError(message) {
+ return {
+ type: FETCH_ERROR,
+ message,
+ }
+}
+
+export const UPDATE_DOMAIN = 'UPDATE_DOMAIN';
+export function updateDomain(domain) {
+ return {
+ type: UPDATE_DOMAIN,
+ domain: {
+ events: domain.events,
+ categories: domain.categories,
+ tags: domain.tags,
+ sites: domain.sites,
+ notifications: domain.notifications
+ }
+ };
+}
+
+export function fetchEvents(events) {
+ return dispatch => {
+ dispatch(toggleFetchingEvents());
+ const urls = events.map(eventUrlMap);
+ return Promise.all(urls.map(url => fetch(url)
+ .then(response => response.json())
+ )
+ )
+ .then(json => {
+ dispatch(toggleFetchingEvents());
+ return json;
+ });
+ };
+}
+
+export const UPDATE_HIGHLIGHTED = 'UPDATE_HIGHLIGHTED';
+export function updateHighlighted(highlighted) {
+ return {
+ type: UPDATE_HIGHLIGHTED,
+ highlighted: highlighted
+ };
+}
+
+export const UPDATE_SELECTED = 'UPDATE_SELECTED';
+export function updateSelected(selected) {
+ return {
+ type: UPDATE_SELECTED,
+ selected: selected
+ };
+}
+
+export const UPDATE_DISTRICT = 'UPDATE_DISTRICT';
+export function updateDistrict(district) {
+ return {
+ type: UPDATE_DISTRICT,
+ district
+ };
+}
+
+export const UPDATE_FILTERS = 'UPDATE_FILTERS';
+export function updateFilters(filters) {
+ return {
+ type: UPDATE_FILTERS,
+ filters: filters
+ };
+}
+
+export const UPDATE_TIMERANGE = 'UPDATE_TIMERANGE';
+export function updateTimeRange(range) {
+ return {
+ type: UPDATE_TIMERANGE,
+ range
+ };
+}
+
+export const RESET_ALLFILTERS = 'RESET_ALLFILTERS';
+export function resetAllFilters() {
+ return {
+ type: RESET_ALLFILTERS
+ };
+}
+
+// UI
+
+export const TOGGLE_FETCHING_DOMAIN = 'TOGGLE_FETCHING_DOMAIN';
+export function toggleFetchingDomain() {
+ return {
+ type: TOGGLE_FETCHING_DOMAIN
+ };
+}
+
+export const TOGGLE_FETCHING_EVENTS = 'TOGGLE_FETCHING_EVENTS';
+export function toggleFetchingEvents() {
+ return {
+ type: TOGGLE_FETCHING_EVENTS
+ };
+}
+
+export const TOGGLE_VIEW = 'TOGGLE_VIEW';
+export function toggleView() {
+ return {
+ type: TOGGLE_VIEW
+ };
+}
+
+export const TOGGLE_TIMELINE = 'TOGGLE_TIMELINE';
+export function toggleTimeline() {
+ return {
+ type: TOGGLE_TIMELINE
+ };
+}
+
+export const TOGGLE_LANGUAGE = 'TOGGLE_LANGUAGE';
+export function toggleLanguage(language) {
+ return {
+ type: TOGGLE_LANGUAGE,
+ language,
+ }
+}
+
+export const OPEN_TOOLBAR = 'OPEN_TOOLBAR';
+export function openToolbar(toolbarTab = 0) {
+ return {
+ type: OPEN_TOOLBAR,
+ toolbarTab: toolbarTab,
+ };
+}
+
+export const CLOSE_TOOLBAR = 'CLOSE_TOOLBAR';
+export function closeToolbar() {
+ return {
+ type: CLOSE_TOOLBAR
+ };
+}
+
+export const OPEN_CABINET = 'OPEN_CABINET';
+export function openCabinet(tabNum) {
+ return {
+ type: OPEN_CABINET,
+ tabNum: tabNum,
+ };
+}
+
+export const CLOSE_CABINET = 'CLOSE_CABINET';
+export function closeCabinet() {
+ return {
+ type: CLOSE_CABINET
+ };
+}
+
+export const TOGGLE_INFOPOPUP = 'TOGGLE_INFOPOPUP';
+export function toggleInfoPopup() {
+ return {
+ type: TOGGLE_INFOPOPUP
+ };
+}
+
+export const TOGGLE_NOTIFICATIONS = 'TOGGLE_NOTIFICATIONS';
+export function toggleNotifications() {
+ return {
+ type: TOGGLE_NOTIFICATIONS
+ };
+}
diff --git a/src/assets/arrowdown.svg b/src/assets/arrowdown.svg
new file mode 100644
index 0000000..d161a68
--- /dev/null
+++ b/src/assets/arrowdown.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/src/assets/checkbox.svg b/src/assets/checkbox.svg
new file mode 100644
index 0000000..59b25af
--- /dev/null
+++ b/src/assets/checkbox.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/src/assets/close.svg b/src/assets/close.svg
new file mode 100644
index 0000000..32334cb
--- /dev/null
+++ b/src/assets/close.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/src/components/App.jsx b/src/components/App.jsx
new file mode 100644
index 0000000..5dc0868
--- /dev/null
+++ b/src/components/App.jsx
@@ -0,0 +1,16 @@
+import '../scss/main.scss';
+import React from 'react';
+import Dashboard from './Dashboard.jsx';
+
+class App extends React.Component {
+
+ render() {
+ return (
+
+
+
+ );
+ }
+}
+
+export default App;
diff --git a/src/components/Card.jsx b/src/components/Card.jsx
new file mode 100644
index 0000000..010aacf
--- /dev/null
+++ b/src/components/Card.jsx
@@ -0,0 +1,230 @@
+import '../scss/main.scss';
+import copy from '../js/data/copy.json';
+import {isNotNullNorUndefined} from '../js/data/utilities';
+import React from 'react';
+
+class Card extends React.Component {
+
+ constructor(props) {
+ super(props);
+ this.state = {
+ isFolded: true
+ };
+
+ this.toggle = this.toggle.bind(this);
+ }
+
+ toggle() {
+ if (this.state.isFolded) {
+ this.props.highlight(this.props.event);
+ } else {
+ this.props.highlight();
+ }
+ this.setState({
+ isFolded: !this.state.isFolded
+ });
+ }
+
+ getCategoryColorClass(category) {
+ if (category)
+ return this.props.getCategoryGroup(category);
+ return 'other';
+ }
+
+ renderWarning() {
+ const warning_lang = copy[this.props.language].cardstack.warning;
+
+ if (this.props.event.tags) {
+ const tagsArray = this.props.event.tags.split(",");
+ /* TODO: This needs to be generalized */
+ if (tagsArray.some(tag => {
+ return (tag.name === 'contradicción' ||
+ tag.name === 'declaración con sospecha de tortura')
+ })) {
+ return ({warning_lang}
);
+ }
+ }
+ }
+
+ renderCategory() {
+ const category_lang = copy[this.props.language].cardstack.category;
+
+ const colorType = this.getCategoryColorClass(this.props.event.category);
+ const categoryLabel = this.props.getCategoryLabel(this.props.event.category);
+
+ return (
+
{category_lang}
+
{categoryLabel}
+
);
+ }
+
+ // NB: is this function for a future feature?
+ renderIncidents() {
+ const incident_type_lang = copy[this.props.language].cardstack.incident_type;
+ const incidentTags = []; //this.props.event.tags.filter(tag => tag.type === 'incident_type');
+
+ return (
+
{incident_type_lang}
+ {
+ incidentTags.map((tag, idx) => {
+ return (
+ {tag.name}{
+ (idx < incidentTags.length - 1)
+ ? ','
+ : ''
+ }
+ );
+ })
+ }
+
);
+ }
+
+ renderSummary() {
+ const summary = copy[this.props.language].cardstack.description;
+ const desc = this.props.event.description;
+ const description = (this.state.isFolded) ? `${desc.substring(0, 40)}...` : desc;
+ return (
+
{summary}
+
{description}
+
);
+ }
+
+ renderTags() {
+ const people_lang = copy[this.props.language].cardstack.people;
+ const peopleTags = []; //this.props.event.tags.filter(tag => tag.type === 'people');
+
+ return (
+
{people_lang}
+
{
+ peopleTags.map((tag, idx) => {
+ return (
+ {tag.name}
+ {
+ (idx < peopleTags.length - 1)
+ ? ','
+ : ''
+ }
+ );
+ })
+ }
+
);
+ }
+
+ // NB: is this function for a future feature? Should also be internaionalized.
+ renderLocation() {
+ const location_lang = copy[this.props.language].cardstack.location;
+ if (isNotNullNorUndefined(this.props.event.location)) {
+ return (
+
{location_lang}
+ {this.props.event.location}
+ );
+ } else {
+ return (
+
{location_lang}
+ Sin localización conocida.
+ );
+ }
+ }
+
+ renderSource() {
+ const source_lang = copy[this.props.language].cardstack.source;
+ return (
+
{source_lang}
+
{this.props.event.source}
+
);
+ }
+
+ // NB: should be internaionalized.
+ renderTimestamp() {
+ const daytime_lang = copy[this.props.language].cardstack.timestamp;
+ const estimated_lang = copy[this.props.language].cardstack.estimated;
+
+ if (isNotNullNorUndefined(this.props.event.timestamp)) {
+ const timestamp = this.props.tools.parser(this.props.event.timestamp);
+ const timelabel = this.props.tools.formatterWithYear(timestamp);
+ return (
+
{daytime_lang}
+ {timelabel}
+ );
+ } else {
+ return (
+
{daytime_lang}
+ Hora no conocida
+ );
+ }
+ }
+
+ renderHeader() {
+ return (
+ {this.renderWarning()}
+ {this.renderCategory()}
+ {this.renderTimestamp()}
+ {this.renderSummary()}
+
);
+ }
+
+ renderContent() {
+ if (this.state.isFolded) {
+ return (
);
+ } else if (this.props.isFetchingEvents) {
+ return (
+ {this.renderSpinner()}
+
);
+ } else {
+ if (!this.props.event.hasOwnProperty('receiver') && !this.props.event.hasOwnProperty('transmitter')) {
+ return (
+ {this.renderTimestamp()}
+ {this.renderLocation()}
+ {this.renderTags()}
+ {this.renderSource()}
+
);
+ } else {
+ return (
+ {this.renderTimestamp()}
+ {this.renderTags()}
+ {this.renderSource()}
+
);
+ }
+ }
+ }
+
+
+ renderSpinner() {
+ return ();
+ }
+
+ renderArrow() {
+ let classes = (this.state.isFolded)
+ ? 'arrow-down folded'
+ : 'arrow-down';
+ return ();
+ }
+
+ render() {
+ if (this.props.isLoading) {
+ return (
+
+ {this.renderSpinner()}
+
+ );
+ } else {
+ return (
+ {this.renderHeader()}
+ {this.renderContent()}
+ {this.renderArrow()}
+ );
+ }
+ }
+}
+
+export default Card;
diff --git a/src/components/CardStack.jsx b/src/components/CardStack.jsx
new file mode 100644
index 0000000..84b8d6f
--- /dev/null
+++ b/src/components/CardStack.jsx
@@ -0,0 +1,99 @@
+import '../scss/main.scss';
+import React from 'react';
+import Card from './Card.jsx';
+import copy from '../js/data/copy.json';
+import {
+ isNotNullNorUndefined
+} from '../js/data/utilities.js';
+
+class CardStack extends React.Component {
+
+ constructor(props) {
+ super(props);
+ }
+
+ renderCards() {
+ if (this.props.selected.length > 0) {
+ return this.props.selected.map((event) => {
+ // if event has property 'name', update with event details
+ const shouldCardUpdate = (event.name);
+
+ return (
+
+ );
+ });
+ } else {
+ return '';
+ }
+ }
+
+ renderLocation() {
+ let locationName = copy[this.props.language].cardstack.unknown_location;
+ if (this.props.selected.length > 0) {
+ if (isNotNullNorUndefined(this.props.selected[0].location)) {
+ locationName = this.props.selected[0].location;
+ }
+ return (in:{` ${locationName}`}
)
+ }
+ return '';
+ }
+
+ render() {
+ const header_lang = copy[this.props.language].cardstack.header;
+
+ if (this.props.isFetchingEvents) {
+ return (
+
+ );
+ } else if (this.props.selected.length > 0) {
+ return (
+
+ );
+ }
+ return
;
+ }
+}
+
+export default CardStack;
diff --git a/src/components/Checkbox.jsx b/src/components/Checkbox.jsx
new file mode 100644
index 0000000..1d186b2
--- /dev/null
+++ b/src/components/Checkbox.jsx
@@ -0,0 +1,11 @@
+import '../scss/main.scss';
+import React from 'react';
+
+export default ({ label, isActive, onClickLabel, onClickCheckbox }) => (
+
+
onClickLabel()}>{label}
+
onClickCheckbox()}>
+
+
+
+);
diff --git a/src/components/Dashboard.jsx b/src/components/Dashboard.jsx
new file mode 100644
index 0000000..f16a91b
--- /dev/null
+++ b/src/components/Dashboard.jsx
@@ -0,0 +1,236 @@
+import '../scss/main.scss';
+import React from 'react';
+
+import { bindActionCreators } from 'redux';
+import { connect } from 'react-redux';
+import * as actions from '../actions';
+import * as selectors from '../selectors';
+
+import LoadingOverlay from './LoadingOverlay.jsx';
+import Viewport from './Viewport.jsx';
+import Toolbar from './Toolbar.jsx';
+import CardStack from './CardStack.jsx';
+import InfoPopUp from './InfoPopup.jsx';
+import Timeline from './Timeline.jsx';
+import Notification from './Notification.jsx';
+
+class Dashboard extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.handleHighlight = this.handleHighlight.bind(this);
+ this.handleSelect = this.handleSelect.bind(this);
+ this.handleToggle = this.handleToggle.bind(this);
+ this.handleFilter = this.handleFilter.bind(this);
+ }
+
+ componentDidMount() {
+ if (!this.props.app.isMobile) {
+ this.props.actions.fetchDomain()
+ .then((domain) => this.props.actions.updateDomain(domain));
+ }
+ }
+
+ handleHighlight(highlighted) {
+ this.props.actions.updateHighlighted((highlighted) ? highlighted : null);
+ }
+
+ handleSelect(selected) {
+ if (selected) {
+ // attacks are not susceptible to tag filters, so make sure this happens only when they are found
+ // in the domain
+ let eventsToSelect = selected.map(eventId => this.props.domain.events[eventId]);
+ eventsToSelect = eventsToSelect.sort((a, b) => {
+ return this.props.ui.tools.parser(a.timestamp) - this.props.ui.tools.parser(b.timestamp);
+ });
+
+ if (eventsToSelect.every(event => (event))) {
+ this.props.actions.updateSelected(eventsToSelect);
+ }
+
+ // Now fetch detail data for each event
+ // Add transmitter and receiver data for coevents
+ this.props.actions.fetchEvents(selected)
+ .then((events) => {
+ let eventsSelected = events.map(ev => {
+ return Object.assign({}, ev, this.props.domain.events[ev.id]);
+ });
+
+ eventsSelected = eventsSelected.sort((a, b) => {
+ return this.props.ui.tools.parser(a.timestamp) - this.props.ui.tools.parser(b.timestamp);
+ });
+
+ this.props.actions.updateSelected(eventsSelected);
+ });
+ } else {
+ this.props.actions.updateSelected([]);
+ }
+ }
+
+ handleFilter(filters) {
+ this.props.actions.updateFilters(filters);
+ }
+
+ handleToggle( key ) {
+ switch( key ) {
+ case 'TOGGLE_CARDSTACK': {
+ this.props.actions.updateSelected([]);
+ break;
+ }
+ case 'TOGGLE_INFOPOPUP': {
+ this.props.actions.toggleInfoPopup();
+ break;
+ }
+ case 'TOGGLE_NOTIFICATIONS': {
+ this.props.actions.toggleNotifications();
+ break;
+ }
+ }
+ }
+
+ getCategoryGroup(category) {
+ const cat = this.props.domain.categories.find(t => t.category === category)
+ if (cat) return cat.group;
+ return 'other';
+ }
+
+ getCategoryGroupColor(category) {
+ const group = this.getCategoryGroup(category);
+ return this.props.ui.style.groupColors[group];
+ }
+
+ getCategoryLabel(category) {
+ const label = this.props.domain.categories.find(t => t.category === category).category_label;
+ return label;
+ }
+
+ renderTool() {
+ return (
+ this.getCategoryGroup(category)}
+ getCategoryGroupColor={category => this.getCategoryGroupColor(category)}
+ />
+ this.handleToggle(key) }
+ actions={this.props.actions}
+ />
+ this.getCategoryGroup(category)}
+ getCategoryGroupColor={category => this.getCategoryGroupColor(category)}
+ getCategoryLabel={category => this.getCategoryLabel(category)}
+ />
+ item)}
+ categoryGroups={this.props.domain.categoryGroups}
+
+ range={this.props.app.filters.range}
+ selected={this.props.app.selected}
+ language={this.props.app.language}
+
+ tools={this.props.ui.tools}
+ dom={this.props.ui.dom}
+
+ select={this.handleSelect}
+ filter={this.handleFilter}
+ highlight={this.handleHighlight}
+ toggle={() => this.handleToggle('TOGGLE_CARDSTACK')}
+ getCategoryGroup={category => this.getCategoryGroup(category)}
+ getCategoryGroupColor={category => this.getCategoryGroupColor(category)}
+ getCategoryLabel={category => this.getCategoryLabel(category)}
+ />
+ this.handleToggle('TOGGLE_INFOPOPUP')}
+ />
+ this.handleToggle('TOGGLE_NOTIFICATIONS')}
+ />
+
+
+ )
+ }
+
+ render() {
+ return ({this.renderTool()}
);
+ }
+}
+
+function mapStateToProps(state) {
+ return Object.assign({}, state, {
+ domain: Object.assign({}, state.domain, {
+
+ events: selectors.getFilteredEvents(state),
+ locations: selectors.getFilteredLocations(state),
+ categories: selectors.getFilteredCategories(state),
+ categoryGroups: selectors.getCategoryGroups(state),
+ sites: selectors.getSites(state),
+ tags: selectors.getTags(state),
+
+ notifications: state.domain.notifications,
+ }),
+ app: Object.assign({}, state.app, {
+ error: state.app.error,
+ filters: Object.assign({}, state.app.filters, {
+ range: selectors.getRangeFilter(state),
+ tags: selectors.getTagFilters(state)
+ })
+ }),
+ ui: state.ui
+ });
+}
+
+function mapDispatchToProps(dispatch) {
+ return {
+ actions: bindActionCreators(actions, dispatch)
+ };
+}
+
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps,
+)(Dashboard);
diff --git a/src/components/Icon.jsx b/src/components/Icon.jsx
new file mode 100644
index 0000000..39cb53c
--- /dev/null
+++ b/src/components/Icon.jsx
@@ -0,0 +1,83 @@
+import React from 'react';
+
+const Icon = ({ iconType }) => {
+ if (iconType === 'personas') {
+ return (
+
+
+
+
+
+
+
+
+
+ );
+ } else if (iconType === 'tipos') {
+ return (
+
+
+
+
+
+ );
+ } else if (iconType === 'hardware') {
+ return (
+
+
+
+ );
+ } else if (iconType === 'escenas') {
+ return (
+
+
+
+
+
+ );
+ } else if (iconType === 'docs') {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ )
+ } else if (iconType === 'search') {
+ return (
+
+
+
+
+ );
+ }
+}
+
+export default Icon;
diff --git a/src/components/InfoPopup.jsx b/src/components/InfoPopup.jsx
new file mode 100644
index 0000000..e795af0
--- /dev/null
+++ b/src/components/InfoPopup.jsx
@@ -0,0 +1,104 @@
+import React from 'react';
+import copy from '../js/data/copy.json';
+// NB: should we make this componetn part of a future feature?
+
+export default class InfoPopUp extends React.Component{
+
+ renderView2DCopy() {
+ return copy[this.props.app.language].legend.view2d.paragraphs.map(paragraph => {paragraph}
);
+ }
+
+ renderCategoryColors() {
+ const colors = copy[this.props.app.language].legend.view2d.colors.slice(0);
+ colors.reverse();
+ return (
+
+ {colors.map((color, idx) => {
+ return (
+
+ )
+ })}
+
+ )
+ }
+
+ renderView2DLegend() {
+ return (
+
+
this.props.toggle()} className="side-menu-burg over-white is-active">
+ {this.renderView2DCopy()}
+
+
+
+
+
+
+
+
+
+ {this.renderCategoryColors()}
+
+
+
+
+
+
+ )
+ }
+
+ renderView3DLegend() {
+ const lang = copy[this.props.app.language].legend.view3d;
+ return (
+
+
this.props.toggle()} className="side-menu-burg over-white is-active">
+ {lang.paragraphs.map(paragraph =>
{paragraph}
)}
+ {lang.colors.map(color => (
+
+ ))}
+
+ )
+ }
+
+ render() {
+ if (!this.props.ui.flags.isView2d) {
+ return ({this.renderView3DLegend()}
)
+ }
+ return (
+ {this.renderView2DLegend()}
+ )
+ }
+}
diff --git a/src/components/LoadingOverlay.jsx b/src/components/LoadingOverlay.jsx
new file mode 100644
index 0000000..ab7145e
--- /dev/null
+++ b/src/components/LoadingOverlay.jsx
@@ -0,0 +1,21 @@
+import React from 'react';
+import copy from '../js/data/copy.json';
+
+const LoadingOverlay = ({ ui, language }) => {
+ let classes = 'loading-overlay';
+ classes += (!ui.flags.isFetchingDomain) ? ' hidden' : '';
+
+ return (
+
+
+
{copy[language].loading}
+
+
+
+ );
+};
+
+export default LoadingOverlay;
diff --git a/src/components/Notification.jsx b/src/components/Notification.jsx
new file mode 100644
index 0000000..e718b9d
--- /dev/null
+++ b/src/components/Notification.jsx
@@ -0,0 +1,48 @@
+import React from 'react';
+
+export default class Notification extends React.Component{
+
+ constructor(props) {
+ super();
+ this.state = {
+ isExtended: false
+ }
+ }
+
+ toggleDetails() {
+ this.setState({ isExtended: !this.state.isExtended });
+ }
+
+ renderItems(items) {
+ if (!items) return '';
+ return (
+
+ {items.map((item) => {
+ if (item.error) {
+ return (
{item.error.message}
);
+ }
+ return '';
+ })}
+
+ )
+ }
+
+ render() {
+ if (this.props.isNotification) {
+ return (
+
+ {this.props.notifications.map(not => (
+
this.toggleDetails() }>
+
this.props.toggle()} className="side-menu-burg over-white is-active">
+
{`${not.message}`}
+
+ {(not.items !== null) ? this.renderItems(not.items) : ''}
+
+
+ ))}
+
+ )
+ }
+ return (
);
+ }
+}
diff --git a/src/components/Search.jsx b/src/components/Search.jsx
new file mode 100644
index 0000000..3cbc40e
--- /dev/null
+++ b/src/components/Search.jsx
@@ -0,0 +1,71 @@
+import React from 'react';
+import copy from '../js/data/copy.json';
+import TagFilter from './TagFilter.jsx';
+
+export default class Search extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ searchValue: undefined,
+ searchResults: []
+ }
+
+ this.handleSearchChange = this.handleSearchChange.bind(this);
+ this.handleSearchSubmit = this.handleSearchSubmit.bind(this);
+ }
+
+ handleSearchSubmit(e) {
+ e.preventDefault();
+ fetch(`api/search/${this.state.searchValue}`)
+ .then(response => response.json())
+ .then(json => {
+ this.setState({
+ searchResults: json.tags
+ })
+ });
+ }
+
+ handleSearchChange(event) {
+ this.setState({ searchValue: event.target.value });
+ }
+
+ renderSearchResults() {
+ return (
+ this.state.searchResults.map(tag => {
+ return (
+
+ );
+ })
+ );
+ }
+
+ render() {
+ return (
+
+
{copy[this.props.language].toolbar.panels.search.title}
+
+
+ {this.renderSearchResults()}
+
+
+ );
+ }
+ }
diff --git a/src/components/TagFilter.jsx b/src/components/TagFilter.jsx
new file mode 100644
index 0000000..0d91001
--- /dev/null
+++ b/src/components/TagFilter.jsx
@@ -0,0 +1,91 @@
+import '../scss/main.scss';
+import React from 'react';
+import Checkbox from './Checkbox.jsx';
+
+class TagFilter extends React.Component {
+ constructor(props) {
+ super(props);
+ }
+
+ isActive() {
+ if (this.props.isCategory) {
+ return this.props.categoryFilters.includes(this.props.tag.id);
+ }
+ return this.props.tagFilters.includes(this.props.tag.id);
+ }
+
+ onClickTag() {
+ if (this.isActive()) {
+ this.props.filter({
+ tags: this.props.tagFilters.filter(element => element !== this.props.tag.id)
+ });
+ } else {
+ this.props.filter({
+ tags: this.props.tagFilters.concat(this.props.tag.id)
+ });
+ }
+ }
+
+ onClickCategory() {
+ if (this.isActive()) {
+ this.props.filter({
+ categories: this.props.categoryFilters.filter(element => element !== this.props.tag.id)
+ });
+ } else {
+ this.props.filter({
+ categories: this.props.categoryFilters.concat(this.props.tag.id)
+ });
+ }
+ }
+
+ renderTag() {
+ const tag = this.props.tag;
+ let classes = (this.isActive()) ? 'tag-filter active' : 'tag-filter';
+ let label = `${tag.name} ( ${tag.mentions} )`;
+ if (this.props.isShowTree) {
+ label = `${tag.group} > ${tag.subgroup} > ${tag.name} ( ${tag.mentions} )`;
+ }
+ return (
+
+ this.onClickTag()}
+ onClickCheckbox={() => this.onClickTag()}
+ />
+
+ );
+ }
+
+ renderCategory() {
+ const category = this.props.categories[this.props.tag.id];
+ let classes = (this.isActive()) ? 'tag-filter active' : 'tag-filter';
+
+ if (category) {
+ return (
+
+ this.onClickCategory()}
+ onClickCheckbox={() => this.onClickCategory()}
+ />
+
+ );
+ }
+ return (
);
+ }
+
+ render() {
+ if (this.props.isCategory) return (this.renderCategory());
+ return (this.renderTag());
+ }
+}
+
+export default TagFilter;
diff --git a/src/components/TagListPanel.jsx b/src/components/TagListPanel.jsx
new file mode 100644
index 0000000..cfcb774
--- /dev/null
+++ b/src/components/TagListPanel.jsx
@@ -0,0 +1,94 @@
+import '../scss/main.scss';
+import React from 'react';
+import Checkbox from './Checkbox.jsx';
+
+class TagListPanel extends React.Component {
+
+ constructor(props) {
+ super(props);
+ this.state = {
+ treeComponents: []
+ }
+ this.treeComponents = [];
+ this.newTagFilters = [];
+ }
+
+ componentDidMount() {
+ this.computeTree(this.props.tags.children[this.props.tagType]);
+ }
+
+ componentWillReceiveProps(nextProps) {
+ this.computeTree(nextProps.tags.children[nextProps.tagType]);
+ }
+
+ traverseNodeAndCheckIt(node, depth, active) {
+ // do something to node
+ const tagFilter = this.newTagFilters.find(tagFilter => tagFilter.key === node.key)
+ tagFilter.active = (depth === 0) ? !node.active : active;
+ tagFilter.depth = depth;
+ depth = depth + 1;
+
+ if (Object.keys(tagFilter.children).length > 0) {
+ Object.values(tagFilter.children).forEach((childNode) => {
+ this.traverseNodeAndCheckIt(childNode, depth, tagFilters, tagFilter.active);
+ });
+ }
+ }
+
+ onClickCheckbox(tag) {
+ this.newTagFilters = this.props.tagFilters.slice(0);
+ let depth = 0;
+ if (tag.key && tag.children) this.traverseNodeAndCheckIt(tag, depth);
+
+ this.props.filter({ tags: this.newTagFilters });
+ }
+
+ createNodeComponent (node, depth) {
+ return (
+
+ this.onClickCheckbox(node)}
+ />
+
+ );
+ }
+
+ traverseNodeAndCreateComponent(node, depth) {
+ // add and create node component
+ const newComponent = this.createNodeComponent(node, depth);
+ this.treeComponents.push(newComponent)
+ depth = depth + 1;
+ if (Object.keys(node.children).length > 0) {
+ Object.values(node.children).forEach((childNode) => {
+ this.traverseNodeAndCreateComponent(childNode, depth);
+ });
+ }
+ }
+
+ computeTree (node) {
+ this.treeComponents = [];
+ let depth = 0;
+ this.traverseNodeAndCreateComponent(node, depth);
+ this.setState({ treeComponents: this.treeComponents });
+ }
+
+ renderTree() {
+ return this.state.treeComponents.map(c => c);
+ }
+
+ render() {
+ return (
+
+ {this.renderTree()}
+
+ );
+ }
+}
+
+export default TagListPanel;
diff --git a/src/components/Timeline.jsx b/src/components/Timeline.jsx
new file mode 100644
index 0000000..48471b5
--- /dev/null
+++ b/src/components/Timeline.jsx
@@ -0,0 +1,97 @@
+import '../scss/main.scss';
+import copy from '../js/data/copy.json';
+import React from 'react';
+import TimelineLogic from '../js/timeline/timeline.js';
+
+class Timeline extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {isFolded: false};
+ }
+
+ componentDidMount() {
+ const domain = {
+ events: this.props.events,
+ categoryGroups: this.props.categoryGroups
+ }
+ const app = {
+ range: this.props.range,
+ selected: this.props.selected,
+ language: this.props.language,
+ select: this.props.select,
+ filter: this.props.filter,
+ getCategoryLabel: this.props.getCategoryLabel,
+ getCategoryGroup: this.props.getCategoryGroup,
+ getCategoryGroupColor: this.props.getCategoryGroupColor
+ }
+ const ui = {
+ tools: this.props.tools,
+ dom: this.props.dom
+ }
+
+ this.timeline = new TimelineLogic(app, ui);
+ this.timeline.update(domain, app);
+ this.timeline.render(domain);
+ }
+
+ componentWillReceiveProps(nextProps) {
+ const domain = {
+ events: nextProps.events,
+ categoryGroups: nextProps.categoryGroups
+ }
+
+ const app = {
+ range: nextProps.range,
+ selected: nextProps.selected,
+ language: nextProps.language,
+ select: nextProps.select,
+ filter: nextProps.filter,
+ getCategoryLabel: nextProps.getCategoryLabel,
+ getCategoryGroup: nextProps.getCategoryGroup,
+ getCategoryGroupColor: nextProps.getCategoryGroupColor
+ }
+
+ this.timeline.update(domain, app);
+ this.timeline.render(domain);
+ }
+
+ onClickArrow() {
+ this.setState((prevState, props) => {
+ return {isFolded: !prevState.isFolded};
+ });
+ }
+
+ renderLabels() {
+ const labels = copy[this.props.language].timeline.labels;
+ return this.props.categoryGroups.map((label) => {
+ const groupLen = this.props.categoryGroups.length
+ return ({label}
);
+ });
+ }
+
+ render() {
+ const labels_title_lang = copy[this.props.language].timeline.labels_title;
+ const info_lang = copy[this.props.language].timeline.info;
+ let classes = `timeline-wrapper ${(this.state.isFolded) ? ' folded' : ''}`;
+ const date0 = this.props.tools.formatterWithYear(this.props.range[0]);
+ const date1 = this.props.tools.formatterWithYear(this.props.range[1]);
+ return (
+
+
+
this.onClickArrow()}>
+
+
+
+
{info_lang}
+
{date0} - {date1}
+
+
+
+
+ );
+ }
+}
+
+export default Timeline;
diff --git a/src/components/Toolbar.jsx b/src/components/Toolbar.jsx
new file mode 100644
index 0000000..3f96a71
--- /dev/null
+++ b/src/components/Toolbar.jsx
@@ -0,0 +1,235 @@
+import '../scss/main.scss';
+import React from 'react';
+import { Tab, Tabs, TabList, TabPanel } from 'react-tabs';
+import Search from './Search.jsx';
+import TagListPanel from './TagListPanel.jsx';
+import Icon from './Icon.jsx';
+import copy from '../js/data/copy.json';
+// NB: i think this entire component can actually be part of a future feature...
+
+class Toolbar extends React.Component {
+
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ tab: -1
+ };
+ }
+
+ toggleTab(tabIndex) {
+ if ( this.state.tab === tabIndex ) {
+ this.setState({ tab: -1 });
+ } else {
+ this.setState({ tab: tabIndex });
+ }
+ }
+
+ openCabinet() {
+ this.props.actions.openCabinet();
+ }
+
+ resetAllFilters() {
+ this.props.actions.resetAllFilters();
+ }
+
+ toggleInfoPopup() {
+ this.props.actions.toggleInfoPopup();
+ }
+
+ toggleLanguage() {
+ this.props.actions.toggleLanguage();
+ }
+
+ toggleMapViews(layer) {
+ const isLayerInView = !this.props.viewFilters[layer];
+ const newViews = {};
+ newViews[layer] = isLayerInView;
+ const views = Object.assign({}, this.props.viewFilters, newViews);
+ this.props.actions.updateFilters({ views });
+ }
+
+ renderMapActions() {
+ const isViewLayer = this.props.viewFilters;
+ const routeClass = (isViewLayer.routes) ? 'action-button active disabled' : 'action-button disabled'
+ const sitesClass = (isViewLayer.sites) ? 'action-button active disabled' : 'action-button disabled';
+ const coeventsClass = (isViewLayer.coevents) ? 'action-button active disabled' : 'action-button disabled';
+ if (this.props.isView2d) {
+ return (
+
+
this.toggleMapViews('routes')}
+ >
+
+
+
+
+
+
this.toggleMapViews('sites')}
+ >
+
+
+
+
+
this.toggleMapViews('coevents')}
+ >
+
+
+
+
+
+
+
+
+
+ );
+ }
+ return (
)
+ }
+
+ renderBottomActions() {
+ return (
+
+ {this.renderMapActions()}
+
+
{ /*this.toggleLanguage()*/}}>
+ {(this.props.language === 'es-MX') ? 'ES' : 'EN' }
+
+
{/*this.toggleInfoPopup()*/}}>
+ i
+
+
this.resetAllFilters()}>
+
+
+
+
+
+
+
+ );
+ }
+
+
+ renderPanelHeader() {
+ return (
+
+ );
+ }
+
+ renderToolbarTab(tabNum, key) {
+ const isActive = (tabNum === this.state.tab);
+ //let caption_lang = copy[this.props.language].toolbar.tabs[tabNum];
+ let classes = (isActive) ? 'toolbar-tab active' : 'toolbar-tab';
+ return (
+ { this.toggleTab(tabNum); }}>
+ {/*
*/}
+
{key}
+
+ );
+ }
+
+ renderToolbarTagRoot() {
+ if (this.props.features.USE_TAGS &&
+ this.props.tags.children) {
+ const roots = Object.values(this.props.tags.children);
+ return roots.map((root, idx) => {
+ return this.renderToolbarTab(idx, root.key);
+ })
+ }
+ return '';
+ }
+
+ renderToolbarTabs() {
+ const title = copy[this.props.language].toolbar.title;
+ return (
+
+
this.openCabinet()}>
{title}
+
+ {/*this.renderToolbarTab(0, 'search')*/}
+ {this.renderToolbarTagRoot()}
+
+ {/* {this.renderBottomActions()} */}
+
+ )
+ }
+
+ renderTagListPanel(tagType) {
+ const panels_lang = copy[this.props.language].toolbar.panels;
+ const title = (panels_lang[tagType]) ? panels_lang[tagType].title : tagType;
+ const overview = (panels_lang[tagType]) ? panels_lang[tagType].overview : '';
+
+ return (
+
+ );
+ }
+
+ renderSearch() {
+ if (this.props.features.USE_SEARCH) {
+ return (
+
+
+
+ )
+ }
+ }
+
+ renderToolbarTagList() {
+ if (this.props.features.USE_TAGS &&
+ this.props.tags.children) {
+ const roots = Object.values(this.props.tags.children);
+ return roots.map((root, idx) => {
+ return (
+
+ {this.renderTagListPanel(root.key)}
+
+ )
+ })
+ }
+ return '';
+ }
+
+ render() {
+ let classes = (this.state.tab !== -1) ? 'toolbar-panels' : 'toolbar-panels folded';
+
+ return (
+
+ );
+ }
+}
+
+export default Toolbar;
diff --git a/src/components/View2D.jsx b/src/components/View2D.jsx
new file mode 100644
index 0000000..da35994
--- /dev/null
+++ b/src/components/View2D.jsx
@@ -0,0 +1,61 @@
+import '../scss/main.scss';
+import React from 'react';
+import Map from '../js/map/map.js';
+import { areEqual } from '../js/data/utilities.js';
+
+class View2D extends React.Component {
+ constructor(props) {
+ super(props);
+ }
+
+ componentDidMount() {
+ const domain = {
+ locations: this.props.locations,
+ sites: this.props.sites,
+ categoryGroups: this.props.categoryGroups
+ }
+ const app = {
+ views: this.props.views,
+ selected: this.props.selected,
+ highlighted: this.props.highlighted,
+ getCategoryGroup: this.props.getCategoryGroup,
+ getCategoryGroupColor: this.props.getCategoryGroupColor,
+ mapAnchor: this.props.mapAnchor
+ }
+ const ui = {
+ style: this.props.uiStyle,
+ dom: this.props.dom
+ }
+
+ this.map = new Map(app, ui, this.props.select);
+ this.map.update(domain, app);
+ }
+
+ componentWillReceiveProps(nextProps) {
+ const domain = {
+ locations: nextProps.locations,
+ sites: nextProps.sites,
+ categoryGroups: nextProps.categoryGroups
+ }
+ const app = {
+ views: nextProps.views,
+ selected: nextProps.selected,
+ highlighted: nextProps.highlighted,
+ getCategoryGroup: nextProps.getCategoryGroup,
+ getCategoryGroupColor: nextProps.getCategoryGroupColor,
+ mapAnchor: this.props.mapAnchor
+ }
+
+ this.map.update(domain, app);
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
+
+export default View2D;
diff --git a/src/components/Viewport.jsx b/src/components/Viewport.jsx
new file mode 100644
index 0000000..78e17d6
--- /dev/null
+++ b/src/components/Viewport.jsx
@@ -0,0 +1,36 @@
+import '../scss/main.scss';
+import React from 'react';
+import View2D from './View2D.jsx';
+
+class Viewport extends React.Component {
+ constructor(props) {
+ super(props);
+ }
+
+ render() {
+ if( this.props.isView2d ) {
+ return (
+ this.props.getCategoryGroupColor(category)}
+ getCategoryGroup={category => this.props.getCategoryGroup(category)}
+ />
+ );
+ }
+ }
+}
+
+export default Viewport;
diff --git a/src/index.jsx b/src/index.jsx
new file mode 100644
index 0000000..7342aea
--- /dev/null
+++ b/src/index.jsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import { Provider } from 'react-redux';
+import store from './store/index.js';
+import App from './components/App.jsx';
+
+ReactDOM.render(
+
+
+ ,
+ document.getElementById('explore-app')
+);
diff --git a/src/js/data/copy.json b/src/js/data/copy.json
new file mode 100644
index 0000000..2138326
--- /dev/null
+++ b/src/js/data/copy.json
@@ -0,0 +1,144 @@
+{
+ "es-MX": {
+ "loading": "Cargando...",
+ "legend": {
+ "view2d": {
+ "paragraphs": [
+ "Seleccionando una serie de filtros verá aparecer eventos en el mapa y en la línea del tiempo.",
+ "Cada evento estará coloreado según la persona que dio el testimonio del evento."
+ ],
+ "colors": [
+ { "class": "category_group00", "label": "Category Group 00" },
+ { "class": "category_group01", "label": "Category Group 01" },
+ { "class": "category_group02", "label": "Category Group 02" },
+ { "class": "category_group03", "label": "Category Group 03" },
+ { "class": "other", "label": "Other categories" }
+ ]
+ }
+ },
+ "toolbar": {
+ "title": "TITLE",
+ "panels": {
+ "mentions": {
+ "title": "Personas",
+ "overview": "Seleccionar los nombres de personas mostrará eventos en los que esta persona o organización ha sido mencionada, incluyendo el propio testimonio. Entre paréntesis encontrará el número de menciones. Ej. (34)."
+ },
+ "categories": {
+ "title": "Testimonios",
+ "overview": "Seleccionar el nombre de una persona mostrará los eventos descritos por su testimonio. Entre paréntesis encontrará el número de eventos descritos. Ej. (34)."
+ },
+ "search": {
+ "title": "Directorio de etiquetas",
+ "placeholder": "Búsqueda"
+ }
+ }
+ },
+ "timeline": {
+ "zooms": [
+ "3 años",
+ "3 meses",
+ "3 días",
+ "12 horas",
+ "2 horas",
+ "30 min",
+ "10 min"
+ ],
+ "labels_title": "Testimonios",
+ "labels": [
+ "Testimony Group 00",
+ "Testimony Group 01",
+ "Testimony Group 02",
+ "Testimony Group 03",
+ "Other categories"
+ ],
+ "info": "Viendo eventos ocurridos entre"
+ },
+ "cardstack": {
+ "header": "eventos seleccionados",
+ "unknown_location": "Localización desconocida",
+ "timestamp": "Día y hora",
+ "estimated": "aproximado",
+ "location": "Localización",
+ "incident_type": "Tipo de acción",
+ "description": "Hechos",
+ "people": "Personas en el evento",
+ "source": "Fuente",
+ "category": "Según el testimonio de",
+ "communication": "Comunicación",
+ "transmitter": "Transmisor",
+ "receiver": "Receptor",
+ "warning": "(!) HECHOS CUESTIONADOS"
+ }
+ },
+ "en-US": {
+ "loading": "Loading...",
+ "legend": {
+ "view2d": {
+ "paragraphs": [
+ "Selecting a series of tags, you will be able to explore events on the map of Iguala and on the timeline.",
+ "Each event is colored according the person that gave category of the event."
+ ],
+ "colors": [
+ { "class": "category_group00", "label": "Category Group 00" },
+ { "class": "category_group01", "label": "Category Group 01" },
+ { "class": "category_group02", "label": "Category Group 02" },
+ { "class": "category_group03", "label": "Category Group 03" },
+ { "class": "other", "label": "Other categories" }
+ ]
+ }
+ },
+ "toolbar": {
+ "title": "TITLE",
+ "panels": {
+ "mentions": {
+ "title": "Mentions",
+ "overview": "Selecting the names of people/organisation will show events in which these have been mentioned in their own testistimony and by others. The number in the parentheses shows how many events contain a mention of a person or organisation, e.g. (34)"
+ },
+ "categories": {
+ "title": "Testimonies",
+ "overview": "Selecting the name of a person will show the events only according to a person’s category or category. The number in the parentheses show how many events are contained in each category, e.g. (34)."
+ },
+ "search": {
+ "title": "Directory of tags",
+ "placeholder": "Search"
+ }
+ }
+ },
+ "timeline": {
+ "zooms": [
+ "3 years",
+ "3 months",
+ "3 days",
+ "12 hours",
+ "2 hours",
+ "30 min",
+ "10 min"
+ ],
+ "labels_title": "Testimonies",
+ "labels": [
+ "Testimony Group 00",
+ "Testimony Group 01",
+ "Testimony Group 02",
+ "Testimony Group 03",
+ "Other"
+ ],
+ "info": "Seeing events occurred between"
+ },
+ "cardstack": {
+ "header": "selected events",
+ "timestamp": "Day and time",
+ "unknown_location": "Unknown location",
+ "estimated": "estimated",
+ "location": "Localization",
+ "incident_type": "Type of action",
+ "description": "Summary of facts",
+ "people": "People involved",
+ "source": "Source",
+ "category": "According to",
+ "communication": "Communication",
+ "transmitter": "Transmitter",
+ "receiver": "Receiver",
+ "warning": "(!) Highly questioned"
+ }
+ }
+}
diff --git a/src/js/data/es-MX.json b/src/js/data/es-MX.json
new file mode 100644
index 0000000..4dc2077
--- /dev/null
+++ b/src/js/data/es-MX.json
@@ -0,0 +1,10 @@
+{
+ "dateTime": "%x, %X",
+ "date": "%d/%m/%Y",
+ "time": "%-I:%M:%S %p",
+ "periods": ["AM", "PM"],
+ "days": ["domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado"],
+ "shortDays": ["dom", "lun", "mar", "mié", "jue", "vie", "sáb"],
+ "months": ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"],
+ "shortMonths": ["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"]
+}
diff --git a/src/js/data/utilities.js b/src/js/data/utilities.js
new file mode 100644
index 0000000..da8462d
--- /dev/null
+++ b/src/js/data/utilities.js
@@ -0,0 +1,37 @@
+/**
+ * Get URI params to start with predefined set of
+ * https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript
+ * @param {string} name: name of paramater to search
+ * @param {string} url: url passed as variable, defaults to window.location.href
+ */
+export function getParameterByName(name, url) {
+ if (!url) url = window.location.href;
+ name = name.replace(/[\[\]]/g, `\\$&`);
+
+ const regex = new RegExp(`[?&]${name}(=([^]*)|&|#|$)`);
+ const results = regex.exec(url);
+
+ if (!results) return null;
+ if (!results[2]) return '';
+
+ return decodeURIComponent(results[2].replace(/\+/g, ' '));
+}
+
+/**
+ * Compare two arrays of scalars
+ * @param {array} arr1: array of numbers
+ * @param {array} arr2: array of numbers
+ */
+export function areEqual(arr1, arr2) {
+ return ((arr1.length === arr2.length) && arr1.every((element, index) => {
+ return element === arr2[index];
+ }));
+}
+
+/**
+* Return whether the variable is neither null nor undefined
+* @param {object} variable
+*/
+export function isNotNullNorUndefined(variable) {
+ return (typeof variable !== 'undefined' && variable !== null);
+}
diff --git a/src/js/map/map.js b/src/js/map/map.js
new file mode 100644
index 0000000..4996228
--- /dev/null
+++ b/src/js/map/map.js
@@ -0,0 +1,393 @@
+import {
+ areEqual,
+ isNotNullNorUndefined
+} from '../data/utilities';
+import hash from 'object-hash';
+import 'leaflet-polylinedecorator';
+
+export default function(newApp, ui, select) {
+ let svg, g, defs;
+
+ let categoryColorGroups = {};
+
+ const domain = {
+ locations: [],
+ categoryGroups: [],
+ sites: []
+ }
+ const app = {
+ selected: [],
+ highlighted: null,
+ views: Object.assign({}, newApp.views),
+ }
+
+ const getCategoryGroup = newApp.getCategoryGroup;
+ const getCategoryGroupColor = newApp.getCategoryGroupColor;
+ const groupColors = ui.style.groupColors;
+
+ // Map Settings
+ const center = newApp.mapAnchor;
+ const maxBoundaries = [[180, -180], [-180, 180]];
+ const zoomLevel = 14;
+
+ // Initialize layer
+ const sitesLayer = L.layerGroup();
+ const pathLayer = L.layerGroup();
+
+ // Icons for markPoint flags (a yellow ring around a location)
+ const eventCircleMarkers = {};
+
+ // Styles for elements in map
+ const settingsSiteLabel = {
+ className: 'site-label',
+ opacity: 1,
+ permanent: true,
+ direction: 'top',
+ };
+
+
+ /**
+ * Creates a Leaflet map and a tilelayer for the map background
+ * @param {string} id: DOM element to create map onto
+ * @param {array} center: [lat, long] coordinates the map will be centered on
+ * @param {number} zoom: zoom level
+ */
+ function initBackgroundMap(id, zoom) {
+ /* http://bl.ocks.org/sumbera/10463358 */
+
+ const map = L.map(id)
+ .setView(center, zoom)
+ .setMinZoom(10)
+ .setMaxZoom(18)
+ .setMaxBounds(maxBoundaries);
+
+ // NB: configure tile endpoint
+ let s;
+ if (process.env.MAPBOX_TOKEN) {
+ s = L.tileLayer(
+ `http://a.tiles.mapbox.com/v4/mapbox.satellite/{z}/{x}/{y}@2x.png?access_token=${process.env.MAPBOX_TOKEN}`
+ );
+ } else {
+ s = L.tileLayer(`${process.env.SERVER_ROOT}/mapbox/{z}/{x}/{y}`);
+ }
+ s = s.addTo(map);
+
+ map.keyboard.disable();
+ const pane = d3.select(map.getPanes().overlayPane);
+ const boundingClient = d3.select(`#${id}`).node().getBoundingClientRect();
+ const width = boundingClient.width;
+ const height = boundingClient.height;
+
+ svg = pane.append('svg')
+ .attr('class', 'leaflet-svg')
+ .attr('width', width)
+ .attr('height', height);
+
+ g = svg.append('g');
+
+ svg.insert('defs', 'g')
+ .append('marker')
+ .attr('id', 'arrow')
+ .attr('viewBox', '0 0 6 6')
+ .attr('refX', 3)
+ .attr('refY', 3)
+ .attr('markerWidth', 14)
+ .attr('markerHeight', 14)
+ .attr('orient', 'auto')
+ .append('path')
+ .attr('d', 'M0,3v-3l6,3l-6,3z');
+
+ map.on('zoomstart', () => {
+ svg.classed('hide', true);
+ });
+ map.on('zoomend', () => {
+ svg.classed('hide', false);
+ });
+
+ return map;
+ }
+
+ // Initialize leaflet map and layers for each type of data
+ const lMap = initBackgroundMap(ui.dom.map, zoomLevel);
+
+ function projectPoint(location) {
+ const latLng = new L.LatLng(location[0], location[1]);
+ return lMap.latLngToLayerPoint(latLng);
+ }
+
+ function getSVGBoundaries() {
+ return {
+ topLeft: projectPoint(maxBoundaries[0]),
+ bottomRight: projectPoint(maxBoundaries[1])
+ }
+ }
+
+ function updateSVG() {
+ const boundaries = getSVGBoundaries();
+ const {
+ topLeft,
+ bottomRight
+ } = boundaries;
+ svg.attr('width', bottomRight.x - topLeft.x + 200)
+ .attr('height', bottomRight.y - topLeft.y + 200)
+ .style('left', `${topLeft.x - 100}px`)
+ .style('top', `${topLeft.y - 100}px`);
+
+ g.attr('transform', `translate(${-(topLeft.x - 100)},${-(topLeft.y - 100)})`);
+
+ g.selectAll('.location').attr('transform', (d) => {
+ const newPoint = projectPoint([+d.latitude, +d.longitude]);
+ return `translate(${newPoint.x},${newPoint.y})`;
+ });
+
+ const busLine = d3.line()
+ .x(d => lMap.latLngToLayerPoint(d).x)
+ .y(d => lMap.latLngToLayerPoint(d).y)
+ .curve(d3.curveMonotoneX);
+ }
+
+ lMap.on("zoom viewreset move", updateSVG);
+
+ /**
+ * Returns latitud / longitude
+ * @param {Object} eventPoint: data for an evenPoint - time, loc, tags, etc
+ */
+ function getEventLocation(eventPoint) {
+ return {
+ latitude: +eventPoint.location.latitude,
+ longitude: +eventPoint.location.longitude,
+ };
+ }
+
+ /*
+ * INTERACTIVE FUNCTIONS
+ */
+
+ /**
+ * Removes the circular ring to mark a particular location
+ */
+ function unmarkPoint() {
+ Object.keys(eventCircleMarkers).forEach(markerId => {
+ lMap.removeLayer(eventCircleMarkers[markerId]);
+ delete eventCircleMarkers[markerId];
+ });
+ }
+
+ /**
+ * Makes a circular ring mark in one particular location at a time
+ * @param {object} location object, with lat and long
+ */
+ function renderSelected() {
+ unmarkPoint();
+ app.selected.forEach(eventPoint => {
+ if (isNotNullNorUndefined(eventPoint) && isNotNullNorUndefined(eventPoint.location)) {
+ if (eventPoint.latitude && eventPoint.longitude) {
+ const location = new L.LatLng(eventPoint.latitude, eventPoint.longitude);
+ eventCircleMarkers[eventPoint.id] = L.circleMarker(location, {
+ radius: 32,
+ fill: false,
+ color: '#ffffff',
+ weight: 3,
+ lineCap: '',
+ dashArray: '5,2'
+ });
+ eventCircleMarkers[eventPoint.id].addTo(lMap);
+ }
+ }
+ })
+ }
+
+ function renderHighlighted() {
+ // Fly to first of events selected
+ const eventPoint = (app.selected.length > 0) ? app.selected[0] : null;
+ if (isNotNullNorUndefined(eventPoint) && isNotNullNorUndefined(eventPoint.location)) {
+ if (eventPoint.latitude && eventPoint.longitude) {
+ const location = new L.LatLng(eventPoint.latitude, eventPoint.longitude);
+ lMap.flyTo(location);
+ }
+ }
+ }
+
+ /*
+ * RENDERING FUNCTIONS
+ */
+
+ function getLocationEventsDistribution(location) {
+ const eventsHere = {};
+ const categoryGroups = domain.categoryGroups;
+ categoryGroups.sort((a, b) => {
+ return (+a.slice(-2) > +b.slice(-2));
+ });
+ categoryGroups.forEach(group => {
+ eventsHere[group] = 0
+ });
+
+ location.events.forEach((event) => {
+ const group = getCategoryGroup(event.category);
+ eventsHere[group] += 1;
+ });
+
+ let i = 0;
+ const events = [];
+
+ while (i < categoryGroups.length) {
+ let eventsCount = eventsHere[categoryGroups[i]];
+ for (let j = i + 1; j < categoryGroups.length; j++) {
+ eventsCount += eventsHere[categoryGroups[j]];
+ }
+ events.push(eventsCount);
+ i++;
+ }
+
+ return events;
+ }
+
+ /**
+ * Clears existing event layer
+ * Renders all events as markers
+ * Adds eventlayer to map
+ */
+ function renderEvents() {
+ const locationsDom = g.selectAll('.location')
+ .data(domain.locations, d => d.id)
+
+ locationsDom
+ .exit()
+ .remove();
+
+ locationsDom
+ .enter().append('g')
+ .attr('class', 'location')
+ .attr('transform', (d) => {
+ d.LatLng = new L.LatLng(+d.latitude, +d.longitude);
+ return `translate(${lMap.latLngToLayerPoint(d.LatLng).x},
+ ${lMap.latLngToLayerPoint(d.LatLng).y})`;
+ })
+ .on('click', (location) => {
+ select(location.events);
+ });
+
+ const eventsDom = g.selectAll('.location').selectAll('.location-event-marker')
+ .data((d, i) => getLocationEventsDistribution(domain.locations[i]),
+ (d, i) => 'location-' + i);
+
+ eventsDom
+ .exit()
+ .attr('r', 0)
+ .remove();
+
+ eventsDom
+ .transition()
+ .duration(500)
+ .attr('r', d => (d) ? Math.sqrt(16 * d) + 3 : 0);
+
+ eventsDom
+ .enter().append('circle')
+ .attr('class', 'location-event-marker')
+ .style('fill', (d, i) => groupColors[domain.categoryGroups[i]])
+ .transition()
+ .duration(500)
+ .attr('r', d => (d) ? Math.sqrt(16 * d) + 3 : 0);
+ }
+
+ // NB: is this a function to be removed for future features?
+ function renderSites() {
+ sitesLayer.clearLayers();
+ lMap.removeLayer(sitesLayer);
+
+ // Create a label for each attack site, persistent across filtering
+ if (app.views.sites) {
+ domain.sites.forEach((site) => {
+ if (isNotNullNorUndefined(site)) {
+ // Create an invisible marker for each site label
+ const siteMarker = L.circleMarker([+site.latitude, +site.longitude], {
+ radius: 0,
+ stroke: 0
+ });
+
+ siteMarker.bindTooltip(site.site, settingsSiteLabel).openTooltip();
+
+ // Add this one attack marker to group attack layer
+ sitesLayer.addLayer(siteMarker);
+ }
+ });
+
+ lMap.addLayer(sitesLayer);
+ }
+ }
+
+ // NB: is this a function to be removed for future features?
+ /**
+ * Creats a marker for an eventPoint along a path
+ * @param {Object} eventPoint: data for an evenPoint - time, loc, tags, etc
+ * @param {number} step: the portion of the entire path this event corresponds to
+ */
+ function createPathEventMarker(eventPoint, step) {
+ const {
+ latitude,
+ longitude
+ } = getEventLocation(eventPoint);
+ const pathEventMarker = L.circleMarker(
+ [latitude, longitude], {
+ color: ui.colors.DARKGREY,
+ fill: ui.colors.DARKGREY,
+ weight: 2,
+ fillOpacity: 0.6,
+ radius: 10 * step,
+ },
+ );
+
+ // Add marker event handlers
+ pathEventMarker.bindPopup('');
+ pathEventMarker.on('popupopen', () => {
+ select([eventPoint]);
+ });
+ pathEventMarker.on('popupclose', () => {
+ select();
+ });
+
+ return pathEventMarker;
+ }
+
+ /**
+ * Updates displayable data on the map: events, coevents and paths
+ * @param {Object} domain: object of arrays of events, coevs, attacks, paths, sites
+ */
+ function update(newDomain, newApp) {
+ updateSVG();
+
+ if (hash(domain) !== hash(newDomain)) {
+ domain.locations = newDomain.locations;
+ domain.categoryGroups = newDomain.categoryGroups;
+ domain.sites = newDomain.sites;
+ renderDomain();
+ }
+
+ if (hash(app) !== hash(newApp)) {
+ app.selected = newApp.selected;
+ app.highlighted = newApp.highlighted;
+ app.views = newApp.views;
+
+ renderSelectedAndHighlight();
+ }
+ }
+
+ /**
+ * Renders events on the map: takes data, and enters, updates and exits
+ */
+ function renderDomain () {
+ renderSites();
+ renderEvents();
+ }
+ function renderSelectedAndHighlight () {
+ renderSelected();
+ renderHighlighted();
+ }
+
+ /**
+ * Expose only relevant functions
+ */
+ return {
+ update
+ };
+}
diff --git a/src/js/timeline/timeline.js b/src/js/timeline/timeline.js
new file mode 100644
index 0000000..7226b28
--- /dev/null
+++ b/src/js/timeline/timeline.js
@@ -0,0 +1,645 @@
+/*
+ TIMELINE
+ Displays events over the course of the night
+ Allows brushing and selecting periods of time in it
+ TODO: is it possible to express this idiomatically as React?
+*/
+import {
+ areEqual
+} from '../data/utilities';
+import esLocale from '../data/es-MX.json';
+import copy from '../data/copy.json';
+
+export default function(app, ui) {
+ d3.timeFormatDefaultLocale(esLocale);
+ const formatterWithYear = ui.tools.formatterWithYear;
+ const parser = ui.tools.parser;
+ const zoomLevels = [{
+ label: '3 años',
+ duration: 1576800,
+ active: false
+ },
+ {
+ label: '3 meses',
+ duration: 129600,
+ active: false
+ },
+ {
+ label: '3 días',
+ duration: 4320,
+ active: true
+ },
+ {
+ label: '12 horas',
+ duration: 720,
+ active: false
+ },
+ {
+ label: '2 horas',
+ duration: 120,
+ active: false
+ },
+ {
+ label: '30 min',
+ duration: 30,
+ active: false
+ },
+ {
+ label: '10 min',
+ duration: 10,
+ active: false
+ },
+ ];
+
+ let events = [];
+ let categoryGroups = [];
+ let selected = [];
+ let range = app.range;
+
+ const filter = app.filter;
+ const select = app.select;
+ const getCategoryLabel = app.getCategoryLabel;
+ const getCategoryGroupColor = app.getCategoryGroupColor;
+ const getCategoryGroup = app.getCategoryGroup;
+
+ // Play functions
+ window.playInterval;
+ let isPlaying = false;
+ const playDuration = 1000;
+
+ // Drag behavior
+ let dragPos0;
+ let transitionDuration = 500;
+
+ // Dimension of the client
+ const WIDTH_CONTROLS = 180;
+ const boundingClient = d3.select(`#${ui.dom.timeline}`).node().getBoundingClientRect();
+ let WIDTH = boundingClient.width - WIDTH_CONTROLS;
+ const HEIGHT = 140;
+ const markerRadius = 15;
+ // margin
+ // NB: is it possible to do this with SCSS?
+ // A: Maybe, although we are using it programmatically here for now
+ const mg = {
+ l: 120
+ };
+
+ /**
+ * Create scales
+ */
+ const scale = {};
+
+ scale.x = d3.scaleTime()
+ .domain(range)
+ .range([mg.l, WIDTH]);
+
+ const groupStep = (106 - 30) / categoryGroups.length;
+ const groupYs = new Array(categoryGroups.length);
+ groupYs.map((g, i) => {
+ return 30 + i * groupStep;
+ });
+
+ scale.y = d3.scaleOrdinal()
+ .domain(categoryGroups)
+ .range(groupYs);
+
+ /**
+ * Initilize SVG elements and groups
+ */
+ const dom = {};
+
+ dom.svg =
+ d3.select(`#${ui.dom.timeline}`)
+ .append('svg')
+ .attr('width', WIDTH)
+ .attr('height', HEIGHT);
+
+ dom.controls =
+ d3.select(`#${ui.dom.timeline}`)
+ .append('svg')
+ .attr('class', 'time-controls')
+ .attr('width', WIDTH_CONTROLS)
+ .attr('height', HEIGHT);
+
+ /*
+ * Axis group elements
+ */
+
+ dom.axis = {};
+
+ dom.axis.x0 = dom.svg.append('g')
+ .attr('transform', `translate(0, 25)`)
+ .attr('class', 'axis xAxis');
+
+ dom.axis.x1 = dom.svg.append('g')
+ .attr('transform', `translate(0, 105)`)
+ .attr('class', 'axis axisHourText');
+
+ dom.axis.y = dom.svg.append('g')
+ .attr('transform', `translate(${WIDTH}, 0)`)
+ .attr('class', 'yAxis');
+
+ dom.axis.boundaries = dom.svg.selectAll('.axisBoundaries')
+ .data([0, 1])
+ .enter().append('line')
+ .attr('class', 'axisBoundaries');
+
+ dom.axis.label0 = dom.svg.append('text')
+ .attr('class', 'timeLabel0 timeLabel');
+
+ dom.axis.label1 = dom.svg.append('text')
+ .attr('class', 'timelabelF timeLabel');
+
+ /*
+ * Plottable elements
+ */
+ dom.dataset = dom.svg.append('g');
+ dom.events = dom.dataset.append('g');
+
+ /*
+ * Time Controls
+ */
+ dom.forward = dom.svg.append('g').attr('class', 'time-controls-inline');
+ dom.forward.append('circle');
+ dom.forward.append('path');
+
+ dom.backwards = dom.svg.append('g').attr('class', 'time-controls-inline');
+ dom.backwards.append('circle');
+ dom.backwards.append('path');
+
+ dom.playGroup = dom.controls.append('g');
+ dom.playGroup.append('circle');
+
+ dom.play = dom.playGroup.append('g');
+ dom.play.append('path');
+
+ dom.pause = dom.playGroup.append('g').style('opacity', 0);
+ dom.pause.append('rect');
+ dom.pause.append('rect');
+
+ dom.zooms = dom.controls.append('g');
+
+ dom.zooms.selectAll('.zoom-level-button')
+ .data(zoomLevels)
+ .enter().append('text')
+ .attr('class', 'zoom-level-button');
+
+ /*
+ * Initialize axis function and element group
+ */
+ const axis = {};
+
+ axis.x0 =
+ d3.axisBottom(scale.x)
+ .ticks(10)
+ .tickPadding(5)
+ .tickSize(80)
+ .tickFormat(d3.timeFormat('%d %b'));
+
+ axis.x1 =
+ d3.axisBottom(scale.x)
+ .ticks(10)
+ .tickPadding(20)
+ .tickSize(0)
+ .tickFormat(d3.timeFormat('%H:%M'));
+
+ axis.y =
+ d3.axisLeft(scale.y)
+ .tickValues([]);
+
+ /*
+ * Setup drag behavior
+ */
+ const drag =
+ d3.drag()
+ .on('start', () => {
+ d3.event.sourceEvent.stopPropagation();
+ dragPos0 = d3.event.x;
+ toggleTransition(false);
+ })
+ .on('drag', () => {
+ const drag0 = scale.x.invert(dragPos0).getTime();
+ const dragNow = scale.x.invert(d3.event.x).getTime();
+ const timeShift = (drag0 - dragNow) / 1000;
+
+ const newDomain0 = d3.timeSecond.offset(range[0], timeShift);
+ const newDomainF = d3.timeSecond.offset(range[1], timeShift);
+
+ scale.x.domain([newDomain0, newDomainF])
+ render();
+ })
+ .on('end', () => {
+ toggleTransition(true);
+ filter({
+ range: scale.x.domain()
+ });
+ });
+
+ /*
+ * SVG groups for marker
+ */
+
+ dom.markers = dom.svg.append('g');
+
+ /**
+ * Adapt dimensions when resizing
+ */
+ function getCurrentWidth() {
+ return d3.select(`#${ui.dom.timeline}`).node()
+ .getBoundingClientRect().width;
+ }
+
+ /**
+ * Resize timeline one window resice
+ */
+ function addResizeListener() {
+ window.addEventListener('resize', () => {
+ if (d3.select(`#${ui.dom.timeline}`).node() !== null) {
+ WIDTH = getCurrentWidth() - WIDTH_CONTROLS;
+
+ dom.svg.attr('width', WIDTH);
+ scale.x.range([mg.l, WIDTH]);
+ axis.y.tickSize(WIDTH - mg.l);
+ dom.axis.y.attr('transform', `translate(${WIDTH}, 0)`)
+ render(null);
+ }
+ });
+ }
+ addResizeListener();
+
+ /**
+ * PLAY FUNCTIONALITY
+ */
+ function stopBrushTransition() {
+ clearInterval(window.playInterval);
+ isPlaying = false;
+ dom.play.style('opacity', 1);
+ dom.pause.style('opacity', 0);
+ }
+
+ /**
+ * START PLAY SERIES OF TRANSITIONS
+ */
+ function playBrushTransition() {
+ isPlaying = true;
+ dom.play.style('opacity', 0);
+ dom.pause.style('opacity', 1);
+ window.playInterval = setInterval(() => {
+ moveTime('forward');
+ }, playDuration);
+ }
+
+ /**
+ * Return which color event circle should be based on incident type
+ * @param {object} eventPoint data object
+ */
+ function getEventPointFillColor(eventPoint) {
+ return getCategoryGroupColor(eventPoint.category);
+ }
+
+ /**
+ * Given an event, get all the filtered events that happen simultaneously
+ * @param {object} eventPoint: regular eventPoint data
+ */
+ function getAllEventsAtOnce(eventPoint) {
+ const timestamp = eventPoint.timestamp;
+ const categoryGroup = getCategoryGroup(eventPoint.category);
+ return events.filter(event => {
+ return (event.timestamp === timestamp &&
+ categoryGroup === getCategoryGroup(event.category))
+ }).map(event => event.id);
+ }
+
+ /*
+ * Get y height of eventPoint, considering the ordinal Y scale
+ * @param {object} eventPoint: regular eventPoint data
+ */
+ function getEventY(eventPoint) {
+ const yGroup = getCategoryGroup(eventPoint.category);
+ return scale.y(yGroup);
+ }
+
+ /*
+ * Get x position of eventPoint, considering the time scale
+ * @param {object} eventPoint: regular eventPoint data
+ */
+ function getEventX(eventPoint) {
+ return scale.x(parser(eventPoint.timestamp));
+ }
+
+ function getTimeScaleExtent() {
+ return (scale.x.domain()[1].getTime() - scale.x.domain()[0].getTime()) / 60000;
+ }
+
+ /*
+ * Given a number of minutes, calculate the width based on current scale.x
+ * @param {number} minutes: number of minutes
+ */
+ function getWidthOfTime(minutes) {
+ const allMins = getTimeScaleExtent();
+ return (minutes * WIDTH) / allMins;
+ }
+
+ function highlightZoomLevel(zoom) {
+ zoomLevels.forEach((level) => {
+ if (level.label === zoom.label) {
+ level.active = true;
+ } else {
+ level.active = false;
+ }
+ });
+
+ dom.zooms.selectAll('text')
+ .classed('active', level => level.active);
+ }
+
+ /**
+ * Apply zoom level to timeline
+ * @param {object} zoom: zoom level from zoomLevels
+ */
+ function applyZoom(zoom) {
+ highlightZoomLevel(zoom);
+
+ const extent = getTimeScaleExtent();
+ const newCentralTime = d3.timeMinute.offset(scale.x.domain()[0], extent / 2);
+
+ const domain0 = d3.timeMinute.offset(newCentralTime, -zoom.duration / 2);
+ const domainF = d3.timeMinute.offset(newCentralTime, zoom.duration / 2);
+
+ scale.x.domain([domain0, domainF]);
+ filter({
+ range: scale.x.domain()
+ });
+ }
+
+ /**
+ * Shift time range by moving forward or backwards
+ * @param {Stirng} direction: 'forward' / 'backwards'
+ */
+ function moveTime(direction) {
+ select();
+ const extent = getTimeScaleExtent();
+ const newCentralTime = d3.timeMinute.offset(scale.x.domain()[0], extent / 2);
+
+ // if forward
+ let domain0 = newCentralTime;
+ let domainF = d3.timeMinute.offset(newCentralTime, extent);
+
+ // if backwards
+ if (direction === 'backwards') {
+ domain0 = d3.timeMinute.offset(newCentralTime, -extent);
+ domainF = newCentralTime;
+ }
+
+ scale.x.domain([domain0, domainF]);
+ filter({
+ range: scale.x.domain()
+ });
+ }
+
+ function toggleTransition(isTransition) {
+ transitionDuration = (isTransition) ? 500 : 0;
+ }
+
+ /**
+ * Highlight event circle on hover
+ */
+ function handleMouseOver() {
+ d3.select(this)
+ .attr('r', 7)
+ .classed('mouseover', true);
+ }
+
+ /**
+ * Unhighlight event when mouse out
+ */
+ function handleMouseOut() {
+ d3.select(this)
+ .attr('r', 5)
+ .classed('mouseover', false);
+ }
+
+ /**
+ * It automatically sets brush timeline to a domain set by the params
+ */
+ function updateTimeRange() {
+ scale.x.domain(range);
+ axis.x0.scale(scale.x);
+ axis.x1.scale(scale.x);
+ }
+
+
+ /**
+ * Display the current time range in the time label above the timeline
+ */
+ function renderTimeLabels() {
+ dom.axis.label0
+ .attr('x', 5)
+ .attr('y', 15)
+ .text(formatterWithYear(range[0]));
+
+ dom.axis.label1
+ .attr('x', WIDTH - 5)
+ .attr('y', 15)
+ .text(formatterWithYear(range[1]))
+ .style('text-anchor', 'end');
+ }
+
+ /**
+ * Makes a circular rinig mark in one particular location at a time
+ * @param {object} eventPoint: object with eventPoint data (time, loc, tags)
+ */
+ function renderHighlight() {
+ const markers = dom.markers
+ .selectAll('circle')
+ .data(selected);
+
+ markers
+ .enter()
+ .append('circle')
+ .attr('class', 'timeline-marker')
+ .merge(markers)
+ .attr('cy', eventPoint => getEventY(eventPoint))
+ .attr('cx', eventPoint => getEventX(eventPoint))
+ .attr('r', 10)
+ .style('opacity', .9);
+
+ markers.exit().remove();
+ }
+
+ /**
+ * Return event circles of different groups
+ */
+ function renderEvents() {
+ const eventsDom = dom.events
+ .selectAll('.event')
+ .data(events, d => d.id);
+
+ eventsDom
+ .exit()
+ .remove();
+
+ eventsDom
+ .transition()
+ .duration(transitionDuration)
+ .attr('cx', eventPoint => getEventX(eventPoint));
+
+ eventsDom
+ .enter()
+ .append('circle')
+ .attr('class', 'event')
+ .attr('cx', eventPoint => getEventX(eventPoint))
+ .attr('cy', eventPoint => getEventY(eventPoint))
+ .style('fill', eventPoint => getEventPointFillColor(eventPoint))
+ .on('click', eventPoint => select(getAllEventsAtOnce(eventPoint)))
+ .on('mouseover', handleMouseOver)
+ .on('mouseout', handleMouseOut)
+ .transition()
+ .delay(300)
+ .duration(200)
+ .attr('r', 5);
+ }
+
+ /**
+ * Render axis on timeline and viewbox boundaries
+ */
+ function renderAxis() {
+ dom.axis.x0
+ .call(drag);
+
+ dom.axis.x1
+ .call(drag);
+
+ dom.axis.x0
+ .transition()
+ .duration(transitionDuration)
+ .call(axis.x0);
+
+ dom.axis.x1
+ .transition()
+ .duration(transitionDuration)
+ .call(axis.x1);
+
+ axis.y.tickSize(WIDTH - mg.l);
+
+ dom.axis.y
+ .call(axis.y)
+ .call(drag);
+
+ dom.axis.boundaries
+ .attr('x1', (d, i) => scale.x.range()[i])
+ .attr('x2', (d, i) => scale.x.range()[i])
+ .attr('y1', 10)
+ .attr('y2', 20);
+
+ dom.axis.label1
+ .attr('x', scale.x.range()[1] - 5);
+ }
+
+ /**
+ * Render left and right time shifting controls
+ */
+ function renderTimeControls() {
+ const zoomLabels = copy[app.language].timeline.zooms;
+ zoomLevels.forEach((level, i) => {
+ level.label = zoomLabels[i];
+ });
+
+ // These controls on timeline svg
+ dom.backwards.select('circle')
+ .attr('transform', `translate(${scale.x.range()[0] + 20}, 62)`)
+ .attr('r', 15);
+
+ dom.backwards.select('path')
+ .attr('d', d3.symbol().type(d3.symbolTriangle).size(80))
+ .attr('transform', `translate(${scale.x.range()[0] + 20}, 62)rotate(270)`);
+
+ dom.forward.select('circle')
+ .attr('transform', `translate(${scale.x.range()[1] - 20}, 62)`)
+ .attr('r', 15);
+
+ dom.forward.select('path')
+ .attr('d', d3.symbol().type(d3.symbolTriangle).size(80))
+ .attr('transform', `translate(${scale.x.range()[1] - 20}, 62)rotate(90)`);
+
+ // These controls on separate svg
+ dom.playGroup.select('circle')
+ .attr('transform', 'translate(135, 60)rotate(90)')
+ .attr('r', 25);
+
+ dom.play.select('path')
+ .attr('d', d3.symbol().type(d3.symbolTriangle).size(260))
+ .attr('transform', 'translate(135, 60)rotate(90)');
+
+ dom.pause.selectAll('rect')
+ .attr('transform', (d, i) => `translate(${125 + (i * 15)}, 47)`)
+ .attr('height', 25)
+ .attr('width', 5);
+
+ dom.zooms.selectAll('text')
+ .text(d => d.label)
+ .attr('x', 60)
+ .attr('y', (d, i) => (i * 15) + 20)
+ .classed('active', level => level.active);
+
+ dom.forward
+ .on('click', () => moveTime('forward'));
+
+ dom.backwards
+ .on('click', () => moveTime('backwards'));
+
+ dom.playGroup
+ .on('click', () => {
+ return (isPlaying) ? stopBrushTransition() : playBrushTransition();
+ });
+
+ dom.zooms.selectAll('text')
+ .on('click', zoom => applyZoom(zoom));
+ }
+
+ /**
+ * Updates data displayed by this timeline, but only render if necessary
+ * @param {Object} domain: Redux state domain subtree
+ * @param {Object} app: Redux state app subtree
+ */
+ function updateAxis(domain) {
+ categoryGroups = domain.categoryGroups
+ const groupStep = (106 - 30) / categoryGroups.length;
+ let groupYs = Array.apply(null, Array(categoryGroups.length));
+ groupYs = groupYs.map((g, i) => {
+ return 30 + i * groupStep;
+ });
+
+ scale.y = d3.scaleOrdinal()
+ .domain(categoryGroups)
+ .range(groupYs);
+
+ axis.y =
+ d3.axisLeft(scale.y)
+ .tickValues(categoryGroups);
+ }
+
+ function update(domain, app) {
+ updateAxis(domain);
+ renderAxis();
+
+ events = domain.events;
+ range = app.range;
+ selected = app.selected.slice(0);
+ updateTimeRange();
+ }
+
+ function render() {
+ renderAxis();
+ renderTimeControls();
+ renderTimeLabels();
+
+ renderEvents();
+ renderHighlight();
+ }
+
+ return {
+ update,
+ render,
+ };
+}
diff --git a/src/reducers/app.js b/src/reducers/app.js
new file mode 100644
index 0000000..c252f82
--- /dev/null
+++ b/src/reducers/app.js
@@ -0,0 +1,88 @@
+import initial from '../store/initial.js';
+
+import {
+ UPDATE_HIGHLIGHTED,
+ UPDATE_SELECTED,
+ UPDATE_FILTERS,
+ UPDATE_TIMERANGE,
+ RESET_ALLFILTERS,
+ TOGGLE_LANGUAGE,
+ FETCH_ERROR,
+} from '../actions';
+
+function updateHighlighted(appState, action) {
+ return Object.assign({}, appState, {
+ highlighted: action.highlighted
+ });
+}
+
+function updateSelected(appState, action) {
+ return Object.assign({}, appState, {
+ selected: action.selected
+ });
+}
+
+function updateFilters(appState, action) { // XXX
+ return Object.assign({}, appState, {
+ filters: Object.assign({}, appState.filters, action.filters)
+ });
+}
+
+function updateTimeRange(appState, action) { // XXX
+ return Object.assign({}, appState, {
+ filters: Object.assign({}, appState.filters, action.range),
+ });
+}
+
+function resetAllFilters(appState) { // XXX
+ return Object.assign({}, appState, {
+ filters: Object.assign({}, appState.filters, {
+ tags: [],
+ categories: [],
+ range: [
+ d3.timeParse("%Y-%m-%dT%H:%M:%S")("2014-09-25T12:00:00"),
+ d3.timeParse("%Y-%m-%dT%H:%M:%S")("2014-09-28T12:00:00")
+ ],
+ }),
+ selected: [],
+ });
+}
+
+function toggleLanguage(appState, action) {
+ let otherLanguage = (appState.language === 'es-MX') ? 'en-US' : 'es-MX';
+ return Object.assign({}, appState, {
+ language: action.language || otherLanguage
+ });
+}
+
+function fetchError(state, action) {
+ return {
+ ...state,
+ error: action.message,
+ notifications: [{ type: 'error', message: action.message }]
+ }
+}
+
+
+function app(appState = initial.app, action) {
+ switch (action.type) {
+ case UPDATE_HIGHLIGHTED:
+ return updateHighlighted(appState, action);
+ case UPDATE_SELECTED:
+ return updateSelected(appState, action);
+ case UPDATE_FILTERS:
+ return updateFilters(appState, action);
+ case UPDATE_TIMERANGE:
+ return updateTimeRange(appState, action);
+ case RESET_ALLFILTERS:
+ return resetAllFilters(appState, action);
+ case TOGGLE_LANGUAGE:
+ return toggleLanguage(appState, action);
+ case FETCH_ERROR:
+ return fetchError(appState, action);
+ default:
+ return appState;
+ }
+}
+
+export default app;
diff --git a/src/reducers/domain.js b/src/reducers/domain.js
new file mode 100644
index 0000000..11a64d9
--- /dev/null
+++ b/src/reducers/domain.js
@@ -0,0 +1,25 @@
+import initial from '../store/initial.js';
+
+import {
+ UPDATE_DOMAIN,
+} from '../actions';
+
+import { parseDateTimes } from './utils/helpers.js';
+import { validate } from './utils/validators.js';
+
+function updateDomain(domainState, action) {
+ action.domain.events = parseDateTimes(action.domain.events);
+
+ return Object.assign({}, domainState, validate(action.domain));
+}
+
+function domain(domainState = initial.domain, action) {
+ switch (action.type) {
+ case UPDATE_DOMAIN:
+ return updateDomain(domainState, action);
+ default:
+ return domainState;
+ }
+}
+
+export default domain;
diff --git a/src/reducers/index.js b/src/reducers/index.js
new file mode 100644
index 0000000..c940079
--- /dev/null
+++ b/src/reducers/index.js
@@ -0,0 +1,13 @@
+import {
+ combineReducers
+} from 'redux'
+
+import domain from './domain.js'
+import app from './app.js'
+import ui from './ui.js'
+
+export default combineReducers({
+ app,
+ domain,
+ ui
+});;
diff --git a/src/reducers/schema/categorySchema.js b/src/reducers/schema/categorySchema.js
new file mode 100644
index 0000000..4156379
--- /dev/null
+++ b/src/reducers/schema/categorySchema.js
@@ -0,0 +1,12 @@
+import Joi from 'joi';
+
+const categorySchema = Joi.object().keys({
+ category: Joi.string().required(),
+ category_label: Joi.string().allow('').required(),
+ group: Joi.string(),
+ group_label: Joi.string(),
+});
+
+const optionalSchema = categorySchema.optionalKeys('group', 'group_label');
+
+export default categorySchema;
diff --git a/src/reducers/schema/eventSchema.js b/src/reducers/schema/eventSchema.js
new file mode 100644
index 0000000..c01528e
--- /dev/null
+++ b/src/reducers/schema/eventSchema.js
@@ -0,0 +1,20 @@
+import Joi from 'joi';
+
+const eventSchema = Joi.object().keys({
+ id: Joi.string().required(),
+ description: Joi.string().allow('').required(),
+ date: Joi.string().required(),
+ time: Joi.string().required(),
+ time_precision: Joi.string().allow(''),
+ location: Joi.string().allow('').required(),
+ latitude: Joi.string().required(),
+ longitude: Joi.string().required(),
+ type: Joi.string().allow(''),
+ category: Joi.string().required(),
+ source: Joi.string().allow(''),
+ tags: Joi.string().allow(''),
+ comments: Joi.string().allow(''),
+ timestamp: Joi.string().required(),
+});
+
+export default eventSchema;
diff --git a/src/reducers/schema/siteSchema.js b/src/reducers/schema/siteSchema.js
new file mode 100644
index 0000000..f58a71c
--- /dev/null
+++ b/src/reducers/schema/siteSchema.js
@@ -0,0 +1,11 @@
+import Joi from 'joi';
+
+const siteSchema = Joi.object().keys({
+ id: Joi.string().required(),
+ description: Joi.string().allow('').required(),
+ site: Joi.string().required(),
+ latitude: Joi.string().required(),
+ longitude: Joi.string().required()
+});
+
+export default siteSchema;
diff --git a/src/reducers/ui.js b/src/reducers/ui.js
new file mode 100644
index 0000000..2180304
--- /dev/null
+++ b/src/reducers/ui.js
@@ -0,0 +1,104 @@
+import initial from '../store/initial.js';
+
+import {
+ TOGGLE_FETCHING_DOMAIN,
+ TOGGLE_FETCHING_EVENTS,
+ TOGGLE_VIEW,
+ TOGGLE_TIMELINE,
+ OPEN_CABINET,
+ CLOSE_CABINET,
+ TOGGLE_INFOPOPUP,
+ TOGGLE_NOTIFICATIONS
+} from '../actions'
+
+function toggleFetchingDomain(uiState, action) {
+ return Object.assign({}, uiState, {
+ flags: Object.assign({}, uiState.flags, {
+ isFetchingDomain: !uiState.flags.isFetchingDomain
+ })
+ });
+}
+
+function toggleFetchingEvents(uiState, action) {
+ return Object.assign({}, uiState, {
+ flags: Object.assign({}, uiState.flags, {
+ isFetchingEvents: !uiState.flags.isFetchingEvents
+ })
+ });
+}
+
+function toggleView(uiState, action) {
+ return Object.assign({}, uiState, {
+ flags: Object.assign({}, uiState.flags, {
+ isView2d: !uiState.flags.isView2d
+ })
+ });
+}
+
+function toggleTimeline(uiState, action) {
+ return Object.assign({}, uiState, {
+ flags: Object.assign({}, uiState.flags, {
+ isTimeline: !uiState.flags.isTimeline
+ })
+ });
+}
+
+function closeCabinet(uiState, action) {
+ return Object.assign({}, uiState, {
+ flags: Object.assign({}, uiState.flags, {
+ isCabinet: false
+ })
+ });
+}
+
+function openCabinet(uiState, action) {
+ return Object.assign({}, uiState, {
+ flags: Object.assign({}, uiState.flags, {
+ isCabinet: true
+ }),
+ components: Object.assign({}, uiState.components, {
+ cabinetFileTab: action.tabNum,
+ })
+ });
+}
+
+function toggleInfoPopup(uiState, action) {
+ return Object.assign({}, uiState, {
+ flags: Object.assign({}, uiState.flags, {
+ isInfopopup: !uiState.flags.isInfopopup
+ })
+ });
+}
+
+function toggleNotifications(uiState, action) {
+ return Object.assign({}, uiState, {
+ flags: Object.assign({}, uiState.flags, {
+ isNotification: !uiState.flags.isNotification
+ })
+ });
+}
+
+function ui(uiState = initial.ui, action) {
+ switch (action.type) {
+ case TOGGLE_FETCHING_DOMAIN:
+ return toggleFetchingDomain(uiState, action);
+ case TOGGLE_FETCHING_EVENTS:
+ return toggleFetchingEvents(uiState, action);
+ case TOGGLE_VIEW:
+ return toggleView(uiState, action);
+ case TOGGLE_TIMELINE:
+ return toggleTimeline(uiState, action);
+ case OPEN_CABINET:
+ return openCabinet(uiState, action);
+ case CLOSE_CABINET:
+ return closeCabinet(uiState, action);
+ case TOGGLE_INFOPOPUP:
+ return toggleInfoPopup(uiState, action);
+ case TOGGLE_NOTIFICATIONS:
+ return toggleNotifications(uiState, action);
+ default:
+ return uiState;
+ }
+}
+
+export default ui;
diff --git a/src/reducers/utils/helpers.js b/src/reducers/utils/helpers.js
new file mode 100644
index 0000000..0a0509a
--- /dev/null
+++ b/src/reducers/utils/helpers.js
@@ -0,0 +1,18 @@
+export function parseDateTimes(arrayToParse) {
+ const parsedArray = [];
+
+ arrayToParse.forEach(item => {
+ let incoming_datetime = `${item.date}T00:00`;
+ if (item.time) incoming_datetime = `${item.date}T${item.time}`;
+ const parser = d3.timeParse(process.env.INCOMING_DATETIME_FORMAT);
+ item.timestamp = d3.timeFormat("%Y-%m-%dT%H:%M:%S")(parser(incoming_datetime));
+
+ parsedArray.push(item);
+ });
+
+ return parsedArray;
+}
+
+export function capitalize(string) {
+ return string.charAt(0).toUpperCase() + string.slice(1);
+}
diff --git a/src/reducers/utils/validators.js b/src/reducers/utils/validators.js
new file mode 100644
index 0000000..b6c38b9
--- /dev/null
+++ b/src/reducers/utils/validators.js
@@ -0,0 +1,75 @@
+import Joi from 'joi';
+
+import eventSchema from '../schema/eventSchema.js';
+import categorySchema from '../schema/categorySchema.js';
+import siteSchema from '../schema/siteSchema.js';
+
+import { capitalize } from './helpers.js';
+
+/*
+* Create an error notification object
+* Types: ['error', 'warning', 'good', 'neural']
+*/
+function makeError(type, id, message) {
+ return {
+ type: 'error',
+ id,
+ message: `${type} ${id}: ${message}`
+ }
+}
+
+/*
+* Validate domain schema
+*/
+export function validate(domain) {
+ const sanitizedDomain = {
+ events: [],
+ categories: [],
+ sites: [],
+ notifications: domain.notifications,
+ tags: domain.tags
+ }
+
+ const discardedDomain = {
+ events: [],
+ categories: [],
+ sites: []
+ }
+
+ function validateItem(item, domainClass, schema) {
+ const result = Joi.validate(item, schema);
+ if (result.error !== null) {
+ const id = item.id || '-';
+ const domainStr = capitalize(domainClass);
+ const error = makeError(domainStr, id, result.error.message);
+
+ discardedDomain[domainClass].push(Object.assign(item, { error }));
+ } else {
+ sanitizedDomain[domainClass].push(item);
+ }
+ }
+
+ domain.events.forEach(event => {
+ validateItem(event, 'events', eventSchema);
+ });
+ domain.categories.forEach(category => {
+ validateItem(category, 'categories', categorySchema);
+ });
+ domain.sites.forEach(site => {
+ validateItem(site, 'sites', siteSchema);
+ });
+
+ // Message the number of failed items
+ Object.keys(discardedDomain).forEach(disc => {
+ const len = discardedDomain[disc].length;
+ if (len) {
+ sanitizedDomain.notifications.push({
+ message: `${len} invalid ${disc} not displayed.`,
+ items: discardedDomain[disc],
+ type: 'error'
+ });
+ }
+ })
+
+ return sanitizedDomain;
+}
diff --git a/src/scss/_animations.scss b/src/scss/_animations.scss
new file mode 100644
index 0000000..1662964
--- /dev/null
+++ b/src/scss/_animations.scss
@@ -0,0 +1,21 @@
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+@keyframes fallFadeIn {
+ from {
+ transform: translate(0, -40px);
+ opacity: 0;
+ }
+
+ to {
+ transform: none;
+ opacity: 1;
+ }
+}
diff --git a/src/scss/_burger.scss b/src/scss/_burger.scss
new file mode 100644
index 0000000..29c0e1d
--- /dev/null
+++ b/src/scss/_burger.scss
@@ -0,0 +1,114 @@
+
+// Burger transition
+.side-menu-burg {
+ position: absolute;
+ overflow: hidden;
+ float: right;
+ margin: 0;
+ padding: 0;
+ width: 20px;
+ height: 20px;
+ appearance: none;
+ box-shadow: none;
+ border-radius: none;
+ border: none;
+ cursor: pointer;
+ background: none;
+
+ &.hidden {
+ display: none;
+ }
+
+ span {
+ display: block;
+ position: absolute;
+ top: 9px;
+ left: 0px;
+ right: 0px;
+ height: 2px;
+ background: $offwhite;
+ border-radius: 4px;
+ }
+
+ span::before,
+ span::after {
+ position: absolute;
+ display: block;
+ left: 0;
+ width: 100%;
+ height: 2px;
+ background: $offwhite;
+ border-radius: 4px;
+ content: "";
+ transition-duration: 0.2s, 0.2s;
+ transition-delay: 0.2s, 0s;
+ }
+
+ span::before {
+ transition-property: top, transform;
+ top: -8px;
+ }
+
+ span::after {
+ transition-property: bottom, transform;
+ bottom: -8px;
+ }
+
+ &:hover {
+ span::before {
+ top: -6px;
+ }
+
+ span::after {
+ bottom: -6px;
+ }
+ }
+
+ &.is-active {
+ span {
+ background: $midwhite;
+ transform: rotate(45deg);
+ transition-delay: 0s, 0.2s;
+ }
+
+ span::before,
+ span::after {
+ background: $midwhite;
+ transition-delay: 0s, 0.2s;
+ }
+
+ span::before {
+ top: 0;
+ transform: rotate(0deg);
+ -webkit-transform: rotate(0deg);
+ }
+
+ span::after {
+ bottom: 0;
+ transform: rotate(-90deg);
+ -webkit-transform: rotate(-90deg);
+ }
+
+ &:hover {
+ span,
+ span::before,
+ span::after {
+ transition: 0.2s ease;
+ background: $offwhite;
+ }
+ }
+
+ &.over-white:hover {
+ span,
+ span:before,
+ span:after {
+ transition: 0.2s ease;
+ background: $darkgrey;
+ }
+ }
+ }
+}
+
+.side-menu-burg:focus {
+ outline: none;
+}
diff --git a/src/scss/_colors.scss b/src/scss/_colors.scss
new file mode 100644
index 0000000..8182e8d
--- /dev/null
+++ b/src/scss/_colors.scss
@@ -0,0 +1,15 @@
+$offwhite: #efefef;
+$midwhite: #a0a0a0;
+$darkwhite: darken($midwhite, 15%);
+$yellow: #ffd800;
+$red: rgb(233, 0, 19);
+$green: rgb(61, 241, 79);
+$midgrey: rgb(44, 44, 44);
+$darkgrey: #232323;
+$black: #000000;
+
+$category_group00: #FF0000;
+$category_group01: #226b22;
+$category_group02: #671f6f;
+$category_group03: #0000bf;
+$category_group04: #d3ce2a;
diff --git a/src/scss/_fonts.scss b/src/scss/_fonts.scss
new file mode 100644
index 0000000..55463e9
--- /dev/null
+++ b/src/scss/_fonts.scss
@@ -0,0 +1,9 @@
+$xsmall: 10px;//0.7em;
+$small: 11px;//0.9em;
+$normal: 12px;//1em;
+$large: 14px;//1.1em;
+$xlarge: 16px;//1.2em;
+$xxlarge: 20px;//1.4em;
+$xxxlarge: 32px;
+$title: 36px;
+$cover-title: 68px;
diff --git a/src/scss/_icons.scss b/src/scss/_icons.scss
new file mode 100644
index 0000000..6d7689e
--- /dev/null
+++ b/src/scss/_icons.scss
@@ -0,0 +1,16 @@
+.icon {
+ display: inline-block;
+ width: 32px;
+ height: 1em;
+ stroke-width: 0;
+ stroke: $offwhite;
+ fill: $offwhite;
+ transform: scale(1.4);
+ cursor: pointer;
+
+ &:hover {
+ transition: 0.2s ease;
+ stroke: $yellow;
+ fill: $yellow;
+ }
+}
diff --git a/src/scss/_levels.scss b/src/scss/_levels.scss
new file mode 100644
index 0000000..b2e56ce
--- /dev/null
+++ b/src/scss/_levels.scss
@@ -0,0 +1,12 @@
+/* z-index levels */
+$final-level: 10000;
+$loading-overlay: 1000;
+$overheader: 100;
+$header: 10;
+$map-overlay2: 4;
+$map-overlay: 2;
+$map: 1;
+$scene: 1;
+$hidden: -1;
+$timeline: 3;
+$timeslider: 3;
diff --git a/src/scss/_video.scss b/src/scss/_video.scss
new file mode 100644
index 0000000..a32d175
--- /dev/null
+++ b/src/scss/_video.scss
@@ -0,0 +1,44 @@
+.fullscreen-bg {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ overflow: hidden;
+ z-index: -100;
+}
+
+.fullscreen-bg__video {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ -webkit-filter: contrast(70%) brightness(70%) grayscale(30%); /* Webkit */
+ filter: gray; /* IE6-9 */
+ filter: contrast(70%) brightness(70%) grayscale(30%) /* W3C */
+}
+
+@media (min-aspect-ratio: 16/9) {
+ .fullscreen-bg__video {
+ height: 300%;
+ top: -100%;
+ }
+}
+
+@media (max-aspect-ratio: 16/9) {
+ .fullscreen-bg__video {
+ width: 300%;
+ left: -100%;
+ }
+}
+
+@media (max-width: 767px) {
+ .fullscreen-bg {
+ background: url('/static/archive/img/city.jpg') center center / cover no-repeat;
+ }
+
+ .fullscreen-bg__video {
+ display: none;
+ }
+}
diff --git a/src/scss/cabinet.scss b/src/scss/cabinet.scss
new file mode 100644
index 0000000..5c132ea
--- /dev/null
+++ b/src/scss/cabinet.scss
@@ -0,0 +1,827 @@
+@import 'icons';
+@import 'video';
+
+.cabinet-wrapper {
+ overflow: auto;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ width: 100%;
+ height: 100%;
+ display: table;
+ table-layout: fixed;
+ color: $offwhite;
+ background-color: $black;
+ font-family: 'Merriweather', serif;
+ transition: opacity 0.5s ease 0.1s, z-index 0.1s ease 0s;
+ opacity: 1;
+ z-index: $final-level;
+
+ &.hidden {
+ transition: opacity 0.5s ease 0s, z-index 0.1s ease 0.5s;
+ opacity: 0;
+ z-index: $hidden;
+ }
+
+ &.show {
+ z-index: $final-level;
+ }
+
+ .top-action {
+ position: fixed;
+ top: 20px;
+ right: 20px;
+ z-index: 1;
+
+ button {
+ font-family: 'Lato';
+ font-size: $xlarge;
+ text-align: left;
+ text-transform: uppercase;
+ background: none;
+ border: none;
+ color: $offwhite;
+ outline: none;
+ cursor: pointer;
+ transition: 0.2s ease;
+ letter-spacing: 0.1em;
+
+ .label {
+ height: 28px;
+ float: left;
+ line-height: 28px;
+ padding-left: 10px;
+ }
+
+ svg {
+ float: left;
+ path, circle, polygon,
+ polyline, line {
+ stroke-width: 2px;
+ transition: 0.2s ease;
+ stroke: $offwhite;
+ fill: none;
+ stroke-linecap: round;
+ }
+ }
+
+ &:hover {
+ transition: 0.2s ease;
+ letter-spacing: 0.15em;
+ }
+ }
+ }
+
+ .cabinet-header {
+ position: fixed;
+ top: 0px;
+ width: 100%;
+ padding: 20px 0;
+ background: $black;
+ transition: 1s ease;
+ text-transform: uppercase;
+ font-family: 'Merriweather', serif;
+
+ .header-title {
+ width: 280px;
+ margin: 0 auto;
+ cursor: pointer;
+
+ p {
+ font-size: $normal;
+ margin: 0;
+ width: 100%;
+ text-align: center;
+ transition: 2s ease;
+ letter-spacing: normal;
+ }
+ p:first-child {
+ font-size: 8px;
+ }
+
+ &:hover {
+ p {
+ transition: 2s ease;
+ letter-spacing: 0.1em;
+ }
+ }
+ }
+ }
+
+ .share-sm {
+ position: fixed;
+ bottom: 20px;
+ right: 20px;
+ }
+
+ .side-menu-file-cabinet {
+ position: fixed;
+ top: 20px;
+ left: 20px;
+ z-index: 1;
+ }
+
+ .logo-fa {
+ background: url('/static/archive/img/logo-fa-square.png');
+ margin: 0px 0 30px 20px;
+ height: 30px;
+ width: 30px;
+ background-size: 30px;
+ animation-name: fadeIn;
+ animation-duration: 3s;
+ position: fixed;
+ top: 20px;
+ cursor: pointer;
+ }
+
+ &.cabinet-wrapper-files {
+ display: block;
+ background: $black;
+ }
+
+ &.cabinet-wrapper-cover {
+ background-color: $black;
+ background-repeat:no-repeat;
+ -webkit-background-size:cover;
+ -moz-background-size:cover;
+ -o-background-size:cover;
+ background-size:cover;
+ background-position:center;
+ }
+}
+
+.cabinet-cover {
+ position: absolute;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+ vertical-align: middle;
+ width: 100%;
+ bottom: 0;
+ top: 0;
+ animation-name: fadeIn;
+ animation-duration: 0.5s;
+
+ .content {
+ display: inline-block;
+ width: 90%;
+ max-width: 800px;
+ box-sizing: border-box;
+ padding: 30px;
+ border-radius: 2px;
+ overflow: auto;
+ }
+
+ .cabinet-cover-header {
+ width: 100%;
+ margin-bottom: 20px;
+ animation-name: fallFadeIn;
+ animation-duration: 3s;
+
+ .main-title {
+ .title {
+ font-size: $cover-title;
+ text-transform: uppercase;
+ }
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+ .untertitle {
+ font-size: $xxlarge;
+ text-transform: none;
+ letter-spacing: 0.1em;
+ }
+ }
+
+ .cabinet-cover-content {
+ width: 100%;
+
+ animation-name: fadeIn;
+ animation-duration: 3s;
+
+ .tile-row {
+ position: relative;
+ padding: 10px;
+ box-sizing: border-box;
+
+ .tile {
+ position: relative;
+ display: inline-block;
+ width: calc(50% - 20px);
+ height: 90px;
+ line-height: 90px;
+ box-sizing: border-box;
+ background: none;
+ border: 1px solid $offwhite;
+ font-family: 'Lato', Helvetica, sans-serif;
+ font-size: $xxlarge;
+ text-transform: uppercase;
+ cursor: pointer;
+ transition: 1s ease;
+ letter-spacing: 0.1em;
+
+ span {
+ z-index: 1;
+ }
+
+ &:before {
+ position: absolute;
+ content: " ";
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: block;
+ z-index: 0;
+ transition: 1s ease;
+ background-color: rgba($black, 0.15);
+ }
+
+ &:hover {
+ transition: 1s ease;
+ letter-spacing: 0.15em;
+ &:before{
+ transition: 1s ease;
+ background-color: rgba($black, 0.3);
+ }
+ }
+
+ &:first-child {
+ margin-right: 20px;
+ }
+
+ &.full {
+ width: 100%;
+ margin-right: 0;
+ }
+
+ & * {
+ position: relative;
+ }
+
+ .tile-content {
+ margin: 0 auto;
+ padding: 30px 0;
+ width: 200px;
+
+ .label {
+ height: 28px;
+ float: left;
+ line-height: 28px;
+ padding-left: 10px;
+ }
+
+ svg {
+ float: left;
+ path, circle, polygon,
+ polyline, line {
+ stroke-width: 2px;
+ transition: 0.2s ease;
+ stroke: $offwhite;
+ fill: none;
+ stroke-linecap: round;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+.secondary-action {
+ width: 90px;
+ margin: 0 auto;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+ font-family: 'Lato';
+ font-size: $small;
+ padding: 20px 0;
+ text-align: center;
+ transition: 0.2s ease;
+ border-bottom: 2px solid rgba($offwhite, 0);
+ cursor: pointer;
+
+ &:hover {
+ transition: 0.2s ease;
+ letter-spacing: 0.15em;
+ border-bottom: 2px solid $yellow;
+ }
+}
+
+.cabinet-files {
+ animation-name: fadeIn;
+ animation-duration: 0.5s;
+
+ &.file-tab-list-off {
+ ul.cabinet-file-tab-list {
+ transition: 0.2s ease;
+ left: -300px;
+ }
+ }
+
+ ul.cabinet-file-tab-list {
+ width: 300px;
+ position: fixed;
+ float: left;
+ top: 0;
+ bottom: 0;
+ margin: 0;
+ padding-top: 160px;
+ border-right: 1px solid $darkgrey;
+ background: $black;
+ transition: 0.2s ease;
+ left: 0;
+ z-index: 1;
+
+ li.cabinet-file-tab {
+ width: calc(100% - 40px);
+ text-align: left;
+ border: 0;
+ margin-left: 20px;
+ margin-right: 20px;
+ box-sizing: border-box;
+ font-family: 'Merriweather', serif;
+ font-size: $large;
+ font-weight: 100;
+ border-bottom: 1px solid $darkgrey;
+ transition: 0.2s ease;
+ color: $offwhite;
+
+ &:hover {
+ transition: 0.2s ease;
+ color: $yellow;
+ }
+
+ &.react-tabs__tab--selected {
+ color: $yellow;
+
+ &:after {
+ content: ' →';
+ }
+ }
+ }
+
+ .action {
+ text-align: left;
+ border: 0;
+ box-sizing: border-box;
+
+ button {
+ margin: 20px;
+ width: calc(100% - 40px);
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+ font-family: 'Lato';
+ font-size: $large;
+ text-align: left;
+ padding-left: 0;
+ }
+
+ &.secondary-action button {
+ padding: 20px;
+ border: 1px solid $midwhite;
+ text-align: center;
+ &:hover {
+ transition: 0.2s ease;
+ border-color: $offwhite;
+ background: rgba($offwhite, 0.1);
+ }
+ }
+ }
+
+ .language-toggle {
+ width: 100%;
+ position: absolute;
+ bottom: 0;
+ z-index: 10;
+ }
+ }
+
+
+
+ .react-tabs__tab-panel {
+ z-index: 0;
+ }
+
+ .cabinet-file-content {
+ width: 90%;
+ max-width: 800px;
+ box-sizing: border-box;
+ padding: 140px 30px 60px 30px;
+ border-radius: 2px;
+ overflow: auto;
+ margin: 0 auto;
+ text-align: left;
+ animation-name: fadeIn;
+ animation-duration: 1.5s;
+
+ h1 {
+ font-size: $title;
+ text-align: center;
+ font-weight: 700;
+ text-transform: uppercase;
+ margin-bottom: 50px;
+ }
+
+ .title-separator {
+ margin: 0 auto;
+ width: 100px;
+ border-bottom: 4px solid $yellow;
+ margin-bottom: 50px;
+ }
+
+ h2 {
+ letter-spacing: normal;
+ text-transform: capitalize;
+ margin-top: 40px;
+ }
+
+ .cabinet-body-text {
+ padding: 10px 0;
+
+ .section {
+ margin-bottom: 40px;
+ }
+
+ p {
+ margin: 20px 0;
+ font-size: $xlarge;
+ font-weight: 100;
+ line-height: 24px;
+
+ &:first-child {
+ margin-top: 0;
+ }
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ .highpoint {
+ font-size: $xxxlarge;
+ margin: 60px 0;
+ border-left: 4px solid $yellow;
+ padding-left: 20px;
+ }
+
+ img {
+ width: 100%;
+ }
+
+ .actions {
+ width: 100%;
+ display: inline-block;
+ }
+
+ .primary-action {
+ button {
+ font-size: $large;
+ height: 140px;
+ line-height: 140px;
+ width: 100%;
+ padding: 0;
+ border: 1px solid $offwhite;
+ background-size: 100%;
+ color: $offwhite;
+ cursor: pointer;
+ outline: none;
+ font-family: 'Lato', Helvetica, sans-serif;
+ text-transform: uppercase;
+ margin-bottom: 10px;
+ transition: 0.2s ease;
+ letter-spacing: 0.1em;
+
+ &:after {
+ content: ' →';
+ }
+
+ &:hover {
+ transition: 0.2s ease;
+ letter-spacing: 0.15em;
+ }
+ }
+
+ &.only-on-mobile {
+ display: none;
+
+ button:after {
+ content: '';
+ }
+ }
+
+ &.ja {
+ button { background-image: url("/static/archive/img/scene01.jpg"); }
+ }
+ &.pj {
+ button { background-image: url("/static/archive/img/scene02.jpg"); }
+ }
+ &.st {
+ button { background-image: url("/static/archive/img/scene03.jpg"); }
+ }
+ }
+ }
+ }
+
+ .actions {
+ min-width: 200px;
+ margin: 0 auto;
+
+ .action {
+ display: inline-block;
+ float: left;
+ }
+
+ button {
+ font-size: $large;
+ display: block;
+ width: 100%;
+ }
+
+ .primary-action {
+ width: 100%;
+ animation-name: fadeIn;
+ animation-duration: 1s;
+
+ &:first-child {
+ margin-right: 5%;
+ }
+
+ button {
+ height: 120px;
+ margin: 20px auto;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+ font-family: 'Lato';
+ }
+
+ &.mobile {
+ width: 100%;
+ }
+ }
+
+ .document-action {
+ width: 100%;
+ border: 0;
+ display: block;
+ margin: 0 auto;
+ clear: both;
+
+ button {
+ display: inline-block;
+ text-align: center;
+ width: 100%;
+ height: 40px;
+ line-height: 40px;
+ margin: 10px auto;
+ padding: 0;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+ border: 0;
+ outline: none;
+ border-bottom: 4px solid rgba($yellow, 0);
+ background: none;
+
+ a {
+ text-align: center;
+ box-sizing: border-box;
+ padding-bottom: 5px;
+ cursor: pointer;
+ text-decoration: none;
+ color: $offwhite;
+
+ &:after {
+ content: '↓';
+ }
+ &:hover {
+ transition: 0.2s ease;
+ border-bottom: 4px solid rgba($yellow, 1);
+ color: $yellow;
+ }
+ }
+ }
+ }
+
+ &:last-child {
+ margin-bottom: 40px;
+ }
+ }
+}
+
+/**
+*
+* VIDEO ON LANDING
+*/
+
+.fullscreen {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: 2;
+ background: $black;
+}
+.video {
+ display: block;
+ left: 0px;
+ overflow: hidden;
+ padding-bottom: 56.25%; /* 56.25% = 16:9. set ratio */
+ position: absolute;
+ top: 50%;
+ width: 100%;
+ -webkit-transform-origin: 50% 0;
+ transform-origin: 50% 0;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+.video .wrapper {
+ display: block;
+ height: 300%;
+ left: 0px;
+ overflow: hidden;
+ position: absolute;
+ top: 50%;
+ width: 100%;
+ -webkit-transform: translateY(-50%);
+ transform: translateY(-50%);
+}
+.video iframe {
+ display: block;
+ height: 100%;
+ width: 100%;
+}
+
+/*
+* VIDEO ON SITE
+*/
+
+.video-responsive{
+ overflow:hidden;
+ padding-bottom:56.25%;
+ position:relative;
+ height:0;
+}
+.video-responsive iframe{
+ left:0;
+ top:0;
+ height:100%;
+ width:100%;
+ position:absolute;
+}
+
+/*
+* Responsiveness
+*
+*/
+
+@media (max-width: 780px) {
+ .cabinet-files .cabinet-file-content .cabinet-body-text .primary-action {
+ &.not-on-mobile {
+ display: none;
+ }
+ &.only-on-mobile {
+ display: block;
+ }
+ }
+ .cabinet-cover {
+ .content {
+ padding: 0;
+ }
+ .cabinet-cover-header {
+ margin-bottom: 40px;
+
+ .main-title {
+ .title {
+ font-size: 36px;
+ }
+ }
+ .untertitle {
+ font-size: $normal;
+ }
+ }
+
+ .cabinet-cover-content .tile-row {
+ padding: 0;
+
+ .tile {
+ width: 60%;
+ height: 48px;
+ line-height: 48px;
+ margin: 0 20%;
+ margin-bottom: 10px;
+ font-size: $normal;
+ &:first-child {
+ margin-right: 20%;
+ }
+ &.tile00 {
+ display: none;
+ }
+ }
+ }
+ }
+
+ .cabinet-files {
+ ul.cabinet-file-tab-list {
+ width: 100%;
+
+ li.cabinet-file-tab {
+ text-align: center;
+ font-size: $normal;
+ height: 48px;
+ line-height: 48px;
+ }
+ }
+
+ &.file-tab-list-off {
+ ul.cabinet-file-tab-list {
+ transition: 0.2s ease;
+ left: -100%;
+ }
+ }
+
+ .cabinet-file-content {
+ width: 100%;
+ margin: 0;
+ padding: 100px 15px 40px 15px;
+ box-sizing: border-box;
+ overflow: auto;
+
+ .cabinet-body-text {
+ padding: 10px 0;
+ font-size: $xlarge;
+
+ p {
+ margin: 20px 0;
+ }
+
+ img {
+ width: 100%;
+ }
+ }
+ }
+ }
+ .top-action.not-on-mobile {
+ display: none;
+ }
+}
+
+/* Tablets with very short heights */
+@media (max-height: 768px) and (min-width: 780px) {
+ .cabinet-cover .content {
+ max-width: 640px;
+ }
+
+ .cabinet-cover .cabinet-cover-header {
+ margin-bottom: 20px;
+
+ .main-title .title {
+ font-size: 48px;
+ }
+ }
+
+ .cabinet-cover .cabinet-cover-content .tile-row .tile {
+ height: 50px;
+ line-height: 50px;
+ font-size: $xlarge;
+
+ .tile-content {
+ padding: 10px 0;
+ }
+ }
+}
+
+@media (min-width: 1350px) {
+ .cabinet-files {
+ animation-name: fadeIn;
+ animation-duration: 0.5s;
+
+ &.file-tab-list-off {
+ ul.cabinet-file-tab-list {
+ left: 0;
+ }
+ }
+ }
+
+ .side-menu-file-cabinet {
+ display: none;
+ }
+}
+
+/* ----------- Non-Retina Screens ----------- */
+@media screen
+ and (min-device-width: 1200px)
+ and (max-device-width: 1600px)
+ and (-webkit-min-device-pixel-ratio: 1) {
+}
+
+/* ----------- Retina Screens ----------- */
+@media screen
+ and (min-device-width: 1200px)
+ and (max-device-width: 1600px)
+ and (-webkit-min-device-pixel-ratio: 2)
+ and (min-resolution: 192dpi) {
+}
diff --git a/src/scss/card.scss b/src/scss/card.scss
new file mode 100644
index 0000000..d649cbd
--- /dev/null
+++ b/src/scss/card.scss
@@ -0,0 +1,190 @@
+.event-card {
+ box-sizing: border-box;
+ margin: 1px 0 0 0;
+ padding: 15px;
+ border: 1px solid rgba(0, 0, 0, 0);
+ border-radius: 3px;
+ transition: 0.2 ease;
+ background: $offwhite;
+ color: $darkgrey;
+ box-shadow: 0 19px 19px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);
+ font-size: $large;
+ line-height: $xxlarge;
+ transition: 0.2s ease;
+ height: auto;
+
+ &:hover {
+ border: 1px solid $yellow;
+ }
+
+ .card-bottomhalf {
+ transition: 0.4s ease;
+ height: auto;
+
+ &.folded {
+ transition: 0.4s ease;
+ height: 0;
+ overflow: hidden;
+ }
+ }
+
+ h4 {
+ text-transform: normal;
+ margin-bottom: 0;
+
+ &:first-child {
+ margin-top: 0;
+ }
+ }
+
+ p {
+ margin: 0;
+ }
+
+ .event-card-section {
+ margin-bottom: 10px;
+ }
+
+ .card-toggle p {
+ text-align: center;
+ cursor: pointer;
+
+ .arrow-down {
+ display: inline-block;
+ transition: 0.2s ease;
+ border: solid $darkwhite;
+ border-width: 0 2px 2px 0;
+ padding: 3px;
+ transform: rotate(-135deg);
+ -webkit-transform: rotate(-135deg);
+
+ &.folded {
+ transition: 0.2s ease;
+ transform: rotate(45deg);
+ -webkit-transform: rotate(45deg);
+ }
+ }
+
+ &:hover .arrow-down {
+ transition: 0.2s ease;
+ border: solid $darkgrey;
+ border-width: 0 2px 2px 0;
+ }
+ }
+
+ .tags {
+ width: 100%;
+ margin: 5px 0;
+ text-align: left;
+ }
+
+ .warning {
+ background: $red;
+ color: white;
+ text-transform: uppercase;
+ width: 100%;
+ text-align: center;
+ }
+
+ .timestamp {
+ font-family: 'Lato', Helvetica, sans-serif;
+ margin-top: 0;
+
+ .estimated-timestamp {
+ color: $midwhite;
+ margin-left: 5px;
+ }
+ }
+
+ .category {
+ .color-category {
+ width: 12px;
+ height: 12px;
+ border-radius: 20px;
+ display: inline-block;
+ margin: 0px 5px 0 0;
+
+ &.category_group00 { background: $category_group00; }
+ &.category_group01 { background: $category_group01; }
+ &.category_group02 { background: $category_group02; }
+ &.category_group03 { background: $category_group03; }
+ &.category_group04 { background: $category_group04; }
+ }
+ }
+
+ .event-type {
+ margin: 0 0 10px 0;
+
+ span {
+ display: inline-block;
+ margin: 0 5px 2px 0;
+ color: $darkgrey;
+
+ &.flagged {
+ background: $red;
+ color: $offwhite;
+ padding: 0 5px;
+ }
+ }
+ }
+
+ .location {
+ font-family: 'Lato', Helvetica, sans-serif;
+ }
+
+ .summary {
+ overflow: auto;
+ margin-top: 0;
+ }
+
+ .tag {
+ display: inline-block;
+ margin: 0;
+ margin-right: 5px;
+ }
+
+ /*
+ https://github.com/tobiasahlin/SpinKit/blob/master/LICENSE
+ */
+ .spinner {
+ width: 40px;
+ height: 40px;
+
+ position: relative;
+ margin: 20px auto;
+ }
+
+ .double-bounce1, .double-bounce2 {
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ background-color: $darkgrey;
+ opacity: 0.6;
+ position: absolute;
+ top: 0;
+ left: 0;
+
+ -webkit-animation: sk-bounce 3.0s infinite ease-in-out;
+ animation: sk-bounce 3.0s infinite ease-in-out;
+ }
+
+ .double-bounce2 {
+ -webkit-animation-delay: -1.0s;
+ animation-delay: -1.0s;
+ }
+
+ @-webkit-keyframes sk-bounce {
+ 0%, 100% { -webkit-transform: scale(0.0) }
+ 50% { -webkit-transform: scale(1.0) }
+ }
+
+ @keyframes sk-bounce {
+ 0%, 100% {
+ transform: scale(0.0);
+ -webkit-transform: scale(0.0);
+ } 50% {
+ transform: scale(1.0);
+ -webkit-transform: scale(1.0);
+ }
+ }
+}
diff --git a/src/scss/cardstack.scss b/src/scss/cardstack.scss
new file mode 100644
index 0000000..70393db
--- /dev/null
+++ b/src/scss/cardstack.scss
@@ -0,0 +1,92 @@
+@import 'burger';
+@import 'card';
+
+.card-stack {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ max-height: calc(100% - 208px);
+ height: auto;
+ overflow: auto;
+ box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);
+ z-index: $header;
+ color: white;
+ -webkit-font-smoothing: antialiased;
+
+ &.full-height {
+ max-height: calc(100% - 20px);
+ }
+
+ .card-stack-header {
+ min-height: 38px;
+ line-height: 38px;
+ width: 360px;
+ box-sizing: border-box;
+ padding: 0 5px;
+ background: $black;
+ border-radius: 2px;
+ border: 1px solid $black;
+ font-size: $large;
+ transition: 0.2s ease;
+ text-align: left;
+
+ &:hover {
+ transition: 0.2s ease;
+ }
+
+ .header-copy {
+ margin: 0;
+ padding: 0 10px;
+ line-height: 20px;
+ text-align: right;
+
+ &.top {
+ padding-top: 10px;
+ }
+
+ &:last-child {
+ padding-bottom: 10px;
+ }
+ }
+
+ .side-menu-burg {
+ position: absolute;
+ left: 8px;
+ top: 9px;
+
+ span {
+ width: 20px;
+ }
+ }
+ }
+
+ .card-stack-content {
+ width: 360px;
+
+ ul {
+ padding: 0;
+ margin-top: 1px;
+ margin-bottom: 0;
+ }
+
+ .card-list {
+ height: auto;
+ }
+ }
+
+ &.folded {
+ .card-stack-header {
+ border: 0;
+ height: 0;
+ overflow: hidden;
+ }
+ .card-stack-content {
+ height: 0;
+ overflow: hidden;
+ }
+ }
+}
+
+li {
+ list-style-type: none;
+}
diff --git a/src/scss/common.scss b/src/scss/common.scss
new file mode 100644
index 0000000..2aa5940
--- /dev/null
+++ b/src/scss/common.scss
@@ -0,0 +1,137 @@
+@import 'colors';
+
+body {
+ margin: 0;
+ overflow: hidden;
+ background: $black;
+
+ a {
+ text-decoration: none;
+
+ &:hover {
+ color: $yellow;
+ }
+ }
+}
+
+h1 {
+ font-family: 'Merriweather', serif;
+}
+
+h2 {
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+}
+
+.login-wrapper {
+ margin-left: 20px;
+ color: white;
+
+ .login-title {
+ p.message {
+ color: $yellow;
+ }
+ }
+
+ form span {
+ width: 120px;
+ display: inline-block;
+ }
+
+ form input {
+ margin: 10px 0;
+ height: 30px;
+ box-sizing: border-box;
+ padding: 0 5px;
+ outline: none;
+ font-family: 'Lato', sans-serif;
+
+ &:focus {
+ border: 3px solid $yellow;
+ }
+ }
+
+ form button {
+ background: $black;
+ color: white;
+ width: 120px;
+ height: 30px;
+ border: 1px solid $offwhite;
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+ cursor: pointer;
+ outline: none;
+ margin-top: 10px;
+ margin-left: 320px;
+
+ &:hover,
+ &:focus {
+ transition: 0.2s ease;
+ border: 1px solid $yellow;
+ color: $yellow;
+ }
+ }
+}
+
+.page {
+ font-family: 'Lato', Helvetica sans-serif;
+ box-sizing: border-box;
+ height: 100%;
+ width: 100%;
+
+ ::-moz-selection {
+ color: $black;
+ background: $yellow;
+ }
+ ::selection {
+ color: $black;
+ background: $yellow;
+ }
+}
+
+.chart {
+ background: #000010;
+}
+
+.primary-action {
+ button {
+ font-size: 1.2em;
+ height: 40px;
+ line-height: 40px;
+ width: 200px;
+ padding: 0;
+ border: 1px solid $offwhite;
+ background: none;
+ color: $offwhite;
+ cursor: pointer;
+ outline: none;
+
+ &:hover {
+ transition: 0.2s ease;
+ color: $yellow;
+ border: 1px solid $yellow;
+ background: rgba(white, 0.1);
+ }
+ }
+}
+
+/*
+Scrollbar
+*/
+
+::-webkit-scrollbar {
+ width: 6px;
+}
+
+::-webkit-scrollbar-track {
+ background: none;
+}
+
+::-webkit-scrollbar-thumb {
+ border-radius: 3px;
+ background: $offwhite;
+}
+
+.hidden {
+ visibility: hidden;
+}
diff --git a/src/scss/header.scss b/src/scss/header.scss
new file mode 100644
index 0000000..e295bde
--- /dev/null
+++ b/src/scss/header.scss
@@ -0,0 +1,62 @@
+.header {
+ background: #000000;
+ position: fixed;
+ padding: 10px;
+ z-index: 10;
+ top: 10px;
+ right: 10px;
+ height: 40px;
+ width: 240px;
+ box-sizing: border-box;
+ text-overflow: ellipsis;
+ box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);
+ cursor: pointer;
+
+ .header-title {
+ a {
+ font-family: 'Lato', Helvetica, serif;
+ color: darken($offwhite, 5%);
+ font-size: $xlarge;
+ letter-spacing: 0.1em;
+ float: left;
+ text-transform: uppercase;
+ }
+
+ p {
+ margin: 0;
+ }
+ }
+
+ .side-menu-burg {
+ right: 10px;
+ span,
+ span::before,
+ span::after {
+ background: $midwhite;
+ }
+ }
+
+ &:hover {
+ .side-menu-burg {
+ span {
+ transition: 0.2s ease;
+ background: $offwhite;
+ }
+ span::before {
+ transition: 0.2s ease;
+ top: -6px;
+ background: $offwhite;
+ }
+
+ span::after {
+ transition: 0.2s ease;
+ bottom: -6px;
+ background: $offwhite;
+ }
+ }
+ .header-title a {
+ transition: 0.2s ease;
+ color: $offwhite;
+ }
+ }
+}
diff --git a/src/scss/infopopup.scss b/src/scss/infopopup.scss
new file mode 100644
index 0000000..7c3d56e
--- /dev/null
+++ b/src/scss/infopopup.scss
@@ -0,0 +1,116 @@
+@import 'burger';
+
+.infopopup {
+ width: 400px;
+ height: 400px;
+ box-shadow: 10px -10px 38px rgba(0, 0, 0, 0.3), 10px 15px 12px rgba(0, 0, 0, 0.22);
+ color: $darkgrey;
+ position: absolute;
+ background: $offwhite;
+ border-radius: 5px;
+ bottom: 20px;
+ left: 100px;
+ border: 3px solid $offwhite;
+ padding: 20px;
+ box-sizing: border-box;
+ font-family: 'Lato', 'Helvetica', sans-serif;
+ font-size: $large;
+ transition: opacity 0.5s ease 0.1s, z-index 0.1s ease 0s;
+ opacity: 1;
+ z-index: $overheader;
+
+ &.hidden {
+ transition: 0.5s ease;
+ opacity: 0;
+ }
+
+ .legend-section {
+ width: 300px;
+ padding-left: 60px;
+ height: 40px;
+ display: inline-block;
+
+ svg {
+ width: 100px;
+ float: left;
+ display: inline-block;
+ }
+
+ .legend-labels {
+ float: left;
+ display: inline-block;
+ width: calc(100% - 100px);
+
+ .label {
+ display: block;
+ font-size: $xsmall;
+ margin-top: 10px;
+ margin-left: 10px;
+
+ .color-category {
+ width: 8px;
+ height: 8px;
+ border-radius: 10px;
+ display: inline-block;
+ margin: 0px 5px 0 0;
+
+ &.category_group00 { background: $category_group00; }
+ &.category_group01 { background: $category_group01; }
+ &.category_group02 { background: $category_group02; }
+ &.category_group03 { background: $category_group03; }
+ &.category_group04 { background: $category_group04; }
+ }
+ }
+ }
+
+ &:first-child {
+ .legend-labels .label {
+ margin-top: 0;
+ }
+ }
+ }
+
+ .side-menu-burg {
+ position: absolute;
+ right: 8px;
+ top: 10px;
+ }
+
+ .legend-item {
+ display: block;
+ width: 100%;
+ display: inline-block;
+ margin-bottom: 3px;
+ padding-left: 80px;
+
+ .item-label {
+ line-height: 15px;
+ height: 15px;
+ font-size: $normal;
+ }
+
+ .color-marker {
+ display: inline-block;
+ width: 15px;
+ height: 15px;
+ float: left;
+ margin: 0 10px 0 0;
+ border-radius: 15px;
+
+ &.victims { background-color: #C90500; }
+ &.military { background-color: #319C31; }
+ &.nonstate { background-color: #AC28AC; }
+ &.state-police { background-color: #0000BF; }
+ &.iguala-municipal-police { background-color: #00558D; }
+ &.federal-police { background-color: #5756A2; }
+ &.huitzuco-municipal-police { background-color: #4ECAC1; }
+ &.cocula-municipal-police { background-color: #095959; }
+ &.ambulance { background-color: #ffffff; }
+ &.other { background-color: #D3CE2A; }
+ &.drivers { background-color: #822519; }
+ &.communications { background-color: #a6a6a6; }
+ &.GIEI { background-color: #ffffff; }
+ &.PGR { background-color: #000000; }
+ }
+ }
+}
diff --git a/src/scss/loading.scss b/src/scss/loading.scss
new file mode 100644
index 0000000..1ccd109
--- /dev/null
+++ b/src/scss/loading.scss
@@ -0,0 +1,80 @@
+.loading-overlay {
+ font-family: 'Lato', Helvetica, sans-serif;
+ font-weight: 300;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ background: rgba(0,0,0,0.9);
+ transition: 0.4s ease;
+ z-index: $loading-overlay;
+ opacity: 1;
+
+ .loading-wrapper {
+ position: fixed;
+ left: 50%;
+ top: 40%;
+ text-align: center;
+ width: 100%;
+ margin: 0 0 0 -50%;
+ height: 100%;
+ opacity: 1;
+
+ span {
+ color: $offwhite;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+ }
+ }
+
+ &.hidden {
+ transition: opacity 0.4s ease, z-index .1s 0.4s;
+ opacity: 0;
+ z-index: $hidden;
+ }
+
+
+ /*
+https://github.com/tobiasahlin/SpinKit/blob/master/LICENSE
+ */
+ .spinner {
+ width: 40px;
+ height: 40px;
+
+ position: relative;
+ margin: 20px auto;
+ }
+
+ .double-bounce1, .double-bounce2 {
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ background-color: $offwhite;
+ opacity: 0.6;
+ position: absolute;
+ top: 0;
+ left: 0;
+
+ -webkit-animation: sk-bounce 3.0s infinite ease-in-out;
+ animation: sk-bounce 3.0s infinite ease-in-out;
+ }
+
+ .double-bounce2 {
+ -webkit-animation-delay: -1.0s;
+ animation-delay: -1.0s;
+ }
+
+ @-webkit-keyframes sk-bounce {
+ 0%, 100% { -webkit-transform: scale(0.0) }
+ 50% { -webkit-transform: scale(1.0) }
+ }
+
+ @keyframes sk-bounce {
+ 0%, 100% {
+ transform: scale(0.0);
+ -webkit-transform: scale(0.0);
+ } 50% {
+ transform: scale(1.0);
+ -webkit-transform: scale(1.0);
+ }
+ }
+}
diff --git a/src/scss/main.scss b/src/scss/main.scss
new file mode 100644
index 0000000..b36fad6
--- /dev/null
+++ b/src/scss/main.scss
@@ -0,0 +1,15 @@
+@import 'colors';
+@import 'fonts';
+@import 'levels';
+@import 'animations';
+@import 'common';
+@import 'loading';
+@import 'header';
+@import 'cardstack';
+@import 'map';
+@import 'timeline';
+@import 'tag-filters';
+@import 'toolbar';
+@import 'infopopup';
+@import 'notification';
+@import 'scene';
diff --git a/src/scss/map.scss b/src/scss/map.scss
new file mode 100644
index 0000000..f26cace
--- /dev/null
+++ b/src/scss/map.scss
@@ -0,0 +1,223 @@
+@import 'popup';
+
+@-webkit-keyframes pulsate {
+ 0% { opacity: 0.1; }
+ 50% { opacity: 0.25; }
+ 100% { opacity: 0.1; }
+}
+
+.map-wrapper {
+ position: fixed;
+ top: 0px;
+ bottom: 0px;
+ left: 110px;
+ right: 0;
+
+ .leaflet-container {
+ height: 100%;
+
+ img.leaflet-tile {
+ -webkit-filter: contrast(120%) brightness(115%) grayscale(95%); /* Webkit */
+ filter: gray; /* IE6-9 */
+ filter: contrast(120%) brightness(115%) grayscale(95%); /* W3C */
+ }
+ }
+
+ &.hidden {
+ z-index: $hidden;
+ }
+ &.show {
+ z-index: $map;
+ }
+ .event {
+ fill: $yellow;
+ cursor: pointer;
+ opacity: 0.45;
+ }
+
+ .link {
+ stroke: $midgrey;
+ fill: none;
+ stroke-width: 2;
+ stroke-dasharray: 2px 5px;
+ }
+
+ .site-label {
+ background: rgba($black,0.6);
+ color: #fff;
+ padding: 2px 7px;
+ font-weight: 500;
+ font-size: 11px;
+ font-family: 'Lato', Helvetica, sans-serif;
+ border: rgba($black,0.6);
+ letter-spacing: 0.05em;
+
+ &::before {
+ border-top-color: rgba($black,0.6);
+ }
+ }
+}
+
+/*
+* Leaflet mapping controls
+*/
+.leaflet-touch .leaflet-bar {
+ .leaflet-control-zoom {
+ border: 0;
+ margin-left: 20px;
+ margin-top: 20px;
+ }
+
+ a.leaflet-control-zoom-in,
+ a.leaflet-control-zoom-out {
+ border: 0;
+ border-radius: 2px;
+ color: $yellow;
+ }
+
+ a.leaflet-control-zoom-in {
+ border-bottom: 1px solid $yellow;
+ }
+}
+
+/*
+* Leaflet marker and popups
+*/
+
+.leaflet-svg {
+ display: block;
+
+ &.hide {
+ display: none;
+ }
+}
+
+.leaflet-popup {
+ display: none;
+
+ &.do-display {
+ display: block;
+ }
+}
+
+.leaflet-popup-content-wrapper {
+ border-radius: 3px;
+ background: $black;
+
+ .leaflet-popup-content {
+ color: white;
+ margin: 0;
+ padding: 3px 5px;
+
+ .event-card {
+ margin: 0;
+ }
+ }
+}
+
+.leaflet-popup-close-button {
+ display: none;
+
+ & + .leaflet-popup-content-wrapper .leaflet-popup-content {
+ padding-top: 3px;
+ }
+}
+
+.leaflet-popup-tip-container {
+ display: none;
+}
+
+.leaflet-pane > svg path.bus-route,
+.leaflet-pane > svg path.district {
+ pointer-events: auto;
+}
+
+.eventLocationMarker {
+ fill: none;
+ stroke: $yellow;
+ stroke-width: 2;
+}
+
+/*
+*
+* Elements
+*/
+
+.location-event-marker {
+ stroke-width: 0;
+ transition: 0.2s ease;
+ fill-opacity: 0.8;
+ cursor: pointer;
+
+ &:hover {
+ transition: 0.2s ease;
+ fill-opacity: 1;
+ }
+}
+
+.coevent-marker {
+ fill-opacity: 0.1;
+ stroke-dasharray: 8px 4px;
+ stroke-width: 2px;
+ opacity: 1;
+}
+.coevent-path {
+ stroke-dasharray: 8px 4px;
+ stroke-width: 2;
+}
+
+.district-boundaries {
+ fill: $red;
+ fill-opacity: 0.3;
+ stroke-width: 2;
+ stroke: $red;
+}
+
+.path-polyline {
+ stroke: $darkgrey;
+ stroke-width: 2px;
+}
+
+.route-polyline {
+ transition: 0.2s ease;
+ stroke: $darkgrey;
+
+ &:hover {
+ transition: 0.2s ease;
+ stroke: $black;
+ }
+}
+
+.district-popup {
+ button {
+ height: 80px;
+ line-height: 80px;
+ width: 200px;
+ padding: 0;
+ border: none;
+ background: none;
+ background-size: 100%;
+ color: $offwhite;
+ cursor: pointer;
+ outline: none;
+ font-family: 'Lato', Helvetica, sans-serif;
+ text-transform: uppercase;
+
+ p {
+ font-size: $normal;
+ margin: 0;
+ transition: 0.2s ease;
+ letter-spacing: 0.1em;
+ &:first-child {
+ font-size: $xsmall;
+ }
+ }
+
+ &:hover {
+ p:last-child {
+ transition: 0.2s ease;
+ letter-spacing: 0.15em;
+ }
+ }
+ }
+}
diff --git a/src/scss/notification.scss b/src/scss/notification.scss
new file mode 100644
index 0000000..4b25d46
--- /dev/null
+++ b/src/scss/notification.scss
@@ -0,0 +1,71 @@
+@import 'burger';
+
+.notification-wrapper {
+ top: 60px;
+ right: 60px;
+ width: 400px;
+ height: auto;
+ position: absolute;
+ display: flex;
+ flex-direction: column;
+}
+
+.notification {
+ width: 100%;
+ min-height: 40px;
+ box-shadow: 10px -10px 38px rgba(0, 0, 0, 0.3), 10px 15px 12px rgba(0, 0, 0, 0.22);
+ color: $darkgrey;
+ background: $offwhite;
+ border-radius: 5px;
+ border: 3px solid $offwhite;
+ padding: 20px;
+ margin-bottom: 10px;
+ box-sizing: border-box;
+ font-family: 'Lato', 'Helvetica', sans-serif;
+ font-size: $large;
+ transition: opacity 0.5s ease 0.1s, z-index 0.1s ease 0s;
+ opacity: 1;
+ z-index: $overheader;
+ cursor: pointer;
+
+ &:hover {
+ background: lighten($offwhite, 5%);
+ transition: background-color 0.4s;
+ }
+
+ &.hidden {
+ transition: 0.5s ease;
+ opacity: 0;
+ }
+
+ .side-menu-burg {
+ position: absolute;
+ right: 8px;
+ top: 10px;
+ }
+
+ .message {
+ display: inline-block;
+
+ &.error { color: red; }
+ &.warning { color: orange; }
+ &.good { color: green; }
+ &.neutral { color: $darkgrey; }
+ }
+
+ .details {
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+
+ &.true {
+ height: auto;
+ transition: height 0.4s;
+ }
+
+ &.false {
+ height: 0;
+ transition: height 0.4s;
+ }
+ }
+}
diff --git a/src/scss/popup.scss b/src/scss/popup.scss
new file mode 100644
index 0000000..b28686d
--- /dev/null
+++ b/src/scss/popup.scss
@@ -0,0 +1,81 @@
+.popup {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 15px;
+ border: 0;
+ opacity: 0;
+ border-radius: 2px;
+ transition: 0.2 ease;
+ background: rgba(0, 0, 0, 0.9);
+ transition: 0.4s ease;
+ box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);
+
+ &:hover {
+ transition: 0.4s ease;
+ box-shadow: 0 29px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);
+ }
+
+ .card-tophalf {
+ height: 100px;
+
+ .left {
+ float: left;
+ width: 120px;
+ padding-right: 5px;
+ box-sizing: border-box;
+ border-right: 1px dotted $midwhite;
+ }
+ .right {
+ float: left;
+ width: 225px;
+ padding-left: 5px;
+ height: 90px;
+ overflow: hidden;
+ }
+ }
+
+ .tag,
+ p.see-more {
+ cursor: pointer;
+
+ &:hover {
+ color: $yellow;
+ }
+ }
+
+ p {
+ margin: 5px 0 0 0;
+ }
+
+ .timestamp {
+ font-family: 'Lato', Helvetica, sans-serif;
+ text-transform: uppercase;
+ font-size: $xlarge;
+ margin-top: 0;
+ }
+
+ .location {
+ font-family: 'Lato', Helvetica, sans-serif;
+ font-size: $normal;
+ color: $offwhite;
+ }
+
+ .estimated-timestamp {
+ margin-top: 3px;
+ margin-left: 3px;
+ font-size: $xsmall;
+ color: $midwhite;
+ text-transform: lowercase;
+ }
+
+ .summary {
+ max-height: 200px;
+ text-overflow: ellipsis;
+ overflow: scroll;
+ font-weight: 500;
+ }
+
+ .source {
+ text-align: right;
+ }
+}
diff --git a/src/scss/scene.scss b/src/scss/scene.scss
new file mode 100644
index 0000000..e79ac20
--- /dev/null
+++ b/src/scss/scene.scss
@@ -0,0 +1,177 @@
+.scene-wrapper {
+ #container {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ display: block;
+ }
+ &.hidden {
+ z-index: $hidden;
+ }
+ &.show {
+ z-index: $scene;
+ }
+}
+#loadingText {
+ text-align: center;
+ position:relative;
+ margin: 0 auto;
+ margin-top: 20px;
+ clear:left;
+ height:auto;
+ z-index: 0;
+ color: rgba( 255, 255, 255, 255 );
+ font-size: $normal;
+ font-weight: 700;
+ color: $offwhite;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+}
+
+
+.back-to-map {
+ button {
+ position: fixed;
+ top: 20px;
+ left: 130px;
+ height: 20px;
+ width: 250px;
+ text-align: left;
+ background: none;
+ padding: 0;
+ margin-bottom: 10px;
+ border: none;
+ background-size: 100%;
+ line-height: 20px;
+ color: $offwhite;
+ cursor: pointer;
+ outline: none;
+ font-family: 'Lato', Helvetica, sans-serif;
+ text-transform: uppercase;
+ transition: 0.2s ease;
+ letter-spacing: 0.1em;
+
+ &:hover {
+ transition: 0.2s ease;
+ letter-spacing: 0.15em;
+ }
+ }
+}
+
+/*
+KEYFRAME INFO
+*/
+.keyframe-info {
+ position: fixed;
+ top: 60px;
+ left: 130px;
+ height: auto;
+ width: 270px;
+ box-sizing: border-box;
+ padding: 10px;
+ max-height: calc(100% - 250px);
+ overflow: auto;
+ box-shadow: 0 19px 38px rgba($black, 0.3), 0 15px 12px rgba($black, 0.22);
+ background: $black;
+ border: 1px solid $midgrey;
+ color: $offwhite;
+ font-family: 'Merriweather', 'Georgia', serif;
+
+ h3, h6 {
+ text-align: center;
+ }
+
+ h3 {
+ font-size: $large;
+ }
+
+ p {
+ font-family: 'Lato', 'Helvetica', sans-serif;
+ font-size: $normal;
+ line-height: 1.4em;
+ }
+
+ .actions {
+ width: 100%;
+ .action {
+ width: calc(50% - 5px);
+ height: 40px;
+ box-sizing: border-box;
+ line-height: 40px;
+ font-family: 'Lato', 'Helvetica', sans-serif;
+ text-align: center;
+ display: inline-block;
+
+ &:not(.disabled) {
+ &:hover {
+ cursor: pointer;
+ transition: 0.2s ease;
+ color: $yellow;
+ }
+ }
+
+ &.disabled {
+ color: $midgrey;
+ cursor: normal;
+ }
+
+ &:first-child {
+ margin-right: 10px;
+ }
+ }
+ }
+}
+
+/*
+DAT GUI
+*/
+.dg .a {
+ margin-right: 20px;
+ margin-top: 20px;
+}
+
+.dg .cr.number {
+ border: none;
+ background: none;
+
+ input[type=text] {
+ display: none;
+ }
+}
+
+.dg.main .close-button {
+ display: none;
+}
+
+.dg .c {
+ width: 66%;
+ .slider {
+ width: 100%;
+ border-radius: 10px;
+ height: 12px;
+
+ .slider-fg {
+ border-radius: 10px;
+ }
+
+ &:hover {
+ .slider-fg {
+ background: $offwhite;
+ }
+ }
+ }
+}
+
+.dg .c .slider-fg {
+ background: $midwhite;
+}
+
+.dg .property-name {
+ width: 33%;
+ font-family: 'Lato', Helvetica, sans-serif;
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+ line-height: 20px;
+ color: white;
+}
diff --git a/src/scss/tabs.scss b/src/scss/tabs.scss
new file mode 100644
index 0000000..e4eb769
--- /dev/null
+++ b/src/scss/tabs.scss
@@ -0,0 +1,47 @@
+.react-tabs {
+ padding-top: 0;
+ box-sizing: border-box;
+ height: 100%;
+
+ [role=tablist] {
+ padding: 0;
+ }
+
+
+ [role=tab] {
+ font-family: 'Lato', Helvetica, sans-serif;
+ font-size: $xlarge;
+ width: 33%;
+ background: none;
+ color: $midwhite;
+ outline: none;
+ float: left;
+ cursor: pointer;
+ text-align: center;
+ height: 40px;
+ line-height: 40px;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.4);
+ list-style-type: none;
+ box-sizing: border-box;
+ &:hover {
+ color: $offwhite;
+ }
+ }
+
+ [role=tab][aria-selected=true] {
+ font-weight: 700;
+ border-radius: 0;
+ border: 0;
+ color: $offwhite;
+ border: 1px solid;
+ box-sizing: border-box;
+ text-align: center;
+ border: 1px solid rgba(255, 255, 255, 0.4);
+ border-bottom: 0;
+ }
+
+ .react-innertabpanel {
+ box-sizing: border-box;
+ padding-top: 20px;
+ }
+}
diff --git a/src/scss/tag-filters.scss b/src/scss/tag-filters.scss
new file mode 100644
index 0000000..da3bb8a
--- /dev/null
+++ b/src/scss/tag-filters.scss
@@ -0,0 +1,85 @@
+.applied-tagFilters {
+ position: fixed;
+ top: 135px;
+ right: 5px;
+ max-width: 260px;
+ background: $black;
+ color: $offwhite;
+ padding: 10px;
+ font-size: $small;
+ z-index: $map-overlay;
+
+ .caption {
+ font-size: $small;
+ display: block;
+ text-align: center;
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+ }
+
+ .tag-chip-group {
+ display: inline-block;
+ width: 100%;
+ max-height: 150px;
+ background: $midgrey;
+ border-radius: 5px;
+ margin-top: 5px;
+ padding: 0 5px 5px 5px;
+ box-sizing: border-box;
+ overflow: auto;
+
+ h3 {
+ margin: 5px 0;
+ }
+ }
+
+ .applied-tagFilter-chip {
+ width: auto;
+ border-radius: 10px;
+ border: 0;
+ color: $black;
+ min-height: 16px;
+ line-height: 16px;
+ margin-top: 5px;
+ margin-left: 5px;
+ padding: 1px 5px;
+ transition: 0.2s ease;
+ background: $yellow;
+ float: right;
+
+ &:hover {
+ transition: 0.2s ease;
+ background: lighten($yellow, 15%);
+ }
+
+ &:first-child {
+ margin-top: 5px;
+ }
+
+ .detail {
+ cursor: pointer;
+ max-width: 350px;
+ margin-right: 15px;
+ }
+
+ svg {
+ display: inline-block;
+ position: relative;
+ float: right;
+ margin-top: -14px;
+ height: 12px;
+ width: 12px;
+ user-select: none;
+ cursor: pointer;
+ color: rgba($black, 0.25);
+ fill: rgba($black, 0.25);
+ transition: all 450ms cubic-bezier(0.23, 1, 0.32, 1) 0ms;
+
+ &:hover {
+ color: rgba($black, 0.6);
+ fill: rgba($black, 0.6);
+ transition: all 450ms cubic-bezier(0.23, 1, 0.32, 1) 0ms;
+ }
+ }
+ }
+}
diff --git a/src/scss/timeline.scss b/src/scss/timeline.scss
new file mode 100644
index 0000000..c4d9f5e
--- /dev/null
+++ b/src/scss/timeline.scss
@@ -0,0 +1,288 @@
+
+.timeline-wrapper {
+ position: fixed;
+ box-sizing: border-box;
+ left: 110px;
+ right: 0px;
+ height: 170px;
+ background: rgba($black, 0.8);
+ box-shadow: 0 -10px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);
+ color: white;
+ transition: 0.2s ease;
+ bottom: 0px;
+ z-index: $timeline;
+
+ &.folded {
+ transition: 0.2s ease;
+ bottom: -170px;
+
+ .timeline-header .timeline-toggle p .arrow-down {
+ transform: translate(0, 5px)rotate(-135deg);
+ -webkit-transform: translate(0, 5px)rotate(-135deg);
+ }
+ }
+
+ .timeline-header {
+ height: 0px;
+ width: 100%;
+ font-size: $large;
+ font-weight: 700;
+
+ .timeline-toggle {
+ position: absolute;
+ margin: 0 auto;
+ width: 100%;
+ text-align: center;
+
+ p {
+ width: 60px;
+ height: 25px;
+ margin: 0 auto;
+ background: rgba($black, 0.8);
+ margin-top: -25px;
+ cursor: pointer;
+
+ &:hover {
+ .arrow-down {
+ transition: 0.2s ease;
+ border-right: 2px solid $offwhite;
+ border-bottom: 2px solid $offwhite;
+ }
+ }
+ }
+
+ .arrow-down {
+ display: inline-block;
+ padding: 3px;
+ transition: 0.2s ease;
+ transform: rotate(45deg);
+ -webkit-transform: rotate(45deg);
+ border-right: 2px solid $midwhite;
+ border-bottom: 2px solid $midwhite;
+ }
+ }
+
+ .timeline-info {
+ position: absolute;
+ margin-top: -70px;
+ margin-left: 10px;
+ background: rgba($black, 0.8);
+ padding: 10px;
+ min-height: 20px;
+ p {
+ margin: 0;
+ height: 20px;
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+
+ &:first-child {
+ text-transform: none;
+ font-size: $normal;
+ letter-spacing: 0.05;
+ }
+ }
+ }
+ }
+
+ .timeline-content {
+ height: 160px;
+ padding-top: 20px;
+
+ .timeline-labels {
+ padding-top: 2px;
+ padding-left: 20px;
+ margin-right: 0px;
+ border-right: 1px solid $midgrey;
+ width: 175px;
+ height: 180px;
+ float: left;
+ text-align: left;
+ box-sizing: border-box;
+
+ .timeline-label-title {
+ font-size: $normal;
+ font-weight: 700;
+ fill: $offwhite;
+ letter-spacing: 0.1em;
+ height: 20px;
+ text-transform: uppercase;
+ }
+
+ .timeline-label {
+ font-size: $small;
+ line-height: 16px;
+ color: $offwhite;
+ text-align: right;
+ padding-right: 10px;
+ letter-spacing: 0.05em;
+ }
+ }
+
+ .timeLabel {
+ font-size: $normal;
+ fill: $midwhite;
+ letter-spacing: 0.05em;
+ }
+
+ .timeline {
+ /*width: calc(100% - 200px);*/
+ width: calc(100% - 40px);
+ margin-left: 20px;
+ box-sizing: border-box;
+ float: left;
+
+ svg {
+ display: inline-block;
+ float: left;
+ }
+
+ .domain {
+ opacity: 0;
+ }
+
+ .tick {
+ cursor: -webkit-grab;
+ cursor: -moz-grab;
+ line {
+ stroke: rgb(199, 199, 199);
+ shape-rendering: crispEdges;
+ opacity: 0.6;
+ }
+
+ text {
+ font-family: 'Lato', Helvetica, sans-serif;
+ fill: $midwhite;
+ text-transform: capitalize;
+ }
+ }
+
+ .xAxis {
+ line {
+ stroke-dasharray: 1px 4px;
+ }
+ }
+
+ .yAxis {
+ .tick line {
+ stroke-width: 15px;
+ cursor: -webkit-grab;
+ cursor: -moz-grab;
+ }
+ }
+
+ .axisBoundaries {
+ stroke: $offwhite;
+ stroke-width: 1;
+ stroke-dasharray: 1px 4px;
+ }
+
+ .event {
+ cursor: pointer;
+ opacity: .7;
+
+ &.mouseover {
+ opacity: 1;
+ }
+ }
+
+ .timeline-marker {
+ fill: none;
+ stroke: $offwhite;
+ stroke-width: 2;
+ stroke-dasharray: 5px 2px;
+ }
+
+ .coevent {
+ opacity: .7;
+ cursor: pointer;
+ }
+
+ .time-controls path,
+ .time-controls rect {
+ cursor: pointer;
+ transition: 0.2s ease;
+ fill: $midwhite;
+
+ &:hover path,
+ &:hover path, {
+ transition: 0.2s ease;
+ fill: $offwhite;
+ }
+ }
+
+ .time-controls-inline path {
+ cursor: pointer;
+ fill: $offwhite;
+ }
+
+ .time-controls circle,
+ .time-controls-inline circle {
+ fill: $midwhite;
+ fill-opacity: 0.01;
+ cursor: pointer;
+ stroke: $midwhite;
+ stroke-width: 1;
+ }
+
+ .time-controls-inline circle { stroke: none; }
+
+ .time-controls g,
+ .time-controls-inline {
+ &:hover {
+ cursor: pointer;
+ circle {
+ transition: 0.2s ease;
+ fill-opacity: 0.2;
+ fill: $offwhite;
+ }
+ path,
+ rect {
+ transition: 0.2s ease;
+ fill: $offwhite;
+ }
+ }
+ }
+
+ .zoom-level-button {
+ font-size: $xsmall;
+ cursor: pointer;
+ text-anchor: middle;
+ letter-spacing: 0.05em;
+ transition: 0.2s ease;
+ fill: $midwhite;
+
+ &:hover,
+ &.active {
+ transition: 0.2s ease;
+ fill: $offwhite;
+ }
+ }
+ }
+ }
+}
+
+/*
+* Slider
+* https://bl.ocks.org/mbostock/6452972
+*/
+.track,
+.track-overlay {
+ stroke-linecap: round;
+}
+
+.track {
+ stroke: $offwhite;
+ stroke-opacity: 1;
+ stroke-width: 1px;
+}
+
+.track-overlay {
+ pointer-events: stroke;
+ stroke-width: 15px;
+ stroke: transparent;
+ cursor: pointer;
+}
+
+.handle {
+ fill: $offwhite;
+}
diff --git a/src/scss/toolbar.scss b/src/scss/toolbar.scss
new file mode 100644
index 0000000..f1590b3
--- /dev/null
+++ b/src/scss/toolbar.scss
@@ -0,0 +1,660 @@
+@import 'burger';
+@import 'tabs';
+
+.toolbar-wrapper {
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ bottom: 0px;
+ z-index: $header;
+ background: $midgrey;
+
+ .toolbar {
+ position: relative;
+ width: 110px;
+ height: 100%;
+ padding: 20px 0px;
+ margin: 0;
+ box-sizing: border-box;
+ color: $offwhite;
+ background: $darkgrey;
+ text-align: center;
+ font-size: $normal;
+ font-weight: 100;
+ transition: 0.2s ease;
+ z-index: $header;
+
+ .toolbar-header {
+ margin: 0 15px 10px 15px;
+ padding: 10px 0 25px 0;
+ transition: 0.2s ease;
+ border-bottom: 2px solid $midwhite;
+ text-transform: uppercase;
+ font-family: 'Merriweather', serif;
+ cursor: pointer;
+
+ p {
+ font-size: $normal;
+ margin: 0;
+ }
+ p:first-child {
+ font-size: $xsmall;
+ }
+
+ &:hover {
+ transition: 0.2s ease;
+ border-bottom: 2px solid $offwhite;
+ }
+ }
+
+ .toolbar-tabs {
+ padding: 0;
+ }
+
+ .bottom-actions {
+ position: absolute;
+ width: 110px;
+ bottom: 10px;
+ box-sizing: border-box;
+
+ .bottom-action-block {
+ display: block;
+
+ &:last-child {
+ padding-left: 8px;
+ }
+ }
+
+ .action-button {
+ width: 60px;
+ height: 25px;
+ border-radius: 30px;
+ background: none;
+ margin: 0 auto;
+ margin-top: 10px;
+ display: block;
+ outline: none;
+ font-family: 'Lato';
+ font-size: $xsmall;
+ cursor: pointer;
+ transition: 0.2s ease;
+ border: 1px solid $midwhite;
+ color: $midwhite;
+
+ &.tiny {
+ height: 30px;
+ width: 30px;
+ display: inline-block;
+ float: left;
+ margin-right: 2px;
+ &:last-child {
+ margin-right: 0;
+ }
+ }
+
+ &:hover:not(.disabled) {
+ transition: 0.2s ease;
+ border: 1px solid $offwhite;
+ color: $offwhite;
+
+ svg path { stroke: $offwhite; }
+ svg polyline { stroke: $offwhite; }
+ svg polygon { fill: $offwhite; }
+ }
+
+ svg {
+
+ &.reset {
+ margin-left: -4px;
+ margin-top: -1px;
+ -webkit-transform: scale(0.9);
+ -moz-transform: translate(-2px,1px)scale(0.9);
+ transform: scale(0.9);
+ }
+
+ path, polyline {
+ fill: none;
+ stroke: $midwhite;
+ stroke-width: 2px;
+ }
+
+ polygon {
+ fill: $midwhite;
+ }
+
+ &.coevents {
+ margin: 0;
+ -webkit-transform: scale(0.9);
+ transform: scale(1.2);
+
+ path { stroke-width: 2px; }
+ rect {
+ fill: $midwhite;
+ &.no-fill { fill: $darkgrey; }
+ }
+ line {
+ stroke-width: 1px;
+ stroke: $midwhite;
+ }
+ }
+ }
+
+ &.info {
+ font-size: $xxlarge;
+ bottom: 120px;
+ }
+
+ &.disabled {
+ cursor: default;
+ }
+
+ &.active {
+ border: 1px solid $offwhite;
+ color: $offwhite;
+
+ svg path { stroke: $offwhite; }
+ svg polyline { stroke: $offwhite; }
+ svg polygon { fill: $offwhite; }
+ }
+ }
+ }
+ }
+
+ .toolbar-tab {
+ display: inline-block;
+ height: 60px;
+ width: 110px;
+ padding: 10px 0 5px 0;
+ font-weight: 400;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ cursor: pointer;
+ transition: 0.2s ease;
+ color: $midwhite;
+
+ svg {
+ transform: scale(0.7);
+ path, circle, polygon,
+ polyline, line {
+ stroke-width: 2px;
+ transition: 0.2s ease;
+ stroke: $midwhite;
+ fill: none;
+ stroke-linecap: round;
+ }
+
+ &.scenes {
+ path {
+ transition: 0.2s ease;
+ fill: $midwhite;
+ stroke: none;
+ }
+ }
+ }
+
+ .tab-caption {
+ display: block;
+ text-align: center;
+ font-size: $xsmall;
+ margin-top: -2px;
+ letter-spacing: 0.05em;
+ }
+
+ &.active {
+ background: $black;
+ }
+
+ &:hover,
+ &.active {
+ transition: 0.2s ease;
+ color: $offwhite;
+
+ svg {
+ path, circle, polygon,
+ polyline, line {
+ transition: 0.2s ease;
+ stroke: $offwhite;
+ }
+
+ &.scenes {
+ path {
+ transition: 0.2s ease;
+ fill: $offwhite;
+ stroke: none;
+ }
+ }
+ }
+ }
+ }
+}
+
+.toolbar-panels {
+ width: 440px;
+ top: 15px;
+ bottom: 0;
+ box-sizing: border-box;
+ padding: 30px 10px 10px 30px;
+ font-size: $normal;
+ font-family: 'Lato', Helvetica, sans-serif;
+ background: $black;
+ color: $offwhite;
+ position: fixed;
+ transition: 0.2s ease;
+ left: 110px;
+ box-shadow: 10px -10px 38px rgba(0, 0, 0, 0.3), 10px 15px 12px rgba(0, 0, 0, 0.22);
+
+ h2 {
+ font-family: 'Merriweather', 'Georgia', 'serif';
+ font-size: $large;
+ text-transform: none;
+ letter-spacing: normal;
+ }
+
+ p {
+ font-size: $normal;
+ font-family: 'Merriweather', 'Georgia', 'serif';
+ line-height: 1.4em;
+ };
+
+ .panel-header {
+ display: inline-block;
+ width: 36px;
+ float: right;
+ margin-left: 20px;
+ margin-right: -45px;
+ height: 36px;
+ padding-top: 5px;
+ box-sizing: border-box;
+ margin-top: 10px;
+ border-radius: 3px;
+ background: $black;
+ padding: 8px 6px;
+ cursor: pointer;
+
+ .caret {
+ position: relative;
+ transform: translate(8px, 5px)rotate(45deg);
+ width: 8px;
+ height: 8px;
+ transition: 0.2s ease;
+ border-left: 2px solid $midwhite;
+ border-bottom: 2px solid $midwhite;
+ }
+
+ &:hover {
+ .caret {
+ transition: 0.2s ease;
+ border-left: 2px solid $offwhite;
+ border-bottom: 2px solid $offwhite;
+ }
+ }
+ }
+
+ .people-tab {
+ width: 50%;
+ font-family: 'Lato', Helvetica, sans-serif;
+ font-size: $normal;
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+
+ svg {
+ transform: translate(-2px,0)scale(0.6);
+ &:hover {
+ transition: 0.2s ease;
+ stroke: $offwhite;
+ }
+ }
+
+ &.react-tabs__tab--selected {
+ svg circle,
+ svg path {
+ stroke: $offwhite;
+ }
+ }
+
+ svg circle,
+ svg path {
+ transition: 0.2s ease;
+ fill: none;
+ stroke: $midwhite;
+ stroke-width: 3;
+ }
+ }
+
+ .react-tabs__tab-list {
+ height: 40px;
+ overflow: hidden;
+ }
+
+ .react-tabs__tab-panel {
+ margin-top: 0px;
+ }
+
+ .react-tabs__tab-panel--selected {
+ height: calc(100% - 40px);
+ overflow-y: auto;
+ margin-top: 0;
+
+ .react-tabs__tab-panel--selected {
+ padding-top: 20px;
+ box-sizing: border-box;
+ }
+ }
+ .react-tabs .react-innertabpanel {
+ padding-top: 0;
+ }
+
+ ul {
+ margin: 0;
+ padding-left: 0;
+ height: auto;
+ transition: 0.2s ease;
+ height: calc(100% - 310px);
+ }
+
+ &.folded {
+ transition: 0.2s ease;
+ left: -440px;
+
+ ul {
+ height: 0;
+ margin: 0;
+ }
+ }
+
+ input {
+ width: 100%;
+ border: 1px solid;
+ height: 60px;
+ color: $offwhite;
+ background: none;
+ outline: none;
+ box-sizing: border-box;
+ margin: 20px 0;
+ padding: 5px 10px;
+ font-size: 18px;
+ font-family: 'Lato', sans-serif;
+ letter-spacing: 0.1em;
+ transition: 0.2s ease;
+ border-color: $midwhite;
+ text-align: center;
+
+ &:focus {
+ transition: 0.2s ease;
+ border-color: $offwhite;
+ }
+ }
+
+ .item {
+ width: 100%;
+ height: 36px;
+ line-height: 36px;
+ background: none;
+ font-family: 'Lato', Helvetica, sans-serif;
+ font-size: $large;
+
+ button {
+ height: 36px;
+ border: 1px transparent;
+ background: none;
+ cursor: pointer;
+ color: $offwhite;
+ outline: none;
+ transition: 0.2s ease;
+ padding: 0 10px;
+ text-align: left;
+ float: left;
+
+ .checkbox {
+ display: inline-block;
+ width: 12px;
+ height: 12px;
+ border: 1px solid $offwhite;
+ box-sizing: border-box;
+ background: none;
+ float: left;
+ }
+ }
+
+ span {
+ width: calc(100% - 40px);
+ display: inline-block;
+ height: 36px;
+ line-height: 36px;
+ float: left;
+ font-size: $normal;
+ font-family: 'Merriweather', 'Georgia', 'serif';
+ color: $midwhite;
+ }
+
+ &:hover {
+ span {
+ color: $offwhite;
+ }
+ }
+
+ &.active {
+ span {
+ color: $offwhite;
+ }
+ .checkbox {
+ background: $offwhite;
+ }
+ }
+ }
+
+ .arrow {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ line-height: 10px;
+ padding: 10px;
+ float: left;
+ cursor: pointer;
+ color: $offwhite;
+ transition: 0.4s ease;
+ transform: rotate(0deg);
+
+ &:after {
+ content: '▾';
+ }
+
+ &.folded {
+ transition: 0.4s ease;
+ transform: rotate(-90deg);
+ }
+ }
+
+ .panel-action {
+ button {
+ font-size: 1.2em;
+ height: 140px;
+ line-height: 140px;
+ width: 100%;
+ padding: 0;
+ border: 1px solid $offwhite;
+ background-size: 100%;
+ color: $offwhite;
+ cursor: pointer;
+ outline: none;
+ font-family: 'Lato', Helvetica, sans-serif;
+ text-transform: uppercase;
+ margin-bottom: 10px;
+ transition: 0.2s ease;
+ letter-spacing: 0.1em;
+
+ &:hover {
+ transition: 0.2s ease;
+ letter-spacing: 0.15em;
+ }
+ }
+
+ &:first-child {
+ button { background-image: url("/static/archive/img/scene01.jpg"); }
+ }
+ &:nth-child(2n) {
+ button { background-image: url("/static/archive/img/scene02.jpg"); }
+ }
+ &:nth-child(3n) {
+ button { background-image: url("/static/archive/img/scene03.jpg"); }
+ }
+
+ &.back-to-map {
+ button { background-image: url("/static/archive/img/map.jpg"); }
+ }
+ }
+}
+
+.taggroup-wrapper {
+ margin-top: 30px;
+ z-index: 10;
+ border-bottom: none;
+
+ &:last-child {
+ margin-bottom: 0;
+ border-bottom: 1px solid rgba(white, 0);
+ }
+
+ &:hover {
+ transition: 0.1s ease;
+ }
+
+ .collapsible-item {
+ width: calc(100% - 32px);
+ float: left;
+ }
+
+ .taggroup-header {
+ width: 100%;
+ margin: 0;
+ font-size: $large;
+
+ h2::first-letter {
+ margin-top: 0;
+ }
+ }
+
+ .taggroup-content {
+ width: 100%;
+ display: inline-block;
+ padding-left: 10px;
+ box-sizing: border-box;
+ transition: 0.2s ease;
+
+ .tagsubgroup-wrapper {
+ border: none;
+ border-bottom: 1px solid rgba(white, 0.25);
+ &:first-letter {
+ text-transform: uppercase;
+ }
+
+ &:last-child {
+ border-bottom: 0;
+ }
+
+ .tagsubgroup-header {
+ cursor: pointer;
+ }
+
+ &.folded {
+ .tagsubgroup-content {
+ overflow: hidden;
+ padding: 0 10px;
+ transition: 0.2s ease;
+ height: 0;
+ border-top: 0;
+ }
+ }
+
+ .item {
+ overflow: auto;
+ min-height: 32px;
+ height: auto;
+
+ span {
+ height: auto;
+ }
+ }
+ }
+
+ .tag-filter {
+ outline: none;
+ border: 0;
+ background: none;
+ color: $offwhite;
+ margin-left: 20px;
+ width: calc(100% - 20px);
+ box-sizing: border-box;
+ padding: 0;
+ font-size: $normal;
+ font-weight: 400;
+ text-align: left;
+ cursor: pointer;
+ border: 1px solid $black;
+ border-bottom: 1px solid rgba(white, 0.25);
+ &:first-letter {
+ text-transform: uppercase;
+ }
+
+ &:last-child {
+ border-bottom: 1px solid rgba(white, 0);
+ }
+ }
+ }
+
+ &.folded {
+ .filter-list-content {
+ padding: 0 10px;
+ border-top: 0;
+ transition: 0.2s ease;
+ height: 0;
+ }
+ }
+}
+
+.search-content {
+ .item {
+ overflow: auto;
+ min-height: 32px;
+ height: auto;
+ border-bottom: 1px solid rgba(white, 0.25);
+
+ span {
+ height: auto;
+ }
+ }
+}
+
+.path-list {
+ margin-bottom: 10px;
+
+ .item {
+ border-bottom: 1px solid rgba(255, 255, 255, 0.25);
+ }
+}
+
+@media (max-height: 678px) {
+ .toolbar-wrapper {
+ .toolbar-tab {
+ height: 60px;
+ padding: 0;
+
+ .tab-caption {
+ transition: 0.2s ease;
+ opacity: 0;
+ }
+
+ &:hover {
+ .tab-caption {
+ transition: 0.2s ease;
+ opacity: 1;
+ }
+ }
+ }
+ .toolbar .bottom-actions {
+ .action-button {
+ margin-top: 5px;
+ }
+ }
+ }
+}
diff --git a/src/scss/video.scss b/src/scss/video.scss
new file mode 100644
index 0000000..a77bf13
--- /dev/null
+++ b/src/scss/video.scss
@@ -0,0 +1,33 @@
+.video-wrapper {
+ z-index: 1;
+ position: relative;
+ width: 740px;
+ height: 420px;
+ transition: opacity 500ms;
+ background-color: black;
+ font-family: 'Lato', Helvetica, sans-serif;
+ overflow: hidden;
+}
+
+.video-js .vjs-big-play-button {
+ font-size: 3em;
+ line-height: 40px;
+ height: 40px;
+ width: 40px;
+ display: block;
+ position: absolute;
+ background: none;
+ top: 10px;
+ left: 10px;
+ padding: 0;
+ cursor: pointer;
+ opacity: 1;
+ border-radius: 20px;
+ transition: 0.2s ease;
+ border: 1px solid $midwhite;
+
+ &:hover {
+ transition: 0.2s ease;
+ border: 1px solid $offwhite;
+ }
+}
diff --git a/src/selectors/index.js b/src/selectors/index.js
new file mode 100644
index 0000000..f30edbd
--- /dev/null
+++ b/src/selectors/index.js
@@ -0,0 +1,134 @@
+import {
+ createSelector
+} from 'reselect'
+
+// Input selectors
+export const getEvents = state => state.domain.events;
+export const getLocations = state => state.domain.locations;
+export const getCategories = state => state.domain.categories;
+export const getSites = (state) => {
+ if (process.env.features.USE_SITES) return state.domain.sites;
+ return [];
+}
+export const getTags = state => state.domain.tags;
+
+export const getCategoriesFilter = state => state.app.filters.categories;
+export const getTagsFilter = state => state.app.filters.tags;
+export const getRangeFilter = state => state.app.filters.range;
+
+// NB: should we stick with the default semantics and name these as selectors?
+// e.g. 'selectEvents', 'selectCoevents'.
+// Filter events
+function isTaggedIn(event, tagFilters) {
+ if (event.tags) {
+ const tagsArray = event.tags.split(",");
+ const isTagged = tagsArray.some((tag) => {
+ return tagFilters.find((tagFilter) => {
+ return (tagFilter.key === tag && tagFilter.active);
+ })
+ });
+ return isTagged;
+ } else {
+ return false;
+ }
+}
+
+
+/**
+ * Of all available events, selects those that fall within the time range,
+ * and if TAGS are being used, select them if their tags are enabled
+ */
+export const getFilteredEvents = createSelector(
+ [getEvents, getTagsFilter, getRangeFilter],
+ (events, tagFilters, rangeFilter) => {
+
+ return events.reduce((acc, value) => {
+ const noTags = (tagFilters.length === 0 || !process.env.features.USE_TAGS || tagFilters.every(t => !t.active));
+
+ const isTagged = (noTags) || isTaggedIn(value, tagFilters);
+
+ const isRange = (rangeFilter[0] < d3.timeParse("%Y-%m-%dT%H:%M:%S")(value.timestamp)) &&
+ (d3.timeParse("%Y-%m-%dT%H:%M:%S")(value.timestamp) < rangeFilter[1]);
+
+ if (isRange && isTagged) {
+ const event = Object.assign({}, value);
+ acc[event.id] = event;
+ }
+ return acc;
+ }, []);
+});
+
+/**
+ * Of all the filtered events, group them by location and return a list of
+ * locations with at least one event in it, based on the time range and tags
+ */
+export const getFilteredLocations = createSelector(
+ [getFilteredEvents],
+ (events) => {
+
+ const filteredLocations = {};
+ events.forEach(event => {
+ const location = event.location;
+ if (filteredLocations[location]) {
+ filteredLocations[location].events.push(event);
+ } else {
+ filteredLocations[location] = {
+ label: location,
+ events: [event],
+ latitude: event.latitude,
+ longitude: event.longitude
+ }
+ }
+ })
+
+ // Make locations an array are remove if any are undefined
+ return Object.values(filteredLocations).filter(item => item);
+});
+
+// Filter categories
+export const getFilteredCategories = createSelector(
+ [getCategories],
+ (categories) => {
+
+ return Object.values(categories);
+ });
+
+/**
+ * Return categories by group
+ */
+export const getCategoryGroups = createSelector(
+ [getFilteredCategories],
+ (categories) => {
+ const groups = {};
+ categories.forEach((t) => { if (t.group && !groups[t.group]) { groups[t.group] = t.group_label } });
+ return Object.keys(groups).concat(['other']);
+ }
+)
+
+/**
+ * Given a tree of tags, return those tags as a list, where each node has been
+ * aware of its depth, and given an 'active' flag
+ */
+export const getTagFilters = createSelector(
+ [getTags],
+ (tags) => {
+ const allTags = [];
+ let depth = 0;
+ function traverseNode(node, depth) {
+ // do something to node
+ node.active = (!node.hasOwnProperty('active')) ? false : node.active;
+ node.depth = depth;
+ allTags.push(node)
+ depth = depth + 1;
+
+ if (Object.keys(node.children).length > 0) {
+ Object.values(node.children).forEach((childNode) => {
+ traverseNode(childNode, depth);
+ });
+ }
+ }
+
+ if (tags.key && tags.children) traverseNode(tags, depth)
+ return allTags;
+ }
+)
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000..c60975a
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,16 @@
+import {
+ createStore,
+ applyMiddleware,
+ compose
+} from 'redux';
+import thunk from 'redux-thunk';
+
+import rootReducer from '../reducers';
+const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
+
+const store = createStore(
+ rootReducer,
+ composeEnhancers(applyMiddleware(thunk))
+);
+
+export default store;
diff --git a/src/store/initial.js b/src/store/initial.js
new file mode 100644
index 0000000..1059aa8
--- /dev/null
+++ b/src/store/initial.js
@@ -0,0 +1,97 @@
+// TODO: annotate sections of this state.
+
+// NB: why does this canvas document need to be created?
+const canvas = document.createElement('canvas');
+const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
+
+const initial = {
+ domain: {
+ events: [],
+ locations: [],
+
+ categories: [],
+ sites: [],
+
+ // Tag tree
+ tags: { },
+ notifications: [],
+ },
+ app: {
+ error: null,
+ highlighted: null,
+ selected: [],
+ notifications: [],
+ filters: {
+ range: [
+ d3.timeParse("%Y-%m-%dT%H:%M:%S")("2014-08-22T12:00:00"),
+ d3.timeParse("%Y-%m-%dT%H:%M:%S")("2014-08-27T12:00:00")
+ ],
+ tags: [],
+ categories: [],
+ views: {
+ events: true,
+ coevents: false,
+ routes: false,
+ sites: true
+ },
+ },
+ base_uri: 'http://127.0.0.1:8000/', // Modify accordingly on production setup.
+ isMobile: (/Mobi/.test(navigator.userAgent)),
+ isWebGL: (gl && gl instanceof WebGLRenderingContext),
+ language: 'en-US',
+ mapAnchor: process.env.MAP_ANCHOR,
+ features: {
+ USE_TAGS: process.env.features.USE_TAGS,
+ USE_SEARCH: process.env.features.USE_SEARCH
+ }
+ },
+ ui: {
+ style: {
+ colors: {
+ WHITE: "#efefef",
+ YELLOW: "#ffd800",
+ MIDGREY: "rgb(44, 44, 44)",
+ DARKGREY: "#232323",
+ PINK: "#F28B50",//rgb(232, 9, 90)",
+ ORANGE: "#F25835",//rgb(232, 9, 90)",
+ RED: "rgb(233, 0, 19)",
+ BLUE: "#F2DE79",//"rgb(48, 103 , 217)",
+ GREEN: "#4FF2F2",//"rgb(0, 158, 86)",
+ },
+ groupColors: {
+ category_group00: "#FF0000",
+ category_group01: "#226b22",
+ category_group02: "#671f6f",
+ category_group03: "#0000bf",
+ category_group04: "#d3ce2a",
+ other: "#FF0000"
+ },
+ palette: d3.schemeCategory10,
+ },
+ dom: {
+ timeline: "timeline",
+ timeslider: "timeslider",
+ map: "map"
+ },
+ flags: {
+ isFetchingDomain: false,
+ isFetchingEvents: false,
+ isView2d: true,
+ isTimeline: true,
+ isToolbar: false,
+ isCardstack: true,
+ isInfopopup: false,
+ isNotification: true
+ },
+ tools: {
+ formatter: d3.timeFormat("%d %b, %H:%M"),
+ formatterWithYear: d3.timeFormat("%d %b %Y, %H:%M"),
+ parser: d3.timeParse("%Y-%m-%dT%H:%M:%S")
+ },
+ components: {
+ toolbarTab: false,
+ }
+ }
+};
+
+export default initial;
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 0000000..5e7e738
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,83 @@
+const webpack = require('webpack');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const userConfig = require('./config');
+const devMode = process.env.NODE_ENV !== 'production';
+const path = require('path');
+
+const APP_DIR = path.resolve(__dirname, './src');
+const BUILD_DIR = path.resolve(__dirname, './build');
+
+const config = {
+ entry: {
+ index: `${APP_DIR}/index.jsx`,
+ },
+ devtool: 'source-map',
+ module: {
+ rules: [
+ {
+ test: /\.scss$/,
+ include: `${APP_DIR}`,
+ use: [
+ devMode ? 'style-loader' : MiniCssExtractPlugin.loader,
+ 'css-loader',
+ 'sass-loader'
+ ]
+ }, {
+ test: /\.js(x)?$/,
+ exclude: /node_modules/,
+ include: `${APP_DIR}`,
+ use: {
+ loader: 'babel-loader'
+ },
+ }, {
+ test: /\.(eot|svg|otf|ttf|woff|woff2)$/,
+ use: {
+ loader: 'file-loader',
+ }
+ },
+ ],
+ },
+ node: {
+ net: 'empty',
+ tls: 'empty',
+ dns: 'empty'
+ },
+ resolve: {
+ extensions: ['*', '.js', ],
+ },
+ output: {
+ path: BUILD_DIR,
+ filename: 'js/[name].bundle.js',
+ },
+ plugins: [
+ new webpack.DefinePlugin({
+ 'process.env': {
+ 'NODE_ENV': JSON.stringify('production'),
+ 'MAPBOX_TOKEN': JSON.stringify(userConfig.MAPBOX_TOKEN),
+ 'SERVER_ROOT': JSON.stringify(userConfig.SERVER_ROOT),
+ 'EVENT_EXT': JSON.stringify(userConfig.EVENT_EXT),
+ 'CATEGORY_EXT': JSON.stringify(userConfig.CATEGORY_EXT),
+ 'TAG_TREE_EXT': JSON.stringify(userConfig.TAG_TREE_EXT),
+ 'SITES_EXT': JSON.stringify(userConfig.SITES_EXT),
+ 'EVENT_DESC_ROOT': JSON.stringify(userConfig.EVENT_DESC_ROOT),
+ 'MAP_ANCHOR': JSON.stringify(userConfig.MAP_ANCHOR),
+ 'INCOMING_DATETIME_FORMAT': JSON.stringify(userConfig.INCOMING_DATETIME_FORMAT),
+ 'features': {
+ 'USE_TAGS': JSON.stringify(userConfig.features.USE_TAGS),
+ 'USE_SEARCH': JSON.stringify(userConfig.features.USE_SEARCH),
+ 'USE_SITES': JSON.stringify(userConfig.features.USE_SITES)
+ }
+ }
+ }),
+ new MiniCssExtractPlugin({
+ filename: devMode ? '[name].css' : '[name].[hash].css',
+ chunkFilename: devMode ? '[id].css' : '[id].[hash].css',
+ }),
+ new HtmlWebpackPlugin({
+ template: './index.html',
+ })
+ ],
+};
+
+module.exports = config;
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..65b1658
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,5702 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@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.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e"
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/generator" "^7.1.2"
+ "@babel/helpers" "^7.1.2"
+ "@babel/parser" "^7.1.2"
+ "@babel/template" "^7.1.2"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.1.2"
+ convert-source-map "^1.1.0"
+ debug "^3.1.0"
+ json5 "^0.5.0"
+ lodash "^4.17.10"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.1.2", "@babel/generator@^7.1.3":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.3.tgz#2103ec9c42d9bdad9190a6ad5ff2d456fd7b8673"
+ dependencies:
+ "@babel/types" "^7.1.3"
+ jsesc "^2.5.1"
+ lodash "^4.17.10"
+ 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.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"
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-builder-react-jsx@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb"
+ dependencies:
+ "@babel/types" "^7.0.0"
+ esutils "^2.0.0"
+
+"@babel/helper-call-delegate@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a"
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.0.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-define-map@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c"
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ lodash "^4.17.10"
+
+"@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"
+ dependencies:
+ "@babel/traverse" "^7.1.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"
+ 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"
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-member-expression-to-functions@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f"
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@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.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz#470d4f9676d9fad50b324cdcce5fbabbc3da5787"
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-simple-access" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.0.0"
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ lodash "^4.17.10"
+
+"@babel/helper-optimise-call-expression@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5"
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-plugin-utils@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
+
+"@babel/helper-regex@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27"
+ dependencies:
+ lodash "^4.17.10"
+
+"@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"
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.0.0"
+ "@babel/helper-wrap-function" "^7.1.0"
+ "@babel/template" "^7.1.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-replace-supers@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362"
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.0.0"
+ "@babel/helper-optimise-call-expression" "^7.0.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@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"
+ dependencies:
+ "@babel/template" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-split-export-declaration@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813"
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@babel/helper-wrap-function@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz#8cf54e9190706067f016af8f75cb3df829cc8c66"
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/template" "^7.1.0"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@babel/helpers@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5"
+ dependencies:
+ "@babel/template" "^7.1.2"
+ "@babel/traverse" "^7.1.0"
+ "@babel/types" "^7.1.2"
+
+"@babel/highlight@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.2", "@babel/parser@^7.1.3":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.3.tgz#2c92469bac2b7fbff810b67fca07bd138b48af77"
+
+"@babel/plugin-proposal-async-generator-functions@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz#41c1a702e10081456e23a7b74d891922dd1bb6ce"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-remap-async-to-generator" "^7.1.0"
+ "@babel/plugin-syntax-async-generators" "^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"
+ dependencies:
+ "@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"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.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"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.0.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"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.0.0"
+ regexpu-core "^4.2.0"
+
+"@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"
+ 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"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-jsx@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz#034d5e2b4e14ccaea2e4c137af7e4afb39375ffd"
+ 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"
+ 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"
+ 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"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-async-to-generator@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz#109e036496c51dd65857e16acab3bafdf3c57811"
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-remap-async-to-generator" "^7.1.0"
+
+"@babel/plugin-transform-block-scoped-functions@^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"
+ 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"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ lodash "^4.17.10"
+
+"@babel/plugin-transform-classes@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz#ab3f8a564361800cbc8ab1ca6f21108038432249"
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^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.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"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-destructuring@^7.0.0":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz#e69ff50ca01fac6cb72863c544e516c2b193012f"
+ 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"
+ 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"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-exponentiation-operator@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz#9c34c2ee7fd77e02779cfa37e403a2e1003ccc73"
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0"
+ "@babel/helper-plugin-utils" "^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"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-function-name@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz#29c5550d5c46208e7f730516d41eeddd4affadbb"
+ dependencies:
+ "@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"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-amd@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.1.0.tgz#f9e0a7072c12e296079b5a59f408ff5b97bf86a8"
+ dependencies:
+ "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-commonjs@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz#0a9d86451cbbfb29bd15186306897c67f6f9a05c"
+ dependencies:
+ "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-simple-access" "^7.1.0"
+
+"@babel/plugin-transform-modules-systemjs@^7.0.0":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.1.3.tgz#2119a3e3db612fd74a19d88652efbfe9613a5db0"
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-umd@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.1.0.tgz#a29a7d85d6f28c3561c33964442257cc6a21f2a8"
+ dependencies:
+ "@babel/helper-module-transforms" "^7.1.0"
+ "@babel/helper-plugin-utils" "^7.0.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.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.1.0.tgz#b1ae194a054b826d8d4ba7ca91486d4ada0f91bb"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.1.0"
+
+"@babel/plugin-transform-parameters@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz#44f492f9d618c9124026e62301c296bf606a7aed"
+ dependencies:
+ "@babel/helper-call-delegate" "^7.1.0"
+ "@babel/helper-get-function-arity" "^7.0.0"
+ "@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"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-react-jsx-self@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.0.0.tgz#a84bb70fea302d915ea81d9809e628266bb0bc11"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.0.0"
+
+"@babel/plugin-transform-react-jsx-source@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0.tgz#28e00584f9598c0dd279f6280eee213fa0121c3c"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.0.0"
+
+"@babel/plugin-transform-react-jsx@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0.tgz#524379e4eca5363cd10c4446ba163f093da75f3e"
+ dependencies:
+ "@babel/helper-builder-react-jsx" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.0.0"
+
+"@babel/plugin-transform-regenerator@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1"
+ dependencies:
+ regenerator-transform "^0.13.3"
+
+"@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"
+ 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"
+ 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"
+ 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"
+ 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"
+ 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"
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.0.0"
+ regexpu-core "^4.1.3"
+
+"@babel/preset-env@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.1.0.tgz#e67ea5b0441cfeab1d6f41e9b5c79798800e8d11"
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-proposal-async-generator-functions" "^7.1.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.1.0"
+ "@babel/plugin-transform-block-scoped-functions" "^7.0.0"
+ "@babel/plugin-transform-block-scoping" "^7.0.0"
+ "@babel/plugin-transform-classes" "^7.1.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.1.0"
+ "@babel/plugin-transform-for-of" "^7.0.0"
+ "@babel/plugin-transform-function-name" "^7.1.0"
+ "@babel/plugin-transform-literals" "^7.0.0"
+ "@babel/plugin-transform-modules-amd" "^7.1.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.1.0"
+ "@babel/plugin-transform-modules-systemjs" "^7.0.0"
+ "@babel/plugin-transform-modules-umd" "^7.1.0"
+ "@babel/plugin-transform-new-target" "^7.0.0"
+ "@babel/plugin-transform-object-super" "^7.1.0"
+ "@babel/plugin-transform-parameters" "^7.1.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"
+ invariant "^2.2.2"
+ js-levenshtein "^1.1.3"
+ semver "^5.3.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:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-transform-react-display-name" "^7.0.0"
+ "@babel/plugin-transform-react-jsx" "^7.0.0"
+ "@babel/plugin-transform-react-jsx-self" "^7.0.0"
+ "@babel/plugin-transform-react-jsx-source" "^7.0.0"
+
+"@babel/template@^7.1.0", "@babel/template@^7.1.2":
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644"
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.1.2"
+ "@babel/types" "^7.1.2"
+
+"@babel/traverse@^7.1.0":
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.4.tgz#f4f83b93d649b4b2c91121a9087fa2fa949ec2b4"
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/generator" "^7.1.3"
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-split-export-declaration" "^7.0.0"
+ "@babel/parser" "^7.1.3"
+ "@babel/types" "^7.1.3"
+ debug "^3.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.10"
+
+"@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.3":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.3.tgz#3a767004567060c2f40fca49a304712c525ee37d"
+ dependencies:
+ esutils "^2.0.2"
+ lodash "^4.17.10"
+ to-fast-properties "^2.0.0"
+
+"@webassemblyjs/ast@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.8.tgz#f31f480debeef957f01b623f27eabc695fa4fe8f"
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.7.8"
+ "@webassemblyjs/helper-wasm-bytecode" "1.7.8"
+ "@webassemblyjs/wast-parser" "1.7.8"
+
+"@webassemblyjs/floating-point-hex-parser@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.8.tgz#1b3ed0e27e384032254e9322fc646dd3e70ef1b9"
+
+"@webassemblyjs/helper-api-error@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.8.tgz#a2b49c11f615e736f815ec927f035dcfa690d572"
+
+"@webassemblyjs/helper-buffer@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.8.tgz#3fc66bfa09c1c60e824cf3d5887826fac062877d"
+
+"@webassemblyjs/helper-code-frame@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.8.tgz#cc5a7e9522b70e7580df056dfd34020cf29645b0"
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.7.8"
+
+"@webassemblyjs/helper-fsm@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.8.tgz#fe4607430af466912797c21acafd3046080182ea"
+
+"@webassemblyjs/helper-module-context@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.8.tgz#3c2e7ee93d14ff4768ba66fb1be42fdc9dc7160a"
+
+"@webassemblyjs/helper-wasm-bytecode@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.8.tgz#89bdb78cd6dd5209ae2ed2925de78d0f0e00b6f0"
+
+"@webassemblyjs/helper-wasm-section@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.8.tgz#c68ef7d26a6fc12421b2e6e56f9bc810dfb33e87"
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/helper-buffer" "1.7.8"
+ "@webassemblyjs/helper-wasm-bytecode" "1.7.8"
+ "@webassemblyjs/wasm-gen" "1.7.8"
+
+"@webassemblyjs/ieee754@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.8.tgz#1f37974b13cb486a9237e73ce04cac7a2f1265ed"
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.8.tgz#1bee83426819192db2ea1a234b84c7ebc6d34c1f"
+ dependencies:
+ "@xtuc/long" "4.2.1"
+
+"@webassemblyjs/utf8@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.8.tgz#2b489d5cf43e0aebb93d8e2d792aff9879c61f05"
+
+"@webassemblyjs/wasm-edit@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.8.tgz#f8bdbe7088718eca27b1c349bb7c06b8a457950c"
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/helper-buffer" "1.7.8"
+ "@webassemblyjs/helper-wasm-bytecode" "1.7.8"
+ "@webassemblyjs/helper-wasm-section" "1.7.8"
+ "@webassemblyjs/wasm-gen" "1.7.8"
+ "@webassemblyjs/wasm-opt" "1.7.8"
+ "@webassemblyjs/wasm-parser" "1.7.8"
+ "@webassemblyjs/wast-printer" "1.7.8"
+
+"@webassemblyjs/wasm-gen@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.8.tgz#7e8abf1545eae74ac6781d545c034af3cfd0c7d5"
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/helper-wasm-bytecode" "1.7.8"
+ "@webassemblyjs/ieee754" "1.7.8"
+ "@webassemblyjs/leb128" "1.7.8"
+ "@webassemblyjs/utf8" "1.7.8"
+
+"@webassemblyjs/wasm-opt@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.8.tgz#7ada6e211914728fce02ff0ff9c344edc6d41f26"
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/helper-buffer" "1.7.8"
+ "@webassemblyjs/wasm-gen" "1.7.8"
+ "@webassemblyjs/wasm-parser" "1.7.8"
+
+"@webassemblyjs/wasm-parser@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.8.tgz#dac47c291fb6a3e63529aecd647592cd34afbf94"
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/helper-api-error" "1.7.8"
+ "@webassemblyjs/helper-wasm-bytecode" "1.7.8"
+ "@webassemblyjs/ieee754" "1.7.8"
+ "@webassemblyjs/leb128" "1.7.8"
+ "@webassemblyjs/utf8" "1.7.8"
+
+"@webassemblyjs/wast-parser@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.8.tgz#f8aab9a450c048c1f9537695c89faeb92fabfba5"
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/floating-point-hex-parser" "1.7.8"
+ "@webassemblyjs/helper-api-error" "1.7.8"
+ "@webassemblyjs/helper-code-frame" "1.7.8"
+ "@webassemblyjs/helper-fsm" "1.7.8"
+ "@xtuc/long" "4.2.1"
+
+"@webassemblyjs/wast-printer@1.7.8":
+ version "1.7.8"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.8.tgz#e7e965782c1912f6a965f14a53ff43d8ad0403a5"
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/wast-parser" "1.7.8"
+ "@xtuc/long" "4.2.1"
+
+"@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"
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+
+accepts@~1.3.4, accepts@~1.3.5:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
+ dependencies:
+ 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@^5.0.0, acorn@^5.6.2:
+ version "5.7.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
+
+ajv-errors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.0.tgz#ecf021fa108fd17dfb5e6b383f2dd233e31ffc59"
+
+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.3.0:
+ version "5.5.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
+ dependencies:
+ co "^4.6.0"
+ fast-deep-equal "^1.0.0"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.3.0"
+
+ajv@^6.1.0:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.4.tgz#247d5274110db653706b550fcc2b797ca28cfc59"
+ dependencies:
+ fast-deep-equal "^2.0.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+
+ansi-colors@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.1.0.tgz#dcfaacc90ef9187de413ec3ef8d5eb981a98808f"
+
+ansi-html@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ dependencies:
+ color-convert "^1.9.0"
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+aproba@^1.0.3, aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+
+array-flatten@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296"
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+
+asap@~2.0.3:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+
+asn1.js@^4.0.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+
+assert@^1.1.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ dependencies:
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+
+async-foreach@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
+
+async@^1.5.2:
+ version "1.5.2"
+ resolved "http://registry.npmjs.org/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+
+atob@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+
+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.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-loader@^8.0.4:
+ version "8.0.4"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.4.tgz#7bbf20cbe4560629e2e41534147692d3fecbdce6"
+ dependencies:
+ find-cache-dir "^1.0.0"
+ loader-utils "^1.0.2"
+ mkdirp "^0.5.1"
+ util.promisify "^1.0.0"
+
+babel-polyfill@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153"
+ dependencies:
+ babel-runtime "^6.26.0"
+ core-js "^2.5.0"
+ regenerator-runtime "^0.10.5"
+
+babel-runtime@^6.26.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"
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+
+base64-js@^1.0.2:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+batch@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ dependencies:
+ tweetnacl "^0.14.3"
+
+big.js@^3.1.3:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
+
+binary-extensions@^1.0.0:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14"
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ 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"
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+
+body-parser@1.18.3:
+ version "1.18.3"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4"
+ dependencies:
+ bytes "3.0.0"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.2"
+ http-errors "~1.6.3"
+ iconv-lite "0.4.23"
+ on-finished "~2.3.0"
+ qs "6.5.2"
+ raw-body "2.3.3"
+ type-is "~1.6.16"
+
+bonjour@^3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
+ dependencies:
+ array-flatten "^2.1.0"
+ deep-equal "^1.0.1"
+ dns-equal "^1.0.0"
+ dns-txt "^2.0.2"
+ multicast-dns "^6.0.1"
+ multicast-dns-service-types "^1.1.0"
+
+boolbase@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.0, braces@^2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.2.1.tgz#257a24c879d1cd4016348eee5c25de683260b21d"
+ dependencies:
+ caniuse-lite "^1.0.30000890"
+ electron-to-chromium "^1.3.79"
+ node-releases "^1.0.0-alpha.14"
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+
+buffer-indexof@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+
+buffer@^4.3.0:
+ version "4.9.1"
+ resolved "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+
+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"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.2"
+ ssri "^5.2.4"
+ unique-filename "^1.1.0"
+ y18n "^4.0.0"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+camel-case@3.0.x:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+ dependencies:
+ no-case "^2.2.0"
+ upper-case "^1.1.1"
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+
+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"
+
+caniuse-lite@^1.0.30000890:
+ version "1.0.30000892"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000892.tgz#344d2b51ee3ff5977537da4aa449c90eec40b759"
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+
+chalk@^1.1.1, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^2.0.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"
+
+chokidar@^2.0.0, chokidar@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26"
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.0"
+ braces "^2.3.0"
+ glob-parent "^3.1.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ lodash.debounce "^4.0.8"
+ normalize-path "^2.1.1"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ upath "^1.0.5"
+ optionalDependencies:
+ fsevents "^1.2.2"
+
+chownr@^1.0.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
+
+chrome-trace-event@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48"
+ dependencies:
+ tslib "^1.9.0"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+classnames@^2.2.0:
+ 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"
+ dependencies:
+ source-map "~0.6.0"
+
+cliui@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wrap-ansi "^2.0.0"
+
+cliui@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+ wrap-ansi "^2.0.0"
+
+clone-deep@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713"
+ dependencies:
+ for-own "^1.0.0"
+ is-plain-object "^2.0.4"
+ kind-of "^6.0.0"
+ shallow-clone "^1.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
+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"
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ dependencies:
+ color-name "1.1.3"
+
+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.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@2:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
+
+commander@2.17.x, commander@~2.17.1:
+ version "2.17.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
+
+commander@~2.13.0:
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+
+component-emitter@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+
+compressible@~2.0.14:
+ version "2.0.15"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz#857a9ab0a7e5a07d8d837ed43fe2defff64fe212"
+ dependencies:
+ mime-db ">= 1.36.0 < 2"
+
+compression@^1.5.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db"
+ dependencies:
+ accepts "~1.3.5"
+ bytes "3.0.0"
+ compressible "~2.0.14"
+ debug "2.6.9"
+ on-headers "~1.0.1"
+ safe-buffer "5.1.2"
+ vary "~1.1.2"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+concat-stream@^1.5.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+connect-history-api-fallback@^1.3.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a"
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+
+content-disposition@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
+
+content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+
+convert-source-map@^1.1.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
+ dependencies:
+ safe-buffer "~5.1.1"
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+
+cookie@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+
+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:
+ version "2.5.7"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e"
+
+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"
+
+create-ecdh@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.2.0"
+ resolved "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.7"
+ resolved "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+create-react-class@^15.6.0:
+ version "15.6.3"
+ resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
+ dependencies:
+ fbjs "^0.8.9"
+ loose-envify "^1.3.1"
+ object-assign "^4.1.1"
+
+cross-spawn@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
+ dependencies:
+ lru-cache "^4.0.1"
+ which "^1.2.9"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ 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"
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+css-loader@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.0.tgz#9f46aaa5ca41dbe31860e3b62b8e23c42916bf56"
+ 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"
+
+css-select@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+ dependencies:
+ boolbase "~1.0.0"
+ css-what "2.1"
+ domutils "1.5.1"
+ nth-check "~1.0.1"
+
+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"
+ dependencies:
+ cssesc "^0.1.0"
+ fastparse "^1.1.1"
+ regexpu-core "^1.0.0"
+
+css-what@2.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
+
+cssesc@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ dependencies:
+ array-find-index "^1.0.1"
+
+cyclist@~0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
+
+d3-array@1, d3-array@^1.2.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f"
+
+d3-array@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.1.tgz#d1ca33de2f6ac31efadb8e050a021d7e2396d5dc"
+
+d3-axis@1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-1.0.8.tgz#31a705a0b535e65759de14173a31933137f18efa"
+
+d3-brush@1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.0.4.tgz#00c2f238019f24f6c0a194a26d41a1530ffe7bc4"
+ dependencies:
+ d3-dispatch "1"
+ d3-drag "1"
+ d3-interpolate "1"
+ d3-selection "1"
+ d3-transition "1"
+
+d3-chord@1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-1.0.4.tgz#7dec4f0ba886f713fe111c45f763414f6f74ca2c"
+ dependencies:
+ d3-array "1"
+ d3-path "1"
+
+d3-collection@1:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e"
+
+d3-collection@1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.4.tgz#342dfd12837c90974f33f1cc0a785aea570dcdc2"
+
+d3-color@1:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.2.3.tgz#6c67bb2af6df3cc8d79efcc4d3a3e83e28c8048f"
+
+d3-color@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.3.tgz#bc7643fca8e53a8347e2fbdaffa236796b58509b"
+
+d3-dispatch@1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.5.tgz#e25c10a186517cd6c82dd19ea018f07e01e39015"
+
+d3-dispatch@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.3.tgz#46e1491eaa9b58c358fce5be4e8bed626e7871f8"
+
+d3-drag@1:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.3.tgz#46e206ad863ec465d88c588098a1df444cd33c64"
+ dependencies:
+ d3-dispatch "1"
+ d3-selection "1"
+
+d3-drag@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.1.tgz#df8dd4c502fb490fc7462046a8ad98a5c479282d"
+ dependencies:
+ d3-dispatch "1"
+ d3-selection "1"
+
+d3-dsv@1:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.0.10.tgz#4371c489a2a654a297aca16fcaf605a6f31a6f51"
+ dependencies:
+ commander "2"
+ iconv-lite "0.4"
+ rw "1"
+
+d3-dsv@1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.0.8.tgz#907e240d57b386618dc56468bacfe76bf19764ae"
+ dependencies:
+ commander "2"
+ iconv-lite "0.4"
+ rw "1"
+
+d3-ease@1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.5.tgz#8ce59276d81241b1b72042d6af2d40e76d936ffb"
+
+d3-ease@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.3.tgz#68bfbc349338a380c44d8acc4fbc3304aa2d8c0e"
+
+d3-force@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.1.0.tgz#cebf3c694f1078fcc3d4daf8e567b2fbd70d4ea3"
+ dependencies:
+ d3-collection "1"
+ d3-dispatch "1"
+ d3-quadtree "1"
+ d3-timer "1"
+
+d3-format@1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.3.2.tgz#6a96b5e31bcb98122a30863f7d92365c00603562"
+
+d3-format@1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.2.2.tgz#1a39c479c8a57fe5051b2e67a3bee27061a74e7a"
+
+d3-geo@1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.9.1.tgz#157e3b0f917379d0f73bebfff3be537f49fa7356"
+ dependencies:
+ d3-array "1"
+
+d3-hierarchy@1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz#a1c845c42f84a206bcf1c01c01098ea4ddaa7a26"
+
+d3-interpolate@1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.3.2.tgz#417d3ebdeb4bc4efcc8fd4361c55e4040211fd68"
+ dependencies:
+ d3-color "1"
+
+d3-interpolate@1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6"
+ dependencies:
+ d3-color "1"
+
+d3-path@1:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.7.tgz#8de7cd693a75ac0b5480d3abaccd94793e58aae8"
+
+d3-path@1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.5.tgz#241eb1849bd9e9e8021c0d0a799f8a0e8e441764"
+
+d3-polygon@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-1.0.3.tgz#16888e9026460933f2b179652ad378224d382c62"
+
+d3-quadtree@1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.5.tgz#305394840b01f51a341a0da5008585e837fe7e9b"
+
+d3-quadtree@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.3.tgz#ac7987e3e23fe805a990f28e1b50d38fcb822438"
+
+d3-queue@3.0.7:
+ version "3.0.7"
+ resolved "https://registry.yarnpkg.com/d3-queue/-/d3-queue-3.0.7.tgz#c93a2e54b417c0959129d7d73f6cf7d4292e7618"
+
+d3-random@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-1.1.0.tgz#6642e506c6fa3a648595d2b2469788a8d12529d3"
+
+d3-request@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/d3-request/-/d3-request-1.0.6.tgz#a1044a9ef4ec28c824171c9379fae6d79474b19f"
+ dependencies:
+ d3-collection "1"
+ d3-dispatch "1"
+ d3-dsv "1"
+ xmlhttprequest "1"
+
+d3-scale@1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.7.tgz#fa90324b3ea8a776422bd0472afab0b252a0945d"
+ dependencies:
+ d3-array "^1.2.0"
+ d3-collection "1"
+ d3-color "1"
+ d3-format "1"
+ d3-interpolate "1"
+ d3-time "1"
+ d3-time-format "2"
+
+d3-selection@1, d3-selection@^1.1.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.3.2.tgz#6e70a9df60801c8af28ac24d10072d82cbfdf652"
+
+d3-selection@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.3.0.tgz#d53772382d3dc4f7507bfb28bcd2d6aed2a0ad6d"
+
+d3-shape@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.0.tgz#45d01538f064bafd05ea3d6d2cb748fd8c41f777"
+ dependencies:
+ d3-path "1"
+
+d3-time-format@2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.3.tgz#ae06f8e0126a9d60d6364eac5b1533ae1bac826b"
+ dependencies:
+ d3-time "1"
+
+d3-time-format@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.1.tgz#85b7cdfbc9ffca187f14d3c456ffda268081bb31"
+ dependencies:
+ d3-time "1"
+
+d3-time@1:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.10.tgz#8259dd71288d72eeacfd8de281c4bf5c7393053c"
+
+d3-time@1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.8.tgz#dbd2d6007bf416fe67a76d17947b784bffea1e84"
+
+d3-timer@1:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.9.tgz#f7bb8c0d597d792ff7131e1c24a36dd471a471ba"
+
+d3-timer@1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.7.tgz#df9650ca587f6c96607ff4e60cc38229e8dd8531"
+
+d3-transition@1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.1.3.tgz#3a435b05ce9cef9524fe0d38121cfb6905331ca6"
+ dependencies:
+ d3-color "1"
+ d3-dispatch "1"
+ d3-ease "1"
+ d3-interpolate "1"
+ d3-selection "^1.1.0"
+ d3-timer "1"
+
+d3-transition@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.1.1.tgz#d8ef89c3b848735b060e54a39b32aaebaa421039"
+ dependencies:
+ d3-color "1"
+ d3-dispatch "1"
+ d3-ease "1"
+ d3-interpolate "1"
+ d3-selection "^1.1.0"
+ d3-timer "1"
+
+d3-voronoi@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.2.tgz#1687667e8f13a2d158c80c1480c5a29cb0d8973c"
+
+d3-zoom@1.7.1:
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.7.1.tgz#02f43b3c3e2db54f364582d7e4a236ccc5506b63"
+ dependencies:
+ d3-dispatch "1"
+ d3-drag "1"
+ d3-interpolate "1"
+ d3-selection "1"
+ d3-transition "1"
+
+d3@^4.9.1:
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/d3/-/d3-4.13.0.tgz#ab236ff8cf0cfc27a81e69bf2fb7518bc9b4f33d"
+ dependencies:
+ d3-array "1.2.1"
+ d3-axis "1.0.8"
+ d3-brush "1.0.4"
+ d3-chord "1.0.4"
+ d3-collection "1.0.4"
+ d3-color "1.0.3"
+ d3-dispatch "1.0.3"
+ d3-drag "1.2.1"
+ d3-dsv "1.0.8"
+ d3-ease "1.0.3"
+ d3-force "1.1.0"
+ d3-format "1.2.2"
+ d3-geo "1.9.1"
+ d3-hierarchy "1.1.5"
+ d3-interpolate "1.1.6"
+ d3-path "1.0.5"
+ d3-polygon "1.0.3"
+ d3-quadtree "1.0.3"
+ d3-queue "3.0.7"
+ d3-random "1.1.0"
+ d3-request "1.0.6"
+ d3-scale "1.0.7"
+ d3-selection "1.3.0"
+ d3-shape "1.2.0"
+ d3-time "1.0.8"
+ d3-time-format "2.1.1"
+ d3-timer "1.0.7"
+ d3-transition "1.1.1"
+ d3-voronoi "1.1.2"
+ d3-zoom "1.7.1"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ dependencies:
+ assert-plus "^1.0.0"
+
+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.6, debug@^2.6.8:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ dependencies:
+ ms "2.0.0"
+
+debug@=3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.1.0:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ dependencies:
+ ms "^2.1.1"
+
+decamelize@^1.1.1, decamelize@^1.1.2:
+ 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"
+
+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"
+
+default-gateway@^2.6.0:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-2.7.2.tgz#b7ef339e5e024b045467af403d50348db4642d0f"
+ dependencies:
+ execa "^0.10.0"
+ ip-regex "^2.1.0"
+
+define-properties@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+del@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+ dependencies:
+ globby "^6.1.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ p-map "^1.1.1"
+ pify "^3.0.0"
+ rimraf "^2.2.8"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+
+des.js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+
+detect-node@^2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
+
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+dns-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
+
+dns-packet@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
+ dependencies:
+ ip "^1.1.0"
+ safe-buffer "^5.0.1"
+
+dns-txt@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
+ dependencies:
+ buffer-indexof "^1.0.0"
+
+dom-converter@~0.2:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+ dependencies:
+ utila "~0.4"
+
+dom-serializer@0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
+ dependencies:
+ domelementtype "~1.1.1"
+ 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"
+
+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:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
+
+domelementtype@~1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
+
+domhandler@2.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"
+ dependencies:
+ domelementtype "1"
+
+domutils@1.1:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
+ dependencies:
+ domelementtype "1"
+
+domutils@1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125"
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+
+electron-to-chromium@^1.3.79:
+ version "1.3.79"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.79.tgz#774718f06284a4bf8f578ac67e74508fe659f13a"
+
+elliptic@^6.0.0:
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a"
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+
+encoding@^0.1.11:
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+ dependencies:
+ iconv-lite "~0.4.13"
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
+ dependencies:
+ once "^1.4.0"
+
+enhanced-resolve@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ tapable "^1.0.0"
+
+entities@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
+
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.5.1:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165"
+ dependencies:
+ es-to-primitive "^1.1.1"
+ function-bind "^1.1.1"
+ has "^1.0.1"
+ is-callable "^1.1.3"
+ is-regex "^1.0.4"
+
+es-to-primitive@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es5-shim@^4.5.1:
+ version "4.5.12"
+ resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.12.tgz#508c13dda1c87dd3df1b50e69e7b96b82149b649"
+
+es6-promise@^4.1.1:
+ version "4.2.5"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054"
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+eslint-scope@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172"
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+esrecurse@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+ dependencies:
+ estraverse "^4.1.0"
+
+estraverse@^4.1.0, estraverse@^4.1.1:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+
+esutils@^2.0.0, esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+
+eventemitter3@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
+
+events@^1.0.0:
+ version "1.1.1"
+ resolved "http://registry.npmjs.org/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+
+eventsource@0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232"
+ dependencies:
+ original ">=0.0.5"
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+execa@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
+ dependencies:
+ cross-spawn "^6.0.0"
+ 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"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+express@^4.16.2:
+ version "4.16.4"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e"
+ dependencies:
+ accepts "~1.3.5"
+ array-flatten "1.1.1"
+ body-parser "1.18.3"
+ content-disposition "0.5.2"
+ content-type "~1.0.4"
+ cookie "0.3.1"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~1.1.2"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "1.1.1"
+ fresh "0.5.2"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.2"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.4"
+ qs "6.5.2"
+ range-parser "~1.2.0"
+ safe-buffer "5.1.2"
+ send "0.16.2"
+ serve-static "1.13.2"
+ setprototypeof "1.1.0"
+ statuses "~1.4.0"
+ type-is "~1.6.16"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+
+fast-deep-equal@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
+
+fast-deep-equal@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
+
+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"
+
+faye-websocket@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+faye-websocket@~0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+fbjs@^0.8.9:
+ version "0.8.17"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
+ dependencies:
+ core-js "^1.0.0"
+ isomorphic-fetch "^2.1.1"
+ loose-envify "^1.0.0"
+ object-assign "^4.1.0"
+ promise "^7.1.1"
+ setimmediate "^1.0.5"
+ ua-parser-js "^0.7.18"
+
+file-loader@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-2.0.0.tgz#39749c82f020b9e85901dcff98e8004e6401cfde"
+ dependencies:
+ loader-utils "^1.0.2"
+ schema-utils "^1.0.0"
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+finalhandler@1.1.1:
+ version "1.1.1"
+ resolved "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105"
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.2"
+ 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-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ 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"
+ dependencies:
+ locate-path "^3.0.0"
+
+flush-write-stream@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd"
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.4"
+
+follow-redirects@^1.0.0:
+ version "1.5.9"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.9.tgz#c9ed9d748b814a39535716e531b9196a845d89c6"
+ dependencies:
+ debug "=3.1.0"
+
+for-each@^0.3.2:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+ dependencies:
+ is-callable "^1.1.3"
+
+for-in@^0.1.3:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
+
+for-in@^1.0.1, for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+
+for-own@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
+ dependencies:
+ for-in "^1.0.1"
+
+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.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+forwarded@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ dependencies:
+ map-cache "^0.2.2"
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-minipass@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
+ dependencies:
+ minipass "^2.2.1"
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+fsevents@^1.2.2:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
+ dependencies:
+ nan "^2.9.2"
+ node-pre-gyp "^0.10.0"
+
+fstream@^1.0.0, fstream@^1.0.2:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+gaze@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
+ dependencies:
+ globule "^1.0.0"
+
+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"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.1:
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-modules-path@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/global-modules-path/-/global-modules-path-2.3.0.tgz#b0e2bac6beac39745f7db5c59d26a36a0b94f7dc"
+
+global@4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.3.0.tgz#ef7ec4beead579b454f5ebd5e7f303db54f42a2b"
+ dependencies:
+ min-document "^2.6.1"
+ process "~0.5.1"
+
+global@^4.3.1, global@~4.3.0:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
+ dependencies:
+ min-document "^2.19.0"
+ process "~0.5.1"
+
+globals@^11.1.0:
+ version "11.8.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d"
+
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+globule@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d"
+ dependencies:
+ glob "~7.1.1"
+ lodash "~4.17.10"
+ minimatch "~3.0.2"
+
+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"
+
+handle-thing@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
+
+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.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29"
+ dependencies:
+ ajv "^5.3.0"
+ har-schema "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+
+has-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812"
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+he@1.1.x:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoek@5.x.x:
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-5.0.4.tgz#0f7fa270a1cafeb364a4b2ddfaa33f864e4157da"
+
+hoist-non-react-statics@^2.5.0:
+ version "2.5.5"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
+
+hosted-git-info@^2.1.4:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
+
+hpack.js@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+ dependencies:
+ inherits "^2.0.1"
+ obuf "^1.0.0"
+ readable-stream "^2.0.1"
+ wbuf "^1.1.0"
+
+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.2.3:
+ version "3.5.20"
+ resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.20.tgz#7b19fd3caa0cb79f7cde5ee5c3abdf8ecaa6bb14"
+ dependencies:
+ camel-case "3.0.x"
+ clean-css "4.2.x"
+ commander "2.17.x"
+ he "1.1.x"
+ param-case "2.1.x"
+ relateurl "0.2.x"
+ uglify-js "3.4.x"
+
+html-webpack-plugin@^3.2.0:
+ version "3.2.0"
+ resolved "http://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b"
+ dependencies:
+ html-minifier "^3.2.3"
+ loader-utils "^0.2.16"
+ lodash "^4.17.3"
+ pretty-error "^2.0.2"
+ tapable "^1.0.0"
+ toposort "^1.0.0"
+ util.promisify "1.0.0"
+
+htmlparser2@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe"
+ dependencies:
+ domelementtype "1"
+ domhandler "2.1"
+ domutils "1.1"
+ readable-stream "1.0"
+
+http-deceiver@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+
+http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3:
+ version "1.6.3"
+ resolved "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
+http-parser-js@>=0.4.0:
+ version "0.4.13"
+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137"
+
+http-proxy-middleware@~0.18.0:
+ version "0.18.0"
+ resolved "http://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz#0987e6bb5a5606e5a69168d8f967a87f15dd8aab"
+ dependencies:
+ http-proxy "^1.16.2"
+ is-glob "^4.0.0"
+ lodash "^4.17.5"
+ micromatch "^3.1.9"
+
+http-proxy@^1.16.2:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a"
+ dependencies:
+ eventemitter3 "^3.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+
+iconv-lite@0.4, 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:
+ safer-buffer ">= 2.1.2 < 3"
+
+iconv-lite@0.4.23:
+ version "0.4.23"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+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"
+ dependencies:
+ postcss "^6.0.1"
+
+ieee754@^1.1.4:
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+
+ignore-walk@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
+ dependencies:
+ minimatch "^3.0.4"
+
+import-local@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
+in-publish@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ dependencies:
+ repeating "^2.0.0"
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+
+individual@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/individual/-/individual-2.0.0.tgz#833b097dad23294e76117a98fb38e0d9ad61bb97"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+
+ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+
+internal-ip@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-3.0.1.tgz#df5c99876e1d2eb2ea2d74f520e3f669a00ece27"
+ dependencies:
+ default-gateway "^2.6.0"
+ ipaddr.js "^1.5.2"
+
+interpret@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
+
+invariant@^2.0.0, invariant@^2.2.2:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+
+invert-kv@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
+
+ip-regex@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+
+ip@^1.1.0, ip@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+
+ipaddr.js@1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e"
+
+ipaddr.js@^1.5.2:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.1.tgz#fa4b79fa47fd3def5e3b159825161c0a519c9427"
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-callable@^1.1.3, is-callable@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+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"
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+
+is-path-in-cwd@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
+ dependencies:
+ is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ dependencies:
+ isobject "^3.0.1"
+
+is-regex@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+ dependencies:
+ has "^1.0.1"
+
+is-stream@^1.0.1, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+
+is-symbol@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
+ 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"
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+
+is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
+isemail@3.x.x:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c"
+ dependencies:
+ punycode "2.x.x"
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+
+isomorphic-fetch@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
+ dependencies:
+ node-fetch "^1.0.1"
+ whatwg-fetch ">=0.10.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+
+joi@^14.0.1:
+ version "14.0.1"
+ resolved "https://registry.yarnpkg.com/joi/-/joi-14.0.1.tgz#5bc53e8fff6e6da19d6cd8c76e2afe5c0815a2d3"
+ dependencies:
+ hoek "5.x.x"
+ isemail "3.x.x"
+ topo "3.x.x"
+
+js-base64@^2.1.8:
+ version "2.4.9"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03"
+
+js-levenshtein@^1.1.3:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e"
+
+"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-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+
+jsesc@^2.5.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe"
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+
+json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+
+json-schema-traverse@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+
+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:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+
+json3@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
+
+json5@^0.5.0:
+ version "0.5.1"
+ resolved "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+killable@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
+
+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"
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ dependencies:
+ invert-kv "^1.0.0"
+
+lcid@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
+ dependencies:
+ invert-kv "^2.0.0"
+
+leaflet-polylinedecorator@^1.3.2:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/leaflet-polylinedecorator/-/leaflet-polylinedecorator-1.6.0.tgz#9ef79fd1b5302d67b72efe959a8ecd2553f27266"
+ dependencies:
+ leaflet-rotatedmarker "^0.2.0"
+
+leaflet-rotatedmarker@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/leaflet-rotatedmarker/-/leaflet-rotatedmarker-0.2.0.tgz#4467f49f98d1bfd56959bd9c6705203dd2601277"
+
+leaflet@^1.0.3:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.3.4.tgz#7f006ea5832603b53d7269ef5c595fd773060a40"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+loader-runner@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.1.tgz#026f12fe7c3115992896ac02ba022ba92971b979"
+
+loader-utils@^0.2.16:
+ version "0.2.17"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+ object-assign "^4.0.1"
+
+loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+lodash-es@^4.17.5, lodash-es@^4.2.1:
+ version "4.17.11"
+ resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.11.tgz#145ab4a7ac5c5e52a3531fb4f310255a152b4be0"
+
+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"
+
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+
+lodash.mergewith@^4.6.0:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
+
+lodash.tail@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664"
+
+lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.3, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@~4.17.10:
+ version "4.17.11"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
+
+loglevel@^1.4.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
+
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
+ 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:
+ 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"
+
+lru-cache@^4.0.1, lru-cache@^4.1.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"
+
+make-dir@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
+ dependencies:
+ pify "^3.0.0"
+
+map-age-cleaner@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz#098fb15538fd3dbe461f12745b0ca8568d4e3f74"
+ dependencies:
+ p-defer "^1.0.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+
+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"
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+
+mem@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf"
+ dependencies:
+ map-age-cleaner "^0.1.1"
+ mimic-fn "^1.0.0"
+ p-is-promise "^1.1.0"
+
+memory-fs@^0.4.0, memory-fs@~0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+
+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:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+"mime-db@>= 1.36.0 < 2", 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:
+ version "2.1.20"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19"
+ dependencies:
+ mime-db "~1.36.0"
+
+mime@1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
+
+mime@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369"
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+
+min-document@^2.19.0, min-document@^2.6.1:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+ dependencies:
+ dom-walk "^0.1.0"
+
+mini-css-extract-plugin@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.4.tgz#c10410a004951bd3cedac1da69053940fccb625d"
+ 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"
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+
+minimatch@^3.0.4, minimatch@~3.0.2:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+
+minipass@^2.2.1, minipass@^2.3.3:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957"
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.1.tgz#6734acc045a46e61d596a43bb9d9cd326e19cc42"
+ 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"
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^2.0.1"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mixin-object@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
+ dependencies:
+ for-in "^0.1.3"
+ is-extendable "^0.1.1"
+
+mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0:
+ version "0.5.1"
+ resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+
+ms@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+
+multicast-dns-service-types@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
+
+multicast-dns@^6.0.1:
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
+ dependencies:
+ dns-packet "^1.3.1"
+ thunky "^1.0.2"
+
+nan@^2.10.0, nan@^2.9.2:
+ version "2.11.1"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766"
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+needle@^2.2.1:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e"
+ dependencies:
+ debug "^2.1.2"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
+
+negotiator@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+
+neo-async@^2.5.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835"
+
+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"
+ dependencies:
+ lower-case "^1.1.1"
+
+node-fetch@^1.0.1:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+ dependencies:
+ encoding "^0.1.11"
+ is-stream "^1.0.1"
+
+node-forge@0.7.5:
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df"
+
+node-gyp@^3.8.0:
+ version "3.8.0"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
+ dependencies:
+ fstream "^1.0.0"
+ glob "^7.0.3"
+ graceful-fs "^4.1.2"
+ mkdirp "^0.5.0"
+ nopt "2 || 3"
+ npmlog "0 || 1 || 2 || 3 || 4"
+ osenv "0"
+ request "^2.87.0"
+ rimraf "2"
+ semver "~5.3.0"
+ tar "^2.0.0"
+ which "1"
+
+node-libs-browser@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df"
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^1.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.0"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.10.3"
+ vm-browserify "0.0.4"
+
+node-pre-gyp@^0.10.0:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc"
+ dependencies:
+ detect-libc "^1.0.2"
+ mkdirp "^0.5.1"
+ needle "^2.2.1"
+ nopt "^4.0.1"
+ npm-packlist "^1.1.6"
+ npmlog "^4.0.2"
+ rc "^1.2.7"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^4"
+
+node-releases@^1.0.0-alpha.14:
+ version "1.0.0-alpha.14"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.14.tgz#da9e2780add4bbb59ad890af9e2018a1d9c0034b"
+ dependencies:
+ semver "^5.3.0"
+
+node-sass@^4.9.4:
+ version "4.9.4"
+ resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.4.tgz#349bd7f1c89422ffe7e1e4b60f2055a69fbc5512"
+ dependencies:
+ async-foreach "^0.1.3"
+ chalk "^1.1.1"
+ cross-spawn "^3.0.0"
+ gaze "^1.0.0"
+ get-stdin "^4.0.1"
+ glob "^7.0.3"
+ in-publish "^2.0.0"
+ lodash.assign "^4.2.0"
+ lodash.clonedeep "^4.3.2"
+ lodash.mergewith "^4.6.0"
+ meow "^3.7.0"
+ mkdirp "^0.5.1"
+ nan "^2.10.0"
+ node-gyp "^3.8.0"
+ npmlog "^4.0.0"
+ request "^2.88.0"
+ sass-graph "^2.2.4"
+ stdout-stream "^1.4.0"
+ "true-case-path" "^1.0.2"
+
+"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:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalizr@^3.2.3:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/normalizr/-/normalizr-3.3.0.tgz#6f44b95e8bf2201845a9e551920c4e5861166d27"
+
+npm-bundled@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979"
+
+npm-packlist@^1.1.6:
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a"
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ dependencies:
+ path-key "^2.0.0"
+
+"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+nth-check@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
+ dependencies:
+ boolbase "~1.0.0"
+
+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.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-hash@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.0.tgz#76d9ba6ff113cf8efc0d996102851fe6723963e2"
+
+object-keys@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2"
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ dependencies:
+ isobject "^3.0.0"
+
+object.getownpropertydescriptors@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.5.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ dependencies:
+ isobject "^3.0.1"
+
+obuf@^1.0.0, obuf@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ dependencies:
+ ee-first "1.1.1"
+
+on-headers@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ dependencies:
+ wrappy "1"
+
+opn@^5.1.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035"
+ dependencies:
+ is-wsl "^1.1.0"
+
+original@>=0.0.5:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
+ dependencies:
+ url-parse "^1.4.3"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+
+os-locale@^1.4.0:
+ version "1.4.0"
+ resolved "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+ dependencies:
+ lcid "^1.0.0"
+
+os-locale@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620"
+ dependencies:
+ execa "^0.10.0"
+ lcid "^2.0.0"
+ mem "^4.0.0"
+
+os-tmpdir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+
+osenv@0, osenv@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-defer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+
+p-is-promise@^1.1.0:
+ version "1.1.0"
+ resolved "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec"
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ dependencies:
+ p-limit "^2.0.0"
+
+p-map@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+
+p-try@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1"
+
+pako@~1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
+
+parallel-transform@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06"
+ dependencies:
+ cyclist "~0.2.2"
+ 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"
+ 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"
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+
+parse-headers@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.1.tgz#6ae83a7aa25a9d9b700acc28698cd1f1ed7e9536"
+ dependencies:
+ for-each "^0.3.2"
+ trim "0.0.1"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ dependencies:
+ error-ex "^1.2.0"
+
+parseurl@~1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+
+path-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+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:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+
+path-is-inside@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+
+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:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+pbkdf2@^3.0.3:
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ dependencies:
+ pinkie "^2.0.0"
+
+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"
+ dependencies:
+ find-up "^3.0.0"
+
+portfinder@^1.0.9:
+ version "1.0.17"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.17.tgz#a8a1691143e46c4735edefcf4fbcccedad26456a"
+ dependencies:
+ async "^1.5.2"
+ debug "^2.2.0"
+ mkdirp "0.5.x"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+
+postcss-modules-extract-imports@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85"
+ dependencies:
+ postcss "^6.0.1"
+
+postcss-modules-local-by-default@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
+ dependencies:
+ css-selector-tokenizer "^0.7.0"
+ postcss "^6.0.1"
+
+postcss-modules-scope@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
+ dependencies:
+ css-selector-tokenizer "^0.7.0"
+ postcss "^6.0.1"
+
+postcss-modules-values@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
+ dependencies:
+ icss-replace-symbols "^1.1.0"
+ postcss "^6.0.1"
+
+postcss-value-parser@^3.3.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+
+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"
+
+pretty-error@^2.0.2:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
+ dependencies:
+ renderkid "^2.0.1"
+ utila "~0.4"
+
+private@^0.1.6:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+
+process-nextick-args@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+
+process@~0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+
+promise@^7.1.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+ dependencies:
+ asap "~2.0.3"
+
+prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.7, prop-types@^15.6.0:
+ 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"
+
+proxy-addr@~2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93"
+ dependencies:
+ forwarded "~0.1.2"
+ ipaddr.js "1.8.0"
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+
+psl@^1.1.24:
+ version "1.1.29"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67"
+
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^2.0.0, pump@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+
+punycode@2.x.x, punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
+qs@6.5.2, qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+
+querystringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.0.tgz#7ded8dfbf7879dcc60d0a644ac6754b283ad17ef"
+
+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"
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+range-parser@^1.0.3, range-parser@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
+
+raw-body@2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3"
+ dependencies:
+ bytes "3.0.0"
+ http-errors "1.6.3"
+ iconv-lite "0.4.23"
+ unpipe "1.0.0"
+
+rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-dom@^15.5.4:
+ version "15.6.2"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730"
+ dependencies:
+ fbjs "^0.8.9"
+ loose-envify "^1.1.0"
+ object-assign "^4.1.0"
+ prop-types "^15.5.10"
+
+react-redux@^5.0.4:
+ version "5.0.7"
+ resolved "http://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz#0dc1076d9afb4670f993ffaef44b8f8c1155a4c8"
+ dependencies:
+ hoist-non-react-statics "^2.5.0"
+ invariant "^2.0.0"
+ lodash "^4.17.5"
+ lodash-es "^4.17.5"
+ loose-envify "^1.1.0"
+ prop-types "^15.6.0"
+
+react-tabs@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-1.1.0.tgz#f1e3d6136e1d89f70f5ef8835468a2f03a54777a"
+ dependencies:
+ classnames "^2.2.0"
+ prop-types "^15.5.0"
+
+react@^15.5.4:
+ version "15.6.2"
+ resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72"
+ dependencies:
+ create-react-class "^15.6.0"
+ fbjs "^0.8.9"
+ loose-envify "^1.1.0"
+ object-assign "^4.1.0"
+ prop-types "^15.5.10"
+
+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"
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.6:
+ version "2.3.6"
+ resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@1.0:
+ version "1.0.34"
+ resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readdirp@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+redux-devtools-instrument@^1.0.1:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.9.0.tgz#2faed9ac3292c783284b21843edfaa0567764a0c"
+ dependencies:
+ lodash "^4.2.0"
+ symbol-observable "^1.0.2"
+
+redux-devtools@^3.4.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/redux-devtools/-/redux-devtools-3.4.1.tgz#09d342ce0ab6087be679e953a1d7c530efa1138e"
+ dependencies:
+ lodash "^4.2.0"
+ prop-types "^15.5.7"
+ redux-devtools-instrument "^1.0.1"
+
+redux-thunk@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
+
+redux@^3.6.0:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b"
+ dependencies:
+ lodash "^4.2.1"
+ lodash-es "^4.2.1"
+ loose-envify "^1.1.0"
+ symbol-observable "^1.0.3"
+
+regenerate-unicode-properties@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c"
+ dependencies:
+ regenerate "^1.4.0"
+
+regenerate@^1.2.1, regenerate@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
+
+regenerator-runtime@^0.10.5:
+ version "0.10.5"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
+
+regenerator-runtime@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+
+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"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+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:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d"
+ dependencies:
+ regenerate "^1.4.0"
+ regenerate-unicode-properties "^7.0.0"
+ regjsgen "^0.4.0"
+ regjsparser "^0.3.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"
+
+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"
+
+regjsparser@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.3.0.tgz#3c326da7fcfd69fa0d332575a41c8c0cdf588c96"
+ dependencies:
+ jsesc "~0.5.0"
+
+relateurl@0.2.x:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+
+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"
+
+renderkid@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.2.tgz#12d310f255360c07ad8fde253f6c9e9de372d2aa"
+ 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"
+
+repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ dependencies:
+ is-finite "^1.0.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:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.0"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.4.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+
+reselect@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147"
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+
+resolve@^1.3.2:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
+ dependencies:
+ path-parse "^1.0.5"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+
+rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+ dependencies:
+ glob "^7.0.5"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ dependencies:
+ aproba "^1.1.1"
+
+rust-result@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/rust-result/-/rust-result-1.0.0.tgz#34c75b2e6dc39fe5875e5bdec85b5e0f91536f72"
+ dependencies:
+ individual "^2.0.0"
+
+rw@1:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
+
+safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+
+safe-json-parse@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-4.0.0.tgz#7c0f578cfccd12d33a71c0e05413e2eca171eaac"
+ dependencies:
+ rust-result "^1.0.0"
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+
+sass-graph@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"
+ dependencies:
+ glob "^7.0.0"
+ lodash "^4.0.0"
+ scss-tokenizer "^0.2.3"
+ yargs "^7.0.0"
+
+sass-loader@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.1.0.tgz#16fd5138cb8b424bf8a759528a1972d72aad069d"
+ dependencies:
+ clone-deep "^2.0.1"
+ loader-utils "^1.0.1"
+ lodash.tail "^4.1.1"
+ neo-async "^2.5.0"
+ pify "^3.0.0"
+ semver "^5.5.0"
+
+sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+
+schema-utils@^0.4.4, schema-utils@^0.4.5:
+ version "0.4.7"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
+ dependencies:
+ ajv "^6.1.0"
+ ajv-keywords "^3.1.0"
+
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+scss-tokenizer@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
+ dependencies:
+ js-base64 "^2.1.8"
+ source-map "^0.4.2"
+
+select-hose@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+
+selfsigned@^1.9.1:
+ version "1.10.4"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd"
+ dependencies:
+ node-forge "0.7.5"
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
+
+semver@~5.3.0:
+ version "5.3.0"
+ resolved "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+
+send@0.16.2:
+ version "0.16.2"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.2"
+ destroy "~1.0.4"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.6.2"
+ mime "1.4.1"
+ ms "2.0.0"
+ on-finished "~2.3.0"
+ range-parser "~1.2.0"
+ statuses "~1.4.0"
+
+serialize-javascript@^1.4.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe"
+
+serve-index@^1.7.2:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+ dependencies:
+ accepts "~1.3.4"
+ batch "0.6.1"
+ debug "2.6.9"
+ escape-html "~1.0.3"
+ http-errors "~1.6.2"
+ mime-types "~2.1.17"
+ parseurl "~1.3.2"
+
+serve-static@1.13.2:
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.2"
+ send "0.16.2"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+
+set-value@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.1"
+ to-object-path "^0.3.0"
+
+set-value@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4, setimmediate@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.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"
+ dependencies:
+ is-extendable "^0.1.1"
+ kind-of "^5.0.0"
+ mixin-object "^2.0.1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+sockjs-client@1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83"
+ dependencies:
+ debug "^2.6.6"
+ eventsource "0.1.6"
+ faye-websocket "~0.11.0"
+ inherits "^2.0.1"
+ json3 "^3.3.2"
+ url-parse "^1.1.8"
+
+sockjs@0.3.19:
+ version "0.3.19"
+ resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d"
+ dependencies:
+ faye-websocket "^0.10.0"
+ uuid "^3.0.1"
+
+source-list-map@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+
+source-map-resolve@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
+ dependencies:
+ atob "^2.1.1"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+
+source-map@^0.4.2:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@^0.5.0, source-map@^0.5.6:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+
+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"
+
+spdx-correct@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.2.tgz#19bb409e91b47b1ad54159243f7312a858db3c2e"
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f"
+
+spdy-transport@^2.0.18:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz#4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1"
+ dependencies:
+ debug "^2.6.8"
+ detect-node "^2.0.3"
+ hpack.js "^2.1.6"
+ obuf "^1.1.1"
+ readable-stream "^2.2.9"
+ safe-buffer "^5.0.1"
+ wbuf "^1.7.2"
+
+spdy@^3.4.1:
+ version "3.4.7"
+ resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc"
+ dependencies:
+ debug "^2.6.8"
+ handle-thing "^1.2.5"
+ http-deceiver "^1.2.7"
+ safe-buffer "^5.0.1"
+ select-hose "^2.0.0"
+ spdy-transport "^2.0.18"
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ dependencies:
+ extend-shallow "^3.0.0"
+
+sshpk@^1.7.0:
+ version "1.15.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.1.tgz#b79a089a732e346c6e0714830f36285cd38191a2"
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+ssri@^5.2.4:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06"
+ dependencies:
+ safe-buffer "^5.1.1"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.4.0 < 2":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+
+statuses@~1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
+
+stdout-stream@^1.4.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de"
+ dependencies:
+ readable-stream "^2.0.1"
+
+stream-browserify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+
+string-width@^1.0.1, string-width@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string_decoder@^1.0.0, string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ dependencies:
+ safe-buffer "~5.1.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ 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-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ dependencies:
+ get-stdin "^4.0.1"
+
+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.1:
+ version "0.23.1"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
+ dependencies:
+ loader-utils "^1.1.0"
+ schema-utils "^1.0.0"
+
+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.1.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"
+
+symbol-observable@^1.0.2, symbol-observable@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+
+tapable@^1.0.0, tapable@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c"
+
+tar@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+tar@^4:
+ version "4.4.6"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b"
+ dependencies:
+ chownr "^1.0.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.3.3"
+ minizlib "^1.1.0"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.2"
+
+through2@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
+ dependencies:
+ readable-stream "^2.1.5"
+ xtend "~4.0.1"
+
+thunky@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826"
+
+timers-browserify@^2.0.4:
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae"
+ dependencies:
+ setimmediate "^1.0.4"
+
+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@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+topo@3.x.x:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/topo/-/topo-3.0.0.tgz#37e48c330efeac784538e0acd3e62ca5e231fe7a"
+ dependencies:
+ hoek "5.x.x"
+
+toposort@^1.0.0:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029"
+
+tough-cookie@~2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+ dependencies:
+ psl "^1.1.24"
+ punycode "^1.4.1"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+
+trim-right@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+
+trim@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
+
+"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"
+
+tslib@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
+
+tsml@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tsml/-/tsml-1.0.1.tgz#89f8218b9d9e257f47d7f6b56d01c5a4d2c68fc3"
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+
+type-is@~1.6.16:
+ version "1.6.16"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194"
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.18"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
+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"
+ dependencies:
+ commander "~2.13.0"
+ source-map "~0.6.1"
+
+uglify-js@3.4.x:
+ version "3.4.9"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
+ dependencies:
+ commander "~2.17.1"
+ 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"
+
+unicode-match-property-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^1.0.4"
+ unicode-property-aliases-ecmascript "^1.0.4"
+
+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-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"
+
+union-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^0.4.3"
+
+unique-filename@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6"
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+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"
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+
+url-parse@^1.1.8, url-parse@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.3.tgz#bfaee455c889023219d757e045fa6a684ec36c15"
+ dependencies:
+ querystringify "^2.0.0"
+ requires-port "^1.0.0"
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+
+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:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
+ dependencies:
+ define-properties "^1.1.2"
+ object.getownpropertydescriptors "^2.0.3"
+
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.10.3:
+ version "0.10.4"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901"
+ 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"
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+
+uuid@^3.0.1, 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.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+video.js@^5.19.2:
+ version "5.20.5"
+ resolved "http://registry.npmjs.org/video.js/-/video.js-5.20.5.tgz#445cdae204bce459782d86a31b25a32afd6d8eff"
+ dependencies:
+ babel-runtime "^6.9.2"
+ global "4.3.0"
+ safe-json-parse "4.0.0"
+ tsml "1.0.1"
+ videojs-font "2.0.0"
+ videojs-ie8 "1.1.2"
+ videojs-swf "5.4.1"
+ videojs-vtt.js "0.12.6"
+ xhr "2.2.2"
+
+videojs-font@2.0.0:
+ version "2.0.0"
+ resolved "http://registry.npmjs.org/videojs-font/-/videojs-font-2.0.0.tgz#af7461ef9d4b95e0334bffb78b2f2ff0364a9034"
+
+videojs-ie8@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/videojs-ie8/-/videojs-ie8-1.1.2.tgz#a23d3d8608ad7192b69c6077fc4eb848998d35d9"
+ dependencies:
+ es5-shim "^4.5.1"
+
+videojs-swf@5.4.1:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/videojs-swf/-/videojs-swf-5.4.1.tgz#2077ef71c749f2c7823ef49babae4dd2acb08f87"
+
+videojs-vtt.js@0.12.6:
+ version "0.12.6"
+ resolved "https://registry.yarnpkg.com/videojs-vtt.js/-/videojs-vtt.js-0.12.6.tgz#e078600bda899eaa6f9c3307134cd0c811947b8e"
+ dependencies:
+ global "^4.3.1"
+
+vm-browserify@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+ dependencies:
+ indexof "0.0.1"
+
+watchpack@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
+ dependencies:
+ chokidar "^2.0.2"
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+
+wbuf@^1.1.0, wbuf@^1.7.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
+ dependencies:
+ minimalistic-assert "^1.0.0"
+
+webpack-cli@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.1.2.tgz#17d7e01b77f89f884a2bbf9db545f0f6a648e746"
+ dependencies:
+ chalk "^2.4.1"
+ cross-spawn "^6.0.5"
+ enhanced-resolve "^4.1.0"
+ global-modules-path "^2.3.0"
+ import-local "^2.0.0"
+ interpret "^1.1.0"
+ loader-utils "^1.1.0"
+ supports-color "^5.5.0"
+ v8-compile-cache "^2.0.2"
+ yargs "^12.0.2"
+
+webpack-dev-middleware@3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz#1132fecc9026fd90f0ecedac5cbff75d1fb45890"
+ dependencies:
+ memory-fs "~0.4.1"
+ mime "^2.3.1"
+ range-parser "^1.0.3"
+ webpack-log "^2.0.0"
+
+webpack-dev-server@^3.1.9:
+ version "3.1.9"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.9.tgz#8b32167624d2faff40dcedc2cbce17ed1f34d3e0"
+ dependencies:
+ ansi-html "0.0.7"
+ bonjour "^3.5.0"
+ chokidar "^2.0.0"
+ compression "^1.5.2"
+ connect-history-api-fallback "^1.3.0"
+ debug "^3.1.0"
+ del "^3.0.0"
+ express "^4.16.2"
+ html-entities "^1.2.0"
+ http-proxy-middleware "~0.18.0"
+ import-local "^2.0.0"
+ internal-ip "^3.0.1"
+ ip "^1.1.5"
+ killable "^1.0.0"
+ loglevel "^1.4.1"
+ opn "^5.1.0"
+ portfinder "^1.0.9"
+ schema-utils "^1.0.0"
+ selfsigned "^1.9.1"
+ serve-index "^1.7.2"
+ sockjs "0.3.19"
+ sockjs-client "1.1.5"
+ spdy "^3.4.1"
+ strip-ansi "^3.0.0"
+ supports-color "^5.1.0"
+ webpack-dev-middleware "3.4.0"
+ webpack-log "^2.0.0"
+ yargs "12.0.2"
+
+webpack-log@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f"
+ dependencies:
+ ansi-colors "^3.0.0"
+ uuid "^3.3.2"
+
+webpack-sources@^1.1.0, webpack-sources@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85"
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@^4.20.2:
+ version "4.20.2"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.20.2.tgz#89f6486b6bb276a91b0823453d377501fc625b5a"
+ dependencies:
+ "@webassemblyjs/ast" "1.7.8"
+ "@webassemblyjs/helper-module-context" "1.7.8"
+ "@webassemblyjs/wasm-edit" "1.7.8"
+ "@webassemblyjs/wasm-parser" "1.7.8"
+ acorn "^5.6.2"
+ acorn-dynamic-import "^3.0.0"
+ ajv "^6.1.0"
+ ajv-keywords "^3.1.0"
+ chrome-trace-event "^1.0.0"
+ enhanced-resolve "^4.1.0"
+ eslint-scope "^4.0.0"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.3.0"
+ loader-utils "^1.1.0"
+ memory-fs "~0.4.1"
+ micromatch "^3.1.8"
+ mkdirp "~0.5.0"
+ neo-async "^2.5.0"
+ node-libs-browser "^2.0.0"
+ schema-utils "^0.4.4"
+ tapable "^1.1.0"
+ uglifyjs-webpack-plugin "^1.2.4"
+ watchpack "^1.5.0"
+ webpack-sources "^1.3.0"
+
+websocket-driver@>=0.5.1:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"
+ dependencies:
+ http-parser-js ">=0.4.0"
+ websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
+
+whatwg-fetch@>=0.10.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
+
+whatwg-fetch@^2.0.3:
+ version "2.0.4"
+ resolved "http://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
+
+which-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+
+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.9:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+worker-farm@^1.5.2:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0"
+ dependencies:
+ errno "~0.1.7"
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+xhr@2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.2.2.tgz#2ee72571869f8686d41559a9ea286c18971435ff"
+ dependencies:
+ global "~4.3.0"
+ is-function "^1.0.1"
+ parse-headers "^2.0.0"
+ xtend "^4.0.0"
+
+xmlhttprequest@1:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc"
+
+xregexp@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"
+
+xtend@^4.0.0, xtend@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+
+y18n@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+
+"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+
+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"
+ dependencies:
+ camelcase "^4.1.0"
+
+yargs-parser@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
+ dependencies:
+ camelcase "^3.0.0"
+
+yargs@12.0.2, yargs@^12.0.2:
+ version "12.0.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc"
+ dependencies:
+ cliui "^4.0.0"
+ decamelize "^2.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^1.0.1"
+ os-locale "^3.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1 || ^4.0.0"
+ yargs-parser "^10.1.0"
+
+yargs@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
+ dependencies:
+ camelcase "^3.0.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^1.4.0"
+ read-pkg-up "^1.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^1.0.2"
+ which-module "^1.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^5.0.0"