-
+
+
{ this.togglePlayback(evt) }} className={"player-overlay"}>
+
Date.now() ? 0 : this.props.playSpeed }
+ src={ this.props.cabinVideoUrl }
+ controls={false}
+ // startTime={ this.currentVideoTime() }
+ playbackRate={ 1 }
>
+
-
-
-
-
-
+ // startTime={ this.currentVideoTime() }
+ playbackRate={ 1 }
+ >
+
+
+
);
}
}
-
+//
+//
+//
+//
+//
function intrinsicMatrix () {
return [
950.892854, 0, 584, 0,
@@ -604,9 +630,176 @@ function intrinsicMatrix () {
0, 0, 0, 0,
];
}
-
-function mapStateToProps(state) {
- return state.workerState;
+const modulo = function (num, div) {
+ return ((num % div) + div) % div;
}
+const mapStateToProps = ({ eonDetail }) => {
+ let { activeRouteId, activeRouteLoading, activeRouteError, routes, activeSegmentId } = eonDetail;
+ let currentRoute = activeRouteId ? routes[activeRouteId] : null;
+ let currentSegment, nextSegment, prevSegment;
+ let dongleId;
+ if (!activeSegmentId) {
+ activeSegmentId = 0;
+ }
+ if (currentRoute) {
+ dongleId = currentRoute.dongle_id;
+ }
+ let nextSegmentId = modulo(activeSegmentId+1, currentRoute.segments.length);
+ let prevSegmentId = modulo(activeSegmentId-1, currentRoute.segments.length);
+ prevSegment = currentRoute.segments[prevSegmentId];
+ currentSegment = currentRoute.segments[activeSegmentId];
+ nextSegment = currentRoute.segments[nextSegmentId];
+ const urlEnding = currentSegment.base_url.replace("https://chffrprivate.blob.core.windows.net/chffrprivate3/v2/","");
+ // https://my-comma-video.azureedge.net/hls/0812e2149c1b5609/e64287160e762b190c41d9c2faa6e825_2019-02-05--22-48-30/index.m3u8?v=2&s=1
+ let roadVideoUrl = 'https://my-comma-video.azureedge.net/hls/' + urlEnding + '/index.m3u8?v=2&s=1';
+ let cabinVideoUrl = 'https://my-comma-video.azureedge.net/hls/' + urlEnding + '/dcamera/index.m3u8?v=2&s=1';
+ return {
+ route: currentRoute,
+ prevSegment,
+ currentSegment,
+ nextSegment,
+ dongleId,
+ roadVideoUrl,
+ cabinVideoUrl,
+ loading: activeRouteLoading,
+ error: activeRouteError,
+ open: (activeRouteId && activeRouteId.length > 0)
+ };
+};
-export default connect(mapStateToProps)(VideoPreview);
\ No newline at end of file
+export default connect(mapStateToProps)(VideoPreview);
+
+// {
+// "classes": {
+// "hidden": "jss335",
+// "videoContainer": "jss336",
+// "videoImage": "jss337",
+// "videoUiCanvas": "jss338"
+// },
+// "shouldShowUI": true,
+// "front": false,
+// "onVideoChange": "[function onVideoChange]",
+// "start": 1549418400000,
+// "end": 1550628000000,
+// "dongleId": "0812e2149c1b5609",
+// "route": "0812e2149c1b5609|2019-02-19--19-02-29",
+// "segment": 4,
+// "nextSegment": {
+// "url": "https://chffrprivate-vzn.azureedge.net/chffrprivate3/v2/0812e2149c1b5609/e9d24fd6b4f24de86c9add536313a8cf_2019-02-19--19-02-29",
+// "route": "0812e2149c1b5609|2019-02-19--19-02-29",
+// "segment": 5,
+// "routeOffset": 1202550158,
+// "startOffset": 1202850158,
+// "duration": 1147020,
+// "events": {},
+// "deviceType": 3,
+// "videoAvailableBetweenOffsets": {},
+// "hpgps": true,
+// "hasVideo": true,
+// "hasDriverCamera": true,
+// "hasDriverCameraStream": true,
+// "cameraStreamSegCount": 14,
+// "driverCameraStreamSegCount": 4,
+// "distanceMiles": 3.5573438869999996
+// },
+// "playSpeed": 1,
+// "offset": 1202549158,
+// "startTime": 1550626792241,
+// "segments": [
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {},
+// {}
+// ],
+// "segmentData": {
+// "start": 1549418400000,
+// "dongleId": "0812e2149c1b5609",
+// "end": 1550628000000,
+// "segments": {}
+// },
+// "loop": {
+// "startTime": 1550620949158,
+// "duration": 1149020
+// },
+// "profile": {
+// "email": "joshua@remote-app.com",
+// "id": "47a10d4ca4527f86",
+// "points": 86574,
+// "regdate": 1522528873,
+// "superuser": false,
+// "upload_video": false,
+// "username": "joshuairl"
+// },
+// "currentSegment": {
+// "url": "https://chffrprivate-vzn.azureedge.net/chffrprivate3/v2/0812e2149c1b5609/e9d24fd6b4f24de86c9add536313a8cf_2019-02-19--19-02-29",
+// "route": "0812e2149c1b5609|2019-02-19--19-02-29",
+// "segment": 4,
+// "routeOffset": 1202550158,
+// "startOffset": 1202790158,
+// "duration": 1147020,
+// "events": {},
+// "deviceType": 3,
+// "videoAvailableBetweenOffsets": {},
+// "hpgps": true,
+// "hasVideo": true,
+// "hasDriverCamera": true,
+// "hasDriverCameraStream": true,
+// "cameraStreamSegCount": 14,
+// "driverCameraStreamSegCount": 4,
+// "distanceMiles": 3.5573438869999996
+// },
+// "range": 1209600000,
+// "device": {
+// "alias": "Pilot",
+// "create_time": 1518049493,
+// "device_type": "neo",
+// "dongle_id": "0812e2149c1b5609",
+// "imei": "014836007178800",
+// "is_owner": true,
+// "last_segment_utc_millis": 1550622090059,
+// "serial": "1fe6b89a",
+// "vehicle_id": null
+// },
+// "devices": [
+// {},
+// {},
+// {}
+// ],
+// "dispatch": "[function ]"
+// }
\ No newline at end of file
diff --git a/app/main/services/zmq.js b/app/main/services/zmq.js
index 18fc569..df21f32 100644
--- a/app/main/services/zmq.js
+++ b/app/main/services/zmq.js
@@ -3,11 +3,13 @@ import { ipcMain } from 'electron';
import * as types from '../../constants/zmq_action_types';
const fs = require('fs');
const Json2csvParser = require('json2csv').Parser;
+// import Reader from "@commaai/log_reader";
const EventMessage = require('../../messages/event');
const chalk = require("chalk");
const prefix = chalk.bold.blue;
const bgTaskColor = chalk.magenta;
const data = {};
+const throttled = true;
import throttle from "lodash.throttle";
function writeLog(...params) {
console.info(prefix('workbench') + ' ' + chalk.bold(bgTaskColor('[ZEROMQ]')), bgTaskColor(...params));
@@ -86,10 +88,18 @@ export function startZmqService(mainWindow, app) {
data[service.id].messages = [];
writeLog('ServiceID:',service.id);
writeLog('Service Key:',service.key);
- msgHandler = throttle((msg) => { return onMessage(sender, msg, service); }, 200, { leading: true });
+ if (throttled) {
+ msgHandler = throttle((msg) => { return onMessage(sender, msg, service); }, 200, { leading: true });
+ } else {
+ msgHandler = (msg) => { return onMessage(sender, msg, service); };
+ }
sock.on('message', msgHandler);
- writeLog(`Connecting to ${addr}`, service.id);
- sock.connect(addr);
+ try {
+ writeLog(`Connecting to ${addr}`, service.id);
+ sock.connect(addr);
+ } catch (e) {
+ writeLog('[ERROR]',e.message);
+ }
}
});
@@ -97,8 +107,12 @@ export function startZmqService(mainWindow, app) {
const { sender } = evt;
const addr = `tcp://${ip}:${service.port}`;
sock.removeListener('message', msgHandler);
- writeLog(`Disconnect from ${addr}`, service.id);
- sock.disconnect(addr);
+ try {
+ writeLog(`Disconnect from ${addr}`, service.id);
+ sock.disconnect(addr);
+ } catch (e) {
+ writeLog('[ERROR]',e.message);
+ }
});
// writeLog("Started ZeroMQ Service!");
diff --git a/app/sagas/eon_sagas.js b/app/sagas/eon_sagas.js
index 1040b09..1dec5c4 100644
--- a/app/sagas/eon_sagas.js
+++ b/app/sagas/eon_sagas.js
@@ -410,10 +410,19 @@ function* getSegments({type, payload}) {
// console.log("sec_number:",sec_number);
// const thumbnail_url = path.join(base_url,`sec${sec_number}-tiny.jpg`)
const thumbnail_url = midpointSegment.thumbnail_url;
+ const git_repo = firstSegment.git_remote.replace('git@github.com:','').replace('https://github.com/').replace(".git","");
+ const git_commit_short = firstSegment.git_commit.slice(0,7);
+ const cabana_url = `https://community.comma.ai/cabana/?route=${routeKey}`;
+ const sharable_cabana_url = `https://community.comma.ai/cabana/?route=${routeKey}&max=19&url=${firstSegment.base_url}`;
+
return {
...firstSegment,
start_time,
start_lat,
+ git_repo,
+ cabana_url,
+ sharable_cabana_url,
+ git_commit_short,
start_lng,
end_time,
id: routeKey,
diff --git a/app/sagas/zmq_sagas.js b/app/sagas/zmq_sagas.js
index b4d8e02..b54b4a8 100644
--- a/app/sagas/zmq_sagas.js
+++ b/app/sagas/zmq_sagas.js
@@ -9,7 +9,7 @@ const { ipcRenderer } = electron;
let channel;
function* createIPC(ipc, ip, service) {
- // console.warn("createIPC",arguments);
+ console.warn("createIPC",arguments);
channel = yield call(createIPCEventChannel, ipc);
ipc.send(types.CONNECT, ip, service);
while (true) {
@@ -19,7 +19,7 @@ function* createIPC(ipc, ip, service) {
}
export function* createIPCEventChannel(ipc) {
- // console.warn("createIPCEventChannel",arguments);
+ console.warn("createIPCEventChannel",arguments);
return eventChannel(emit => {
const onError = (data) => {
emit(actions.ERROR(data));
@@ -49,7 +49,7 @@ export function* createIPCEventChannel(ipc) {
}
function* connectZmq(ip, service) {
- // console.warn("connectZmq",arguments);
+ console.warn("connectZmq",arguments);
yield fork(createIPC, ipcRenderer, ip, service);
}
@@ -64,7 +64,7 @@ function* handleConnect(action) {
const serviceId = action.payload;
const eon = eons[selectedEon];
const service = serviceList[serviceId];
- // console.warn("HANDLING CONNECT",service);
+ console.warn("HANDLING CONNECT",service);
yield call(connectZmq, eon.ip, service);
}
diff --git a/app/styles/console.scss b/app/styles/console.scss
index 54e04ac..cdc6d72 100644
--- a/app/styles/console.scss
+++ b/app/styles/console.scss
@@ -42,11 +42,24 @@ $console-tabs-height: 34px;
&:hover {
background-color:lighten($monaco-color,10);
}
+ .meta {
+ font-size: 10px;
+ display: block;
+ line-height: 1em;
+ > span {
+ display:inline-block;
+ padding-right:5px;
+ &:first-child {
+ font-weight:bold;
+ }
+ }
+ }
.drive-thumbnail {
- flex: 0 0 40px;
+ flex: 0 0 65px;
img {
max-width:100%;
width:100%;
+ height:100%;
}
}
.drive-title {
@@ -78,12 +91,64 @@ $console-tabs-height: 34px;
$modal-header-height: 45px;
$modal-footer-height: 45px;
- width:30%;
+ width:43%;
position: fixed;
height: calc(100% - #{$top-bar-height});
top: $top-bar-height;
right:0;
z-index:1000;
+ .video-outer {
+ position:relative;
+ }
+ .route-metadata {
+ position: absolute;
+ z-index: 1001;
+ bottom: 15px;
+ font-size: 10px;
+ left: 13px;
+ line-height: 1.1em;
+ opacity: 0.3;
+ > div {
+ &:first-child {
+ font-weight:bold;
+ }
+ }
+ }
+ .video-preview {
+ .video-react-big-play-button {
+ display:none;
+ }
+ position:relative!important;
+ top:0;
+ left:0;
+ max-width:100%;
+ .player-overlay {
+ position:absolute;
+ top:0;
+ left:0;
+ width:100%;
+ height:100%;
+ background-color:rgba(0,0,0,0.2);
+ z-index:100;
+ }
+ .video-react {
+ max-width:100%;
+ width:100%;
+ padding-top:0!important;
+ &.cabin-camera {
+ position:absolute;
+ width:40%;
+ opacity:0.8;
+ bottom:10px;
+ right:10px;
+ border:1px solid rgba(0,0,0,0.2);
+ }
+ video {
+ width:100%;
+ max-width:100%;
+ }
+ }
+ }
.command-close {
position:absolute;
top:3px;
diff --git a/package.json b/package.json
index 052d0f4..87694e6 100644
--- a/package.json
+++ b/package.json
@@ -208,6 +208,7 @@
"dependencies": {
"@blueprintjs/core": "^3.13.0",
"@blueprintjs/icons": "^3.6.0",
+ "@commaai/log_reader": "^0.5.1",
"@fortawesome/fontawesome-free": "^5.7.1",
"@fortawesome/fontawesome-svg-core": "^1.2.14",
"@fortawesome/free-brands-svg-icons": "^5.7.1",
@@ -274,11 +275,13 @@
"popper.js": "^1.14.4",
"react": "^16.4.1",
"react-dom": "^16.4.1",
+ "react-extras": "^0.9.0",
"react-hot-loader": "^4.3.4",
"react-input-mask": "^2.0.4",
"react-json-pretty": "^1.7.9",
"react-json-view": "^1.19.1",
"react-lazy-load": "^3.0.13",
+ "react-measure": "^2.2.4",
"react-moment": "^0.8.1",
"react-monaco-editor": "0.14.1",
"react-redux": "^5.0.7",
@@ -306,6 +309,7 @@
"tmp": "^0.0.33",
"toml": "^2.3.3",
"uuid": "^3.3.2",
+ "video-react": "^0.13.2",
"winreg": "^1.2.4",
"ws": "^6.1.0",
"xterm": "^3.8.0",
diff --git a/yarn.lock b/yarn.lock
index 828e6e5..6074a5c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -151,7 +151,7 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.2.tgz#95cdeddfc3992a6ca2a1315191c1679ca32c55cd"
integrity sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ==
-"@babel/runtime@^7.1.2", "@babel/runtime@^7.3.1":
+"@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1":
version "7.3.1"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.1.tgz#574b03e8e8a9898eaf4a872a92ea20b7846f6f2a"
integrity sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA==
@@ -258,6 +258,29 @@
currify "^3.0.0"
fullstore "^1.0.0"
+"@commaai/capnp-json@^0.2.0":
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/@commaai/capnp-json/-/capnp-json-0.2.0.tgz#866bba39274b02f899803dc7968a7fe79fb02321"
+ integrity sha512-PXqEjvoLkb7VPaeMlFV7NspHAUMfTGhd6plQ72rilrjagf1os73fdItdlhk/q2XELx+l/Vq1xRSLJT1Os0DVqQ==
+ dependencies:
+ capnp-ts "0.2.4"
+
+"@commaai/log_reader@^0.5.1":
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/@commaai/log_reader/-/log_reader-0.5.1.tgz#c6785046bf20e2db8cd686ed3e3dbfb079836594"
+ integrity sha512-Lq9PcZ8rO0rPYY/h/cTRZ7Mgw/uHjvkAh2DVtOWcc2t0+YGV/ymTmJmhc8obnhJ2adyEurrKkliIjUftHaHYvw==
+ dependencies:
+ "@commaai/capnp-json" "^0.2.0"
+ JSONStream "^1.3.2"
+ ap "^0.2.0"
+ capnp-split "^0.1.1"
+ capnp-ts "^0.2.4"
+ commander "^2.15.1"
+ file-type "^7.6.0"
+ geval "^2.2.0"
+ stream-selector "^0.4.0"
+ wasm-bz2 "^0.0.2"
+
"@fortawesome/fontawesome-common-types@^0.2.15":
version "0.2.15"
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.15.tgz#16af950653083d1e3064061de9f8e5e3b579f688"
@@ -1013,6 +1036,11 @@ arr-union@^3.1.0:
resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+array-differ@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
+ integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=
+
array-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
@@ -2727,13 +2755,23 @@ capnp-json@^0.1.3:
resolved "https://registry.yarnpkg.com/capnp-json/-/capnp-json-0.1.3.tgz#e305dd690b9fcf53e2e19278eb6a99d187ea8047"
integrity sha512-S1bRHkHECsFVjETOZKnxIeab00ozGb7wyS7HEkNhOLUo1/9oDvcURdttp7AbOPDUSIUWM9HoPKdnnH/SSHNBWA==
-capnp-split@^0.1.4:
+capnp-split@^0.1.1, capnp-split@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/capnp-split/-/capnp-split-0.1.4.tgz#c3f86890645cd203c5ce23ff1ccb4fe6642ea4a3"
integrity sha512-gYH08RBK87DaFf04w1M6wKDBPwk9KLSbjQByvb0k9Nw101OyfWlA8rgawuhc6bQq1qU8lq6yP/qDS1M01vcrsQ==
dependencies:
through2 "^2.0.3"
+capnp-ts@0.2.4, capnp-ts@^0.2.4:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/capnp-ts/-/capnp-ts-0.2.4.tgz#da729493311f384d65d480d9afe979ceab9f41bb"
+ integrity sha512-A9+Awl2WQDhg0fpEoyDpIF7RUQp27gpYBLRGV2zKA37a0IBEutdgIKDI7pO44C9AhzxvCfR6Ooj5W14D3TKaQA==
+ dependencies:
+ debug "^2.6.3"
+ format "^0.2.2"
+ tslib "^1.7.1"
+ utf8-encoding "^0.1.2"
+
capnp-ts@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/capnp-ts/-/capnp-ts-0.4.0.tgz#7e627f5324cfa477c7d083be31ee3f00cc1e5fb2"
@@ -5528,6 +5566,11 @@ file-loader@^1.1.11:
loader-utils "^1.0.2"
schema-utils "^0.4.5"
+file-type@^7.6.0:
+ version "7.7.1"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-7.7.1.tgz#91c2f5edb8ce70688b9b68a90d931bbb6cb21f65"
+ integrity sha512-bTrKkzzZI6wH+NXhyD3SOXtb2zXTw2SbwI2RxUlRcXVsnN7jNL5hJzVQLYv7FOQhxFkK4XWdAflEaWFpaLLWpQ==
+
filename-regex@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
@@ -5952,6 +5995,11 @@ get-caller-file@^1.0.1:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+get-node-dimensions@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz#fb7b4bb57060fb4247dd51c9d690dfbec56b0823"
+ integrity sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ==
+
get-own-enumerable-property-symbols@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203"
@@ -6001,7 +6049,7 @@ getpass@^0.1.1:
dependencies:
assert-plus "^1.0.0"
-geval@^2.2.0:
+geval@^2.2.0, geval@~2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/geval/-/geval-2.2.0.tgz#5622b10a28028284198afe351f6b417042c33dda"
integrity sha1-ViKxCigCgoQZiv41H2tBcELDPdo=
@@ -7974,6 +8022,14 @@ just-extend@^4.0.2:
resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.0.2.tgz#f3f47f7dfca0f989c55410a7ebc8854b07108afc"
integrity sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==
+key-difference@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/key-difference/-/key-difference-1.0.0.tgz#7ede6f69bfff08010b5612885303b688a30008cc"
+ integrity sha1-ft5vab//CAELVhKIUwO2iKMACMw=
+ dependencies:
+ array-differ "~1.0.0"
+ xtend "~4.0.0"
+
keyboardevent-from-electron-accelerator@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/keyboardevent-from-electron-accelerator/-/keyboardevent-from-electron-accelerator-1.1.0.tgz#324614f6e33490c37ffc5be5876b3e85fe223c84"
@@ -11310,6 +11366,13 @@ react-dom@^16.4.1, react-dom@^16.6.3:
prop-types "^15.6.2"
scheduler "^0.13.1"
+react-extras@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/react-extras/-/react-extras-0.9.0.tgz#2f8199c05504ff7d5fa8e19cba62029eba554a28"
+ integrity sha512-Vpv4Oo5k2nW6qLfTB3ITVgWEx4lWN66tk64kdnLFppL78yYTP5yAnYw1FEdjC5aFXtv2XVoXxJh6H6PW7pczqQ==
+ dependencies:
+ prop-types "^15.6.2"
+
react-hot-loader@^4.3.4:
version "4.6.5"
resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.6.5.tgz#059619c8ac2aae9c6e8178ddc2eac535093cdd2e"
@@ -11370,6 +11433,16 @@ react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4:
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+react-measure@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/react-measure/-/react-measure-2.2.4.tgz#cec3d96d3c39e22660e958e26d5498e4a342b9e4"
+ integrity sha512-gpZA4J8sKy1TzTfnOXiiTu01GV8B5OyfF9k7Owt38T6Xxlll19PBE13HKTtauEmDdJO5u4o3XcTiGqCw5wpfjw==
+ dependencies:
+ "@babel/runtime" "^7.2.0"
+ get-node-dimensions "^1.2.1"
+ prop-types "^15.6.2"
+ resize-observer-polyfill "^1.5.0"
+
react-moment@^0.8.1:
version "0.8.4"
resolved "https://registry.yarnpkg.com/react-moment/-/react-moment-0.8.4.tgz#18eb59e1541c8b216353e23c21e9db50e42e2edb"
@@ -14165,6 +14238,16 @@ vfile@^3.0.0:
unist-util-stringify-position "^1.0.0"
vfile-message "^1.0.0"
+video-react@^0.13.2:
+ version "0.13.2"
+ resolved "https://registry.yarnpkg.com/video-react/-/video-react-0.13.2.tgz#bb42b622913b59584b3d6def54bc7d32de7d2337"
+ integrity sha512-CbpwtNnGxJbfbyby7gIcUrKv4psLrmHuIFBFZ0hgQXU9sDs6aPeFGitQ0d4CoJ158KeMKvAkIeJGF5ku5x9j8A==
+ dependencies:
+ classnames "^2.2.3"
+ lodash.throttle "^4.1.1"
+ prop-types "^15.5.8"
+ redux "^4.0.0"
+
vm-browserify@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
@@ -14200,6 +14283,14 @@ warning@^4.0.1, warning@^4.0.2:
dependencies:
loose-envify "^1.0.0"
+wasm-bz2@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wasm-bz2/-/wasm-bz2-0.0.2.tgz#ff5c4e3ed660169ec14f00bd9f4650c43c142a13"
+ integrity sha512-OjWSwiIvz8yacBBqajiZTSVI9Yom1nHFjBuXJFTOwa9rkHIQFNmFaEG65kmnUlFMUNU6mxmGGKAwF8BGMesZ6g==
+ dependencies:
+ ap "^0.2.0"
+ weakmap-event "^2.0.7"
+
wastedrendersdetector@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/wastedrendersdetector/-/wastedrendersdetector-2.0.0.tgz#02915061655a3d4119bae597244f287d1f1ce75c"
@@ -14241,6 +14332,21 @@ wdio-dot-reporter@~0.0.8:
resolved "https://registry.yarnpkg.com/wdio-dot-reporter/-/wdio-dot-reporter-0.0.10.tgz#facfb7c9c5984149951f59cbc3cd0752101cf0e0"
integrity sha512-A0TCk2JdZEn3M1DSG9YYbNRcGdx/YRw19lTiRpgwzH4qqWkO/oRDZRmi3Snn4L2j54KKTfPalBhlOtc8fojVgg==
+weakmap-event@^2.0.7:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/weakmap-event/-/weakmap-event-2.0.7.tgz#3f65318aba89e022981e8249bfae339a4ad6945a"
+ integrity sha1-P2UxirqJ4CKYHoJJv64zmkrWlFo=
+ dependencies:
+ geval "~2.2.0"
+ key-difference "~1.0.0"
+ weakmap-shim "~1.1.0"
+ xtend "~4.0.0"
+
+weakmap-shim@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/weakmap-shim/-/weakmap-shim-1.1.1.tgz#d65afd784109b2166e00ff571c33150ec2a40b49"
+ integrity sha1-1lr9eEEJshZuAP9XHDMVDsKkC0k=
+
webdriverio@^4.8.0:
version "4.14.2"
resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-4.14.2.tgz#335038214272675b409bdfc8276a9345a88bc83e"
@@ -14643,7 +14749,7 @@ xregexp@4.0.0:
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"
integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==
-xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
+xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=