├── .gitignore
├── .watchmanconfig
├── README.md
├── babel.config.js
├── example
├── .gitignore
├── .watchmanconfig
├── App.js
├── app.json
├── babel.config.js
├── package-lock.json
└── package.json
├── lib
├── ActionTypes.js
├── Actions.js
├── Colors.js
├── DefaultStore.js
├── ImageGallery.js
├── ImageGalleryAnimatedImage.js
├── ImageGalleryConstants.js
├── ImageGalleryHeaderBar.js
├── ImageGalleryImage.js
├── ImageGalleryItem.js
├── ImageGalleryList.js
├── ImageGalleryPlaceholder.js
├── ImageGalleryReducer.js
├── Layout.js
├── ShallowEquals.js
├── ViewPager.js
├── calculateImageDimensions.js
├── index.js
└── openImageGallery.js
├── package-lock.json
├── package.json
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/**/*
2 | .expo/*
3 | npm-debug.*
4 | *.jks
5 | *.p12
6 | *.key
7 | *.mobileprovision
8 |
--------------------------------------------------------------------------------
/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ### @expo/react-native-image-gallery
2 |
3 | Requires @unimodules/react-native-platform to use in a bare React Native app.
4 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = function(api) {
2 | api.cache(true);
3 | return {
4 | "presets": ["babel-preset-expo"],
5 | "env": {
6 | "development": {
7 | "plugins": ["transform-react-jsx-source"]
8 | }
9 | }
10 | };
11 | };
12 |
--------------------------------------------------------------------------------
/example/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/**/*
2 | .expo/*
3 | npm-debug.*
4 | *.jks
5 | *.p12
6 | *.key
7 | *.mobileprovision
8 |
--------------------------------------------------------------------------------
/example/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/example/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | Dimensions,
4 | Image,
5 | Platform,
6 | ScrollView,
7 | StyleSheet,
8 | Text,
9 | TouchableWithoutFeedback,
10 | View,
11 | SafeAreaView,
12 | StatusBar,
13 | } from 'react-native';
14 |
15 | import Immutable from 'immutable';
16 | import ImageGallery, { openImageGallery } from '@expo/react-native-image-gallery';
17 |
18 | class ListItem extends React.Component {
19 | _openInImageGallery = () => {
20 | let { item } = this.props;
21 |
22 | this._view.measure((rx, ry, w, h, x, y) => {
23 | openImageGallery({
24 | animationMeasurements: { w, h, x, y },
25 | list,
26 | item,
27 | });
28 | });
29 | };
30 |
31 | render() {
32 | let { item } = this.props;
33 |
34 | return (
35 |
36 | { this._view = view }}
38 | source={{ uri: item.imageUrl }}
39 | style={styles.thumbnail} />
40 |
41 | );
42 | }
43 |
44 | }
45 |
46 | class ImageGrid extends React.Component {
47 | render() {
48 | return (
49 |
50 |
51 | Example Image Gallery
52 |
53 |
54 |
55 | {list.map(item => )}
56 |
57 |
58 | );
59 | }
60 | }
61 |
62 | export default class App extends React.Component {
63 | render() {
64 | return (
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | );
73 | }
74 | }
75 |
76 | const DEVICE_WIDTH = Dimensions.get('window').width;
77 | var THUMBNAILS_PER_ROW = 2;
78 | var THUMBNAIL_SPACING = 10;
79 | var THUMBNAIL_SIZE = ((DEVICE_WIDTH - (THUMBNAIL_SPACING * ((THUMBNAILS_PER_ROW * 2) + 2))) / THUMBNAILS_PER_ROW);
80 |
81 | const styles = StyleSheet.create({
82 | container: {
83 | flex: 1,
84 | },
85 | thumbnail: {
86 | margin: THUMBNAIL_SPACING,
87 | width: THUMBNAIL_SIZE,
88 | height: THUMBNAIL_SIZE,
89 | },
90 | header: {
91 | padding: 20,
92 | borderBottomColor: '#eee',
93 | borderBottomWidth: 1,
94 | alignItems: 'center',
95 | },
96 | heading: {
97 | fontSize: 18,
98 | },
99 | imagegrid: {
100 | flex: 1,
101 | },
102 | layout: {
103 | margin: THUMBNAIL_SPACING,
104 | flex: 1,
105 | flexDirection: 'row',
106 | flexWrap: 'wrap',
107 | justifyContent: 'space-between'
108 | },
109 | });
110 |
111 | const list = [
112 | {
113 | description: 'Image 1',
114 | imageUrl: 'http://placehold.it/480x480&text=Image%201',
115 | width: 480,
116 | height: 480,
117 | },
118 | {
119 | description: 'Image 2',
120 | imageUrl: 'http://placehold.it/640x640&text=Image%202',
121 | width: 640,
122 | height: 640,
123 | },
124 | {
125 | description: 'Image 3',
126 | imageUrl: 'http://placehold.it/640x640&text=Image%203',
127 | width: 640,
128 | height: 640,
129 | }
130 | ];
131 |
--------------------------------------------------------------------------------
/example/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "expo": {
3 | "name": "image-gallery-example",
4 | "description": "An example project using https://github.com/expo/react-native-image-gallery",
5 | "slug": "image-gallery-example",
6 | "sdkVersion": "32.0.0",
7 | "version": "1.0.0",
8 | "orientation": "portrait",
9 | "primaryColor": "#cccccc",
10 | "icon": "https://s3.amazonaws.com/exp-brand-assets/ExponentEmptyManifest_192.png"
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/example/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = function(api) {
2 | api.cache(true);
3 | return {
4 | presets: ['babel-preset-expo'],
5 | };
6 | };
7 |
--------------------------------------------------------------------------------
/example/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "image-gallery-example",
3 | "version": "1.0.0",
4 | "author": "support@expo.io",
5 | "main": "node_modules/expo/AppEntry.js",
6 | "dependencies": {
7 | "@expo/react-native-image-gallery": "../expo-react-native-image-gallery-v3.0.0.tgz",
8 | "expo": "^32.0.1",
9 | "react": "16.5.0",
10 | "react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz",
11 | "react-navigation": "^3.0.9"
12 | },
13 | "devDependencies": {
14 | "babel-preset-expo": "^5.0.0"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/lib/ActionTypes.js:
--------------------------------------------------------------------------------
1 | import mirror from 'mirror-creator';
2 |
3 | export default mirror([
4 | 'PRELOAD_IMAGE_GALLERY',
5 | 'OPEN_IMAGE_GALLERY',
6 | 'CLOSE_IMAGE_GALLERY',
7 | 'FOCUS_IMAGE_GALLERY_ITEM',
8 | 'UPDATE_IMAGE_GALLERY_ANIMATION_MEASUREMENTS',
9 | 'UPDATE_IMAGE_GALLERY_LIFECYCLE',
10 | 'REPLACE_IMAGE_SEARCH_TEXT',
11 | ]);
12 |
--------------------------------------------------------------------------------
/lib/Actions.js:
--------------------------------------------------------------------------------
1 | import ActionTypes from './ActionTypes';
2 |
3 | export default class Actions {
4 |
5 | static preloadImageGallery({list}) {
6 | return {
7 | type: ActionTypes.PRELOAD_IMAGE_GALLERY,
8 | list,
9 | };
10 | }
11 |
12 | static openImageGallery(payload) {
13 | return {
14 | type: ActionTypes.OPEN_IMAGE_GALLERY,
15 | ...payload,
16 | };
17 | }
18 |
19 | static closeImageGallery() {
20 | return {
21 | type: ActionTypes.CLOSE_IMAGE_GALLERY,
22 | };
23 | }
24 |
25 | static updateImageGalleryLifecycle(newState) {
26 | return {
27 | type: ActionTypes.UPDATE_IMAGE_GALLERY_LIFECYCLE,
28 | lifecycle: newState,
29 | };
30 | }
31 |
32 | static focusImageGalleryItem(item) {
33 | return {
34 | type: ActionTypes.FOCUS_IMAGE_GALLERY_ITEM,
35 | item,
36 | };
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/lib/Colors.js:
--------------------------------------------------------------------------------
1 | export default {
2 | galleryBackground: '#e8e8ec',
3 | barBackground: '#fff',
4 | barBorder: '#B2B2B2',
5 | barTitle: '#484E5C',
6 | enabledButtonText: '#0F81AA',
7 | };
8 |
--------------------------------------------------------------------------------
/lib/DefaultStore.js:
--------------------------------------------------------------------------------
1 | import { combineReducers, createStore } from 'redux';
2 | import imageGalleryReducer from './ImageGalleryReducer';
3 |
4 | const store = createStore(combineReducers({
5 | imageGallery: imageGalleryReducer,
6 | }));
7 |
8 | export default store;
9 |
--------------------------------------------------------------------------------
/lib/ImageGallery.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 | import {
4 | Animated,
5 | BackHandler,
6 | Easing,
7 | PanResponder,
8 | Platform,
9 | StatusBar,
10 | StyleSheet,
11 | View,
12 | } from 'react-native';
13 | import { connect, Provider } from 'react-redux';
14 |
15 | import Actions from './Actions';
16 | import Colors from './Colors';
17 | import ImageGalleryAnimatedImage from './ImageGalleryAnimatedImage';
18 | import ImageGalleryHeaderBar from './ImageGalleryHeaderBar';
19 | import ImageGalleryList from './ImageGalleryList';
20 | import {
21 | OPENING_ANIMATION_IN_PROGRESS,
22 | OPEN_AND_IDLE,
23 | CLOSING_ANIMATION_IN_PROGRESS,
24 | CLOSED_AND_IDLE,
25 | DRAG_IN_PROGRESS,
26 | } from './ImageGalleryConstants';
27 | import Layout from './Layout';
28 | import { shallowEqualsIgnoreKeys } from './ShallowEquals';
29 | import DefaultStore from './DefaultStore';
30 |
31 | const TOP_OFFSET = Layout.headerHeight;
32 | const USE_NATIVE_DRIVER = true;
33 |
34 | @connect(data => ImageGallery.getDataProps(data))
35 | class ImageGallery extends React.Component {
36 | static getDataProps(data) {
37 | let { imageGallery } = data;
38 |
39 | return {
40 | animationMeasurements: imageGallery.get('animationMeasurements'),
41 | userWantsOpen: imageGallery.get('userWantsOpen'),
42 | lifecycle: imageGallery.get('lifecycle'),
43 | item: imageGallery.get('item'),
44 | list: imageGallery.get('list'),
45 | };
46 | }
47 |
48 | static childContextTypes = {
49 | store: PropTypes.object,
50 | };
51 |
52 | getChildContext() {
53 | return { store: DefaultStore };
54 | }
55 |
56 | shouldComponentUpdate(nextProps) {
57 | return !shallowEqualsIgnoreKeys(this.props, nextProps, [
58 | 'animationMeasurements',
59 | 'item',
60 | ]);
61 | }
62 |
63 | static propTypes = {
64 | animationMeasurements: PropTypes.object,
65 | userWantsOpen: PropTypes.bool,
66 | item: PropTypes.object,
67 | list: PropTypes.object,
68 | };
69 |
70 | constructor(props, context) {
71 | super(props, context);
72 |
73 | this.state = {
74 | zoomInOutValue: new Animated.Value(0),
75 | panValue: new Animated.Value(0),
76 | innerContentValue: new Animated.Value(0),
77 | };
78 | }
79 |
80 | componentWillMount() {
81 | if (USE_NATIVE_DRIVER) {
82 | this.state.innerContentValue.__makeNative();
83 | this.state.zoomInOutValue.__makeNative();
84 | this.state.panValue.__makeNative();
85 | }
86 |
87 | this._panResponder = PanResponder.create({
88 | onMoveShouldSetPanResponder: this._onMoveShouldSetPanResponder,
89 | onPanResponderGrant: this._onPanResponderGrant,
90 | onPanResponderMove: this._onPanResponderMove,
91 | onPanResponderTerminationRequest: true,
92 | onPanResponderTerminate: this._onPanResponderEnd,
93 | onPanResponderRelease: this._onPanResponderEnd,
94 | });
95 | }
96 |
97 | componentWillReceiveProps(nextProps) {
98 | if (this.props.lifecycle === OPENING_ANIMATION_IN_PROGRESS) {
99 | this._updateScrollPositionFromProps(nextProps);
100 | }
101 | }
102 |
103 | componentDidUpdate(prevProps) {
104 | if (this.props.lifecycle === OPENING_ANIMATION_IN_PROGRESS) {
105 | this._updateScrollPositionFromProps(this.props);
106 | }
107 |
108 | requestAnimationFrame(() => {
109 | if (!prevProps.userWantsOpen && this.props.userWantsOpen) {
110 | this._enableBackButtonOverride();
111 | this._animateZoomIn(this.props);
112 | } else if (prevProps.userWantsOpen && !this.props.userWantsOpen) {
113 | if (this.props.lifecycle !== CLOSED_AND_IDLE) {
114 | this._animateAutomatedSlideOut();
115 | }
116 | }
117 | });
118 | }
119 |
120 | render() {
121 | let { userWantsOpen, list, lifecycle } = this.props;
122 | let { innerContentValue, zoomInOutValue } = this.state;
123 | let isVisible = lifecycle !== CLOSED_AND_IDLE;
124 | let isDragging =
125 | lifecycle === DRAG_IN_PROGRESS ||
126 | lifecycle === CLOSING_ANIMATION_IN_PROGRESS;
127 |
128 | /* note(brentvatne): no idea why 7 is necessary here, shouldn't it just be
129 | * the tabBarHeight? */
130 | const SOME_NUMBER_I_DONT_UNDERSTAND = 7;
131 | const topClippingOffset = isDragging
132 | ? 0
133 | : TOP_OFFSET - Layout.statusBarHeight;
134 | const bottomClippingOffset = isDragging
135 | ? -topClippingOffset
136 | : -topClippingOffset +
137 | Layout.tabBarHeight +
138 | SOME_NUMBER_I_DONT_UNDERSTAND -
139 | Layout.statusBarHeight;
140 |
141 | return (
142 |
146 |
152 |
153 |
154 | {
157 | this._list = view;
158 | }}
159 | onPageSelected={this._onPageSelected}
160 | onPressItem={this._closeGallery}
161 | style={styles.list}
162 | renderDescription={this.props.renderDescription}
163 | />
164 |
165 |
171 |
172 |
173 | {/* note(brentvatne): These two wrapper views are required to clip the
174 | animated image, to create the impression that it is going
175 | underneath the navbar */}
176 |
186 |
191 |
199 |
200 |
201 |
202 | {isVisible && }
203 |
204 | );
205 | }
206 |
207 | // Scroll the gallery to the item whose image was tapped on.
208 | _updateScrollPositionFromProps(props) {
209 | let { list, item } = props;
210 | let index = list.get('items').indexOf(item);
211 | this._list.scrollToPage(index);
212 | }
213 |
214 | _animateZoomIn = (props = this.props) => {
215 | let { zoomInOutValue, innerContentValue } = this.state;
216 | let animationConfig = {
217 | toValue: 1,
218 | duration: 200,
219 | easing: Easing.inOut(Easing.linear),
220 | useNativeDriver: USE_NATIVE_DRIVER,
221 | };
222 |
223 | setTimeout(() => {
224 | Animated.parallel([
225 | Animated.timing(innerContentValue, animationConfig),
226 | Animated.timing(zoomInOutValue, animationConfig),
227 | ]).start(({ finished }) => {
228 | if (!finished) {
229 | return;
230 | }
231 |
232 | requestAnimationFrame(() => {
233 | this.props.dispatch(
234 | Actions.updateImageGalleryLifecycle(OPEN_AND_IDLE)
235 | );
236 | });
237 | });
238 | });
239 | };
240 |
241 | _animateAutomatedSlideOut = () => {
242 | Animated.timing(this.state.innerContentValue, {
243 | toValue: 0,
244 | duration: 150,
245 | useNativeDriver: USE_NATIVE_DRIVER,
246 | }).start();
247 |
248 | this._animateSlideOut(5, 1, 150);
249 | };
250 |
251 | _animateSlideOut = (vy, dy, duration = 150) => {
252 | let { panValue, zoomInOutValue } = this.state;
253 | let boundary = Layout.window.height;
254 |
255 | let zoomAnimationConfig = {
256 | toValue: 0,
257 | duration,
258 | easing: Easing.inOut(Easing.linear),
259 | useNativeDriver: USE_NATIVE_DRIVER,
260 | };
261 |
262 | let toValue;
263 | if (Math.abs(vy) <= 5) {
264 | // very very still so just use dy
265 | toValue = dy <= 0 ? -boundary : boundary;
266 | } else {
267 | // just moved by a reasonable amount, so just vy
268 | toValue = vy < 0 ? -boundary : boundary;
269 | }
270 |
271 | let panAnimationConfig = {
272 | toValue,
273 | velocity: vy,
274 | bounciness: 0,
275 | useNativeDriver: USE_NATIVE_DRIVER,
276 | };
277 |
278 | Animated.spring(panValue, panAnimationConfig).start();
279 |
280 | setTimeout(() => {
281 | Animated.timing(
282 | zoomInOutValue,
283 | zoomAnimationConfig
284 | ).start(({ finished }) => {
285 | this.props.dispatch(
286 | Actions.updateImageGalleryLifecycle(CLOSED_AND_IDLE)
287 | );
288 |
289 | this._disableBackButtonOverride();
290 |
291 | // Reset the now hidden gallery to its original position
292 | panValue.setValue(0);
293 | zoomInOutValue.setValue(0);
294 | });
295 | }, duration);
296 | };
297 |
298 | _closeGallery = () => {
299 | let { lifecycle } = this.props;
300 |
301 | if (lifecycle === OPEN_AND_IDLE) {
302 | this.props.dispatch(Actions.closeImageGallery());
303 | }
304 | };
305 |
306 | _isAnimatedImageVisible() {
307 | return (
308 | [CLOSED_AND_IDLE, OPEN_AND_IDLE].indexOf(this.props.lifecycle) === -1
309 | );
310 | }
311 |
312 | _onPageSelected = index => {
313 | let activeItem = this.props.list.get('items').get(index);
314 | this.props.dispatch(Actions.focusImageGalleryItem(activeItem));
315 | };
316 |
317 | _onMoveShouldSetPanResponder = (e, { moveY, dx, dy }) => {
318 | const topOfDescriptionBox =
319 | Layout.window.width + Layout.headerHeight; // Images are 1:1 aspect ratio, full screen width
320 |
321 | if (this.props.lifecycle !== OPEN_AND_IDLE) {
322 | return false;
323 | }
324 |
325 | let y0 = moveY - dy;
326 | if (
327 | y0 >= Layout.headerHeight &&
328 | moveY >= Layout.headerHeight &&
329 | y0 <= topOfDescriptionBox &&
330 | moveY <= topOfDescriptionBox &&
331 | Math.abs(dy) > Math.abs(dx) * 2
332 | ) {
333 | return true;
334 | }
335 | };
336 |
337 | _onPanResponderGrant = (e, gestureState) => {
338 | // There appears to be a bug with iOS PanResponder/ScrollView where the
339 | // PanResponder is able to try to take responder status away from a
340 | // scrolling ScrollView, and all it does is fire grant then that's it
341 | // -- no terminate or anything. So we have to do the initialization for
342 | // the gesture in onPanResponderMove -- if we were to do it here then
343 | // when the formerly mentioned edge-case occurs we would end up in a
344 | // start where the gesture was initialized but never canceled.
345 | this._responderGranted = true;
346 | };
347 |
348 | _onPanResponderMove = (e, { dy }) => {
349 | if (this._responderGranted) {
350 | Animated.timing(this.state.innerContentValue, {
351 | toValue: 0,
352 | duration: 250,
353 | useNativeDriver: USE_NATIVE_DRIVER,
354 | }).start();
355 |
356 | this.state.panValue.setOffset(this.state.panValue._value);
357 | this.state.panValue.setValue(0);
358 | this.props.dispatch(
359 | Actions.updateImageGalleryLifecycle(DRAG_IN_PROGRESS)
360 | );
361 | this._responderGranted = false;
362 | }
363 |
364 | // This calculation is based off of some manual tweaking to get the opacity
365 | // looking right as you move further away from the center towards the top
366 | // or bottom
367 | let opacity = 1 - Math.abs(dy / parseFloat(Layout.window.height / 2)) / 2;
368 |
369 | // Update the underlay opacity
370 | this.state.zoomInOutValue.setValue(opacity);
371 | // Update the actual pan position
372 | this.state.panValue.setValue(dy);
373 | };
374 |
375 | _onPanResponderEnd = (e, { moveX, moveY, dx, dy, vx, vy }) => {
376 | let { innerContentValue, panValue, zoomInOutValue } = this.state;
377 | panValue.flattenOffset();
378 |
379 | const duration = 300;
380 | const throwThreshold = 150;
381 |
382 | // The iOS logic should be what we use on both platforms --but-- Android does not
383 | // calculate the vy in the same way! This is a bug
384 | let shouldAnimateOut = false;
385 | if (
386 | Platform.OS === 'android' &&
387 | (dy >= throwThreshold || dy <= -throwThreshold)
388 | ) {
389 | shouldAnimateOut = true;
390 | } else if (
391 | Platform.OS === 'ios' &&
392 | (vy >= 1 || vy <= -1 || (dy >= throwThreshold || dy <= -throwThreshold))
393 | ) {
394 | shouldAnimateOut = true;
395 | }
396 |
397 | if (shouldAnimateOut) {
398 | this._animateSlideOut(vy, dy);
399 | } else {
400 | Animated.spring(panValue, {
401 | toValue: 0,
402 | speed: 30,
403 | bounciness: 8,
404 | useNativeDriver: USE_NATIVE_DRIVER,
405 | }).start();
406 | Animated.parallel([
407 | Animated.timing(innerContentValue, {
408 | toValue: 1,
409 | duration,
410 | useNativeDriver: USE_NATIVE_DRIVER,
411 | }),
412 | Animated.timing(zoomInOutValue, {
413 | toValue: 1,
414 | duration,
415 | useNativeDriver: USE_NATIVE_DRIVER,
416 | }),
417 | ]).start(({ finished }) => {
418 | if (finished) {
419 | this.props.dispatch(
420 | Actions.updateImageGalleryLifecycle(OPEN_AND_IDLE)
421 | );
422 | }
423 | });
424 | }
425 | };
426 |
427 | _enableBackButtonOverride() {
428 | if (Platform.OS === 'android') {
429 | BackHandler.addEventListener('hardwareBackPress', this._handleBackPress);
430 | }
431 | }
432 |
433 | _handleBackPress = () => {
434 | this._closeGallery();
435 | return true;
436 | };
437 |
438 | _disableBackButtonOverride() {
439 | if (Platform.OS === 'android') {
440 | BackHandler.removeEventListener(
441 | 'hardwareBackPress',
442 | this._handleBackPress
443 | );
444 | }
445 | }
446 | }
447 |
448 | export default class ImageGalleryContainer extends React.Component {
449 | render() {
450 | return (
451 |
452 |
453 |
454 | );
455 | }
456 | }
457 |
458 | let styles = StyleSheet.create({
459 | fullSize: {
460 | position: 'absolute',
461 | top: 0,
462 | left: 0,
463 | bottom: 0,
464 | right: 0,
465 | },
466 | container: {
467 | position: 'absolute',
468 | top: 0,
469 | left: 0,
470 | bottom: 0,
471 | right: 0,
472 | backgroundColor: 'transparent',
473 | },
474 | underlay: {
475 | position: 'absolute',
476 | top: TOP_OFFSET,
477 | left: 0,
478 | right: 0,
479 | bottom: 0,
480 | backgroundColor: Colors.galleryBackground,
481 | },
482 | headerBar: {
483 | backgroundColor: Colors.barBackground,
484 | borderBottomWidth: 1 * StyleSheet.hairlineWidth,
485 | borderBottomColor: Colors.barBorder,
486 | height: Layout.headerHeight,
487 | paddingTop: Layout.statusBarHeight,
488 | position: 'absolute',
489 | top: 0,
490 | left: 0,
491 | right: 0,
492 | justifyContent: 'center',
493 | alignItems: 'center',
494 | },
495 | list: {
496 | position: 'absolute',
497 | top: Layout.headerHeight,
498 | bottom: 0,
499 | left: 0,
500 | right: 0,
501 | overflow: 'hidden',
502 | },
503 | });
504 |
505 |
--------------------------------------------------------------------------------
/lib/ImageGalleryAnimatedImage.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 | import { Animated, Image, StyleSheet, Platform, View } from 'react-native';
4 | import { connect } from 'react-redux';
5 |
6 | import ImageGalleryPlaceholder from './ImageGalleryPlaceholder';
7 | import Layout from './Layout';
8 | import calculateImageDimensions from './calculateImageDimensions';
9 |
10 | class ImageGalleryAnimatedImage extends React.PureComponent {
11 | static propTypes = {
12 | animationMeasurements: PropTypes.object,
13 | isDragging: PropTypes.bool,
14 | isImageGalleryOpen: PropTypes.bool,
15 | /* Is visible when zooming in, dragging, or animating out */
16 | isVisible: PropTypes.bool,
17 | item: PropTypes.object,
18 | panValue: PropTypes.object,
19 | };
20 |
21 | static getDataProps(data) {
22 | let { imageGallery } = data;
23 |
24 | return {
25 | item: imageGallery.get('item'),
26 | };
27 | }
28 |
29 | render() {
30 | if (this.props.isDragging || this.props.isImageGalleryOpen) {
31 | return this._renderDraggingState();
32 | } else {
33 | return this._renderAutoState();
34 | }
35 | }
36 |
37 | _renderDraggingState() {
38 | let { item, isVisible, panValue } = this.props;
39 |
40 | let uri = item && item.get('image_url');
41 | let source = uri ? { uri } : null;
42 | let translateY = panValue;
43 | let style = [
44 | styles.image,
45 | {
46 | opacity: isVisible ? 1 : 0,
47 | top: Layout.headerHeight,
48 | transform: [{ translateY }],
49 | },
50 | ];
51 |
52 | if (uri) {
53 | let {
54 | constrainedWidth,
55 | constrainedHeight,
56 | marginHorizontal,
57 | marginVertical,
58 | } = calculateImageDimensions(item, Layout.window.width);
59 |
60 | return (
61 |
62 |
77 |
78 | );
79 | } else {
80 | return ;
81 | }
82 | }
83 |
84 | _renderAutoState() {
85 | let { animationMeasurements, item, isVisible, zoomInOutValue } = this.props;
86 |
87 | let uri = item && item.get('image_url');
88 | let source = uri ? { uri } : null;
89 |
90 | if (!animationMeasurements || !source) {
91 | return ;
92 | }
93 |
94 | let {
95 | constrainedWidth,
96 | constrainedHeight,
97 | marginHorizontal,
98 | marginVertical,
99 | } = calculateImageDimensions(item, Layout.window.width);
100 |
101 | let { x, y, w, h } = animationMeasurements;
102 | let initialScaleX, initialScaleY, scaleX, scaleY, translateX, translateY;
103 |
104 | initialScaleX = parseFloat(w) / constrainedWidth;
105 | initialScaleY = parseFloat(h) / constrainedHeight;
106 |
107 | scaleX = zoomInOutValue.interpolate({
108 | inputRange: [0, 1],
109 | outputRange: [initialScaleX, 1.0],
110 | });
111 |
112 | scaleY = zoomInOutValue.interpolate({
113 | inputRange: [0, 1],
114 | outputRange: [initialScaleY, 1.0],
115 | });
116 |
117 | translateX = zoomInOutValue.interpolate({
118 | inputRange: [0, 1],
119 | outputRange: [
120 | (w - constrainedWidth) / 2 + x,
121 | (Layout.window.width - constrainedWidth) / 2,
122 | ],
123 | });
124 |
125 | translateY = zoomInOutValue.interpolate({
126 | inputRange: [0, 1],
127 | outputRange: [
128 | (h - constrainedHeight) / 2 + y + Layout.statusBarHeight,
129 | Layout.headerHeight + marginVertical + Layout.statusBarHeight,
130 | ],
131 | });
132 |
133 | return (
134 |
145 |
155 |
156 | );
157 | }
158 | }
159 |
160 | export default connect(data => ImageGalleryAnimatedImage.getDataProps(data))(
161 | ImageGalleryAnimatedImage
162 | );
163 |
164 | let styles = StyleSheet.create({
165 | image: {
166 | top: 0,
167 | left: 0,
168 | position: 'absolute',
169 | width: Layout.window.width,
170 | height: Layout.window.width,
171 | },
172 | });
173 |
--------------------------------------------------------------------------------
/lib/ImageGalleryConstants.js:
--------------------------------------------------------------------------------
1 | export const OPENING_ANIMATION_IN_PROGRESS = 'opening-animation-in-progress';
2 | export const OPEN_AND_IDLE = 'open-and-idle';
3 | export const DRAG_IN_PROGRESS = 'drag-in-progess';
4 | export const CLOSED_AND_IDLE = 'closed-and-idle';
5 | export const CLOSING_ANIMATION_IN_PROGRESS = 'closing-animation-in-progress';
6 |
--------------------------------------------------------------------------------
/lib/ImageGalleryHeaderBar.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 | import {
4 | Animated,
5 | Platform,
6 | StyleSheet,
7 | Text,
8 | TouchableOpacity,
9 | View,
10 | } from 'react-native';
11 | import { connect } from 'react-redux';
12 |
13 | import Colors from './Colors';
14 | import Layout from './Layout';
15 | import { shallowEquals } from './ShallowEquals';
16 |
17 | @connect(data => ImageGalleryHeaderBar.getDataProps(data))
18 | export default class ImageGalleryHeaderBar extends React.Component {
19 | static propTypes = {
20 | activeItemNumber: PropTypes.number,
21 | listLength: PropTypes.number,
22 | animatedOpacity: PropTypes.object.isRequired,
23 | onPressDone: PropTypes.func.isRequired,
24 | renderRight: PropTypes.func,
25 | };
26 |
27 | static getDataProps(data) {
28 | let { imageGallery } = data;
29 | let list = imageGallery.get('list');
30 | let item = imageGallery.get('item');
31 |
32 | let activeItemNumber;
33 | let listLength;
34 |
35 | if (list && item) {
36 | activeItemNumber = list.get('items').indexOf(item) + 1;
37 | listLength = list.get('items').count();
38 | }
39 |
40 | return { activeItemNumber, listLength };
41 | }
42 |
43 | shouldComponentUpdate(nextProps) {
44 | return !shallowEquals(this.props, nextProps);
45 | }
46 |
47 | render() {
48 | let {
49 | animatedOpacity,
50 | activeItemNumber,
51 | listLength,
52 | onPressDone,
53 | style,
54 | } = this.props;
55 |
56 | let rightAction;
57 | if (this.props.renderRight) {
58 | rightAction = this.props.renderRight(onPressDone);
59 | } else {
60 | rightAction = (
61 |
69 | Done
70 |
71 | );
72 | }
73 |
74 | return (
75 |
76 |
77 | {activeItemNumber} / {listLength}
78 |
79 |
80 |
81 | {rightAction}
82 |
83 |
84 | );
85 | }
86 | }
87 |
88 | let styles = StyleSheet.create({
89 | headeBarTitleText: {
90 | color: Colors.barTitle,
91 | },
92 | headerBarButtonText: {
93 | color: Colors.enabledButtonText,
94 | },
95 | headerBarRightAction: {
96 | position: 'absolute',
97 | top: Layout.statusBarHeight,
98 | bottom: 0,
99 | right: 15,
100 | alignItems: 'center',
101 | justifyContent: 'center',
102 | },
103 | });
104 |
105 |
--------------------------------------------------------------------------------
/lib/ImageGalleryImage.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 | import {
4 | ActivityIndicator,
5 | Image,
6 | StyleSheet,
7 | View,
8 | } from 'react-native';
9 |
10 | import ImageGalleryPlaceholder from './ImageGalleryPlaceholder';
11 | import { shallowEquals } from './ShallowEquals';
12 | import calculateImageDimensions from './calculateImageDimensions';
13 |
14 | export default class ImageGalleryImage extends React.Component {
15 | static propTypes = {
16 | item: PropTypes.object,
17 | fadeInOnLoad: PropTypes.bool,
18 | width: PropTypes.number,
19 | isVisible: PropTypes.bool,
20 | };
21 |
22 | constructor(props, context) {
23 | super(props, context);
24 |
25 | this.state = { hideThrobber: false };
26 | }
27 |
28 | shouldComponentUpdate(nextProps, nextState) {
29 | return !shallowEquals(this.props, nextProps) ||
30 | !shallowEquals(this.state, nextState);
31 | }
32 |
33 | render() {
34 | let { item, width, isVisible } = this.props;
35 |
36 | let imageStyle = {
37 | width,
38 | height: width,
39 | opacity: isVisible ? 1 : 0,
40 | borderRadius: 0.1,
41 | };
42 |
43 | if (item.get('image_url')) {
44 | let imageUri = item.getIn(['asset', 'url']) || item.get('image_url');
45 |
46 | let {
47 | constrainedWidth,
48 | constrainedHeight,
49 | marginHorizontal,
50 | marginVertical,
51 | } = calculateImageDimensions(item, width);
52 |
53 | let imageLayout = {
54 | height: constrainedHeight,
55 | width: constrainedWidth,
56 | marginVertical,
57 | marginHorizontal,
58 | };
59 |
60 | let isAnimatedImage = item.getIn(['asset', 'type']) === 'animated_image';
61 |
62 | let image;
63 | if ((isAnimatedImage && this.props.isFocused) || !isAnimatedImage) {
64 | image = (
65 |
70 | );
71 | }
72 |
73 | let coverImage;
74 | if (isAnimatedImage) {
75 | let coverUri = item.getIn(['asset', 'cover', 'url']);
76 | coverImage = (
77 |
81 | );
82 | }
83 |
84 | if (coverImage) {
85 | image = {image};
86 | }
87 |
88 | return (
89 |
90 | {this._maybeRenderThrobber()}
91 | {coverImage}
92 | {image}
93 |
94 | );
95 | } else {
96 | return ;
97 | }
98 | }
99 |
100 | _onImageLoad = () => {
101 | this.setState({hideThrobber: true});
102 | };
103 |
104 | _maybeRenderThrobber() {
105 | let { isVisible } = this.props;
106 | let { hideThrobber } = this.state;
107 |
108 | if (hideThrobber || !isVisible) {
109 | return;
110 | }
111 |
112 | return (
113 |
114 |
115 |
116 | );
117 | }
118 | }
119 |
120 | let styles = StyleSheet.create({
121 | throbberContainer: {
122 | alignItems: 'center',
123 | justifyContent: 'center',
124 | position: 'absolute',
125 | top: 0,
126 | left: 0,
127 | bottom: 0,
128 | right: 0,
129 | backgroundColor: '#e8e8ec',
130 | },
131 | absoluteFill: {
132 | position: 'absolute',
133 | top: 0,
134 | bottom: 0,
135 | left: 0,
136 | right: 0,
137 | },
138 |
139 | });
140 |
--------------------------------------------------------------------------------
/lib/ImageGalleryItem.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 | import {
4 | Platform,
5 | StyleSheet,
6 | TouchableWithoutFeedback,
7 | Text,
8 | View,
9 | } from 'react-native';
10 |
11 | import { connect } from 'react-redux';
12 |
13 | import {
14 | OPENING_ANIMATION_IN_PROGRESS,
15 | OPEN_AND_IDLE,
16 | DRAG_IN_PROGRESS,
17 | } from './ImageGalleryConstants';
18 | import Colors from './Colors';
19 | import ImageGalleryImage from './ImageGalleryImage';
20 | import { shallowEquals, shallowEqualsIgnoreKeys } from './ShallowEquals';
21 |
22 | class ImageGalleryItem extends React.Component {
23 |
24 | static propTypes = {
25 | item: PropTypes.object,
26 | index: PropTypes.number,
27 | activeItem: PropTypes.object,
28 | activeItemIndex: PropTypes.number,
29 | initialItem: PropTypes.object,
30 | list: PropTypes.object,
31 | lifecycle: PropTypes.string,
32 | width: PropTypes.number,
33 | userWantsOpen: PropTypes.bool,
34 | renderDescription: PropTypes.func,
35 | };
36 |
37 | static getDataProps(data) {
38 | let { imageGallery } = data;
39 |
40 | return {
41 | activeItemIndex: imageGallery.get('itemIndex'),
42 | activeItem: imageGallery.get('item'),
43 | initialItem: imageGallery.get('initialItem'),
44 | userWantsOpen: imageGallery.get('userWantsOpen'),
45 | lifecycle: imageGallery.get('lifecycle'),
46 | };
47 | }
48 |
49 | constructor(props, context) {
50 | super(props, context);
51 |
52 | this.state = {
53 | shouldRender: false,
54 | };
55 | }
56 |
57 | shouldComponentUpdate(nextProps, nextState) {
58 | let keysToIgnore = ['list'];
59 |
60 | if (nextProps.lifecycle === DRAG_IN_PROGRESS) {
61 | if (nextProps.activeItem !== this.props.item) {
62 | return false;
63 | }
64 | }
65 |
66 | if (nextProps.lifecycle === OPEN_AND_IDLE) {
67 | if (this.props.index === nextProps.activeItemIndex) {
68 | return true;
69 | }
70 | }
71 |
72 | return !shallowEqualsIgnoreKeys(this.props, nextProps, keysToIgnore) ||
73 | !shallowEquals(this.state, nextState);
74 | }
75 |
76 | componentWillMount() {
77 | if (this._shouldRender(this.props)) {
78 | this.setState({shouldRender: true});
79 | }
80 | }
81 |
82 | componentWillReceiveProps(nextProps) {
83 | if (!this.state.shouldRender && this._shouldRender(nextProps)) {
84 | this.setState({shouldRender: true});
85 | }
86 | }
87 |
88 | /* Extremely basic logic for determining what should render and when */
89 | _shouldRender(nextProps) {
90 | if (nextProps.activeItemIndex === this.props.index) {
91 | return true;
92 | }
93 |
94 | if (nextProps.lifecycle === OPEN_AND_IDLE) {
95 | if (nextProps.activeItemIndex - 1 === this.props.index ||
96 | nextProps.activeItemIndex + 1 === this.props.index) {
97 | return true;
98 | }
99 | }
100 |
101 | return false;
102 | }
103 |
104 | render() {
105 | let { item, index, list, width, lifecycle, renderDescription } = this.props;
106 | let description;
107 |
108 | if (renderDescription) {
109 | description = renderDescription(item.get('description'));
110 | } else {
111 | description = (
112 |
113 | {item.get('description')}
114 |
115 | );
116 | }
117 |
118 | if (this.state.shouldRender) {
119 | return (
120 |
121 |
122 |
123 | {lifecycle !== OPENING_ANIMATION_IN_PROGRESS || Platform.OS === 'ios' ?
124 | this._renderImage() : null}
125 |
126 |
127 |
128 | {description}
129 |
130 | );
131 | } else {
132 | return (
133 |
134 |
135 |
136 |
137 | );
138 | }
139 | }
140 |
141 | _renderImage() {
142 | let {
143 | activeItemIndex,
144 | index,
145 | initialItem,
146 | item,
147 | lifecycle,
148 | width,
149 | } = this.props;
150 |
151 | return (
152 |
159 | );
160 | }
161 | }
162 |
163 | export default connect(
164 | data => ImageGalleryItem.getDataProps(data),
165 | )(ImageGalleryItem);
166 |
167 | let styles = StyleSheet.create({
168 | itemContainer: {
169 | flex: 1,
170 | backgroundColor: Colors.galleryBackground,
171 | },
172 | imageContainer: {
173 | borderBottomWidth: 1,
174 | borderBottomColor: '#deddde',
175 | },
176 | listItemContainerStyle: {
177 | flex: 1,
178 | backgroundColor: '#fff',
179 | },
180 | });
181 |
--------------------------------------------------------------------------------
/lib/ImageGalleryList.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 | import { View } from 'react-native';
4 |
5 | import ImageGalleryItem from './ImageGalleryItem';
6 | import Layout from './Layout';
7 | import ViewPager from './ViewPager';
8 |
9 | export default class ImageGalleryList extends React.PureComponent {
10 | static propTypes = {
11 | list: PropTypes.object,
12 | onPageSelected: PropTypes.func.isRequired,
13 | renderDescription: PropTypes.func,
14 | };
15 |
16 | render() {
17 | let { list } = this.props;
18 |
19 | return (
20 | {
24 | this._pager = view;
25 | }}
26 | onPageSelected={this.props.onPageSelected}>
27 | {/* Ideally we would do this inside of a ListView.. But that is not
28 | currently supported by ViewPager -- it does not conform to the
29 | ScrollView interface that ListView expects from
30 | renderScrollComponent */}
31 | {list && list.get('items').map(this._renderItem)}
32 |
33 | );
34 | }
35 |
36 | _renderItem = (item, i) => {
37 | let { list } = this.props;
38 |
39 | // note(brentvatne): I'm not sure why but items can get into this state
40 | // without having an id! Weird. So let's use the array index if they don't
41 | // have an id.
42 | let id;
43 | if (!item || !item.get || !item.get('id') || !item.get('id').toString) {
44 | id = i.toString();
45 | } else {
46 | id = item.get('id').toString();
47 | }
48 |
49 | return (
50 |
51 |
59 |
60 | );
61 | };
62 |
63 | scrollToPage(index) {
64 | this._pager.scrollToPage(index);
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/lib/ImageGalleryPlaceholder.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | Animated,
4 | StyleSheet,
5 | View,
6 | } from 'react-native';
7 |
8 | import Colors from './Colors';
9 |
10 | export default class ImagePlaceholder extends React.Component {
11 |
12 | render() {
13 | return (
14 |
17 |
18 |
19 | );
20 | }
21 | }
22 |
23 | let styles = StyleSheet.create({
24 | imageContainer: {
25 | borderBottomWidth: 1,
26 | borderBottomColor: '#deddde',
27 | },
28 | imageBase: {
29 | backgroundColor: Colors.galleryBackground,
30 | alignItems: 'center',
31 | justifyContent: 'center',
32 | },
33 | placeholderImage: {
34 | width: 85,
35 | height: 85,
36 | },
37 | });
38 |
--------------------------------------------------------------------------------
/lib/ImageGalleryReducer.js:
--------------------------------------------------------------------------------
1 | import Immutable from 'immutable';
2 | import ActionTypes from './ActionTypes';
3 |
4 | import {
5 | OPENING_ANIMATION_IN_PROGRESS,
6 | CLOSED_AND_IDLE,
7 | CLOSING_ANIMATION_IN_PROGRESS,
8 | } from './ImageGalleryConstants';
9 |
10 | const { Map } = Immutable;
11 |
12 | function emptyState() {
13 | return Map({lifecycle: CLOSED_AND_IDLE});
14 | }
15 |
16 | class ImageGalleryReducer {
17 | static reduce(state = emptyState(), action) {
18 | if (!ImageGalleryReducer[action.type]) {
19 | return state;
20 | }
21 | return ImageGalleryReducer[action.type](state, action);
22 | }
23 |
24 | static [ActionTypes.OPEN_IMAGE_GALLERY](state, action) {
25 | let { list, item, animationMeasurements } = action;
26 | let itemIndex = list.get('items').indexOf(item);
27 |
28 | if (state.get('lifecycle') !== CLOSED_AND_IDLE) {
29 | return state;
30 | }
31 |
32 | return state.withMutations(map => {
33 | return map.set('list', list)
34 | .set('item', item)
35 | .set('initialItem', item)
36 | .set('itemIndex', itemIndex)
37 | .set('lifecycle', OPENING_ANIMATION_IN_PROGRESS)
38 | .set('animationMeasurements', animationMeasurements)
39 | .set('userWantsOpen', true);
40 | });
41 | }
42 |
43 | static [ActionTypes.PRELOAD_IMAGE_GALLERY](state, action) {
44 | let { list } = action;
45 | let item = list.get(0);
46 |
47 | return state.withMutations(map => {
48 | return map.set('list', list)
49 | .set('item', item)
50 | .set('initialItem', item)
51 | .set('itemIndex', 0)
52 | .set('lifecycle', CLOSED_AND_IDLE)
53 | .set('userWantsOpen', false);
54 | });
55 | }
56 |
57 | static [ActionTypes.UPDATE_IMAGE_GALLERY_LIFECYCLE](state, action) {
58 | return state.withMutations(map => {
59 | return map.set('lifecycle', action.lifecycle)
60 | .set('userWantsOpen', action.lifecycle === CLOSED_AND_IDLE ? false : state.get('userWantsOpen'));
61 | });
62 | }
63 |
64 | static [ActionTypes.CLOSE_IMAGE_GALLERY](state, action) {
65 | if (state.get('lifecycle') === CLOSED_AND_IDLE) {
66 | console.warn('Fired CLOSED_IMAGE_GALLERY with the gallery already closed!');
67 | return state;
68 | }
69 |
70 | return state.withMutations(map => {
71 | return map.remove('userWantsOpen')
72 | .set('lifecycle', CLOSING_ANIMATION_IN_PROGRESS);
73 | });
74 | }
75 |
76 | static [ActionTypes.FOCUS_IMAGE_GALLERY_ITEM](state, action) {
77 | let itemIndex = state.get('list').get('items').indexOf(action.item);
78 |
79 | return state.withMutations(map => {
80 | return map.set('item', action.item)
81 | .set('itemIndex', itemIndex);
82 | });
83 | }
84 |
85 | static [ActionTypes.UPDATE_IMAGE_GALLERY_ANIMATION_MEASUREMENTS](state, action) {
86 | return state.set('animationMeasurements', action.animationMeasurements);
87 | }
88 |
89 | static [ActionTypes.RESET](state, action) {
90 | return emptyState();
91 | }
92 | }
93 |
94 | export default ImageGalleryReducer.reduce;
95 |
--------------------------------------------------------------------------------
/lib/Layout.js:
--------------------------------------------------------------------------------
1 | import {
2 | Dimensions,
3 | NativeModules,
4 | PixelRatio,
5 | Platform,
6 | StyleSheet,
7 | } from 'react-native';
8 |
9 | import { Header } from 'react-navigation';
10 | import Constants from 'expo-constants';
11 |
12 | const X_WIDTH = 375;
13 | const X_HEIGHT = 812;
14 | const { height: D_HEIGHT, width: D_WIDTH } = Dimensions.get('window');
15 | const isIPhoneX =
16 | Platform.OS === 'ios' && (D_HEIGHT === X_HEIGHT && D_WIDTH === X_WIDTH);
17 |
18 | let windowDimensions = Dimensions.get('window');
19 | let isSmallDevice = windowDimensions.width <= 320;
20 |
21 | const notchHeight = isIPhoneX ? 20 : 0;
22 |
23 | let Layout = {
24 | isSmallDevice,
25 | pixel: 1 / PixelRatio.get(),
26 | narrowSeparator: StyleSheet.hairlineWidth,
27 | separator: 1,
28 | tabBarHeight: 49,
29 | navigationBarDisplacement: 0,
30 | notchHeight,
31 | footerHeight: 49,
32 | marginHorizontal: isSmallDevice ? 10 : 15,
33 | statusBarHeight: Constants.statusBarHeight,
34 | timestampWidth: 35,
35 | window: windowDimensions,
36 | navigationBarHeight: 44,
37 | softButtonHeight: 48,
38 | navigationBarDisplacement: 25,
39 | };
40 |
41 | Layout.headerHeight =
42 | Platform.OS === 'android'
43 | ? Header.HEIGHT + Constants.statusBarHeight
44 | : Header.HEIGHT + notchHeight;
45 |
46 | export default Layout;
47 |
--------------------------------------------------------------------------------
/lib/ShallowEquals.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Based off of shallowEqual utility in react-redux
3 | */
4 | export function shallowEqualsIgnoreKeys(objA, objB, keysToIgnore) {
5 | if (objA === objB) {
6 | return true;
7 | }
8 |
9 | const keysA = Object.keys(objA);
10 | const keysB = Object.keys(objB);
11 |
12 | if (keysA.length !== keysB.length) {
13 | return false;
14 | }
15 |
16 | // Test for A's keys different from B.
17 | const hasOwn = Object.prototype.hasOwnProperty;
18 | for (let i = 0; i < keysA.length; i++) {
19 | if ((keysToIgnore.indexOf(keysA[i]) === -1) &&
20 | (!hasOwn.call(objB, keysA[i]) || objA[keysA[i]] !== objB[keysA[i]])) {
21 | return false;
22 | }
23 | }
24 |
25 | return true;
26 | }
27 |
28 | export function shallowEqualsIgnoreKey(objA, objB, keyToIgnore) {
29 | return shallowEqualsIgnoreKeys(objA, objB, [keyToIgnore]);
30 | }
31 |
32 | export function shallowEquals(objA, objB) {
33 | return shallowEqualsIgnoreKeys(objA, objB, []);
34 | }
35 |
36 | export default {
37 | shallowEquals,
38 | shallowEqualsIgnoreKey,
39 | shallowEqualsIgnoreKeys,
40 | };
41 |
--------------------------------------------------------------------------------
/lib/ViewPager.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 | import {
4 | Dimensions,
5 | Platform,
6 | ScrollView,
7 | ViewPagerAndroid,
8 | View,
9 | } from 'react-native';
10 |
11 | import Layout from './Layout';
12 |
13 | export default class ViewPager extends React.Component {
14 | static propTypes = {
15 | onPageSelected: PropTypes.func.isRequired,
16 | };
17 |
18 | render() {
19 | if (Platform.OS === 'ios') {
20 | return (
21 | {
28 | this._scrollView = view;
29 | }}
30 | removeClippedSubviews
31 | alwaysBounceHorizontal={false}
32 | bounces={false}
33 | showsHorizontalScrollIndicator={false}
34 | {...this.props}
35 | />
36 | );
37 | } else {
38 | return (
39 | {
42 | this._pager = view;
43 | }}
44 | onPageSelected={this._onPageSelected}
45 | />
46 | );
47 | }
48 | }
49 |
50 | scrollToPage(index) {
51 | if (Platform.OS === 'ios') {
52 | let scrollPositionX = index * Layout.window.width;
53 | this._scrollView.scrollTo({ y: 0, x: scrollPositionX, animated: false });
54 | } else {
55 | this._pager.setPageWithoutAnimation(index);
56 | }
57 | }
58 |
59 | _onScrollEnd = ({ nativeEvent: { contentOffset: { x } } }) => {
60 | let index = parseInt(x / Layout.window.width, 10);
61 | this.props.onPageSelected(index);
62 | };
63 |
64 | _onPageSelected = ({ nativeEvent: { position } }) => {
65 | this.props.onPageSelected(position);
66 | };
67 | }
68 |
--------------------------------------------------------------------------------
/lib/calculateImageDimensions.js:
--------------------------------------------------------------------------------
1 | export default function calculateImageDimensions(item, maxLength) {
2 | let originalWidth = item.getIn(['asset', 'width']);
3 | let originalHeight = item.getIn(['asset', 'height']);
4 |
5 | if (originalWidth == null || originalHeight == null) {
6 | return {
7 | constrainedHeight: maxLength,
8 | constrainedWidth: maxLength,
9 | marginHorizontal: 0,
10 | marginVertical: 0,
11 | };
12 | } else if (originalWidth > originalHeight) {
13 | let height = (originalHeight / originalWidth) * maxLength;
14 | return {
15 | constrainedHeight: height,
16 | constrainedWidth: maxLength,
17 | marginHorizontal: 0,
18 | marginVertical: (maxLength - height) / 2,
19 | };
20 | } else {
21 | let width = (originalWidth / originalHeight) * maxLength;
22 | return {
23 | constrainedWidth: width,
24 | constrainedHeight: maxLength,
25 | marginHorizontal: (maxLength - width) / 2,
26 | marginVertical: 0,
27 | };
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | import ImageGallery from './ImageGallery';
2 |
3 | export default ImageGallery;
4 | export { default as openImageGallery } from './openImageGallery';
5 |
--------------------------------------------------------------------------------
/lib/openImageGallery.js:
--------------------------------------------------------------------------------
1 | import Actions from './Actions';
2 | import DefaultStore from './DefaultStore';
3 | import Immutable from 'immutable';
4 | import { Asset } from 'expo-asset';
5 |
6 | function transformToInternalStructure(images) {
7 | let internalImageFormat = images.map((info, i) => {
8 | let image;
9 |
10 | if (info.image) {
11 | let assetInfo = Asset.fromModule(info.image);
12 | image = {
13 | ...info,
14 | imageUrl: assetInfo.uri,
15 | width: assetInfo.width,
16 | height: assetInfo.height,
17 | };
18 | } else {
19 | image = info;
20 | }
21 |
22 | return {
23 | id: image.imageUrl,
24 | image_url: image.imageUrl,
25 | description: image.description,
26 | width: image.width,
27 | height: image.height,
28 | asset: {
29 | type: 'static',
30 | width: image.width,
31 | height: image.height,
32 | cover: {
33 | uri: image.imageUrl,
34 | },
35 | },
36 | };
37 | });
38 |
39 | return Immutable.fromJS({
40 | items: internalImageFormat,
41 | list_id: new Date().toISOString(),
42 | });
43 | }
44 |
45 | export default function openImageGallery(options) {
46 | let selectedItemIndex = options.list.indexOf(options.item);
47 | let list = transformToInternalStructure(options.list);
48 | let item = list.get('items').get(selectedItemIndex);
49 |
50 | DefaultStore.dispatch(
51 | Actions.openImageGallery({
52 | ...options,
53 | list,
54 | item,
55 | }),
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-navigation-image-gallery",
3 | "version": "3.1.0",
4 | "description": "Image gallery for React Navigation",
5 | "author": "support@expo.io",
6 | "files": [
7 | "lib"
8 | ],
9 | "main": "lib/index.js",
10 | "directories": {
11 | "example": "example",
12 | "lib": "lib"
13 | },
14 | "homepage": "https://github.com/expo/react-native-image-gallery#readme",
15 | "keywords": [
16 | "expo",
17 | "photos",
18 | "images",
19 | "gallery"
20 | ],
21 | "license": "MIT",
22 | "bugs": {
23 | "url": "https://github.com/expo/react-native-image-gallery/issues"
24 | },
25 | "dependencies": {
26 | "immutable": "^3.8.1",
27 | "mirror-creator": "^1.1.0",
28 | "prop-types": "^15.6.2",
29 | "react-redux": "^4.4.5",
30 | "react-timer-mixin": "^0.13.4",
31 | "redux": "^3.5.2"
32 | },
33 | "peerDependencies": {
34 | "react-native": "*",
35 | "react-navigation": "*"
36 | },
37 | "devDependencies": {
38 | "babel-preset-expo": "^5.0.0",
39 | "babel-preset-react-native": "^4.0.1"
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@^7.0.0":
6 | version "7.0.0"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
8 | integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
9 | dependencies:
10 | "@babel/highlight" "^7.0.0"
11 |
12 | "@babel/generator@^7.2.2":
13 | version "7.3.0"
14 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.0.tgz#f663838cd7b542366de3aa608a657b8ccb2a99eb"
15 | integrity sha512-dZTwMvTgWfhmibq4V9X+LMf6Bgl7zAodRn9PvcPdhlzFMbvUutx74dbEv7Atz3ToeEpevYEJtAwfxq/bDCzHWg==
16 | dependencies:
17 | "@babel/types" "^7.3.0"
18 | jsesc "^2.5.1"
19 | lodash "^4.17.10"
20 | source-map "^0.5.0"
21 | trim-right "^1.0.1"
22 |
23 | "@babel/helper-annotate-as-pure@^7.0.0":
24 | version "7.0.0"
25 | resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
26 | integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==
27 | dependencies:
28 | "@babel/types" "^7.0.0"
29 |
30 | "@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
31 | version "7.1.0"
32 | resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
33 | integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==
34 | dependencies:
35 | "@babel/helper-explode-assignable-expression" "^7.1.0"
36 | "@babel/types" "^7.0.0"
37 |
38 | "@babel/helper-builder-react-jsx@^7.3.0":
39 | version "7.3.0"
40 | resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4"
41 | integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==
42 | dependencies:
43 | "@babel/types" "^7.3.0"
44 | esutils "^2.0.0"
45 |
46 | "@babel/helper-call-delegate@^7.1.0":
47 | version "7.1.0"
48 | resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a"
49 | integrity sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==
50 | dependencies:
51 | "@babel/helper-hoist-variables" "^7.0.0"
52 | "@babel/traverse" "^7.1.0"
53 | "@babel/types" "^7.0.0"
54 |
55 | "@babel/helper-create-class-features-plugin@^7.3.0":
56 | version "7.3.0"
57 | resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.0.tgz#2b01a81b3adc2b1287f9ee193688ef8dc71e718f"
58 | integrity sha512-DUsQNS2CGLZZ7I3W3fvh0YpPDd6BuWJlDl+qmZZpABZHza2ErE3LxtEzLJFHFC1ZwtlAXvHhbFYbtM5o5B0WBw==
59 | dependencies:
60 | "@babel/helper-function-name" "^7.1.0"
61 | "@babel/helper-member-expression-to-functions" "^7.0.0"
62 | "@babel/helper-optimise-call-expression" "^7.0.0"
63 | "@babel/helper-plugin-utils" "^7.0.0"
64 | "@babel/helper-replace-supers" "^7.2.3"
65 |
66 | "@babel/helper-define-map@^7.1.0":
67 | version "7.1.0"
68 | resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c"
69 | integrity sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==
70 | dependencies:
71 | "@babel/helper-function-name" "^7.1.0"
72 | "@babel/types" "^7.0.0"
73 | lodash "^4.17.10"
74 |
75 | "@babel/helper-explode-assignable-expression@^7.1.0":
76 | version "7.1.0"
77 | resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6"
78 | integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==
79 | dependencies:
80 | "@babel/traverse" "^7.1.0"
81 | "@babel/types" "^7.0.0"
82 |
83 | "@babel/helper-function-name@^7.1.0":
84 | version "7.1.0"
85 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53"
86 | integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
87 | dependencies:
88 | "@babel/helper-get-function-arity" "^7.0.0"
89 | "@babel/template" "^7.1.0"
90 | "@babel/types" "^7.0.0"
91 |
92 | "@babel/helper-get-function-arity@^7.0.0":
93 | version "7.0.0"
94 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
95 | integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
96 | dependencies:
97 | "@babel/types" "^7.0.0"
98 |
99 | "@babel/helper-hoist-variables@^7.0.0":
100 | version "7.0.0"
101 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88"
102 | integrity sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==
103 | dependencies:
104 | "@babel/types" "^7.0.0"
105 |
106 | "@babel/helper-member-expression-to-functions@^7.0.0":
107 | version "7.0.0"
108 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f"
109 | integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==
110 | dependencies:
111 | "@babel/types" "^7.0.0"
112 |
113 | "@babel/helper-module-imports@^7.0.0":
114 | version "7.0.0"
115 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
116 | integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==
117 | dependencies:
118 | "@babel/types" "^7.0.0"
119 |
120 | "@babel/helper-module-transforms@^7.1.0":
121 | version "7.2.2"
122 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz#ab2f8e8d231409f8370c883d20c335190284b963"
123 | integrity sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==
124 | dependencies:
125 | "@babel/helper-module-imports" "^7.0.0"
126 | "@babel/helper-simple-access" "^7.1.0"
127 | "@babel/helper-split-export-declaration" "^7.0.0"
128 | "@babel/template" "^7.2.2"
129 | "@babel/types" "^7.2.2"
130 | lodash "^4.17.10"
131 |
132 | "@babel/helper-optimise-call-expression@^7.0.0":
133 | version "7.0.0"
134 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5"
135 | integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==
136 | dependencies:
137 | "@babel/types" "^7.0.0"
138 |
139 | "@babel/helper-plugin-utils@^7.0.0":
140 | version "7.0.0"
141 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
142 | integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
143 |
144 | "@babel/helper-regex@^7.0.0":
145 | version "7.0.0"
146 | resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27"
147 | integrity sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==
148 | dependencies:
149 | lodash "^4.17.10"
150 |
151 | "@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.2.3":
152 | version "7.2.3"
153 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz#19970020cf22677d62b3a689561dbd9644d8c5e5"
154 | integrity sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==
155 | dependencies:
156 | "@babel/helper-member-expression-to-functions" "^7.0.0"
157 | "@babel/helper-optimise-call-expression" "^7.0.0"
158 | "@babel/traverse" "^7.2.3"
159 | "@babel/types" "^7.0.0"
160 |
161 | "@babel/helper-simple-access@^7.1.0":
162 | version "7.1.0"
163 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
164 | integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==
165 | dependencies:
166 | "@babel/template" "^7.1.0"
167 | "@babel/types" "^7.0.0"
168 |
169 | "@babel/helper-split-export-declaration@^7.0.0":
170 | version "7.0.0"
171 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813"
172 | integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==
173 | dependencies:
174 | "@babel/types" "^7.0.0"
175 |
176 | "@babel/highlight@^7.0.0":
177 | version "7.0.0"
178 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
179 | integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
180 | dependencies:
181 | chalk "^2.0.0"
182 | esutils "^2.0.2"
183 | js-tokens "^4.0.0"
184 |
185 | "@babel/parser@^7.2.2", "@babel/parser@^7.2.3":
186 | version "7.3.1"
187 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.1.tgz#8f4ffd45f779e6132780835ffa7a215fa0b2d181"
188 | integrity sha512-ATz6yX/L8LEnC3dtLQnIx4ydcPxhLcoy9Vl6re00zb2w5lG6itY6Vhnr1KFRPq/FHNsgl/gh2mjNN20f9iJTTA==
189 |
190 | "@babel/plugin-proposal-class-properties@^7.0.0":
191 | version "7.3.0"
192 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.0.tgz#272636bc0fa19a0bc46e601ec78136a173ea36cd"
193 | integrity sha512-wNHxLkEKTQ2ay0tnsam2z7fGZUi+05ziDJflEt3AZTP3oXLKHJp9HqhfroB/vdMvt3sda9fAbq7FsG8QPDrZBg==
194 | dependencies:
195 | "@babel/helper-create-class-features-plugin" "^7.3.0"
196 | "@babel/helper-plugin-utils" "^7.0.0"
197 |
198 | "@babel/plugin-proposal-decorators@^7.1.0":
199 | version "7.3.0"
200 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.3.0.tgz#637ba075fa780b1f75d08186e8fb4357d03a72a7"
201 | integrity sha512-3W/oCUmsO43FmZIqermmq6TKaRSYhmh/vybPfVFwQWdSb8xwki38uAIvknCRzuyHRuYfCYmJzL9or1v0AffPjg==
202 | dependencies:
203 | "@babel/helper-create-class-features-plugin" "^7.3.0"
204 | "@babel/helper-plugin-utils" "^7.0.0"
205 | "@babel/plugin-syntax-decorators" "^7.2.0"
206 |
207 | "@babel/plugin-proposal-export-default-from@^7.0.0":
208 | version "7.2.0"
209 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.2.0.tgz#737b0da44b9254b6152fe29bb99c64e5691f6f68"
210 | integrity sha512-NVfNe7F6nsasG1FnvcFxh2FN0l04ZNe75qTOAVOILWPam0tw9a63RtT/Dab8dPjedZa4fTQaQ83yMMywF9OSug==
211 | dependencies:
212 | "@babel/helper-plugin-utils" "^7.0.0"
213 | "@babel/plugin-syntax-export-default-from" "^7.2.0"
214 |
215 | "@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0":
216 | version "7.2.0"
217 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.2.0.tgz#c3fda766187b2f2162657354407247a758ee9cf9"
218 | integrity sha512-QXj/YjFuFJd68oDvoc1e8aqLr2wz7Kofzvp6Ekd/o7MWZl+nZ0/cpStxND+hlZ7DpRWAp7OmuyT2areZ2V3YUA==
219 | dependencies:
220 | "@babel/helper-plugin-utils" "^7.0.0"
221 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.2.0"
222 |
223 | "@babel/plugin-proposal-object-rest-spread@^7.0.0":
224 | version "7.3.1"
225 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.1.tgz#f69fb6a1ea6a4e1c503994a91d9cf76f3c4b36e8"
226 | integrity sha512-Nmmv1+3LqxJu/V5jU9vJmxR/KIRWFk2qLHmbB56yRRRFhlaSuOVXscX3gUmhaKgUhzA3otOHVubbIEVYsZ0eZg==
227 | dependencies:
228 | "@babel/helper-plugin-utils" "^7.0.0"
229 | "@babel/plugin-syntax-object-rest-spread" "^7.2.0"
230 |
231 | "@babel/plugin-proposal-optional-catch-binding@^7.0.0":
232 | version "7.2.0"
233 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5"
234 | integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==
235 | dependencies:
236 | "@babel/helper-plugin-utils" "^7.0.0"
237 | "@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
238 |
239 | "@babel/plugin-proposal-optional-chaining@^7.0.0":
240 | version "7.2.0"
241 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.2.0.tgz#ae454f4c21c6c2ce8cb2397dc332ae8b420c5441"
242 | integrity sha512-ea3Q6edZC/55wEBVZAEz42v528VulyO0eir+7uky/sT4XRcdkWJcFi1aPtitTlwUzGnECWJNExWww1SStt+yWw==
243 | dependencies:
244 | "@babel/helper-plugin-utils" "^7.0.0"
245 | "@babel/plugin-syntax-optional-chaining" "^7.2.0"
246 |
247 | "@babel/plugin-syntax-decorators@^7.2.0":
248 | version "7.2.0"
249 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b"
250 | integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==
251 | dependencies:
252 | "@babel/helper-plugin-utils" "^7.0.0"
253 |
254 | "@babel/plugin-syntax-dynamic-import@^7.0.0":
255 | version "7.2.0"
256 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612"
257 | integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==
258 | dependencies:
259 | "@babel/helper-plugin-utils" "^7.0.0"
260 |
261 | "@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.2.0":
262 | version "7.2.0"
263 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.2.0.tgz#edd83b7adc2e0d059e2467ca96c650ab6d2f3820"
264 | integrity sha512-c7nqUnNST97BWPtoe+Ssi+fJukc9P9/JMZ71IOMNQWza2E+Psrd46N6AEvtw6pqK+gt7ChjXyrw4SPDO79f3Lw==
265 | dependencies:
266 | "@babel/helper-plugin-utils" "^7.0.0"
267 |
268 | "@babel/plugin-syntax-flow@^7.2.0":
269 | version "7.2.0"
270 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c"
271 | integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==
272 | dependencies:
273 | "@babel/helper-plugin-utils" "^7.0.0"
274 |
275 | "@babel/plugin-syntax-jsx@^7.2.0":
276 | version "7.2.0"
277 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7"
278 | integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==
279 | dependencies:
280 | "@babel/helper-plugin-utils" "^7.0.0"
281 |
282 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.2.0":
283 | version "7.2.0"
284 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.2.0.tgz#f75083dfd5ade73e783db729bbd87e7b9efb7624"
285 | integrity sha512-lRCEaKE+LTxDQtgbYajI04ddt6WW0WJq57xqkAZ+s11h4YgfRHhVA/Y2VhfPzzFD4qeLHWg32DMp9HooY4Kqlg==
286 | dependencies:
287 | "@babel/helper-plugin-utils" "^7.0.0"
288 |
289 | "@babel/plugin-syntax-object-rest-spread@^7.2.0":
290 | version "7.2.0"
291 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e"
292 | integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==
293 | dependencies:
294 | "@babel/helper-plugin-utils" "^7.0.0"
295 |
296 | "@babel/plugin-syntax-optional-catch-binding@^7.2.0":
297 | version "7.2.0"
298 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c"
299 | integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==
300 | dependencies:
301 | "@babel/helper-plugin-utils" "^7.0.0"
302 |
303 | "@babel/plugin-syntax-optional-chaining@^7.2.0":
304 | version "7.2.0"
305 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.2.0.tgz#a59d6ae8c167e7608eaa443fda9fa8fa6bf21dff"
306 | integrity sha512-HtGCtvp5Uq/jH/WNUPkK6b7rufnCPLLlDAFN7cmACoIjaOOiXxUt3SswU5loHqrhtqTsa/WoLQ1OQ1AGuZqaWA==
307 | dependencies:
308 | "@babel/helper-plugin-utils" "^7.0.0"
309 |
310 | "@babel/plugin-syntax-typescript@^7.2.0":
311 | version "7.2.0"
312 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.2.0.tgz#55d240536bd314dcbbec70fd949c5cabaed1de29"
313 | integrity sha512-WhKr6yu6yGpGcNMVgIBuI9MkredpVc7Y3YR4UzEZmDztHoL6wV56YBHLhWnjO1EvId1B32HrD3DRFc+zSoKI1g==
314 | dependencies:
315 | "@babel/helper-plugin-utils" "^7.0.0"
316 |
317 | "@babel/plugin-transform-arrow-functions@^7.0.0":
318 | version "7.2.0"
319 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550"
320 | integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==
321 | dependencies:
322 | "@babel/helper-plugin-utils" "^7.0.0"
323 |
324 | "@babel/plugin-transform-block-scoping@^7.0.0":
325 | version "7.2.0"
326 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz#f17c49d91eedbcdf5dd50597d16f5f2f770132d4"
327 | integrity sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==
328 | dependencies:
329 | "@babel/helper-plugin-utils" "^7.0.0"
330 | lodash "^4.17.10"
331 |
332 | "@babel/plugin-transform-classes@^7.0.0":
333 | version "7.2.2"
334 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz#6c90542f210ee975aa2aa8c8b5af7fa73a126953"
335 | integrity sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==
336 | dependencies:
337 | "@babel/helper-annotate-as-pure" "^7.0.0"
338 | "@babel/helper-define-map" "^7.1.0"
339 | "@babel/helper-function-name" "^7.1.0"
340 | "@babel/helper-optimise-call-expression" "^7.0.0"
341 | "@babel/helper-plugin-utils" "^7.0.0"
342 | "@babel/helper-replace-supers" "^7.1.0"
343 | "@babel/helper-split-export-declaration" "^7.0.0"
344 | globals "^11.1.0"
345 |
346 | "@babel/plugin-transform-computed-properties@^7.0.0":
347 | version "7.2.0"
348 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da"
349 | integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==
350 | dependencies:
351 | "@babel/helper-plugin-utils" "^7.0.0"
352 |
353 | "@babel/plugin-transform-destructuring@^7.0.0":
354 | version "7.2.0"
355 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz#e75269b4b7889ec3a332cd0d0c8cff8fed0dc6f3"
356 | integrity sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ==
357 | dependencies:
358 | "@babel/helper-plugin-utils" "^7.0.0"
359 |
360 | "@babel/plugin-transform-exponentiation-operator@^7.0.0":
361 | version "7.2.0"
362 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008"
363 | integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==
364 | dependencies:
365 | "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0"
366 | "@babel/helper-plugin-utils" "^7.0.0"
367 |
368 | "@babel/plugin-transform-flow-strip-types@^7.0.0":
369 | version "7.2.3"
370 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.2.3.tgz#e3ac2a594948454e7431c7db33e1d02d51b5cd69"
371 | integrity sha512-xnt7UIk9GYZRitqCnsVMjQK1O2eKZwFB3CvvHjf5SGx6K6vr/MScCKQDnf1DxRaj501e3pXjti+inbSXX2ZUoQ==
372 | dependencies:
373 | "@babel/helper-plugin-utils" "^7.0.0"
374 | "@babel/plugin-syntax-flow" "^7.2.0"
375 |
376 | "@babel/plugin-transform-for-of@^7.0.0":
377 | version "7.2.0"
378 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz#ab7468befa80f764bb03d3cb5eef8cc998e1cad9"
379 | integrity sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==
380 | dependencies:
381 | "@babel/helper-plugin-utils" "^7.0.0"
382 |
383 | "@babel/plugin-transform-function-name@^7.0.0":
384 | version "7.2.0"
385 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz#f7930362829ff99a3174c39f0afcc024ef59731a"
386 | integrity sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==
387 | dependencies:
388 | "@babel/helper-function-name" "^7.1.0"
389 | "@babel/helper-plugin-utils" "^7.0.0"
390 |
391 | "@babel/plugin-transform-literals@^7.0.0":
392 | version "7.2.0"
393 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1"
394 | integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==
395 | dependencies:
396 | "@babel/helper-plugin-utils" "^7.0.0"
397 |
398 | "@babel/plugin-transform-modules-commonjs@^7.0.0":
399 | version "7.2.0"
400 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz#c4f1933f5991d5145e9cfad1dfd848ea1727f404"
401 | integrity sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==
402 | dependencies:
403 | "@babel/helper-module-transforms" "^7.1.0"
404 | "@babel/helper-plugin-utils" "^7.0.0"
405 | "@babel/helper-simple-access" "^7.1.0"
406 |
407 | "@babel/plugin-transform-object-assign@^7.0.0":
408 | version "7.2.0"
409 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.2.0.tgz#6fdeea42be17040f119e38e23ea0f49f31968bde"
410 | integrity sha512-nmE55cZBPFgUktbF2OuoZgPRadfxosLOpSgzEPYotKSls9J4pEPcembi8r78RU37Rph6UApCpNmsQA4QMWK9Ng==
411 | dependencies:
412 | "@babel/helper-plugin-utils" "^7.0.0"
413 |
414 | "@babel/plugin-transform-parameters@^7.0.0":
415 | version "7.2.0"
416 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz#0d5ad15dc805e2ea866df4dd6682bfe76d1408c2"
417 | integrity sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==
418 | dependencies:
419 | "@babel/helper-call-delegate" "^7.1.0"
420 | "@babel/helper-get-function-arity" "^7.0.0"
421 | "@babel/helper-plugin-utils" "^7.0.0"
422 |
423 | "@babel/plugin-transform-react-display-name@^7.0.0":
424 | version "7.2.0"
425 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0"
426 | integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==
427 | dependencies:
428 | "@babel/helper-plugin-utils" "^7.0.0"
429 |
430 | "@babel/plugin-transform-react-jsx-source@^7.0.0":
431 | version "7.2.0"
432 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz#20c8c60f0140f5dd3cd63418d452801cf3f7180f"
433 | integrity sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==
434 | dependencies:
435 | "@babel/helper-plugin-utils" "^7.0.0"
436 | "@babel/plugin-syntax-jsx" "^7.2.0"
437 |
438 | "@babel/plugin-transform-react-jsx@^7.0.0":
439 | version "7.3.0"
440 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290"
441 | integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==
442 | dependencies:
443 | "@babel/helper-builder-react-jsx" "^7.3.0"
444 | "@babel/helper-plugin-utils" "^7.0.0"
445 | "@babel/plugin-syntax-jsx" "^7.2.0"
446 |
447 | "@babel/plugin-transform-regenerator@^7.0.0":
448 | version "7.0.0"
449 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1"
450 | integrity sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==
451 | dependencies:
452 | regenerator-transform "^0.13.3"
453 |
454 | "@babel/plugin-transform-runtime@^7.0.0":
455 | version "7.2.0"
456 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz#566bc43f7d0aedc880eaddbd29168d0f248966ea"
457 | integrity sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw==
458 | dependencies:
459 | "@babel/helper-module-imports" "^7.0.0"
460 | "@babel/helper-plugin-utils" "^7.0.0"
461 | resolve "^1.8.1"
462 | semver "^5.5.1"
463 |
464 | "@babel/plugin-transform-shorthand-properties@^7.0.0":
465 | version "7.2.0"
466 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0"
467 | integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==
468 | dependencies:
469 | "@babel/helper-plugin-utils" "^7.0.0"
470 |
471 | "@babel/plugin-transform-spread@^7.0.0":
472 | version "7.2.2"
473 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406"
474 | integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==
475 | dependencies:
476 | "@babel/helper-plugin-utils" "^7.0.0"
477 |
478 | "@babel/plugin-transform-sticky-regex@^7.0.0":
479 | version "7.2.0"
480 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1"
481 | integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==
482 | dependencies:
483 | "@babel/helper-plugin-utils" "^7.0.0"
484 | "@babel/helper-regex" "^7.0.0"
485 |
486 | "@babel/plugin-transform-template-literals@^7.0.0":
487 | version "7.2.0"
488 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz#d87ed01b8eaac7a92473f608c97c089de2ba1e5b"
489 | integrity sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==
490 | dependencies:
491 | "@babel/helper-annotate-as-pure" "^7.0.0"
492 | "@babel/helper-plugin-utils" "^7.0.0"
493 |
494 | "@babel/plugin-transform-typescript@^7.0.0":
495 | version "7.2.0"
496 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.2.0.tgz#bce7c06300434de6a860ae8acf6a442ef74a99d1"
497 | integrity sha512-EnI7i2/gJ7ZNr2MuyvN2Hu+BHJENlxWte5XygPvfj/MbvtOkWor9zcnHpMMQL2YYaaCcqtIvJUyJ7QVfoGs7ew==
498 | dependencies:
499 | "@babel/helper-plugin-utils" "^7.0.0"
500 | "@babel/plugin-syntax-typescript" "^7.2.0"
501 |
502 | "@babel/plugin-transform-unicode-regex@^7.0.0":
503 | version "7.2.0"
504 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz#4eb8db16f972f8abb5062c161b8b115546ade08b"
505 | integrity sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==
506 | dependencies:
507 | "@babel/helper-plugin-utils" "^7.0.0"
508 | "@babel/helper-regex" "^7.0.0"
509 | regexpu-core "^4.1.3"
510 |
511 | "@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.2.2":
512 | version "7.2.2"
513 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907"
514 | integrity sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==
515 | dependencies:
516 | "@babel/code-frame" "^7.0.0"
517 | "@babel/parser" "^7.2.2"
518 | "@babel/types" "^7.2.2"
519 |
520 | "@babel/traverse@^7.1.0", "@babel/traverse@^7.2.3":
521 | version "7.2.3"
522 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8"
523 | integrity sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==
524 | dependencies:
525 | "@babel/code-frame" "^7.0.0"
526 | "@babel/generator" "^7.2.2"
527 | "@babel/helper-function-name" "^7.1.0"
528 | "@babel/helper-split-export-declaration" "^7.0.0"
529 | "@babel/parser" "^7.2.3"
530 | "@babel/types" "^7.2.2"
531 | debug "^4.1.0"
532 | globals "^11.1.0"
533 | lodash "^4.17.10"
534 |
535 | "@babel/types@^7.0.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0":
536 | version "7.3.0"
537 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.0.tgz#61dc0b336a93badc02bf5f69c4cd8e1353f2ffc0"
538 | integrity sha512-QkFPw68QqWU1/RVPyBe8SO7lXbPfjtqAxRYQKpFpaB8yMq7X2qAqfwK5LKoQufEkSmO5NQ70O6Kc3Afk03RwXw==
539 | dependencies:
540 | esutils "^2.0.2"
541 | lodash "^4.17.10"
542 | to-fast-properties "^2.0.0"
543 |
544 | ansi-regex@^2.0.0:
545 | version "2.1.1"
546 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
547 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
548 |
549 | ansi-styles@^2.2.1:
550 | version "2.2.1"
551 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
552 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
553 |
554 | ansi-styles@^3.2.1:
555 | version "3.2.1"
556 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
557 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
558 | dependencies:
559 | color-convert "^1.9.0"
560 |
561 | asap@~2.0.3:
562 | version "2.0.6"
563 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
564 | integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
565 |
566 | babel-code-frame@^6.26.0:
567 | version "6.26.0"
568 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
569 | integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
570 | dependencies:
571 | chalk "^1.1.3"
572 | esutils "^2.0.2"
573 | js-tokens "^3.0.2"
574 |
575 | babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
576 | version "6.24.1"
577 | resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
578 | integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=
579 | dependencies:
580 | babel-helper-explode-assignable-expression "^6.24.1"
581 | babel-runtime "^6.22.0"
582 | babel-types "^6.24.1"
583 |
584 | babel-helper-builder-react-jsx@^6.24.1:
585 | version "6.26.0"
586 | resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0"
587 | integrity sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=
588 | dependencies:
589 | babel-runtime "^6.26.0"
590 | babel-types "^6.26.0"
591 | esutils "^2.0.2"
592 |
593 | babel-helper-call-delegate@^6.24.1:
594 | version "6.24.1"
595 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
596 | integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=
597 | dependencies:
598 | babel-helper-hoist-variables "^6.24.1"
599 | babel-runtime "^6.22.0"
600 | babel-traverse "^6.24.1"
601 | babel-types "^6.24.1"
602 |
603 | babel-helper-define-map@^6.24.1:
604 | version "6.26.0"
605 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
606 | integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=
607 | dependencies:
608 | babel-helper-function-name "^6.24.1"
609 | babel-runtime "^6.26.0"
610 | babel-types "^6.26.0"
611 | lodash "^4.17.4"
612 |
613 | babel-helper-explode-assignable-expression@^6.24.1:
614 | version "6.24.1"
615 | resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
616 | integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo=
617 | dependencies:
618 | babel-runtime "^6.22.0"
619 | babel-traverse "^6.24.1"
620 | babel-types "^6.24.1"
621 |
622 | babel-helper-function-name@^6.24.1:
623 | version "6.24.1"
624 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
625 | integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=
626 | dependencies:
627 | babel-helper-get-function-arity "^6.24.1"
628 | babel-runtime "^6.22.0"
629 | babel-template "^6.24.1"
630 | babel-traverse "^6.24.1"
631 | babel-types "^6.24.1"
632 |
633 | babel-helper-get-function-arity@^6.24.1:
634 | version "6.24.1"
635 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
636 | integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=
637 | dependencies:
638 | babel-runtime "^6.22.0"
639 | babel-types "^6.24.1"
640 |
641 | babel-helper-hoist-variables@^6.24.1:
642 | version "6.24.1"
643 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
644 | integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY=
645 | dependencies:
646 | babel-runtime "^6.22.0"
647 | babel-types "^6.24.1"
648 |
649 | babel-helper-optimise-call-expression@^6.24.1:
650 | version "6.24.1"
651 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
652 | integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=
653 | dependencies:
654 | babel-runtime "^6.22.0"
655 | babel-types "^6.24.1"
656 |
657 | babel-helper-replace-supers@^6.24.1:
658 | version "6.24.1"
659 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
660 | integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo=
661 | dependencies:
662 | babel-helper-optimise-call-expression "^6.24.1"
663 | babel-messages "^6.23.0"
664 | babel-runtime "^6.22.0"
665 | babel-template "^6.24.1"
666 | babel-traverse "^6.24.1"
667 | babel-types "^6.24.1"
668 |
669 | babel-messages@^6.23.0:
670 | version "6.23.0"
671 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
672 | integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
673 | dependencies:
674 | babel-runtime "^6.22.0"
675 |
676 | babel-plugin-check-es2015-constants@^6.5.0:
677 | version "6.22.0"
678 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
679 | integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=
680 | dependencies:
681 | babel-runtime "^6.22.0"
682 |
683 | babel-plugin-module-resolver@^3.1.1:
684 | version "3.1.3"
685 | resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.3.tgz#5a1c148bf528d20907ed508b70ae3c4762e78c8d"
686 | integrity sha512-QRfA8b2H7l9uSElLwS0rHoPhjPhgpncKUvrn42tJpdCoJ3IS6J+m4mp5FtnRoXHry3ZYJ2SMLLG/REikQA6tjg==
687 | dependencies:
688 | find-babel-config "^1.1.0"
689 | glob "^7.1.2"
690 | pkg-up "^2.0.0"
691 | reselect "^3.0.1"
692 | resolve "^1.4.0"
693 |
694 | babel-plugin-react-transform@^3.0.0:
695 | version "3.0.0"
696 | resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-3.0.0.tgz#402f25137b7bb66e9b54ead75557dfbc7ecaaa74"
697 | integrity sha512-4vJGddwPiHAOgshzZdGwYy4zRjjIr5SMY7gkOaCyIASjgpcsyLTlZNuB5rHOFoaTvGlhfo8/g4pobXPyHqm/3w==
698 | dependencies:
699 | lodash "^4.6.1"
700 |
701 | babel-plugin-syntax-async-functions@^6.5.0:
702 | version "6.13.0"
703 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
704 | integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=
705 |
706 | babel-plugin-syntax-class-properties@^6.5.0, babel-plugin-syntax-class-properties@^6.8.0:
707 | version "6.13.0"
708 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
709 | integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=
710 |
711 | babel-plugin-syntax-dynamic-import@^6.18.0:
712 | version "6.18.0"
713 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
714 | integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=
715 |
716 | babel-plugin-syntax-exponentiation-operator@^6.8.0:
717 | version "6.13.0"
718 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
719 | integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=
720 |
721 | babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.5.0:
722 | version "6.18.0"
723 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
724 | integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=
725 |
726 | babel-plugin-syntax-jsx@^6.5.0, babel-plugin-syntax-jsx@^6.8.0:
727 | version "6.18.0"
728 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
729 | integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
730 |
731 | babel-plugin-syntax-object-rest-spread@^6.8.0:
732 | version "6.13.0"
733 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
734 | integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
735 |
736 | babel-plugin-syntax-trailing-function-commas@^6.5.0:
737 | version "6.22.0"
738 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
739 | integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=
740 |
741 | babel-plugin-transform-class-properties@^6.5.0:
742 | version "6.24.1"
743 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac"
744 | integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=
745 | dependencies:
746 | babel-helper-function-name "^6.24.1"
747 | babel-plugin-syntax-class-properties "^6.8.0"
748 | babel-runtime "^6.22.0"
749 | babel-template "^6.24.1"
750 |
751 | babel-plugin-transform-es2015-arrow-functions@^6.5.0:
752 | version "6.22.0"
753 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
754 | integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=
755 | dependencies:
756 | babel-runtime "^6.22.0"
757 |
758 | babel-plugin-transform-es2015-block-scoping@^6.5.0:
759 | version "6.26.0"
760 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
761 | integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=
762 | dependencies:
763 | babel-runtime "^6.26.0"
764 | babel-template "^6.26.0"
765 | babel-traverse "^6.26.0"
766 | babel-types "^6.26.0"
767 | lodash "^4.17.4"
768 |
769 | babel-plugin-transform-es2015-classes@^6.5.0:
770 | version "6.24.1"
771 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
772 | integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=
773 | dependencies:
774 | babel-helper-define-map "^6.24.1"
775 | babel-helper-function-name "^6.24.1"
776 | babel-helper-optimise-call-expression "^6.24.1"
777 | babel-helper-replace-supers "^6.24.1"
778 | babel-messages "^6.23.0"
779 | babel-runtime "^6.22.0"
780 | babel-template "^6.24.1"
781 | babel-traverse "^6.24.1"
782 | babel-types "^6.24.1"
783 |
784 | babel-plugin-transform-es2015-computed-properties@^6.5.0:
785 | version "6.24.1"
786 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
787 | integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=
788 | dependencies:
789 | babel-runtime "^6.22.0"
790 | babel-template "^6.24.1"
791 |
792 | babel-plugin-transform-es2015-destructuring@^6.5.0:
793 | version "6.23.0"
794 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
795 | integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=
796 | dependencies:
797 | babel-runtime "^6.22.0"
798 |
799 | babel-plugin-transform-es2015-for-of@^6.5.0:
800 | version "6.23.0"
801 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
802 | integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=
803 | dependencies:
804 | babel-runtime "^6.22.0"
805 |
806 | babel-plugin-transform-es2015-function-name@^6.5.0:
807 | version "6.24.1"
808 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
809 | integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=
810 | dependencies:
811 | babel-helper-function-name "^6.24.1"
812 | babel-runtime "^6.22.0"
813 | babel-types "^6.24.1"
814 |
815 | babel-plugin-transform-es2015-literals@^6.5.0:
816 | version "6.22.0"
817 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
818 | integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=
819 | dependencies:
820 | babel-runtime "^6.22.0"
821 |
822 | babel-plugin-transform-es2015-modules-commonjs@^6.5.0:
823 | version "6.26.2"
824 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
825 | integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==
826 | dependencies:
827 | babel-plugin-transform-strict-mode "^6.24.1"
828 | babel-runtime "^6.26.0"
829 | babel-template "^6.26.0"
830 | babel-types "^6.26.0"
831 |
832 | babel-plugin-transform-es2015-parameters@^6.5.0:
833 | version "6.24.1"
834 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
835 | integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=
836 | dependencies:
837 | babel-helper-call-delegate "^6.24.1"
838 | babel-helper-get-function-arity "^6.24.1"
839 | babel-runtime "^6.22.0"
840 | babel-template "^6.24.1"
841 | babel-traverse "^6.24.1"
842 | babel-types "^6.24.1"
843 |
844 | babel-plugin-transform-es2015-shorthand-properties@^6.5.0:
845 | version "6.24.1"
846 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
847 | integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=
848 | dependencies:
849 | babel-runtime "^6.22.0"
850 | babel-types "^6.24.1"
851 |
852 | babel-plugin-transform-es2015-spread@^6.5.0:
853 | version "6.22.0"
854 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
855 | integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE=
856 | dependencies:
857 | babel-runtime "^6.22.0"
858 |
859 | babel-plugin-transform-es2015-template-literals@^6.5.0:
860 | version "6.22.0"
861 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
862 | integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=
863 | dependencies:
864 | babel-runtime "^6.22.0"
865 |
866 | babel-plugin-transform-exponentiation-operator@^6.5.0:
867 | version "6.24.1"
868 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
869 | integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=
870 | dependencies:
871 | babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
872 | babel-plugin-syntax-exponentiation-operator "^6.8.0"
873 | babel-runtime "^6.22.0"
874 |
875 | babel-plugin-transform-flow-strip-types@^6.5.0:
876 | version "6.22.0"
877 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
878 | integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=
879 | dependencies:
880 | babel-plugin-syntax-flow "^6.18.0"
881 | babel-runtime "^6.22.0"
882 |
883 | babel-plugin-transform-object-assign@^6.5.0:
884 | version "6.22.0"
885 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz#f99d2f66f1a0b0d498e346c5359684740caa20ba"
886 | integrity sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=
887 | dependencies:
888 | babel-runtime "^6.22.0"
889 |
890 | babel-plugin-transform-object-rest-spread@^6.5.0:
891 | version "6.26.0"
892 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
893 | integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=
894 | dependencies:
895 | babel-plugin-syntax-object-rest-spread "^6.8.0"
896 | babel-runtime "^6.26.0"
897 |
898 | babel-plugin-transform-react-display-name@^6.5.0:
899 | version "6.25.0"
900 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1"
901 | integrity sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=
902 | dependencies:
903 | babel-runtime "^6.22.0"
904 |
905 | babel-plugin-transform-react-jsx-source@^6.5.0:
906 | version "6.22.0"
907 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6"
908 | integrity sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=
909 | dependencies:
910 | babel-plugin-syntax-jsx "^6.8.0"
911 | babel-runtime "^6.22.0"
912 |
913 | babel-plugin-transform-react-jsx@^6.5.0:
914 | version "6.24.1"
915 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3"
916 | integrity sha1-hAoCjn30YN/DotKfDA2R9jduZqM=
917 | dependencies:
918 | babel-helper-builder-react-jsx "^6.24.1"
919 | babel-plugin-syntax-jsx "^6.8.0"
920 | babel-runtime "^6.22.0"
921 |
922 | babel-plugin-transform-regenerator@^6.5.0:
923 | version "6.26.0"
924 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
925 | integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=
926 | dependencies:
927 | regenerator-transform "^0.10.0"
928 |
929 | babel-plugin-transform-strict-mode@^6.24.1:
930 | version "6.24.1"
931 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
932 | integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=
933 | dependencies:
934 | babel-runtime "^6.22.0"
935 | babel-types "^6.24.1"
936 |
937 | babel-preset-expo@^5.0.0:
938 | version "5.0.0"
939 | resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-5.0.0.tgz#d1569579c7326391d589b031ed688061f959e378"
940 | integrity sha512-pDtkAIafvQLAZ5dQ/6I9okkiZLw9IBR8ItRzAyUO4j2rUMB9ey6yZTTE77AKWq5HhxhY53Hic8Zl0vSDMTXI0A==
941 | dependencies:
942 | "@babel/plugin-proposal-decorators" "^7.1.0"
943 | babel-plugin-module-resolver "^3.1.1"
944 | metro-react-native-babel-preset "^0.49.0"
945 |
946 | babel-preset-react-native@^4.0.1:
947 | version "4.0.1"
948 | resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-4.0.1.tgz#14ff07bdb6c8df9408082c0c18b2ce8e3392e76a"
949 | integrity sha512-uhFXnl1WbEWNG4W8QB/jeQaVXkd0a0AD+wh4D2VqtdRnEyvscahqyHExnwKLU9N0sXRYwDyed4JfbiBtiOSGgA==
950 | dependencies:
951 | babel-plugin-check-es2015-constants "^6.5.0"
952 | babel-plugin-react-transform "^3.0.0"
953 | babel-plugin-syntax-async-functions "^6.5.0"
954 | babel-plugin-syntax-class-properties "^6.5.0"
955 | babel-plugin-syntax-dynamic-import "^6.18.0"
956 | babel-plugin-syntax-flow "^6.5.0"
957 | babel-plugin-syntax-jsx "^6.5.0"
958 | babel-plugin-syntax-trailing-function-commas "^6.5.0"
959 | babel-plugin-transform-class-properties "^6.5.0"
960 | babel-plugin-transform-es2015-arrow-functions "^6.5.0"
961 | babel-plugin-transform-es2015-block-scoping "^6.5.0"
962 | babel-plugin-transform-es2015-classes "^6.5.0"
963 | babel-plugin-transform-es2015-computed-properties "^6.5.0"
964 | babel-plugin-transform-es2015-destructuring "^6.5.0"
965 | babel-plugin-transform-es2015-for-of "^6.5.0"
966 | babel-plugin-transform-es2015-function-name "^6.5.0"
967 | babel-plugin-transform-es2015-literals "^6.5.0"
968 | babel-plugin-transform-es2015-modules-commonjs "^6.5.0"
969 | babel-plugin-transform-es2015-parameters "^6.5.0"
970 | babel-plugin-transform-es2015-shorthand-properties "^6.5.0"
971 | babel-plugin-transform-es2015-spread "^6.5.0"
972 | babel-plugin-transform-es2015-template-literals "^6.5.0"
973 | babel-plugin-transform-exponentiation-operator "^6.5.0"
974 | babel-plugin-transform-flow-strip-types "^6.5.0"
975 | babel-plugin-transform-object-assign "^6.5.0"
976 | babel-plugin-transform-object-rest-spread "^6.5.0"
977 | babel-plugin-transform-react-display-name "^6.5.0"
978 | babel-plugin-transform-react-jsx "^6.5.0"
979 | babel-plugin-transform-react-jsx-source "^6.5.0"
980 | babel-plugin-transform-regenerator "^6.5.0"
981 | babel-template "^6.24.1"
982 | react-transform-hmr "^1.0.4"
983 |
984 | babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
985 | version "6.26.0"
986 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
987 | integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
988 | dependencies:
989 | core-js "^2.4.0"
990 | regenerator-runtime "^0.11.0"
991 |
992 | babel-template@^6.24.1, babel-template@^6.26.0:
993 | version "6.26.0"
994 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
995 | integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
996 | dependencies:
997 | babel-runtime "^6.26.0"
998 | babel-traverse "^6.26.0"
999 | babel-types "^6.26.0"
1000 | babylon "^6.18.0"
1001 | lodash "^4.17.4"
1002 |
1003 | babel-traverse@^6.24.1, babel-traverse@^6.26.0:
1004 | version "6.26.0"
1005 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
1006 | integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
1007 | dependencies:
1008 | babel-code-frame "^6.26.0"
1009 | babel-messages "^6.23.0"
1010 | babel-runtime "^6.26.0"
1011 | babel-types "^6.26.0"
1012 | babylon "^6.18.0"
1013 | debug "^2.6.8"
1014 | globals "^9.18.0"
1015 | invariant "^2.2.2"
1016 | lodash "^4.17.4"
1017 |
1018 | babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
1019 | version "6.26.0"
1020 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
1021 | integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
1022 | dependencies:
1023 | babel-runtime "^6.26.0"
1024 | esutils "^2.0.2"
1025 | lodash "^4.17.4"
1026 | to-fast-properties "^1.0.3"
1027 |
1028 | babylon@^6.18.0:
1029 | version "6.18.0"
1030 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
1031 | integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
1032 |
1033 | balanced-match@^1.0.0:
1034 | version "1.0.0"
1035 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
1036 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
1037 |
1038 | brace-expansion@^1.1.7:
1039 | version "1.1.11"
1040 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
1041 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
1042 | dependencies:
1043 | balanced-match "^1.0.0"
1044 | concat-map "0.0.1"
1045 |
1046 | chalk@^1.1.3:
1047 | version "1.1.3"
1048 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
1049 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
1050 | dependencies:
1051 | ansi-styles "^2.2.1"
1052 | escape-string-regexp "^1.0.2"
1053 | has-ansi "^2.0.0"
1054 | strip-ansi "^3.0.0"
1055 | supports-color "^2.0.0"
1056 |
1057 | chalk@^2.0.0:
1058 | version "2.4.2"
1059 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
1060 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
1061 | dependencies:
1062 | ansi-styles "^3.2.1"
1063 | escape-string-regexp "^1.0.5"
1064 | supports-color "^5.3.0"
1065 |
1066 | color-convert@^1.9.0:
1067 | version "1.9.3"
1068 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
1069 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
1070 | dependencies:
1071 | color-name "1.1.3"
1072 |
1073 | color-name@1.1.3:
1074 | version "1.1.3"
1075 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
1076 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
1077 |
1078 | concat-map@0.0.1:
1079 | version "0.0.1"
1080 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
1081 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
1082 |
1083 | core-js@^1.0.0:
1084 | version "1.2.7"
1085 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
1086 | integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
1087 |
1088 | core-js@^2.4.0:
1089 | version "2.6.3"
1090 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.3.tgz#4b70938bdffdaf64931e66e2db158f0892289c49"
1091 | integrity sha512-l00tmFFZOBHtYhN4Cz7k32VM7vTn3rE2ANjQDxdEN6zmXZ/xq1jQuutnmHvMG1ZJ7xd72+TA5YpUK8wz3rWsfQ==
1092 |
1093 | create-react-class@^15.5.1:
1094 | version "15.6.3"
1095 | resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
1096 | integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==
1097 | dependencies:
1098 | fbjs "^0.8.9"
1099 | loose-envify "^1.3.1"
1100 | object-assign "^4.1.1"
1101 |
1102 | debug@^2.6.8:
1103 | version "2.6.9"
1104 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
1105 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
1106 | dependencies:
1107 | ms "2.0.0"
1108 |
1109 | debug@^4.1.0:
1110 | version "4.1.1"
1111 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
1112 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
1113 | dependencies:
1114 | ms "^2.1.1"
1115 |
1116 | dom-walk@^0.1.0:
1117 | version "0.1.1"
1118 | resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
1119 | integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=
1120 |
1121 | encoding@^0.1.11:
1122 | version "0.1.12"
1123 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
1124 | integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
1125 | dependencies:
1126 | iconv-lite "~0.4.13"
1127 |
1128 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
1129 | version "1.0.5"
1130 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
1131 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
1132 |
1133 | esutils@^2.0.0, esutils@^2.0.2:
1134 | version "2.0.2"
1135 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
1136 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
1137 |
1138 | fbjs@^0.8.9:
1139 | version "0.8.17"
1140 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
1141 | integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=
1142 | dependencies:
1143 | core-js "^1.0.0"
1144 | isomorphic-fetch "^2.1.1"
1145 | loose-envify "^1.0.0"
1146 | object-assign "^4.1.0"
1147 | promise "^7.1.1"
1148 | setimmediate "^1.0.5"
1149 | ua-parser-js "^0.7.18"
1150 |
1151 | find-babel-config@^1.1.0:
1152 | version "1.1.0"
1153 | resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.1.0.tgz#acc01043a6749fec34429be6b64f542ebb5d6355"
1154 | integrity sha1-rMAQQ6Z0n+w0Qpvmtk9ULrtdY1U=
1155 | dependencies:
1156 | json5 "^0.5.1"
1157 | path-exists "^3.0.0"
1158 |
1159 | find-up@^2.1.0:
1160 | version "2.1.0"
1161 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
1162 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
1163 | dependencies:
1164 | locate-path "^2.0.0"
1165 |
1166 | fs.realpath@^1.0.0:
1167 | version "1.0.0"
1168 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
1169 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
1170 |
1171 | glob@^7.1.2:
1172 | version "7.1.3"
1173 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
1174 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
1175 | dependencies:
1176 | fs.realpath "^1.0.0"
1177 | inflight "^1.0.4"
1178 | inherits "2"
1179 | minimatch "^3.0.4"
1180 | once "^1.3.0"
1181 | path-is-absolute "^1.0.0"
1182 |
1183 | global@^4.3.0:
1184 | version "4.3.2"
1185 | resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
1186 | integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=
1187 | dependencies:
1188 | min-document "^2.19.0"
1189 | process "~0.5.1"
1190 |
1191 | globals@^11.1.0:
1192 | version "11.10.0"
1193 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.10.0.tgz#1e09776dffda5e01816b3bb4077c8b59c24eaa50"
1194 | integrity sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==
1195 |
1196 | globals@^9.18.0:
1197 | version "9.18.0"
1198 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
1199 | integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
1200 |
1201 | has-ansi@^2.0.0:
1202 | version "2.0.0"
1203 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
1204 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
1205 | dependencies:
1206 | ansi-regex "^2.0.0"
1207 |
1208 | has-flag@^3.0.0:
1209 | version "3.0.0"
1210 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
1211 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
1212 |
1213 | hoist-non-react-statics@^2.5.0:
1214 | version "2.5.5"
1215 | resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
1216 | integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
1217 |
1218 | iconv-lite@~0.4.13:
1219 | version "0.4.24"
1220 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
1221 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
1222 | dependencies:
1223 | safer-buffer ">= 2.1.2 < 3"
1224 |
1225 | immutable@^3.8.1:
1226 | version "3.8.2"
1227 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3"
1228 | integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=
1229 |
1230 | inflight@^1.0.4:
1231 | version "1.0.6"
1232 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1233 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
1234 | dependencies:
1235 | once "^1.3.0"
1236 | wrappy "1"
1237 |
1238 | inherits@2:
1239 | version "2.0.3"
1240 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1241 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
1242 |
1243 | invariant@^2.0.0, invariant@^2.2.2:
1244 | version "2.2.4"
1245 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
1246 | integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
1247 | dependencies:
1248 | loose-envify "^1.0.0"
1249 |
1250 | is-stream@^1.0.1:
1251 | version "1.1.0"
1252 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
1253 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
1254 |
1255 | isomorphic-fetch@^2.1.1:
1256 | version "2.2.1"
1257 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
1258 | integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
1259 | dependencies:
1260 | node-fetch "^1.0.1"
1261 | whatwg-fetch ">=0.10.0"
1262 |
1263 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
1264 | version "4.0.0"
1265 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1266 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1267 |
1268 | js-tokens@^3.0.2:
1269 | version "3.0.2"
1270 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
1271 | integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
1272 |
1273 | jsesc@^2.5.1:
1274 | version "2.5.2"
1275 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
1276 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
1277 |
1278 | jsesc@~0.5.0:
1279 | version "0.5.0"
1280 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
1281 | integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
1282 |
1283 | json5@^0.5.1:
1284 | version "0.5.1"
1285 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
1286 | integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
1287 |
1288 | locate-path@^2.0.0:
1289 | version "2.0.0"
1290 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
1291 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
1292 | dependencies:
1293 | p-locate "^2.0.0"
1294 | path-exists "^3.0.0"
1295 |
1296 | lodash-es@^4.2.1:
1297 | version "4.17.11"
1298 | resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.11.tgz#145ab4a7ac5c5e52a3531fb4f310255a152b4be0"
1299 | integrity sha512-DHb1ub+rMjjrxqlB3H56/6MXtm1lSksDp2rA2cNWjG8mlDUYFhUj3Di2Zn5IwSU87xLv8tNIQ7sSwE/YOX/D/Q==
1300 |
1301 | lodash@^4.17.10, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.6.1:
1302 | version "4.17.19"
1303 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
1304 | integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
1305 |
1306 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
1307 | version "1.4.0"
1308 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
1309 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
1310 | dependencies:
1311 | js-tokens "^3.0.0 || ^4.0.0"
1312 |
1313 | metro-babel7-plugin-react-transform@0.49.2:
1314 | version "0.49.2"
1315 | resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.49.2.tgz#d4c43faa6f2b91cc1b244a36a5d708ae8d39dbb2"
1316 | integrity sha512-LpJT8UvqF/tvVqEwiLUTMjRPhEGdI8e2dr3424XaRANba3j0nqmrbKdJQsPE8TrcqMWR4RHmfsXk0ti5QrEvJg==
1317 | dependencies:
1318 | "@babel/helper-module-imports" "^7.0.0"
1319 |
1320 | metro-react-native-babel-preset@^0.49.0:
1321 | version "0.49.2"
1322 | resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.49.2.tgz#8d53610e044e0c9a53a03d307e1c51f9e8577abc"
1323 | integrity sha512-N0+4ramShYCHSAVEPUNWIZuKZskWj8/RDSoinhadHpdpHORMbMxLkexSOVHLluB+XFQ+DENLEx5oVPYwOlENBA==
1324 | dependencies:
1325 | "@babel/plugin-proposal-class-properties" "^7.0.0"
1326 | "@babel/plugin-proposal-export-default-from" "^7.0.0"
1327 | "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0"
1328 | "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
1329 | "@babel/plugin-proposal-optional-catch-binding" "^7.0.0"
1330 | "@babel/plugin-proposal-optional-chaining" "^7.0.0"
1331 | "@babel/plugin-syntax-dynamic-import" "^7.0.0"
1332 | "@babel/plugin-syntax-export-default-from" "^7.0.0"
1333 | "@babel/plugin-transform-arrow-functions" "^7.0.0"
1334 | "@babel/plugin-transform-block-scoping" "^7.0.0"
1335 | "@babel/plugin-transform-classes" "^7.0.0"
1336 | "@babel/plugin-transform-computed-properties" "^7.0.0"
1337 | "@babel/plugin-transform-destructuring" "^7.0.0"
1338 | "@babel/plugin-transform-exponentiation-operator" "^7.0.0"
1339 | "@babel/plugin-transform-flow-strip-types" "^7.0.0"
1340 | "@babel/plugin-transform-for-of" "^7.0.0"
1341 | "@babel/plugin-transform-function-name" "^7.0.0"
1342 | "@babel/plugin-transform-literals" "^7.0.0"
1343 | "@babel/plugin-transform-modules-commonjs" "^7.0.0"
1344 | "@babel/plugin-transform-object-assign" "^7.0.0"
1345 | "@babel/plugin-transform-parameters" "^7.0.0"
1346 | "@babel/plugin-transform-react-display-name" "^7.0.0"
1347 | "@babel/plugin-transform-react-jsx" "^7.0.0"
1348 | "@babel/plugin-transform-react-jsx-source" "^7.0.0"
1349 | "@babel/plugin-transform-regenerator" "^7.0.0"
1350 | "@babel/plugin-transform-runtime" "^7.0.0"
1351 | "@babel/plugin-transform-shorthand-properties" "^7.0.0"
1352 | "@babel/plugin-transform-spread" "^7.0.0"
1353 | "@babel/plugin-transform-sticky-regex" "^7.0.0"
1354 | "@babel/plugin-transform-template-literals" "^7.0.0"
1355 | "@babel/plugin-transform-typescript" "^7.0.0"
1356 | "@babel/plugin-transform-unicode-regex" "^7.0.0"
1357 | "@babel/template" "^7.0.0"
1358 | metro-babel7-plugin-react-transform "0.49.2"
1359 | react-transform-hmr "^1.0.4"
1360 |
1361 | min-document@^2.19.0:
1362 | version "2.19.0"
1363 | resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
1364 | integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=
1365 | dependencies:
1366 | dom-walk "^0.1.0"
1367 |
1368 | minimatch@^3.0.4:
1369 | version "3.0.4"
1370 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1371 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
1372 | dependencies:
1373 | brace-expansion "^1.1.7"
1374 |
1375 | mirror-creator@^1.1.0:
1376 | version "1.1.0"
1377 | resolved "https://registry.yarnpkg.com/mirror-creator/-/mirror-creator-1.1.0.tgz#170cc74d0ff244449177204716cbbe555d68d69a"
1378 | integrity sha1-FwzHTQ/yRESRdyBHFsu+VV1o1po=
1379 |
1380 | ms@2.0.0:
1381 | version "2.0.0"
1382 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1383 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
1384 |
1385 | ms@^2.1.1:
1386 | version "2.1.1"
1387 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
1388 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
1389 |
1390 | node-fetch@^1.0.1:
1391 | version "1.7.3"
1392 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
1393 | integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
1394 | dependencies:
1395 | encoding "^0.1.11"
1396 | is-stream "^1.0.1"
1397 |
1398 | object-assign@^4.1.0, object-assign@^4.1.1:
1399 | version "4.1.1"
1400 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1401 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
1402 |
1403 | once@^1.3.0:
1404 | version "1.4.0"
1405 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1406 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1407 | dependencies:
1408 | wrappy "1"
1409 |
1410 | p-limit@^1.1.0:
1411 | version "1.3.0"
1412 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
1413 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
1414 | dependencies:
1415 | p-try "^1.0.0"
1416 |
1417 | p-locate@^2.0.0:
1418 | version "2.0.0"
1419 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
1420 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
1421 | dependencies:
1422 | p-limit "^1.1.0"
1423 |
1424 | p-try@^1.0.0:
1425 | version "1.0.0"
1426 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
1427 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
1428 |
1429 | path-exists@^3.0.0:
1430 | version "3.0.0"
1431 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
1432 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
1433 |
1434 | path-is-absolute@^1.0.0:
1435 | version "1.0.1"
1436 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1437 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1438 |
1439 | path-parse@^1.0.6:
1440 | version "1.0.6"
1441 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
1442 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
1443 |
1444 | pkg-up@^2.0.0:
1445 | version "2.0.0"
1446 | resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f"
1447 | integrity sha1-yBmscoBZpGHKscOImivjxJoATX8=
1448 | dependencies:
1449 | find-up "^2.1.0"
1450 |
1451 | private@^0.1.6:
1452 | version "0.1.8"
1453 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
1454 | integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
1455 |
1456 | process@~0.5.1:
1457 | version "0.5.2"
1458 | resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
1459 | integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=
1460 |
1461 | promise@^7.1.1:
1462 | version "7.3.1"
1463 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
1464 | integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
1465 | dependencies:
1466 | asap "~2.0.3"
1467 |
1468 | prop-types@^15.5.4, prop-types@^15.6.2:
1469 | version "15.6.2"
1470 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102"
1471 | integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==
1472 | dependencies:
1473 | loose-envify "^1.3.1"
1474 | object-assign "^4.1.1"
1475 |
1476 | react-deep-force-update@^1.0.0:
1477 | version "1.1.2"
1478 | resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1"
1479 | integrity sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA==
1480 |
1481 | react-proxy@^1.1.7:
1482 | version "1.1.8"
1483 | resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a"
1484 | integrity sha1-nb/Z2SdSjDqp9ETkVYw3gwq4wmo=
1485 | dependencies:
1486 | lodash "^4.6.1"
1487 | react-deep-force-update "^1.0.0"
1488 |
1489 | react-redux@^4.4.5:
1490 | version "4.4.9"
1491 | resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.9.tgz#8ca6d4670925a454ce67086c2305e9630670909a"
1492 | integrity sha512-3XS7mjTOcvaP2H5OE/LxEgDHRuEyTZxBRlwvXHzNqYkZdYd7Ra98AimWoDSHP9OcLoydjA1ocgiZxxcqeXj0Sw==
1493 | dependencies:
1494 | create-react-class "^15.5.1"
1495 | hoist-non-react-statics "^2.5.0"
1496 | invariant "^2.0.0"
1497 | lodash "^4.2.0"
1498 | loose-envify "^1.1.0"
1499 | prop-types "^15.5.4"
1500 |
1501 | react-timer-mixin@^0.13.4:
1502 | version "0.13.4"
1503 | resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3"
1504 | integrity sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q==
1505 |
1506 | react-transform-hmr@^1.0.4:
1507 | version "1.0.4"
1508 | resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb"
1509 | integrity sha1-4aQL0Krvxy6N/Xp82gmvhQZjl7s=
1510 | dependencies:
1511 | global "^4.3.0"
1512 | react-proxy "^1.1.7"
1513 |
1514 | redux@^3.5.2:
1515 | version "3.7.2"
1516 | resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b"
1517 | integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==
1518 | dependencies:
1519 | lodash "^4.2.1"
1520 | lodash-es "^4.2.1"
1521 | loose-envify "^1.1.0"
1522 | symbol-observable "^1.0.3"
1523 |
1524 | regenerate-unicode-properties@^7.0.0:
1525 | version "7.0.0"
1526 | resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c"
1527 | integrity sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==
1528 | dependencies:
1529 | regenerate "^1.4.0"
1530 |
1531 | regenerate@^1.4.0:
1532 | version "1.4.0"
1533 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
1534 | integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
1535 |
1536 | regenerator-runtime@^0.11.0:
1537 | version "0.11.1"
1538 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
1539 | integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
1540 |
1541 | regenerator-transform@^0.10.0:
1542 | version "0.10.1"
1543 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
1544 | integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==
1545 | dependencies:
1546 | babel-runtime "^6.18.0"
1547 | babel-types "^6.19.0"
1548 | private "^0.1.6"
1549 |
1550 | regenerator-transform@^0.13.3:
1551 | version "0.13.3"
1552 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb"
1553 | integrity sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==
1554 | dependencies:
1555 | private "^0.1.6"
1556 |
1557 | regexpu-core@^4.1.3:
1558 | version "4.4.0"
1559 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32"
1560 | integrity sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==
1561 | dependencies:
1562 | regenerate "^1.4.0"
1563 | regenerate-unicode-properties "^7.0.0"
1564 | regjsgen "^0.5.0"
1565 | regjsparser "^0.6.0"
1566 | unicode-match-property-ecmascript "^1.0.4"
1567 | unicode-match-property-value-ecmascript "^1.0.2"
1568 |
1569 | regjsgen@^0.5.0:
1570 | version "0.5.0"
1571 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd"
1572 | integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==
1573 |
1574 | regjsparser@^0.6.0:
1575 | version "0.6.0"
1576 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c"
1577 | integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==
1578 | dependencies:
1579 | jsesc "~0.5.0"
1580 |
1581 | reselect@^3.0.1:
1582 | version "3.0.1"
1583 | resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147"
1584 | integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=
1585 |
1586 | resolve@^1.4.0, resolve@^1.8.1:
1587 | version "1.10.0"
1588 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba"
1589 | integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==
1590 | dependencies:
1591 | path-parse "^1.0.6"
1592 |
1593 | "safer-buffer@>= 2.1.2 < 3":
1594 | version "2.1.2"
1595 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1596 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
1597 |
1598 | semver@^5.5.1:
1599 | version "5.6.0"
1600 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
1601 | integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
1602 |
1603 | setimmediate@^1.0.5:
1604 | version "1.0.5"
1605 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
1606 | integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
1607 |
1608 | source-map@^0.5.0:
1609 | version "0.5.7"
1610 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
1611 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
1612 |
1613 | strip-ansi@^3.0.0:
1614 | version "3.0.1"
1615 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
1616 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
1617 | dependencies:
1618 | ansi-regex "^2.0.0"
1619 |
1620 | supports-color@^2.0.0:
1621 | version "2.0.0"
1622 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
1623 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
1624 |
1625 | supports-color@^5.3.0:
1626 | version "5.5.0"
1627 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1628 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1629 | dependencies:
1630 | has-flag "^3.0.0"
1631 |
1632 | symbol-observable@^1.0.3:
1633 | version "1.2.0"
1634 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
1635 | integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
1636 |
1637 | to-fast-properties@^1.0.3:
1638 | version "1.0.3"
1639 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
1640 | integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
1641 |
1642 | to-fast-properties@^2.0.0:
1643 | version "2.0.0"
1644 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
1645 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
1646 |
1647 | trim-right@^1.0.1:
1648 | version "1.0.1"
1649 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
1650 | integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
1651 |
1652 | ua-parser-js@^0.7.18:
1653 | version "0.7.19"
1654 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.19.tgz#94151be4c0a7fb1d001af7022fdaca4642659e4b"
1655 | integrity sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==
1656 |
1657 | unicode-canonical-property-names-ecmascript@^1.0.4:
1658 | version "1.0.4"
1659 | resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
1660 | integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
1661 |
1662 | unicode-match-property-ecmascript@^1.0.4:
1663 | version "1.0.4"
1664 | resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
1665 | integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
1666 | dependencies:
1667 | unicode-canonical-property-names-ecmascript "^1.0.4"
1668 | unicode-property-aliases-ecmascript "^1.0.4"
1669 |
1670 | unicode-match-property-value-ecmascript@^1.0.2:
1671 | version "1.0.2"
1672 | resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4"
1673 | integrity sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==
1674 |
1675 | unicode-property-aliases-ecmascript@^1.0.4:
1676 | version "1.0.4"
1677 | resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0"
1678 | integrity sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==
1679 |
1680 | whatwg-fetch@>=0.10.0:
1681 | version "3.0.0"
1682 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
1683 | integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
1684 |
1685 | wrappy@1:
1686 | version "1.0.2"
1687 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1688 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1689 |
--------------------------------------------------------------------------------