From 1f1f89b0627cc90ecd5bd95012afa29aefd5cc22 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Fri, 1 Dec 2017 17:52:47 -0800 Subject: [PATCH 001/153] [fix] Image 'onLoad' callback on update 'onLoad' should not be called when a component updates, if the 'uri' is unchanged. Fixes a regression introduced by 92952ee7460977d79ef27413a351796e80cd927f --- src/components/Image/__tests__/index-test.js | 77 +++++++++++++------- src/components/Image/index.js | 3 - 2 files changed, 49 insertions(+), 31 deletions(-) diff --git a/src/components/Image/__tests__/index-test.js b/src/components/Image/__tests__/index-test.js index 61b73074a..95932198d 100644 --- a/src/components/Image/__tests__/index-test.js +++ b/src/components/Image/__tests__/index-test.js @@ -87,6 +87,55 @@ describe('components/Image', () => { expect(component.find('img').prop('draggable')).toBe(false); }); + describe('prop "onLoad"', () => { + test('is called after image is loaded from network', () => { + jest.useFakeTimers(); + ImageLoader.load = jest.fn().mockImplementation((_, onLoad, onError) => { + onLoad(); + }); + const onLoadStub = jest.fn(); + shallow(); + jest.runOnlyPendingTimers(); + expect(ImageLoader.load).toBeCalled(); + expect(onLoadStub).toBeCalled(); + }); + + test('is called after image is loaded from cache', () => { + jest.useFakeTimers(); + ImageLoader.load = jest.fn().mockImplementation((_, onLoad, onError) => { + onLoad(); + }); + const onLoadStub = jest.fn(); + const uri = 'https://test.com/img.jpg'; + shallow(); + ImageUriCache.add(uri); + jest.runOnlyPendingTimers(); + expect(ImageLoader.load).not.toBeCalled(); + expect(onLoadStub).toBeCalled(); + ImageUriCache.remove(uri); + }); + + test('is called on update if "uri" is different', () => { + jest.useFakeTimers(); + const onLoadStub = jest.fn(); + const uri = 'https://test.com/img.jpg'; + const component = mount(); + component.setProps({ source: `https://blah.com/img.png` }); + jest.runOnlyPendingTimers(); + expect(onLoadStub.mock.calls.length).toBe(2); + }); + + test('is not called on update if "uri" is the same', () => { + jest.useFakeTimers(); + const onLoadStub = jest.fn(); + const uri = 'https://test.com/img.jpg'; + const component = mount(); + component.setProps({ resizeMode: 'stretch' }); + jest.runOnlyPendingTimers(); + expect(onLoadStub.mock.calls.length).toBe(1); + }); + }); + describe('prop "resizeMode"', () => { [ Image.resizeMode.contain, @@ -156,34 +205,6 @@ describe('components/Image', () => { expect(component.prop('testID')).toBe('testID'); }); - describe('prop "onLoad"', () => { - test('fires after image is loaded', () => { - jest.useFakeTimers(); - ImageLoader.load = jest.fn().mockImplementation((_, onLoad, onError) => { - onLoad(); - }); - const onLoadStub = jest.fn(); - shallow(); - jest.runOnlyPendingTimers(); - expect(ImageLoader.load).toBeCalled(); - expect(onLoadStub).toBeCalled(); - }); - - test('fires even if the image is cached', () => { - jest.useFakeTimers(); - ImageLoader.load = jest.fn().mockImplementation((_, onLoad, onError) => { - onLoad(); - }); - const onLoadStub = jest.fn(); - const uri = 'https://test.com/img.jpg'; - shallow(); - ImageUriCache.add(uri); - jest.runOnlyPendingTimers(); - expect(ImageLoader.load).not.toBeCalled(); - expect(onLoadStub).toBeCalled(); - }); - }); - test('passes other props through to underlying View', () => { const fn = () => {}; const component = shallow(); diff --git a/src/components/Image/index.js b/src/components/Image/index.js index 6c608feab..c01e3eeac 100644 --- a/src/components/Image/index.js +++ b/src/components/Image/index.js @@ -149,9 +149,6 @@ class Image extends Component { componentDidUpdate() { if (this._imageState === STATUS_PENDING) { this._createImageLoader(); - } else if (this._imageState === STATUS_LOADED) { - const { onLoad } = this.props; - onLoad && onLoad(); } } From 5f3e422b5ccfdfd5e5f77856af79d14153eb6935 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Fri, 1 Dec 2017 17:55:17 -0800 Subject: [PATCH 002/153] 0.1.15 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 252716420..7e7e5a935 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-web", - "version": "0.1.14", + "version": "0.1.15", "description": "React Native for Web", "main": "dist/index.js", "files": [ From da86ea98fcaf58d2076cb41af257e369b1f075dc Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 2 Dec 2017 12:18:52 -0800 Subject: [PATCH 003/153] [fix] NetInfo event listeners and types * Fix 'addEventListener' handler registration. * Fix event object provided to handlers. * Fix event object type - always include 'type' and 'effectiveType'. * Fix unit test semantics. * Fix documented NetInfo types. Close #724 --- .../storybook/2-apis/NetInfo/NetInfoScreen.js | 10 ++--- src/apis/NetInfo/__tests__/index-test.js | 35 ++++++++++++------ src/apis/NetInfo/index.js | 37 ++++++++++++------- 3 files changed, 51 insertions(+), 31 deletions(-) diff --git a/docs/storybook/2-apis/NetInfo/NetInfoScreen.js b/docs/storybook/2-apis/NetInfo/NetInfoScreen.js index 76d9df36f..f685192c6 100644 --- a/docs/storybook/2-apis/NetInfo/NetInfoScreen.js +++ b/docs/storybook/2-apis/NetInfo/NetInfoScreen.js @@ -32,8 +32,9 @@ const NetInfoScreen = () => ( - One of slow-2g, 2g, 3g, 4g,{' '} - unknown. + One of bluebooth, cellular, ethernet,{' '} + mixed, mixed, none, other,{' '} + unknown, wifi, wimax } name="ConnectionType" @@ -41,9 +42,8 @@ const NetInfoScreen = () => ( - One of bluebooth, cellular, ethernet,{' '} - mixed, mixed, none, other,{' '} - unknown, wifi, wimax + One of slow-2g, 2g, 3g, 4g,{' '} + unknown. } name="EffectiveConnectionType" diff --git a/src/apis/NetInfo/__tests__/index-test.js b/src/apis/NetInfo/__tests__/index-test.js index f0eddadef..f7c7610c5 100644 --- a/src/apis/NetInfo/__tests__/index-test.js +++ b/src/apis/NetInfo/__tests__/index-test.js @@ -2,6 +2,8 @@ import NetInfo from '..'; +const handler = () => {}; + describe('apis/NetInfo', () => { describe('getConnectionInfo', () => { test('fills out basic fields', done => { @@ -13,9 +15,22 @@ describe('apis/NetInfo', () => { }); }); - describe('isConnected', () => { - const handler = () => {}; + describe('addEventListener', () => { + test('throws if the provided "eventType" is not supported', () => { + expect(() => NetInfo.addEventListener('foo', handler)).toThrow(); + }); + }); + + describe('removeEventListener', () => { + test('throws if the provided "eventType" is not supported', () => { + expect(() => NetInfo.removeEventListener('foo', handler)).toThrow(); + }); + test('throws if the handler is not registered', () => { + expect(() => NetInfo.removeEventListener('connectionChange', handler)).toThrow(); + }); + }); + describe('isConnected', () => { afterEach(() => { try { NetInfo.isConnected.removeEventListener('connectionChange', handler); @@ -25,22 +40,18 @@ describe('apis/NetInfo', () => { describe('addEventListener', () => { test('throws if the provided "eventType" is not supported', () => { expect(() => NetInfo.isConnected.addEventListener('foo', handler)).toThrow(); - expect(() => - NetInfo.isConnected.addEventListener('connectionChange', handler) - ).not.toThrow(); }); }); describe('removeEventListener', () => { - test('throws if the handler is not registered', () => { - expect(() => NetInfo.isConnected.removeEventListener('connectionChange', handler)).toThrow; - }); - test('throws if the provided "eventType" is not supported', () => { NetInfo.isConnected.addEventListener('connectionChange', handler); - expect(() => NetInfo.isConnected.removeEventListener('foo', handler)).toThrow; - expect(() => NetInfo.isConnected.removeEventListener('connectionChange', handler)).not - .toThrow; + expect(() => NetInfo.isConnected.removeEventListener('foo', handler)).toThrow(); + }); + test('throws if the handler is not registered', () => { + expect(() => + NetInfo.isConnected.removeEventListener('connectionChange', handler) + ).toThrow(); }); }); }); diff --git a/src/apis/NetInfo/index.js b/src/apis/NetInfo/index.js index 0877989c7..a7ad08355 100644 --- a/src/apis/NetInfo/index.js +++ b/src/apis/NetInfo/index.js @@ -23,13 +23,17 @@ const connection = // Prevent the underlying event handlers from leaking and include additional // properties available in browsers const getConnectionInfoObject = () => { - const result = {}; + const result = { + effectiveType: 'unknown', + type: 'unknown' + }; if (!connection) { return result; } for (const prop in connection) { - if (typeof connection[prop] !== 'function') { - result[prop] = connection[prop]; + const value = connection[prop]; + if (typeof value !== 'function' && value != null) { + result[prop] = value; } } return result; @@ -43,6 +47,7 @@ const eventTypesMap = { const eventTypes = Object.keys(eventTypesMap); const connectionListeners = []; +const netInfoListeners = []; /** * Navigator online: https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine @@ -63,21 +68,29 @@ const NetInfo = { }; } - connection.addEventListener(eventTypesMap[type], handler); + const wrappedHandler = () => handler(getConnectionInfoObject()); + netInfoListeners.push([handler, wrappedHandler]); + connection.addEventListener(eventTypesMap[type], wrappedHandler); return { remove: () => NetInfo.removeEventListener(eventTypesMap[type], handler) }; }, removeEventListener(type: string, handler: Function): void { - invariant(eventTypes.indexOf(type) !== -1, 'Trying to subscribe to unknown event: "%s"', type); + invariant( + eventTypes.indexOf(type) !== -1, + 'Trying to unsubscribe from unknown event: "%s"', + type + ); if (type === 'change') { console.warn('Listening to event `change` is deprecated. Use `connectionChange` instead.'); } - if (!connection) { - return; - } - connection.removeEventListener(eventTypesMap[type], handler); + + const listenerIndex = findIndex(netInfoListeners, pair => pair[0] === handler); + invariant(listenerIndex !== -1, 'Trying to remove NetInfo listener for unregistered handler'); + const [, wrappedHandler] = netInfoListeners[listenerIndex]; + connection.removeEventListener(eventTypesMap[type], wrappedHandler); + netInfoListeners.splice(listenerIndex, 1); }, fetch(): Promise { @@ -93,11 +106,7 @@ const NetInfo = { getConnectionInfo(): Promise { return new Promise((resolve, reject) => { - resolve({ - effectiveType: 'unknown', - type: 'unknown', - ...getConnectionInfoObject() - }); + resolve(getConnectionInfoObject()); }); }, From 3e3cfc5325fe911bcca6031e82997d11985ce6fc Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 2 Dec 2017 14:48:35 -0800 Subject: [PATCH 004/153] 0.1.16 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7e7e5a935..4fca8ff1e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-web", - "version": "0.1.15", + "version": "0.1.16", "description": "React Native for Web", "main": "dist/index.js", "files": [ From 217ad97bfd3d4caf2ad04dd59ad9f04d7ec630e7 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 2 Dec 2017 14:47:45 -0800 Subject: [PATCH 005/153] [change] Update Flow and types --- package.json | 4 +- src/apis/AppRegistry/AppContainer.js | 6 +-- src/apis/AppRegistry/index.js | 8 ++-- src/apis/AppRegistry/renderApplication.js | 13 ++++-- src/apis/AsyncStorage/index.js | 24 +++++----- src/apis/Clipboard/index.js | 4 +- src/apis/Dimensions/index.js | 4 +- src/apis/Linking/index.js | 6 +-- src/apis/StyleSheet/StyleSheetValidation.js | 6 +-- src/components/ActivityIndicator/index.js | 2 +- src/components/Button/__tests__/index-test.js | 1 + src/components/Button/index.js | 2 +- src/components/Image/__tests__/index-test.js | 3 +- src/components/Image/index.js | 6 ++- src/components/KeyboardAvoidingView/index.js | 2 +- src/components/ProgressBar/index.js | 2 +- src/components/RefreshControl/index.js | 2 +- src/components/ScrollView/ScrollViewBase.js | 4 +- src/components/StaticContainer/index.js | 10 +++- src/components/StaticRenderer/index.js | 7 ++- src/components/StatusBar/index.js | 2 +- src/components/Switch/index.js | 4 +- src/components/Text/__tests__/index-test.js | 1 + src/components/Text/index.js | 2 +- src/components/TextInput/index.js | 2 +- .../Touchable/TouchableWithoutFeedback.js | 4 +- src/components/UnimplementedView/index.js | 2 +- src/components/View/ViewPropTypes.js | 46 ++++++++++++++++++- src/components/View/index.js | 7 ++- src/modules/applyLayout/index.js | 4 +- src/modules/applyNativeMethods/index.js | 4 +- src/propTypes/ColorPropType.js | 2 +- yarn.lock | 14 +++--- 33 files changed, 135 insertions(+), 75 deletions(-) diff --git a/package.json b/package.json index 4fca8ff1e..d9a25043c 100644 --- a/package.json +++ b/package.json @@ -90,9 +90,9 @@ "eslint": "^4.6.1", "eslint-config-prettier": "^2.6.0", "eslint-plugin-promise": "^3.5.0", - "eslint-plugin-react": "^7.4.0", + "eslint-plugin-react": "^7.5.1", "file-loader": "^1.1.4", - "flow-bin": "^0.49.1", + "flow-bin": "^0.60.1", "jest": "^21.2.1", "lint-staged": "^4.1.3", "prettier": "^1.7.3", diff --git a/src/apis/AppRegistry/AppContainer.js b/src/apis/AppRegistry/AppContainer.js index f896ce2a9..e56cc3805 100644 --- a/src/apis/AppRegistry/AppContainer.js +++ b/src/apis/AppRegistry/AppContainer.js @@ -19,6 +19,7 @@ type Context = { }; type Props = { + // $FlowFixMe children?: React.Children, rootTag: any }; @@ -27,10 +28,7 @@ type State = { mainKey: number }; -export default class AppContainer extends Component { - props: Props; - state: State = { mainKey: 1 }; - +export default class AppContainer extends Component { static childContextTypes = { rootTag: any }; diff --git a/src/apis/AppRegistry/index.js b/src/apis/AppRegistry/index.js index 24e09dc3e..63e396494 100644 --- a/src/apis/AppRegistry/index.js +++ b/src/apis/AppRegistry/index.js @@ -13,16 +13,18 @@ import invariant from 'fbjs/lib/invariant'; import { unmountComponentAtNode } from 'react-dom'; import renderApplication, { getApplication } from './renderApplication'; +import type { ComponentType } from 'react'; const emptyObject = {}; const runnables = {}; -export type ComponentProvider = () => ReactClass; +export type ComponentProvider = () => ComponentType; export type AppConfig = { appKey: string, component?: ComponentProvider, - run?: Function + run?: Function, + section?: boolean }; /** @@ -90,7 +92,7 @@ export default class AppRegistry { runnables[appKey].run(appParameters); } - static unmountApplicationComponentAtRootTag(rootTag) { + static unmountApplicationComponentAtRootTag(rootTag: Object) { unmountComponentAtNode(rootTag); } } diff --git a/src/apis/AppRegistry/renderApplication.js b/src/apis/AppRegistry/renderApplication.js index 502c2eb2e..7ecaa283d 100644 --- a/src/apis/AppRegistry/renderApplication.js +++ b/src/apis/AppRegistry/renderApplication.js @@ -13,11 +13,11 @@ import invariant from 'fbjs/lib/invariant'; import { render } from 'react-dom'; import AppContainer from './AppContainer'; import StyleSheet from '../../apis/StyleSheet'; -import React from 'react'; +import React, { type ComponentType } from 'react'; -export default function renderApplication( - RootComponent: ReactClass, - initialProps: Object, +export default function renderApplication( + RootComponent: ComponentType, + initialProps: Props, rootTag: any ) { invariant(rootTag, 'Expect to have a valid rootTag, instead got ', rootTag); @@ -30,7 +30,10 @@ export default function renderApplication( ); } -export function getApplication(RootComponent: ReactClass, initialProps: Object): Object { +export function getApplication( + RootComponent: ComponentType, + initialProps: Object +): Object { const element = ( diff --git a/src/apis/AsyncStorage/index.js b/src/apis/AsyncStorage/index.js index 9dd8165a4..10506a4f0 100644 --- a/src/apis/AsyncStorage/index.js +++ b/src/apis/AsyncStorage/index.js @@ -20,7 +20,7 @@ const mergeLocalStorageItem = (key, value) => { window.localStorage.setItem(key, nextValue); }; -const createPromise = (getValue, callback) => { +const createPromise = (getValue, callback): Promise<*> => { return new Promise((resolve, reject) => { try { const value = getValue(); @@ -37,7 +37,7 @@ const createPromise = (getValue, callback) => { }); }; -const createPromiseAll = (promises, callback, processResult) => { +const createPromiseAll = (promises, callback, processResult): Promise<*> => { return Promise.all(promises).then( result => { const value = processResult ? processResult(result) : null; @@ -55,7 +55,7 @@ export default class AsyncStorage { /** * Erases *all* AsyncStorage for the domain. */ - static clear(callback) { + static clear(callback?: Function): Promise<*> { return createPromise(() => { window.localStorage.clear(); }, callback); @@ -69,7 +69,7 @@ export default class AsyncStorage { /** * Gets *all* keys known to the app, for all callers, libraries, etc. */ - static getAllKeys(callback) { + static getAllKeys(callback?: Function): Promise<*> { return createPromise(() => { const numberOfKeys = window.localStorage.length; const keys = []; @@ -84,7 +84,7 @@ export default class AsyncStorage { /** * Fetches `key` value. */ - static getItem(key: string, callback) { + static getItem(key: string, callback?: Function): Promise<*> { return createPromise(() => { return window.localStorage.getItem(key); }, callback); @@ -96,7 +96,7 @@ export default class AsyncStorage { * * multiGet(['k1', 'k2']) -> [['k1', 'val1'], ['k2', 'val2']] */ - static multiGet(keys: Array, callback) { + static multiGet(keys: Array, callback?: Function): Promise<*> { const promises = keys.map(key => AsyncStorage.getItem(key)); const processResult = result => result.map((value, i) => [keys[i], value]); return createPromiseAll(promises, callback, processResult); @@ -105,7 +105,7 @@ export default class AsyncStorage { /** * Sets `value` for `key`. */ - static setItem(key: string, value: string, callback) { + static setItem(key: string, value: string, callback?: Function): Promise<*> { return createPromise(() => { window.localStorage.setItem(key, value); }, callback); @@ -115,7 +115,7 @@ export default class AsyncStorage { * Takes an array of key-value array pairs. * multiSet([['k1', 'val1'], ['k2', 'val2']]) */ - static multiSet(keyValuePairs: Array>, callback) { + static multiSet(keyValuePairs: Array>, callback?: Function): Promise<*> { const promises = keyValuePairs.map(item => AsyncStorage.setItem(item[0], item[1])); return createPromiseAll(promises, callback); } @@ -123,7 +123,7 @@ export default class AsyncStorage { /** * Merges existing value with input value, assuming they are stringified JSON. */ - static mergeItem(key: string, value: string, callback) { + static mergeItem(key: string, value: string, callback?: Function): Promise<*> { return createPromise(() => { mergeLocalStorageItem(key, value); }, callback); @@ -135,7 +135,7 @@ export default class AsyncStorage { * * multiMerge([['k1', 'val1'], ['k2', 'val2']]) */ - static multiMerge(keyValuePairs: Array>, callback) { + static multiMerge(keyValuePairs: Array>, callback?: Function): Promise<*> { const promises = keyValuePairs.map(item => AsyncStorage.mergeItem(item[0], item[1])); return createPromiseAll(promises, callback); } @@ -143,7 +143,7 @@ export default class AsyncStorage { /** * Removes a `key` */ - static removeItem(key: string, callback) { + static removeItem(key: string, callback?: Function): Promise<*> { return createPromise(() => { return window.localStorage.removeItem(key); }, callback); @@ -152,7 +152,7 @@ export default class AsyncStorage { /** * Delete all the keys in the `keys` array. */ - static multiRemove(keys: Array, callback) { + static multiRemove(keys: Array, callback?: Function): Promise<*> { const promises = keys.map(key => AsyncStorage.removeItem(key)); return createPromiseAll(promises, callback); } diff --git a/src/apis/Clipboard/index.js b/src/apis/Clipboard/index.js index 4564aa4af..0f7c83572 100644 --- a/src/apis/Clipboard/index.js +++ b/src/apis/Clipboard/index.js @@ -17,11 +17,11 @@ export default class Clipboard { ); } - static getString() { + static getString(): Promise { return Promise.resolve(''); } - static setString(text) { + static setString(text: string) { let success = false; const body = document.body; diff --git a/src/apis/Dimensions/index.js b/src/apis/Dimensions/index.js index eab513b44..b32e9a351 100644 --- a/src/apis/Dimensions/index.js +++ b/src/apis/Dimensions/index.js @@ -66,12 +66,12 @@ export default class Dimensions { } } - static addEventListener(type, handler): void { + static addEventListener(type: string, handler: Function): void { listeners[type] = listeners[type] || []; listeners[type].push(handler); } - static removeEventListener(type, handler): void { + static removeEventListener(type: string, handler: Function): void { if (Array.isArray(listeners[type])) { listeners[type] = listeners[type].filter(_handler => _handler !== handler); } diff --git a/src/apis/Linking/index.js b/src/apis/Linking/index.js index 42e4d89fd..4871ba9f3 100644 --- a/src/apis/Linking/index.js +++ b/src/apis/Linking/index.js @@ -17,13 +17,13 @@ const initialURL = canUseDOM ? window.location.href : ''; const Linking = { addEventListener() {}, removeEventListener() {}, - canOpenURL() { + canOpenURL(): Promise { return Promise.resolve(true); }, - getInitialURL() { + getInitialURL(): Promise { return Promise.resolve(initialURL); }, - openURL(url: string) { + openURL(url: string): Promise { try { iframeOpen(url); return Promise.resolve(); diff --git a/src/apis/StyleSheet/StyleSheetValidation.js b/src/apis/StyleSheet/StyleSheetValidation.js index 9f194a4f2..cbaa5cf45 100644 --- a/src/apis/StyleSheet/StyleSheetValidation.js +++ b/src/apis/StyleSheet/StyleSheetValidation.js @@ -24,7 +24,7 @@ import { number, oneOf, string } from 'prop-types'; const ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; export default class StyleSheetValidation { - static validateStyleProp(prop, style, caller) { + static validateStyleProp(prop: string, style: Object, caller: string) { if (process.env.NODE_ENV !== 'production') { const isCustomProperty = prop.indexOf('--') === 0; if (isCustomProperty) return; @@ -51,7 +51,7 @@ export default class StyleSheetValidation { } } - static validateStyle(name, styles) { + static validateStyle(name: string, styles: Object) { if (process.env.NODE_ENV !== 'production') { for (const prop in styles[name]) { StyleSheetValidation.validateStyleProp(prop, styles[name], 'StyleSheet ' + name); @@ -59,7 +59,7 @@ export default class StyleSheetValidation { } } - static addValidStylePropTypes(stylePropTypes) { + static addValidStylePropTypes(stylePropTypes: Object) { for (const key in stylePropTypes) { allStylePropTypes[key] = stylePropTypes[key]; } diff --git a/src/components/ActivityIndicator/index.js b/src/components/ActivityIndicator/index.js index 153979ca9..135ac292a 100644 --- a/src/components/ActivityIndicator/index.js +++ b/src/components/ActivityIndicator/index.js @@ -21,7 +21,7 @@ const createSvgCircle = style => ( ); -class ActivityIndicator extends Component { +class ActivityIndicator extends Component<*> { static displayName = 'ActivityIndicator'; static propTypes = { diff --git a/src/components/Button/__tests__/index-test.js b/src/components/Button/__tests__/index-test.js index f09f51589..a6307d390 100644 --- a/src/components/Button/__tests__/index-test.js +++ b/src/components/Button/__tests__/index-test.js @@ -1,4 +1,5 @@ /* eslint-env jasmine, jest */ +/* eslint-disable react/jsx-no-bind */ import React from 'react'; import Button from '..'; diff --git a/src/components/Button/index.js b/src/components/Button/index.js index 5da3bd147..967b02ad9 100644 --- a/src/components/Button/index.js +++ b/src/components/Button/index.js @@ -17,7 +17,7 @@ import Text from '../Text'; import { bool, func, string } from 'prop-types'; import React, { Component } from 'react'; -class Button extends Component { +class Button extends Component<*> { static propTypes = { accessibilityLabel: string, color: ColorPropType, diff --git a/src/components/Image/__tests__/index-test.js b/src/components/Image/__tests__/index-test.js index 95932198d..9ee0f4473 100644 --- a/src/components/Image/__tests__/index-test.js +++ b/src/components/Image/__tests__/index-test.js @@ -1,4 +1,5 @@ /* eslint-env jasmine, jest */ +/* eslint-disable react/jsx-no-bind */ import Image from '../'; import ImageLoader from '../../../modules/ImageLoader'; @@ -120,7 +121,7 @@ describe('components/Image', () => { const onLoadStub = jest.fn(); const uri = 'https://test.com/img.jpg'; const component = mount(); - component.setProps({ source: `https://blah.com/img.png` }); + component.setProps({ source: 'https://blah.com/img.png' }); jest.runOnlyPendingTimers(); expect(onLoadStub.mock.calls.length).toBe(2); }); diff --git a/src/components/Image/index.js b/src/components/Image/index.js index c01e3eeac..1fc236fe2 100644 --- a/src/components/Image/index.js +++ b/src/components/Image/index.js @@ -83,9 +83,11 @@ const resolveAssetSource = source => { return uri; }; -class Image extends Component { - state: { shouldDisplaySource: boolean }; +type State = { + shouldDisplaySource: boolean +}; +class Image extends Component<*, State> { static displayName = 'Image'; static contextTypes = { diff --git a/src/components/KeyboardAvoidingView/index.js b/src/components/KeyboardAvoidingView/index.js index ddb87e9a6..4d9b42efd 100644 --- a/src/components/KeyboardAvoidingView/index.js +++ b/src/components/KeyboardAvoidingView/index.js @@ -17,7 +17,7 @@ import React, { Component } from 'react'; import type { ViewLayout, ViewLayoutEvent } from '../View/ViewPropTypes'; -class KeyboardAvoidingView extends Component { +class KeyboardAvoidingView extends Component<*> { static propTypes = { ...ViewPropTypes, behavior: oneOf(['height', 'padding', 'position']), diff --git a/src/components/ProgressBar/index.js b/src/components/ProgressBar/index.js index f7bfb4abf..f14bb463d 100644 --- a/src/components/ProgressBar/index.js +++ b/src/components/ProgressBar/index.js @@ -17,7 +17,7 @@ import ViewPropTypes from '../View/ViewPropTypes'; import React, { Component } from 'react'; import { bool, number } from 'prop-types'; -class ProgressBar extends Component { +class ProgressBar extends Component<*> { _progressElement: View; static displayName = 'ProgressBar'; diff --git a/src/components/RefreshControl/index.js b/src/components/RefreshControl/index.js index 7b00f2a3f..bd0f00b96 100644 --- a/src/components/RefreshControl/index.js +++ b/src/components/RefreshControl/index.js @@ -16,7 +16,7 @@ import ViewPropTypes from '../View/ViewPropTypes'; import { arrayOf, bool, func, number, oneOf, string } from 'prop-types'; import React, { Component } from 'react'; -class RefreshControl extends Component { +class RefreshControl extends Component<*> { static propTypes = { ...ViewPropTypes, colors: arrayOf(ColorPropType), diff --git a/src/components/ScrollView/ScrollViewBase.js b/src/components/ScrollView/ScrollViewBase.js index ce263657e..5ff0a723b 100644 --- a/src/components/ScrollView/ScrollViewBase.js +++ b/src/components/ScrollView/ScrollViewBase.js @@ -48,7 +48,7 @@ const normalizeScrollEvent = e => ({ /** * Encapsulates the Web-specific scroll throttling and disabling logic */ -export default class ScrollViewBase extends Component { +export default class ScrollViewBase extends Component<*> { _viewRef: View; static propTypes = { @@ -148,7 +148,7 @@ export default class ScrollViewBase extends Component { }; }; - _handleScroll = (e: SyntheticEvent) => { + _handleScroll = (e: Object) => { e.persist(); e.stopPropagation(); const { scrollEventThrottle } = this.props; diff --git a/src/components/StaticContainer/index.js b/src/components/StaticContainer/index.js index b1301563d..5a774a33b 100644 --- a/src/components/StaticContainer/index.js +++ b/src/components/StaticContainer/index.js @@ -27,8 +27,14 @@ import { Children, Component } from 'react'; * * Typically, you will not need to use this component and should opt for normal * React reconciliation. - */ -export default class StaticContainer extends Component { +*/ + +type Props = { + children: any, + shouldUpdate: boolean +}; + +export default class StaticContainer extends Component { static propTypes = { children: any.isRequired, shouldUpdate: bool.isRequired diff --git a/src/components/StaticRenderer/index.js b/src/components/StaticRenderer/index.js index 0dcd719fe..a87adb0a6 100644 --- a/src/components/StaticRenderer/index.js +++ b/src/components/StaticRenderer/index.js @@ -27,7 +27,12 @@ import { bool, func } from 'prop-types'; * React reconciliation. */ -export default class StaticRenderer extends Component { +type Props = { + render: Function, + shouldUpdate: boolean +}; + +export default class StaticRenderer extends Component { static propTypes = { render: func.isRequired, shouldUpdate: bool.isRequired diff --git a/src/components/StatusBar/index.js b/src/components/StatusBar/index.js index 1d1b92e25..bc4cd964e 100644 --- a/src/components/StatusBar/index.js +++ b/src/components/StatusBar/index.js @@ -11,7 +11,7 @@ import { Component } from 'react'; -export default class StatusBar extends Component { +export default class StatusBar extends Component<*> { static setBackgroundColor() {} static setBarStyle() {} static setHidden() {} diff --git a/src/components/Switch/index.js b/src/components/Switch/index.js index 3f1744294..999138c61 100644 --- a/src/components/Switch/index.js +++ b/src/components/Switch/index.js @@ -11,14 +11,14 @@ import StyleSheet from '../../apis/StyleSheet'; import UIManager from '../../apis/UIManager'; import View from '../View'; import ViewPropTypes from '../View/ViewPropTypes'; -import React, { PureComponent } from 'react'; +import React, { Component } from 'react'; import { bool, func } from 'prop-types'; const emptyObject = {}; const thumbDefaultBoxShadow = '0px 1px 3px rgba(0,0,0,0.5)'; const thumbFocusedBoxShadow = `${thumbDefaultBoxShadow}, 0 0 0 10px rgba(0,0,0,0.1)`; -class Switch extends PureComponent { +class Switch extends Component<*> { _checkboxElement: HTMLInputElement; _thumbElement: View; diff --git a/src/components/Text/__tests__/index-test.js b/src/components/Text/__tests__/index-test.js index d7dc99835..b190eea33 100644 --- a/src/components/Text/__tests__/index-test.js +++ b/src/components/Text/__tests__/index-test.js @@ -1,4 +1,5 @@ /* eslint-env jasmine, jest */ +/* eslint-disable react/jsx-no-bind */ import React from 'react'; import { render, shallow } from 'enzyme'; diff --git a/src/components/Text/index.js b/src/components/Text/index.js index e08bf5507..b12d9e368 100644 --- a/src/components/Text/index.js +++ b/src/components/Text/index.js @@ -18,7 +18,7 @@ import createElement from '../../modules/createElement'; import StyleSheet from '../../apis/StyleSheet'; import TextPropTypes from './TextPropTypes'; -class Text extends Component { +class Text extends Component<*> { static displayName = 'Text'; static propTypes = TextPropTypes; diff --git a/src/components/TextInput/index.js b/src/components/TextInput/index.js index 2b3cf730f..4a6316f0a 100644 --- a/src/components/TextInput/index.js +++ b/src/components/TextInput/index.js @@ -68,7 +68,7 @@ const setSelection = (node, selection) => { } catch (e) {} }; -class TextInput extends Component { +class TextInput extends Component<*> { _node: HTMLInputElement; static displayName = 'TextInput'; diff --git a/src/components/Touchable/TouchableWithoutFeedback.js b/src/components/Touchable/TouchableWithoutFeedback.js index 59964079d..4b8b7fbb8 100644 --- a/src/components/Touchable/TouchableWithoutFeedback.js +++ b/src/components/Touchable/TouchableWithoutFeedback.js @@ -14,7 +14,7 @@ import BaseComponentPropTypes from '../../propTypes/BaseComponentPropTypes'; import createReactClass from 'create-react-class'; import EdgeInsetsPropType from '../../propTypes/EdgeInsetsPropType'; import ensurePositiveDelayProps from './ensurePositiveDelayProps'; -import React from 'react'; +import React, { type Element } from 'react'; import StyleSheet from '../../apis/StyleSheet'; import TimerMixin from 'react-timer-mixin'; import Touchable from './Touchable'; @@ -144,7 +144,7 @@ const TouchableWithoutFeedback = createReactClass({ return this.props.delayPressOut || 0; }, - render: function(): React.Element { + render: function(): Element { const { /* eslint-disable */ delayLongPress, diff --git a/src/components/UnimplementedView/index.js b/src/components/UnimplementedView/index.js index 5d0c34ab9..bf5bd47c8 100644 --- a/src/components/UnimplementedView/index.js +++ b/src/components/UnimplementedView/index.js @@ -17,7 +17,7 @@ import React, { Component } from 'react'; * Common implementation for a simple stubbed view. */ /* eslint-disable react/prop-types */ -class UnimplementedView extends Component { +class UnimplementedView extends Component<*, *> { setNativeProps() { // Do nothing. // This method is required in order to use this view as a Touchable* child. diff --git a/src/components/View/ViewPropTypes.js b/src/components/View/ViewPropTypes.js index d9129c133..74c688304 100644 --- a/src/components/View/ViewPropTypes.js +++ b/src/components/View/ViewPropTypes.js @@ -11,11 +11,13 @@ */ import BaseComponentPropTypes from '../../propTypes/BaseComponentPropTypes'; -import EdgeInsetsPropType from '../../propTypes/EdgeInsetsPropType'; +import EdgeInsetsPropType, { type EdgeInsetsProp } from '../../propTypes/EdgeInsetsPropType'; import StyleSheetPropType from '../../propTypes/StyleSheetPropType'; import ViewStylePropTypes from './ViewStylePropTypes'; import { any, bool, func, oneOf } from 'prop-types'; +const stylePropType = StyleSheetPropType(ViewStylePropTypes); + export type ViewLayout = { x: number, y: number, @@ -29,6 +31,46 @@ export type ViewLayoutEvent = { } }; +export type ViewProps = { + accessibilityComponentType?: string, + accessibilityLabel?: string, + accessibilityLiveRegion?: 'none' | 'polite' | 'assertive', + accessibilityRole?: string, + accessibilityTraits?: string | Array, + accessible?: bool, + children?: any, + collapsable?: bool, + hitSlop?: EdgeInsetsProp, + importantForAccessibility?: 'auto'| 'yes'| 'no'| 'no-hide-descendants', + onAccessibilityTap?: Function, + onClick?: Function, + onClickCapture?: Function, + onLayout?: (event: ViewLayoutEvent) => void, + onMagicTap?: Function, + onResponderGrant?: Function, + onResponderMove?: Function, + onResponderReject?: Function, + onResponderRelease?: Function, + onResponderTerminate?: Function, + onResponderTerminationRequest?: Function, + onStartShouldSetResponder?: Function, + onStartShouldSetResponderCapture?: Function, + onMoveShouldSetResponder?: Function, + onMoveShouldSetResponderCapture?: Function, + onTouchCancel?: Function, + onTouchCancelCapture?: Function, + onTouchEnd?: Function, + onTouchEndCapture?: Function, + onTouchMove?: Function, + onTouchMoveCapture?: Function, + onTouchStart?: Function, + onTouchStartCapture?: Function, + pointerEvents?: 'box-none'| 'none'| 'box-only'| 'auto', + removeClippedSubviews?: boolean, + style?: stylePropType, + testID?: string, +} + const ViewPropTypes = { ...BaseComponentPropTypes, children: any, @@ -56,7 +98,7 @@ const ViewPropTypes = { onTouchStart: func, onTouchStartCapture: func, pointerEvents: oneOf(['auto', 'box-none', 'box-only', 'none']), - style: StyleSheetPropType(ViewStylePropTypes) + style: stylePropType }; export default ViewPropTypes; diff --git a/src/components/View/index.js b/src/components/View/index.js index cf94c9f12..09d7e10d1 100644 --- a/src/components/View/index.js +++ b/src/components/View/index.js @@ -13,7 +13,7 @@ import { bool } from 'prop-types'; import createElement from '../../modules/createElement'; import invariant from 'fbjs/lib/invariant'; import StyleSheet from '../../apis/StyleSheet'; -import ViewPropTypes from './ViewPropTypes'; +import ViewPropTypes, { type ViewProps } from './ViewPropTypes'; import React, { Component } from 'react'; const calculateHitSlopStyle = hitSlop => { @@ -27,7 +27,7 @@ const calculateHitSlopStyle = hitSlop => { return hitStyle; }; -class View extends Component { +class View extends Component { static displayName = 'View'; static contextTypes = { @@ -39,7 +39,6 @@ class View extends Component { render() { const { hitSlop, - style, /* eslint-disable */ collapsable, onAccessibilityTap, @@ -61,7 +60,7 @@ class View extends Component { const { isInAParentText } = this.context; - otherProps.style = [styles.initial, isInAParentText && styles.inline, style]; + otherProps.style = [styles.initial, isInAParentText && styles.inline, this.props.style]; if (hitSlop) { const hitSlopStyle = calculateHitSlopStyle(hitSlop); diff --git a/src/modules/applyLayout/index.js b/src/modules/applyLayout/index.js index 110d98507..f3c0d7d56 100644 --- a/src/modules/applyLayout/index.js +++ b/src/modules/applyLayout/index.js @@ -5,7 +5,7 @@ * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. * - * @flow + * @noflow */ import { canUseDOM } from 'fbjs/lib/ExecutionEnvironment'; @@ -38,7 +38,7 @@ const safeOverride = (original, next) => { return next; }; -const applyLayout = (Component: ReactClass) => { +const applyLayout = (Component) => { const componentDidMount = Component.prototype.componentDidMount; const componentDidUpdate = Component.prototype.componentDidUpdate; const componentWillUnmount = Component.prototype.componentWillUnmount; diff --git a/src/modules/applyNativeMethods/index.js b/src/modules/applyNativeMethods/index.js index c809da769..d5587c225 100644 --- a/src/modules/applyNativeMethods/index.js +++ b/src/modules/applyNativeMethods/index.js @@ -5,12 +5,12 @@ * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. * - * @flow + * @noflow */ import NativeMethodsMixin from '../NativeMethodsMixin'; -const applyNativeMethods = (Component: ReactClass) => { +const applyNativeMethods = (Component) => { Object.keys(NativeMethodsMixin).forEach(method => { if (!Component.prototype[method]) { Component.prototype[method] = NativeMethodsMixin[method]; diff --git a/src/propTypes/ColorPropType.js b/src/propTypes/ColorPropType.js index 628cc69df..a02ee8685 100644 --- a/src/propTypes/ColorPropType.js +++ b/src/propTypes/ColorPropType.js @@ -7,7 +7,7 @@ * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule ColorPropType - * @flow + * @noflow */ const isWebColor = (color: string) => diff --git a/yarn.lock b/yarn.lock index 2c738e817..6af80148f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1843,14 +1843,14 @@ eslint-plugin-promise@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca" -eslint-plugin-react@^7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz#300a95861b9729c087d362dd64abcc351a74364a" +eslint-plugin-react@^7.5.1: + version "7.5.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz#52e56e8d80c810de158859ef07b880d2f56ee30b" dependencies: doctrine "^2.0.0" has "^1.0.1" jsx-ast-utils "^2.0.0" - prop-types "^15.5.10" + prop-types "^15.6.0" eslint-scope@^3.7.1: version "3.7.1" @@ -2213,9 +2213,9 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" -flow-bin@^0.49.1: - version "0.49.1" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.49.1.tgz#c9e456b3173a7535a4ffaf28956352c63bb8e3e9" +flow-bin@^0.60.1: + version "0.60.1" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.60.1.tgz#0f4fa7b49be2a916f18cd946fc4a51e32ffe4b48" for-each@~0.3.2: version "0.3.2" From 5b5b72cc194acd9f30035f54adebfec23d621200 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 2 Dec 2017 15:43:07 -0800 Subject: [PATCH 006/153] Update eslint and prettier --- .../TextInput/examples/TextInputEvents.js | 6 +- package.json | 10 +- src/apis/AppRegistry/renderApplication.js | 5 +- src/apis/StyleSheet/StyleRegistry.js | 2 +- src/components/StaticContainer/index.js | 2 +- .../Touchable/TouchableWithoutFeedback.js | 3 +- src/components/View/ViewPropTypes.js | 12 +- src/modules/applyLayout/index.js | 2 +- src/modules/applyNativeMethods/index.js | 2 +- src/vendor/setValueForStyles/index.js | 14 +- yarn.lock | 186 ++++++++++++++---- 11 files changed, 177 insertions(+), 67 deletions(-) diff --git a/docs/storybook/1-components/TextInput/examples/TextInputEvents.js b/docs/storybook/1-components/TextInput/examples/TextInputEvents.js index c73d52bd4..b78a33672 100644 --- a/docs/storybook/1-components/TextInput/examples/TextInputEvents.js +++ b/docs/storybook/1-components/TextInput/examples/TextInputEvents.js @@ -46,9 +46,11 @@ export default class TextEventsExample extends React.Component { event.nativeEvent.selection.start + ',' + event.nativeEvent.selection.end - )} + ) + } onSubmitEditing={event => - this.updateText('onSubmitEditing text: ' + event.nativeEvent.text)} + this.updateText('onSubmitEditing text: ' + event.nativeEvent.text) + } placeholder="Enter text to see events" style={[helperStyles.textinput, { maxWidth: 200 }]} /> diff --git a/package.json b/package.json index d9a25043c..c3d25a290 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "devDependencies": { "babel-cli": "^6.26.0", "babel-core": "^6.26.0", - "babel-eslint": "^7.2.3", + "babel-eslint": "^8.0.3", "babel-loader": "^7.1.2", "babel-plugin-tester": "^4.0.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.9", @@ -87,15 +87,15 @@ "enzyme": "^3.1.0", "enzyme-adapter-react-16": "^1.0.2", "enzyme-to-json": "^3.1.4", - "eslint": "^4.6.1", - "eslint-config-prettier": "^2.6.0", - "eslint-plugin-promise": "^3.5.0", + "eslint": "^4.12.1", + "eslint-config-prettier": "^2.9.0", + "eslint-plugin-promise": "^3.6.0", "eslint-plugin-react": "^7.5.1", "file-loader": "^1.1.4", "flow-bin": "^0.60.1", "jest": "^21.2.1", "lint-staged": "^4.1.3", - "prettier": "^1.7.3", + "prettier": "^1.8.2", "raf": "^3.3.2", "react": "^16.0.0", "react-dom": "^16.0.0", diff --git a/src/apis/AppRegistry/renderApplication.js b/src/apis/AppRegistry/renderApplication.js index 7ecaa283d..d380e2f99 100644 --- a/src/apis/AppRegistry/renderApplication.js +++ b/src/apis/AppRegistry/renderApplication.js @@ -30,10 +30,7 @@ export default function renderApplication( ); } -export function getApplication( - RootComponent: ComponentType, - initialProps: Object -): Object { +export function getApplication(RootComponent: ComponentType, initialProps: Object): Object { const element = ( diff --git a/src/apis/StyleSheet/StyleRegistry.js b/src/apis/StyleSheet/StyleRegistry.js index d6a0a298b..5d0de1284 100644 --- a/src/apis/StyleSheet/StyleRegistry.js +++ b/src/apis/StyleSheet/StyleRegistry.js @@ -182,7 +182,7 @@ export default class StyleRegistry { } /** - * Caching layer over 'resolveStyle' + * Caching layer over 'resolveStyle' */ _resolveStyleIfNeeded(style, options, key) { const dir = I18nManager.isRTL ? 'rtl' : 'ltr'; diff --git a/src/components/StaticContainer/index.js b/src/components/StaticContainer/index.js index 5a774a33b..813bd2114 100644 --- a/src/components/StaticContainer/index.js +++ b/src/components/StaticContainer/index.js @@ -27,7 +27,7 @@ import { Children, Component } from 'react'; * * Typically, you will not need to use this component and should opt for normal * React reconciliation. -*/ + */ type Props = { children: any, diff --git a/src/components/Touchable/TouchableWithoutFeedback.js b/src/components/Touchable/TouchableWithoutFeedback.js index 4b8b7fbb8..45efd4f99 100644 --- a/src/components/Touchable/TouchableWithoutFeedback.js +++ b/src/components/Touchable/TouchableWithoutFeedback.js @@ -19,7 +19,7 @@ import StyleSheet from '../../apis/StyleSheet'; import TimerMixin from 'react-timer-mixin'; import Touchable from './Touchable'; import warning from 'fbjs/lib/warning'; -import { bool, func, number, string } from 'prop-types'; +import { any, bool, func, number, string } from 'prop-types'; type Event = Object; @@ -44,6 +44,7 @@ const TouchableWithoutFeedback = createReactClass({ accessibilityRole: BaseComponentPropTypes.accessibilityRole, accessibilityTraits: BaseComponentPropTypes.accessibilityTraits, accessible: bool, + children: any, /** * Delay in ms, from onPressIn, before onLongPress is called. */ diff --git a/src/components/View/ViewPropTypes.js b/src/components/View/ViewPropTypes.js index 74c688304..923e145da 100644 --- a/src/components/View/ViewPropTypes.js +++ b/src/components/View/ViewPropTypes.js @@ -37,11 +37,11 @@ export type ViewProps = { accessibilityLiveRegion?: 'none' | 'polite' | 'assertive', accessibilityRole?: string, accessibilityTraits?: string | Array, - accessible?: bool, + accessible?: boolean, children?: any, - collapsable?: bool, + collapsable?: boolean, hitSlop?: EdgeInsetsProp, - importantForAccessibility?: 'auto'| 'yes'| 'no'| 'no-hide-descendants', + importantForAccessibility?: 'auto' | 'yes' | 'no' | 'no-hide-descendants', onAccessibilityTap?: Function, onClick?: Function, onClickCapture?: Function, @@ -65,11 +65,11 @@ export type ViewProps = { onTouchMoveCapture?: Function, onTouchStart?: Function, onTouchStartCapture?: Function, - pointerEvents?: 'box-none'| 'none'| 'box-only'| 'auto', + pointerEvents?: 'box-none' | 'none' | 'box-only' | 'auto', removeClippedSubviews?: boolean, style?: stylePropType, - testID?: string, -} + testID?: string +}; const ViewPropTypes = { ...BaseComponentPropTypes, diff --git a/src/modules/applyLayout/index.js b/src/modules/applyLayout/index.js index f3c0d7d56..2e1702532 100644 --- a/src/modules/applyLayout/index.js +++ b/src/modules/applyLayout/index.js @@ -38,7 +38,7 @@ const safeOverride = (original, next) => { return next; }; -const applyLayout = (Component) => { +const applyLayout = Component => { const componentDidMount = Component.prototype.componentDidMount; const componentDidUpdate = Component.prototype.componentDidUpdate; const componentWillUnmount = Component.prototype.componentWillUnmount; diff --git a/src/modules/applyNativeMethods/index.js b/src/modules/applyNativeMethods/index.js index d5587c225..d70c431e6 100644 --- a/src/modules/applyNativeMethods/index.js +++ b/src/modules/applyNativeMethods/index.js @@ -10,7 +10,7 @@ import NativeMethodsMixin from '../NativeMethodsMixin'; -const applyNativeMethods = (Component) => { +const applyNativeMethods = Component => { Object.keys(NativeMethodsMixin).forEach(method => { if (!Component.prototype[method]) { Component.prototype[method] = NativeMethodsMixin[method]; diff --git a/src/vendor/setValueForStyles/index.js b/src/vendor/setValueForStyles/index.js index a88177f3e..5ce55b590 100644 --- a/src/vendor/setValueForStyles/index.js +++ b/src/vendor/setValueForStyles/index.js @@ -14,13 +14,13 @@ import dangerousStyleValue from '../dangerousStyleValue'; import warnValidStyle from '../warnValidStyle'; /** - * Sets the value for multiple styles on a node. If a value is specified as - * '' (empty string), the corresponding style property will be unset. - * - * @param {DOMElement} node - * @param {object} styles - * @param {ReactDOMComponent} component - */ + * Sets the value for multiple styles on a node. If a value is specified as + * '' (empty string), the corresponding style property will be unset. + * + * @param {DOMElement} node + * @param {object} styles + * @param {ReactDOMComponent} component + */ const setValueForStyles = function(node, styles, component) { var style = node.style; for (var styleName in styles) { diff --git a/yarn.lock b/yarn.lock index 6af80148f..b29da859e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,59 @@ # yarn lockfile v1 +"@babel/code-frame@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz#473d021ecc573a2cce1c07d5b509d5215f46ba35" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@babel/helper-function-name@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57" + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.31" + "@babel/template" "7.0.0-beta.31" + "@babel/traverse" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + +"@babel/helper-get-function-arity@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz#1176d79252741218e0aec872ada07efb2b37a493" + dependencies: + "@babel/types" "7.0.0-beta.31" + +"@babel/template@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda" + dependencies: + "@babel/code-frame" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + babylon "7.0.0-beta.31" + lodash "^4.2.0" + +"@babel/traverse@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.31.tgz#db399499ad74aefda014f0c10321ab255134b1df" + dependencies: + "@babel/code-frame" "7.0.0-beta.31" + "@babel/helper-function-name" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + babylon "7.0.0-beta.31" + debug "^3.0.1" + globals "^10.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +"@babel/types@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.31.tgz#42c9c86784f674c173fb21882ca9643334029de4" + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + "@types/node@^6.0.46": version "6.0.88" resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.88.tgz#f618f11a944f6a18d92b5c472028728a3e3d4b66" @@ -51,6 +104,10 @@ acorn@^5.0.0, acorn@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75" +acorn@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" + ajv-keywords@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.1.1.tgz#02550bc605a3e576041565628af972e06c549d50" @@ -82,7 +139,7 @@ ajv@^5.0.0: json-schema-traverse "^0.3.0" json-stable-stringify "^1.0.1" -ajv@^5.1.5, ajv@^5.2.0: +ajv@^5.1.5: version "5.2.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.0.tgz#c1735024c5da2ef75cc190713073d44f098bf486" dependencies: @@ -91,6 +148,15 @@ ajv@^5.1.5, ajv@^5.2.0: json-schema-traverse "^0.3.0" json-stable-stringify "^1.0.1" +ajv@^5.3.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.1.tgz#b38bb8876d9e86bee994956a04e721e88b248eb2" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -344,14 +410,14 @@ babel-core@^6.0.0, babel-core@^6.25.0, babel-core@^6.26.0: slash "^1.0.0" source-map "^0.5.6" -babel-eslint@^7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" +babel-eslint@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.3.tgz#f29ecf02336be438195325cd47c468da81ee4e98" dependencies: - babel-code-frame "^6.22.0" - babel-traverse "^6.23.1" - babel-types "^6.23.0" - babylon "^6.17.0" + "@babel/code-frame" "7.0.0-beta.31" + "@babel/traverse" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + babylon "7.0.0-beta.31" babel-generator@^6.18.0, babel-generator@^6.26.0: version "6.26.0" @@ -776,7 +842,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0: +babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" dependencies: @@ -790,7 +856,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-tr invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: @@ -799,7 +865,11 @@ babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.23.0, babel-types@^6.24 lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@^6.13.0, babylon@^6.17.0, babylon@^6.18.0: +babylon@7.0.0-beta.31: + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f" + +babylon@^6.13.0, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -1049,6 +1119,14 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + chalk@^2.0.1, chalk@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" @@ -1445,6 +1523,12 @@ debug@^2.2.0, debug@^2.6.3, debug@^2.6.8: dependencies: ms "2.0.0" +debug@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + debug@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" @@ -1573,6 +1657,12 @@ doctrine@^2.0.0: esutils "^2.0.2" isarray "^1.0.0" +doctrine@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075" + dependencies: + esutils "^2.0.2" + dom-serializer@0, dom-serializer@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" @@ -1833,15 +1923,15 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-prettier@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.6.0.tgz#f21db0ebb438ad678fb98946097c4bb198befccc" +eslint-config-prettier@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" dependencies: get-stdin "^5.0.1" -eslint-plugin-promise@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca" +eslint-plugin-promise@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz#54b7658c8f454813dc2a870aff8152ec4969ba75" eslint-plugin-react@^7.5.1: version "7.5.1" @@ -1859,32 +1949,32 @@ eslint-scope@^3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.6.1.tgz#ddc7fc7fd70bf93205b0b3449bb16a1e9e7d4950" +eslint@^4.12.1: + version "4.12.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.12.1.tgz#5ec1973822b4a066b353770c3c6d69a2a188e880" dependencies: - ajv "^5.2.0" + ajv "^5.3.0" babel-code-frame "^6.22.0" chalk "^2.1.0" concat-stream "^1.6.0" cross-spawn "^5.1.0" - debug "^2.6.8" - doctrine "^2.0.0" + debug "^3.0.1" + doctrine "^2.0.2" eslint-scope "^3.7.1" - espree "^3.5.0" + espree "^3.5.2" esquery "^1.0.0" estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" functional-red-black-tree "^1.0.1" glob "^7.1.2" - globals "^9.17.0" + globals "^11.0.1" ignore "^3.3.3" imurmurhash "^0.1.4" inquirer "^3.0.6" is-resolvable "^1.0.0" js-yaml "^3.9.1" - json-stable-stringify "^1.0.1" + json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" lodash "^4.17.4" minimatch "^3.0.2" @@ -1892,7 +1982,7 @@ eslint@^4.6.1: natural-compare "^1.4.0" optionator "^0.8.2" path-is-inside "^1.0.2" - pluralize "^4.0.0" + pluralize "^7.0.0" progress "^2.0.0" require-uncached "^1.0.3" semver "^5.3.0" @@ -1901,11 +1991,11 @@ eslint@^4.6.1: table "^4.0.1" text-table "~0.2.0" -espree@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.0.tgz#98358625bdd055861ea27e2867ea729faf463d8d" +espree@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca" dependencies: - acorn "^5.1.1" + acorn "^5.2.1" acorn-jsx "^3.0.0" esprima@^2.7.1: @@ -2097,6 +2187,10 @@ fast-deep-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + fast-levenshtein@~2.0.4: version "2.0.5" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz#bd33145744519ab1c36c3ee9f31f08e9079b67f2" @@ -2406,7 +2500,15 @@ global@^4.3.0: min-document "^2.19.0" process "~0.5.1" -globals@^9.17.0, globals@^9.18.0: +globals@^10.0.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7" + +globals@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.0.1.tgz#12a87bb010e5154396acc535e1e43fc753b0e5e8" + +globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -3300,6 +3402,10 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" @@ -4196,9 +4302,9 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" -pluralize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762" +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" prelude-ls@~1.1.2: version "1.1.2" @@ -4212,9 +4318,9 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.7.3.tgz#8e6974725273914b1c47439959dd3d3ba53664b6" +prettier@^1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.8.2.tgz#bff83e7fd573933c607875e5ba3abbdffb96aeb8" pretty-format@^20.0.3: version "20.0.3" @@ -5139,6 +5245,10 @@ to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + tough-cookie@^2.3.2, tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" From fca04c41256952638748dbd49ae9ff243b9c8129 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 2 Dec 2017 15:45:36 -0800 Subject: [PATCH 007/153] Update enzyme --- package.json | 6 +++--- yarn.lock | 43 +++++++++++++++++++++++++------------------ 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index c3d25a290..57678c296 100644 --- a/package.json +++ b/package.json @@ -84,9 +84,9 @@ "babel-preset-react-native": "^4.0.0", "caniuse-api": "^2.0.0", "del-cli": "^1.1.0", - "enzyme": "^3.1.0", - "enzyme-adapter-react-16": "^1.0.2", - "enzyme-to-json": "^3.1.4", + "enzyme": "^3.2.0", + "enzyme-adapter-react-16": "^1.1.0", + "enzyme-to-json": "^3.2.2", "eslint": "^4.12.1", "eslint-config-prettier": "^2.9.0", "eslint-plugin-promise": "^3.6.0", diff --git a/yarn.lock b/yarn.lock index b29da859e..97addf7cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1774,45 +1774,46 @@ entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" -enzyme-adapter-react-16@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.0.2.tgz#8c6f431f17c69e1e9eeb25ca4bd92f31971eb2dd" +enzyme-adapter-react-16@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.0.tgz#86c5db7c10f0be6ec25d54ca41b59f2abb397cf4" dependencies: - enzyme-adapter-utils "^1.0.0" + enzyme-adapter-utils "^1.1.0" lodash "^4.17.4" object.assign "^4.0.4" object.values "^1.0.4" prop-types "^15.5.10" react-test-renderer "^16.0.0-0" -enzyme-adapter-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.0.0.tgz#e94eee63da9a798d498adb1162a2102ed04fc638" +enzyme-adapter-utils@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.2.0.tgz#7f4471ee0a70b91169ec8860d2bf0a6b551664b2" dependencies: lodash "^4.17.4" object.assign "^4.0.4" prop-types "^15.5.10" -enzyme-to-json@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.1.4.tgz#a4a85a8f7b561cb8c9c0d728ad1b619a3fed7df2" +enzyme-to-json@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.2.2.tgz#110047c68dda97aaeb7af3cee7d995fe3d17e82a" dependencies: lodash "^4.17.4" -enzyme@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.1.0.tgz#d8ca84085790fbcec6ed40badd14478faee4c25a" +enzyme@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.2.0.tgz#998bdcda0fc71b8764a0017f7cc692c943f54a7a" dependencies: cheerio "^1.0.0-rc.2" function.prototype.name "^1.0.3" + has "^1.0.1" is-subset "^0.1.1" lodash "^4.17.4" object-is "^1.0.1" object.assign "^4.0.4" object.entries "^1.0.4" object.values "^1.0.4" - raf "^3.3.2" - rst-selector-parser "^2.2.2" + raf "^3.4.0" + rst-selector-parser "^2.2.3" "errno@>=0.1.1 <0.2.0-0", errno@^0.1.3: version "0.1.4" @@ -4425,6 +4426,12 @@ raf@^3.3.2: dependencies: performance-now "^2.1.0" +raf@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" + dependencies: + performance-now "^2.1.0" + railroad-diagrams@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" @@ -4758,9 +4765,9 @@ ripemd160@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" -rst-selector-parser@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.2.tgz#9927b619bd5af8dc23a76c64caef04edf90d2c65" +rst-selector-parser@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" dependencies: lodash.flattendeep "^4.4.0" nearley "^2.7.10" From 79208720d1eddf107ce38c2775e78112dcbe1eb5 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 2 Dec 2017 15:48:42 -0800 Subject: [PATCH 008/153] Update webpack tools --- package.json | 10 ++++----- yarn.lock | 60 ++++++++++++++++++++++++++++++++-------------------- 2 files changed, 42 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index 57678c296..1599b0084 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "babel-eslint": "^8.0.3", "babel-loader": "^7.1.2", "babel-plugin-tester": "^4.0.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.9", + "babel-plugin-transform-react-remove-prop-types": "^0.4.10", "babel-preset-react-native": "^4.0.0", "caniuse-api": "^2.0.0", "del-cli": "^1.1.0", @@ -91,7 +91,7 @@ "eslint-config-prettier": "^2.9.0", "eslint-plugin-promise": "^3.6.0", "eslint-plugin-react": "^7.5.1", - "file-loader": "^1.1.4", + "file-loader": "^1.1.5", "flow-bin": "^0.60.1", "jest": "^21.2.1", "lint-staged": "^4.1.3", @@ -100,9 +100,9 @@ "react": "^16.0.0", "react-dom": "^16.0.0", "react-test-renderer": "^16.0.0", - "url-loader": "^0.5.9", - "webpack": "^3.6.0", - "webpack-bundle-analyzer": "^2.9.0" + "url-loader": "^0.6.2", + "webpack": "^3.9.1", + "webpack-bundle-analyzer": "^2.9.1" }, "peerDependencies": { "react": "16.x.x", diff --git a/yarn.lock b/yarn.lock index 97addf7cc..6ca7d0bb4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -335,6 +335,10 @@ async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -743,9 +747,9 @@ babel-plugin-transform-react-jsx@^6.5.0: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.0.0" -babel-plugin-transform-react-remove-prop-types@^0.4.9: - version "0.4.9" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.9.tgz#6805ef83d77bda94ded472ff2f2836bacd6ac44c" +babel-plugin-transform-react-remove-prop-types@^0.4.10: + version "0.4.10" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.10.tgz#3c7f3a03ad8aa6bb8c00e93fd13a433910444545" babel-plugin-transform-regenerator@^6.5.0: version "6.16.1" @@ -2234,9 +2238,9 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.4.tgz#5ca9384adfafe008077c3439a435b2781a889ef5" +file-loader@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa" dependencies: loader-utils "^1.0.2" schema-utils "^0.3.0" @@ -3742,10 +3746,14 @@ mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: dependencies: mime-db "~1.25.0" -mime@1.3.4, mime@1.3.x: +mime@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" +mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" @@ -4794,10 +4802,14 @@ rxjs@^5.0.0-beta.11: dependencies: symbol-observable "^1.0.1" -safe-buffer@^5.0.1, safe-buffer@~5.0.1: +safe-buffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" +safe-buffer@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + sane@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sane/-/sane-2.0.0.tgz#99cb79f21f4a53a69d4d0cd957c2db04024b8eb2" @@ -5377,12 +5389,13 @@ update-notifier@^2.1.0: semver-diff "^2.0.0" xdg-basedir "^3.0.0" -url-loader@^0.5.9: - version "0.5.9" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.9.tgz#cc8fea82c7b906e7777019250869e569e995c295" +url-loader@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" dependencies: loader-utils "^1.0.2" - mime "1.3.x" + mime "^1.4.1" + schema-utils "^0.3.0" url-parse-lax@^1.0.0: version "1.0.0" @@ -5474,9 +5487,9 @@ webidl-conversions@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" -webpack-bundle-analyzer@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.0.tgz#b58bc34cc30b27ffdbaf3d00bf27aba6fa29c6e3" +webpack-bundle-analyzer@^2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.1.tgz#c2c8e03e8e5768ed288b39ae9e27a8b8d7b9d476" dependencies: acorn "^5.1.1" chalk "^1.1.3" @@ -5488,7 +5501,7 @@ webpack-bundle-analyzer@^2.9.0: lodash "^4.17.4" mkdirp "^0.5.1" opener "^1.4.3" - ws "^2.3.1" + ws "^3.3.1" webpack-sources@^1.0.1: version "1.0.1" @@ -5497,9 +5510,9 @@ webpack-sources@^1.0.1: source-list-map "^2.0.0" source-map "~0.5.3" -webpack@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.6.0.tgz#a89a929fbee205d35a4fa2cc487be9cbec8898bc" +webpack@^3.9.1: + version "3.9.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.9.1.tgz#9a60aa544ed5d4d454c069e3f521aa007e02643c" dependencies: acorn "^5.0.0" acorn-dynamic-import "^2.0.0" @@ -5606,11 +5619,12 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" +ws@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.2.tgz#96c1d08b3fefda1d5c1e33700d3bfaa9be2d5608" dependencies: - safe-buffer "~5.0.1" + async-limiter "~1.0.0" + safe-buffer "~5.1.0" ultron "~1.1.0" xdg-basedir@^3.0.0: From ff2b0c9bdcf4960afc764e8823f6f2ac38eaaf60 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 2 Dec 2017 15:50:17 -0800 Subject: [PATCH 009/153] Update to React@16.2 dev dependencies --- package.json | 6 +++--- yarn.lock | 22 +++++++++++++++------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 1599b0084..358406c6e 100644 --- a/package.json +++ b/package.json @@ -97,9 +97,9 @@ "lint-staged": "^4.1.3", "prettier": "^1.8.2", "raf": "^3.3.2", - "react": "^16.0.0", - "react-dom": "^16.0.0", - "react-test-renderer": "^16.0.0", + "react": "^16.2.0", + "react-dom": "^16.2.0", + "react-test-renderer": "^16.2.0", "url-loader": "^0.6.2", "webpack": "^3.9.1", "webpack-bundle-analyzer": "^2.9.1" diff --git a/yarn.lock b/yarn.lock index 6ca7d0bb4..638730c03 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4488,9 +4488,9 @@ react-deep-force-update@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.0.1.tgz#f911b5be1d2a6fe387507dd6e9a767aa2924b4c7" -react-dom@^16.0.0: - version "16.0.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.0.0.tgz#9cc3079c3dcd70d4c6e01b84aab2a7e34c303f58" +react-dom@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" dependencies: fbjs "^0.8.16" loose-envify "^1.1.0" @@ -4504,13 +4504,21 @@ react-proxy@^1.1.7: lodash "^4.6.1" react-deep-force-update "^1.0.0" -react-test-renderer@^16.0.0, react-test-renderer@^16.0.0-0: +react-test-renderer@^16.0.0-0: version "16.0.0" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.0.0.tgz#9fe7b8308f2f71f29fc356d4102086f131c9cb15" dependencies: fbjs "^0.8.16" object-assign "^4.1.1" +react-test-renderer@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211" + dependencies: + fbjs "^0.8.16" + object-assign "^4.1.1" + prop-types "^15.6.0" + react-timer-mixin@^0.13.3: version "0.13.3" resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz#0da8b9f807ec07dc3e854d082c737c65605b3d22" @@ -4522,9 +4530,9 @@ react-transform-hmr@^1.0.4: global "^4.3.0" react-proxy "^1.1.7" -react@^16.0.0: - version "16.0.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.0.0.tgz#ce7df8f1941b036f02b2cca9dbd0cb1f0e855e2d" +react@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" dependencies: fbjs "^0.8.16" loose-envify "^1.1.0" From 2acd8e477c07c38adaec6a89cecfc68cc333dc8e Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 2 Dec 2017 15:56:22 -0800 Subject: [PATCH 010/153] Update raf and debounce modules --- package.json | 4 ++-- yarn.lock | 12 +++--------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 358406c6e..3bc19dc5c 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "array-find-index": "^1.0.2", "babel-runtime": "^6.26.0", "create-react-class": "^15.6.2", - "debounce": "1.0.2", + "debounce": "^1.1.0", "deep-assign": "^2.0.0", "fbjs": "^0.8.16", "hyphenate-style-name": "^1.0.2", @@ -96,7 +96,7 @@ "jest": "^21.2.1", "lint-staged": "^4.1.3", "prettier": "^1.8.2", - "raf": "^3.3.2", + "raf": "^3.4.0", "react": "^16.2.0", "react-dom": "^16.2.0", "react-test-renderer": "^16.2.0", diff --git a/yarn.lock b/yarn.lock index 638730c03..44e6d7f01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1505,9 +1505,9 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -debounce@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.0.2.tgz#503cc674d8d7f737099664fb75ddbd36b9626dc6" +debounce@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.1.0.tgz#6a1a4ee2a9dc4b7c24bb012558dbcdb05b37f408" debug@2.6.1: version "2.6.1" @@ -4428,12 +4428,6 @@ querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" -raf@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.3.2.tgz#0c13be0b5b49b46f76d6669248d527cf2b02fe27" - dependencies: - performance-now "^2.1.0" - raf@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" From 6bc76c3c92f08e6809f231e2e867ca8419367410 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 2 Dec 2017 15:58:42 -0800 Subject: [PATCH 011/153] Update yarn script syntax --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3bc19dc5c..4c49f4a13 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,8 @@ "fmt": "find babel benchmarks docs jest src -name '*.js' | grep -v -E '(node_modules|dist)' | xargs yarn fmt:cmd", "fmt:cmd": "prettier --print-width=100 --single-quote --write", "jest": "jest", - "jest:watch": "yarn test -- --watch", - "lint": "yarn lint:cmd -- babel benchmarks docs jest src", + "jest:watch": "yarn test --watch", + "lint": "yarn lint:cmd babel benchmarks docs jest src", "lint:cmd": "eslint --ignore-path .gitignore --fix", "precommit": "lint-staged", "release": "yarn lint && yarn test && yarn build && npm publish", From e8eab9b3eca65d2a480455c6507830ac3a46261b Mon Sep 17 00:00:00 2001 From: Louis Lagrange Date: Sat, 28 Oct 2017 17:32:21 +0200 Subject: [PATCH 012/153] [add] ImageBackground component Close #696 --- src/components/Image/ImageBackground.js | 79 +++++++++++++++++++ .../Image/__tests__/ImageBackground-test.js | 36 +++++++++ src/module.js | 3 + 3 files changed, 118 insertions(+) create mode 100644 src/components/Image/ImageBackground.js create mode 100644 src/components/Image/__tests__/ImageBackground-test.js diff --git a/src/components/Image/ImageBackground.js b/src/components/Image/ImageBackground.js new file mode 100644 index 000000000..23ebd8b2a --- /dev/null +++ b/src/components/Image/ImageBackground.js @@ -0,0 +1,79 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @flow + */ +import ensureComponentIsNative from '../Touchable/ensureComponentIsNative'; +import Image from './'; +import StyleSheet from '../../apis/StyleSheet'; +import View from '../View'; +import ViewPropTypes from '../View/ViewPropTypes'; +import React, { Component } from 'react'; + +const emptyObject = {}; + +/** + * Very simple drop-in replacement for which supports nesting views. + */ +class ImageBackground extends Component<*> { + static propTypes = { + ...Image.propTypes, + imageStyle: Image.propTypes.style, + style: ViewPropTypes.style + }; + + static defaultProps = { + style: emptyObject + }; + + setNativeProps(props: Object) { + // Work-around flow + const viewRef = this._viewRef; + if (viewRef) { + ensureComponentIsNative(viewRef); + viewRef.setNativeProps(props); + } + } + + _viewRef: ?View = null; + + _captureRef = (ref: View) => { + this._viewRef = ref; + }; + + render() { + const { children, style, imageStyle, imageRef, ...props } = this.props; + + return ( + + overwrites width and height styles + // (which is not quite correct), and these styles conflict with explicitly set styles + // of and with our internal layout model here. + // So, we have to proxy/reapply these styles explicitly for actual component. + // This workaround should be removed after implementing proper support of + // intrinsic content size of the . + width: style.width, + height: style.height + }, + imageStyle + ]} + /> + {children} + + ); + } +} + +export default ImageBackground; diff --git a/src/components/Image/__tests__/ImageBackground-test.js b/src/components/Image/__tests__/ImageBackground-test.js new file mode 100644 index 000000000..71550b30a --- /dev/null +++ b/src/components/Image/__tests__/ImageBackground-test.js @@ -0,0 +1,36 @@ +/* eslint-env jasmine, jest */ + +import Image from '..'; +import ImageBackground from '../ImageBackground'; +import React from 'react'; +import { shallow } from 'enzyme'; +import Text from '../../Text'; + +describe('components/ImageBackground', () => { + describe('prop "children"', () => { + it('render child content', () => { + const component = shallow( + + Hello World! + + ); + expect(component.find(Text)).toBeDefined(); + }); + }); + + describe('prop "imageStyle"', () => { + it('sets the style of the underlying Image', () => { + const imageStyle = { width: 40, height: 60 }; + const component = shallow(); + expect(component.find(Image).prop('style')).toContain(imageStyle); + }); + }); + + describe('prop "style"', () => { + it('sets the style of the container View', () => { + const style = { margin: 40 }; + const component = shallow(); + expect(component.prop('style')).toEqual(style); + }); + }); +}); diff --git a/src/module.js b/src/module.js index d33946e96..5ac67f358 100644 --- a/src/module.js +++ b/src/module.js @@ -30,6 +30,7 @@ import ActivityIndicator from './components/ActivityIndicator'; import Button from './components/Button'; import FlatList from './components/FlatList'; import Image from './components/Image'; +import ImageBackground from './components/Image/ImageBackground'; import KeyboardAvoidingView from './components/KeyboardAvoidingView'; import ListView from './components/ListView'; import Modal from './components/Modal'; @@ -93,6 +94,7 @@ export { Button, FlatList, Image, + ImageBackground, KeyboardAvoidingView, ListView, Modal, @@ -159,6 +161,7 @@ const ReactNative = { Button, FlatList, Image, + ImageBackground, KeyboardAvoidingView, ListView, Modal, From b1e860ab40d634aab50c2bdec5f8e2091dbc392d Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Fri, 1 Dec 2017 15:21:00 -0800 Subject: [PATCH 013/153] Add ImageBackground docs --- .../Image/ImageBackgroundScreen.js | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 docs/storybook/1-components/Image/ImageBackgroundScreen.js diff --git a/docs/storybook/1-components/Image/ImageBackgroundScreen.js b/docs/storybook/1-components/Image/ImageBackgroundScreen.js new file mode 100644 index 000000000..e7c83779c --- /dev/null +++ b/docs/storybook/1-components/Image/ImageBackgroundScreen.js @@ -0,0 +1,41 @@ +/* eslint-disable react/jsx-sort-props */ + +/** + * @flow + */ + +import React from 'react'; +import PropChildren from './examples/PropChildren'; +import UIExplorer, { + AppText, + Code, + Description, + DocItem, + Section, + storiesOf +} from '../../ui-explorer'; + +const ImageBackgroundScreen = () => ( + + + A image component with support for child content. + + +
+ + + + }} + /> + + +
+
+); + +storiesOf('Components', module).add('ImageBackground', ImageBackgroundScreen); From 541d2458fb9d6e2cd0522dd3d7ae8a1ff4d65d70 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Fri, 1 Dec 2017 15:21:25 -0800 Subject: [PATCH 014/153] [change] Image no longer accepts children Align with recent changes to the React Native API. --- docs/storybook/1-components/Image/ImageScreen.js | 10 ---------- .../1-components/Image/examples/NetworkImage.js | 5 ++--- .../1-components/Image/examples/PropChildren.js | 6 +++--- src/components/Image/__tests__/index-test.js | 6 ------ src/components/Image/index.js | 13 ++++++++++--- 5 files changed, 15 insertions(+), 25 deletions(-) diff --git a/docs/storybook/1-components/Image/ImageScreen.js b/docs/storybook/1-components/Image/ImageScreen.js index 27fd53f6d..53d560daa 100644 --- a/docs/storybook/1-components/Image/ImageScreen.js +++ b/docs/storybook/1-components/Image/ImageScreen.js @@ -5,7 +5,6 @@ */ import React from 'react'; -import PropChildren from './examples/PropChildren'; import PropDefaultSource from './examples/PropDefaultSource'; import PropDraggable from './examples/PropDraggable'; import PropOnError from './examples/PropOnError'; @@ -35,15 +34,6 @@ const ImageScreen = () => (
- - }} - /> - + {loader} - {loader} - + /> {this.state.message && {this.state.message}} ); diff --git a/docs/storybook/1-components/Image/examples/PropChildren.js b/docs/storybook/1-components/Image/examples/PropChildren.js index a496ecbeb..c2f80308a 100644 --- a/docs/storybook/1-components/Image/examples/PropChildren.js +++ b/docs/storybook/1-components/Image/examples/PropChildren.js @@ -4,12 +4,12 @@ import sources from '../sources'; import React from 'react'; -import { Image, StyleSheet, Text } from 'react-native'; +import { ImageBackground, StyleSheet, Text } from 'react-native'; const ImageChildrenExample = () => ( - + Child content - + ); const styles = StyleSheet.create({ diff --git a/src/components/Image/__tests__/index-test.js b/src/components/Image/__tests__/index-test.js index 9ee0f4473..c29058b25 100644 --- a/src/components/Image/__tests__/index-test.js +++ b/src/components/Image/__tests__/index-test.js @@ -33,12 +33,6 @@ describe('components/Image', () => { expect(component.prop('accessible')).toBe(false); }); - test('prop "children"', () => { - const children =
; - const component = shallow(); - expect(component.find('.unique').length).toBe(1); - }); - describe('prop "defaultSource"', () => { test('sets background image when value is an object', () => { const defaultSource = { uri: 'https://google.com/favicon.ico' }; diff --git a/src/components/Image/index.js b/src/components/Image/index.js index 1fc236fe2..d030cb18b 100644 --- a/src/components/Image/index.js +++ b/src/components/Image/index.js @@ -96,7 +96,6 @@ class Image extends Component<*, State> { static propTypes = { ...ViewPropTypes, - children: any, defaultSource: ImageSourcePropType, draggable: bool, onError: func, @@ -176,7 +175,6 @@ class Image extends Component<*, State> { const { accessibilityLabel, accessible, - children, defaultSource, draggable, onLayout, @@ -221,6 +219,16 @@ class Image extends Component<*, State> { }) : null; + if (process.env.NODE_ENV !== 'production') { + if (this.props.src) { + console.warn('The component requires a `source` property rather than `src`.'); + } + + if (this.props.children) { + throw new Error('The component cannot contain children. If you want to render content on top of the image, consider using the component or absolute positioning.'); + } + } + return ( { testID={testID} > {hiddenImage} - {children} ); } From 02e62ad5d647fdf0079421f3c02655becd33e123 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 2 Dec 2017 16:08:56 -0800 Subject: [PATCH 015/153] Lint fixes --- .../1-components/Image/ImageBackgroundScreen.js | 13 ++----------- src/components/Image/index.js | 6 ++++-- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/docs/storybook/1-components/Image/ImageBackgroundScreen.js b/docs/storybook/1-components/Image/ImageBackgroundScreen.js index e7c83779c..b3b70b8fa 100644 --- a/docs/storybook/1-components/Image/ImageBackgroundScreen.js +++ b/docs/storybook/1-components/Image/ImageBackgroundScreen.js @@ -6,20 +6,11 @@ import React from 'react'; import PropChildren from './examples/PropChildren'; -import UIExplorer, { - AppText, - Code, - Description, - DocItem, - Section, - storiesOf -} from '../../ui-explorer'; +import UIExplorer, { Description, DocItem, Section, storiesOf } from '../../ui-explorer'; const ImageBackgroundScreen = () => ( - - A image component with support for child content. - + A image component with support for child content.
diff --git a/src/components/Image/index.js b/src/components/Image/index.js index d030cb18b..465f9ea4b 100644 --- a/src/components/Image/index.js +++ b/src/components/Image/index.js @@ -22,7 +22,7 @@ import StyleSheet from '../../apis/StyleSheet'; import StyleSheetPropType from '../../propTypes/StyleSheetPropType'; import View from '../View'; import ViewPropTypes from '../View/ViewPropTypes'; -import { any, bool, func, number, oneOf, oneOfType, shape, string } from 'prop-types'; +import { bool, func, number, oneOf, oneOfType, shape, string } from 'prop-types'; import React, { Component } from 'react'; const emptyObject = {}; @@ -225,7 +225,9 @@ class Image extends Component<*, State> { } if (this.props.children) { - throw new Error('The component cannot contain children. If you want to render content on top of the image, consider using the component or absolute positioning.'); + throw new Error( + 'The component cannot contain children. If you want to render content on top of the image, consider using the component or absolute positioning.' + ); } } From b7e970f4e6b48ee2c063d01914df1df4556c7d94 Mon Sep 17 00:00:00 2001 From: Kenneth Kufluk Date: Mon, 6 Nov 2017 14:26:53 -0800 Subject: [PATCH 016/153] [add] Picker and Picker.Item components Close #705 --- .../1-components/Picker/PickerScreen.js | 113 +++++++++++++++++ .../Picker/examples/PickerExample.js | 28 +++++ src/components/Picker/PickerItemPropType.js | 26 ++++ src/components/Picker/PickerStylePropTypes.js | 20 +++ .../__snapshots__/index-test.js.snap | 17 +++ src/components/Picker/__tests__/index-test.js | 74 +++++++++++ src/components/Picker/index.js | 118 +++++++++++++++++- 7 files changed, 392 insertions(+), 4 deletions(-) create mode 100644 docs/storybook/1-components/Picker/PickerScreen.js create mode 100644 docs/storybook/1-components/Picker/examples/PickerExample.js create mode 100644 src/components/Picker/PickerItemPropType.js create mode 100644 src/components/Picker/PickerStylePropTypes.js create mode 100644 src/components/Picker/__tests__/__snapshots__/index-test.js.snap create mode 100644 src/components/Picker/__tests__/index-test.js diff --git a/docs/storybook/1-components/Picker/PickerScreen.js b/docs/storybook/1-components/Picker/PickerScreen.js new file mode 100644 index 000000000..3943bdd30 --- /dev/null +++ b/docs/storybook/1-components/Picker/PickerScreen.js @@ -0,0 +1,113 @@ +/* eslint-disable react/jsx-sort-props, react/jsx-no-bind, no-alert */ + +/** + * @flow + */ + +import React from 'react'; +import PickerExample from './examples/PickerExample'; +import UIExplorer, { + AppText, + Description, + DocItem, + Section, + StyleList, + storiesOf +} from '../../ui-explorer'; +import { View } from 'react-native'; + +const PickerScreen = () => ( + + + + Renders the native <select> component. + +
+ + + +` + }} + /> + + + }} + /> + + ( + { + window.alert(`itemValue: ${itemValue}, itemPosition: ${itemPosition}`); + }} + /> + ) + }} + /> + + + }} + /> + + + } + /> + + +
+
+ + + Individual selectable item in a Picker. + +
+ + + +
+
+
+); + +storiesOf('Components', module).add('Picker', PickerScreen); diff --git a/docs/storybook/1-components/Picker/examples/PickerExample.js b/docs/storybook/1-components/Picker/examples/PickerExample.js new file mode 100644 index 000000000..df785fe3c --- /dev/null +++ b/docs/storybook/1-components/Picker/examples/PickerExample.js @@ -0,0 +1,28 @@ +/** + * @flow + */ + +import React from 'react'; +import { Picker, StyleSheet, View } from 'react-native'; + +const PickerExample = props => ( + + + + + + + + + + + +); + +const styles = StyleSheet.create({ + rootl: { + alignItems: 'flex-start' + } +}); + +export default PickerExample; diff --git a/src/components/Picker/PickerItemPropType.js b/src/components/Picker/PickerItemPropType.js new file mode 100644 index 000000000..531a2bf0d --- /dev/null +++ b/src/components/Picker/PickerItemPropType.js @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2017-present, Nicolas Gallagher. + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ + +import React from 'react'; +import Picker from './'; + +const PickerItemPropType = (props: Object, propName: string, componentName: string) => { + const prop = props[propName]; + let error = null; + React.Children.forEach(prop, function(child) { + if (child.type !== Picker.Item) { + error = new Error('`Picker` children must be of type `Picker.Item`.'); + } + }); + return error; +}; + +export default PickerItemPropType; diff --git a/src/components/Picker/PickerStylePropTypes.js b/src/components/Picker/PickerStylePropTypes.js new file mode 100644 index 000000000..85f35f645 --- /dev/null +++ b/src/components/Picker/PickerStylePropTypes.js @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2017-present, Nicolas Gallagher. + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ + +import ColorPropType from '../../propTypes/ColorPropType'; +import ViewStylePropTypes from '../View/ViewStylePropTypes'; + +const PickerStylePropTypes = { + ...ViewStylePropTypes, + color: ColorPropType +}; + +export default PickerStylePropTypes; diff --git a/src/components/Picker/__tests__/__snapshots__/index-test.js.snap b/src/components/Picker/__tests__/__snapshots__/index-test.js.snap new file mode 100644 index 000000000..8a1107142 --- /dev/null +++ b/src/components/Picker/__tests__/__snapshots__/index-test.js.snap @@ -0,0 +1,17 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`components/Picker prop "children" renders items 1`] = ` + +`; diff --git a/src/components/Picker/__tests__/index-test.js b/src/components/Picker/__tests__/index-test.js new file mode 100644 index 000000000..11677f445 --- /dev/null +++ b/src/components/Picker/__tests__/index-test.js @@ -0,0 +1,74 @@ +/* eslint-env jasmine, jest */ + +import React from 'react'; +import { shallow } from 'enzyme'; +import Picker from '..'; + +describe('components/Picker', () => { + describe('prop "children"', () => { + test('renders items', () => { + const picker = ( + + + + + ); + const component = shallow(picker); + expect(component).toMatchSnapshot(); + }); + }); + + describe('prop "enabled"', () => { + test('picker is disabled if false', () => { + const picker = ( + + + + + ); + const component = shallow(picker); + expect(component.find('select').props().disabled).toBe(true); + }); + }); + + describe('prop "onValueChange"', () => { + test('is called with (value, index)', () => { + const onValueChange = jest.fn(); + const picker = ( + + + + + ); + const component = shallow(picker); + component.find('select').simulate('change', { + target: { selectedIndex: '1', value: 'value-2' } + }); + expect(onValueChange).toHaveBeenCalledWith('value-2', '1'); + }); + }); + + describe('prop "selectedValue"', () => { + test('selects the correct item (string)', () => { + const picker = ( + + + + + ); + const component = shallow(picker); + expect(component.find('select').prop('value')).toBe('value-2'); + }); + + test('selects the correct item (number)', () => { + const picker = ( + + + + + ); + const component = shallow(picker); + expect(component.find('select').prop('value')).toBe(22); + }); + }); +}); diff --git a/src/components/Picker/index.js b/src/components/Picker/index.js index 909a0b906..f6c51d452 100644 --- a/src/components/Picker/index.js +++ b/src/components/Picker/index.js @@ -1,4 +1,114 @@ -import UnimplementedView from '../UnimplementedView'; -const Picker = UnimplementedView; -Picker.Item = UnimplementedView; -export default Picker; +/** + * Copyright (c) 2017-present, Nicolas Gallagher. + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + * + * @providesModule Picker + * @flow + */ + +import applyNativeMethods from '../../modules/applyNativeMethods'; +import { Component } from 'react'; +import ColorPropType from '../../propTypes/ColorPropType'; +import createElement from '../../modules/createElement'; +import PickerItemPropType from './PickerItemPropType'; +import PickerStylePropTypes from './PickerStylePropTypes'; +import StyleSheetPropType from '../../propTypes/StyleSheetPropType'; +import StyleSheet from '../../apis/StyleSheet'; +import TextStylePropTypes from '../Text/TextStylePropTypes'; +import { arrayOf, bool, func, number, oneOfType, string } from 'prop-types'; + +const pickerStyleType = StyleSheetPropType(PickerStylePropTypes); +const itemStylePropType = StyleSheetPropType(TextStylePropTypes); + +type ItemProps = { + color?: ColorPropType, + label: string, + testID?: string, + value?: number | string +}; + +class PickerItem extends Component { + static propTypes = { + color: ColorPropType, + label: string.isRequired, + testID: string, + value: oneOfType([number, string]) + }; + + render() { + const { label, testID, value } = this.props; + return createElement('option', { label, testID, value }); + } +} + +type Props = { + children?: Array, + enabled?: boolean, + onValueChange?: Function, + selectedValue?: number | string, + style?: pickerStyleType, + testID?: string, + /* compat */ + itemStyle?: itemStylePropType, + mode?: string, + prompt?: string +}; + +class Picker extends Component { + static propTypes = { + children: arrayOf(PickerItemPropType), + enabled: bool, + onValueChange: func, + selectedValue: oneOfType([number, string]), + style: pickerStyleType, + testID: string + }; + + static Item = PickerItem; + + render() { + const { + children, + enabled, + selectedValue, + style, + testID, + /* eslint-disable */ + itemStyle, + mode, + prompt + /* eslint-enable */ + } = this.props; + + return createElement('select', { + children, + disabled: enabled === false ? true : undefined, + onChange: this._handleChange, + style: [styles.initial, style], + testID, + value: selectedValue + }); + } + + _handleChange = (e: Object) => { + const { onValueChange } = this.props; + const { selectedIndex, value } = e.target; + if (onValueChange) { + onValueChange(value, selectedIndex); + } + }; +} + +const styles = StyleSheet.create({ + initial: { + fontFamily: 'inherit', + fontSize: 'inherit', + margin: 0 + } +}); + +export default applyNativeMethods(Picker); From 0dfe319d412bd48c7861db0db8a83439e5b0a974 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Wed, 6 Dec 2017 13:02:19 -0800 Subject: [PATCH 017/153] [change] update the Animated implementation Replaces the 'animated' package with the latest implementation from React Native. Requires a few imports to be replaced. Close #716 Fix #714 Fix #688 --- .flowconfig | 1 - package.json | 5 +- src/apis/Animated/index.js | 24 +- src/apis/Easing/index.js | 4 +- src/modules/NativeEventEmitter/index.js | 25 + src/modules/NativeModules/index.js | 2 +- src/vendor/Animated/AnimatedEvent.js | 196 +++++ src/vendor/Animated/AnimatedImplementation.js | 676 ++++++++++++++++++ src/vendor/Animated/Easing.js | 303 ++++++++ src/vendor/Animated/NativeAnimatedHelper.js | 259 +++++++ src/vendor/Animated/SHA | 1 + src/vendor/Animated/SpringConfig.js | 102 +++ src/vendor/Animated/animations/Animation.js | 73 ++ .../Animated/animations/DecayAnimation.js | 112 +++ .../Animated/animations/SpringAnimation.js | 342 +++++++++ .../Animated/animations/TimingAnimation.js | 155 ++++ src/vendor/Animated/bezier.js | 108 +++ .../Animated/createAnimatedComponent.js | 200 ++++++ src/vendor/Animated/nodes/AnimatedAddition.js | 65 ++ .../Animated/nodes/AnimatedDiffClamp.js | 73 ++ src/vendor/Animated/nodes/AnimatedDivision.js | 70 ++ .../Animated/nodes/AnimatedInterpolation.js | 388 ++++++++++ src/vendor/Animated/nodes/AnimatedModulo.js | 64 ++ .../Animated/nodes/AnimatedMultiplication.js | 65 ++ src/vendor/Animated/nodes/AnimatedNode.js | 73 ++ src/vendor/Animated/nodes/AnimatedProps.js | 167 +++++ src/vendor/Animated/nodes/AnimatedStyle.js | 127 ++++ src/vendor/Animated/nodes/AnimatedTracking.js | 67 ++ .../Animated/nodes/AnimatedTransform.js | 123 ++++ src/vendor/Animated/nodes/AnimatedValue.js | 338 +++++++++ src/vendor/Animated/nodes/AnimatedValueXY.js | 197 +++++ .../Animated/nodes/AnimatedWithChildren.js | 77 ++ src/vendor/PooledClass/index.js | 2 + src/vendor/dangerousStyleValue/index.js | 1 + src/vendor/setValueForStyles/index.js | 1 + src/vendor/warnValidStyle/index.js | 1 + yarn.lock | 9 +- 37 files changed, 4468 insertions(+), 28 deletions(-) create mode 100644 src/modules/NativeEventEmitter/index.js create mode 100644 src/vendor/Animated/AnimatedEvent.js create mode 100644 src/vendor/Animated/AnimatedImplementation.js create mode 100644 src/vendor/Animated/Easing.js create mode 100644 src/vendor/Animated/NativeAnimatedHelper.js create mode 100644 src/vendor/Animated/SHA create mode 100644 src/vendor/Animated/SpringConfig.js create mode 100644 src/vendor/Animated/animations/Animation.js create mode 100644 src/vendor/Animated/animations/DecayAnimation.js create mode 100644 src/vendor/Animated/animations/SpringAnimation.js create mode 100644 src/vendor/Animated/animations/TimingAnimation.js create mode 100644 src/vendor/Animated/bezier.js create mode 100644 src/vendor/Animated/createAnimatedComponent.js create mode 100644 src/vendor/Animated/nodes/AnimatedAddition.js create mode 100644 src/vendor/Animated/nodes/AnimatedDiffClamp.js create mode 100644 src/vendor/Animated/nodes/AnimatedDivision.js create mode 100644 src/vendor/Animated/nodes/AnimatedInterpolation.js create mode 100644 src/vendor/Animated/nodes/AnimatedModulo.js create mode 100644 src/vendor/Animated/nodes/AnimatedMultiplication.js create mode 100644 src/vendor/Animated/nodes/AnimatedNode.js create mode 100644 src/vendor/Animated/nodes/AnimatedProps.js create mode 100644 src/vendor/Animated/nodes/AnimatedStyle.js create mode 100644 src/vendor/Animated/nodes/AnimatedTracking.js create mode 100644 src/vendor/Animated/nodes/AnimatedTransform.js create mode 100644 src/vendor/Animated/nodes/AnimatedValue.js create mode 100644 src/vendor/Animated/nodes/AnimatedValueXY.js create mode 100644 src/vendor/Animated/nodes/AnimatedWithChildren.js diff --git a/.flowconfig b/.flowconfig index 9a733d855..ee67ef33d 100644 --- a/.flowconfig +++ b/.flowconfig @@ -2,7 +2,6 @@ .*/__tests__/.* .*/benchmarks/.* .*/docs/.* -.*/node_modules/animated/* .*/node_modules/babel-plugin-transform-react-remove-prop-types/* [include] diff --git a/package.json b/package.json index 4c49f4a13..060dd6981 100644 --- a/package.json +++ b/package.json @@ -19,12 +19,12 @@ "docs:start": "cd docs && yarn && yarn start", "docs:release": "cd docs && yarn release", "flow": "flow", - "fmt": "find babel benchmarks docs jest src -name '*.js' | grep -v -E '(node_modules|dist)' | xargs yarn fmt:cmd", + "fmt": "find babel benchmarks docs jest src -name '*.js' | grep -v -E '(node_modules|dist|vendor)' | xargs yarn fmt:cmd", "fmt:cmd": "prettier --print-width=100 --single-quote --write", "jest": "jest", "jest:watch": "yarn test --watch", "lint": "yarn lint:cmd babel benchmarks docs jest src", - "lint:cmd": "eslint --ignore-path .gitignore --fix", + "lint:cmd": "eslint --ignore-path .gitignore --ignore-pattern '/src/vendor/*' --fix", "precommit": "lint-staged", "release": "yarn lint && yarn test && yarn build && npm publish", "test": "flow && jest" @@ -61,7 +61,6 @@ ] }, "dependencies": { - "animated": "^0.2.0", "array-find-index": "^1.0.2", "babel-runtime": "^6.26.0", "create-react-class": "^15.6.2", diff --git a/src/apis/Animated/index.js b/src/apis/Animated/index.js index 4093fa38e..496b3cbee 100644 --- a/src/apis/Animated/index.js +++ b/src/apis/Animated/index.js @@ -3,27 +3,25 @@ * All rights reserved. * * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule Animated - * @noflow + * @flow */ -import Animated from 'animated'; +import AnimatedImplementation from '../../vendor/Animated/AnimatedImplementation'; import Image from '../../components/Image'; import ScrollView from '../../components/ScrollView'; -import StyleSheet from '../StyleSheet'; import Text from '../../components/Text'; import View from '../../components/View'; -Animated.inject.FlattenStyle(StyleSheet.flatten); - -const AnimatedImplementation = { - ...Animated, - Image: Animated.createAnimatedComponent(Image), - ScrollView: Animated.createAnimatedComponent(ScrollView), - Text: Animated.createAnimatedComponent(Text), - View: Animated.createAnimatedComponent(View) +const Animated = { + ...AnimatedImplementation, + Image: AnimatedImplementation.createAnimatedComponent(Image), + ScrollView: AnimatedImplementation.createAnimatedComponent(ScrollView), + View: AnimatedImplementation.createAnimatedComponent(View), + Text: AnimatedImplementation.createAnimatedComponent(Text) }; -export default AnimatedImplementation; +export default Animated; diff --git a/src/apis/Easing/index.js b/src/apis/Easing/index.js index f0b43f31d..238a0120c 100644 --- a/src/apis/Easing/index.js +++ b/src/apis/Easing/index.js @@ -6,8 +6,8 @@ * LICENSE file in the root directory of this source tree. * * @providesModule Easing - * @noflow + * @flow */ -import Easing from 'animated/lib/Easing'; +import Easing from '../../vendor/Animated/Easing'; export default Easing; diff --git a/src/modules/NativeEventEmitter/index.js b/src/modules/NativeEventEmitter/index.js new file mode 100644 index 000000000..c716b9a35 --- /dev/null +++ b/src/modules/NativeEventEmitter/index.js @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule NativeEventEmitter + * @noflow + */ +'use strict'; + +class NativeEventEmitter { + addListener() {} + emit() {} + listeners() {} + once() {} + removeAllListeners() {} + removeCurrentListener() {} + removeListener() {} + removeSubscription() {} +} + +module.exports = NativeEventEmitter; diff --git a/src/modules/NativeModules/index.js b/src/modules/NativeModules/index.js index 6964e4334..38f12a982 100644 --- a/src/modules/NativeModules/index.js +++ b/src/modules/NativeModules/index.js @@ -1,3 +1,3 @@ // NativeModules shim const NativeModules = {}; -export default NativeModules; +module.exports = NativeModules; diff --git a/src/vendor/Animated/AnimatedEvent.js b/src/vendor/Animated/AnimatedEvent.js new file mode 100644 index 000000000..2521ee3c9 --- /dev/null +++ b/src/vendor/Animated/AnimatedEvent.js @@ -0,0 +1,196 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedEvent + * @noflow + * @format + */ +'use strict'; + +const AnimatedValue = require('./nodes/AnimatedValue'); +const NativeAnimatedHelper = require('./NativeAnimatedHelper'); +const findNodeHandle = require('../../modules/findNodeHandle').default; + +const invariant = require('fbjs/lib/invariant'); +const {shouldUseNativeDriver} = require('./NativeAnimatedHelper'); + +export type Mapping = {[key: string]: Mapping} | AnimatedValue; +export type EventConfig = { + listener?: ?Function, + useNativeDriver?: boolean, +}; + +function attachNativeEvent( + viewRef: any, + eventName: string, + argMapping: Array, +) { + // Find animated values in `argMapping` and create an array representing their + // key path inside the `nativeEvent` object. Ex.: ['contentOffset', 'x']. + const eventMappings = []; + + const traverse = (value, path) => { + if (value instanceof AnimatedValue) { + value.__makeNative(); + + eventMappings.push({ + nativeEventPath: path, + animatedValueTag: value.__getNativeTag(), + }); + } else if (typeof value === 'object') { + for (const key in value) { + traverse(value[key], path.concat(key)); + } + } + }; + + invariant( + argMapping[0] && argMapping[0].nativeEvent, + 'Native driven events only support animated values contained inside `nativeEvent`.', + ); + + // Assume that the event containing `nativeEvent` is always the first argument. + traverse(argMapping[0].nativeEvent, []); + + const viewTag = findNodeHandle(viewRef); + + eventMappings.forEach(mapping => { + NativeAnimatedHelper.API.addAnimatedEventToView( + viewTag, + eventName, + mapping, + ); + }); + + return { + detach() { + eventMappings.forEach(mapping => { + NativeAnimatedHelper.API.removeAnimatedEventFromView( + viewTag, + eventName, + mapping.animatedValueTag, + ); + }); + }, + }; +} + +class AnimatedEvent { + _argMapping: Array; + _listeners: Array = []; + _callListeners: Function; + _attachedEvent: ?{ + detach: () => void, + }; + __isNative: boolean; + + constructor(argMapping: Array, config?: EventConfig = {}) { + this._argMapping = argMapping; + if (config.listener) { + this.__addListener(config.listener); + } + this._callListeners = this._callListeners.bind(this); + this._attachedEvent = null; + this.__isNative = shouldUseNativeDriver(config); + + if (process.env.NODE_ENV !== 'production') { + this._validateMapping(); + } + } + + __addListener(callback: Function): void { + this._listeners.push(callback); + } + + __removeListener(callback: Function): void { + this._listeners = this._listeners.filter(listener => listener !== callback); + } + + __attach(viewRef: any, eventName: string) { + invariant( + this.__isNative, + 'Only native driven events need to be attached.', + ); + + this._attachedEvent = attachNativeEvent( + viewRef, + eventName, + this._argMapping, + ); + } + + __detach(viewTag: any, eventName: string) { + invariant( + this.__isNative, + 'Only native driven events need to be detached.', + ); + + this._attachedEvent && this._attachedEvent.detach(); + } + + __getHandler() { + if (this.__isNative) { + return this._callListeners; + } + + return (...args: any) => { + const traverse = (recMapping, recEvt, key) => { + if (typeof recEvt === 'number' && recMapping instanceof AnimatedValue) { + recMapping.setValue(recEvt); + } else if (typeof recMapping === 'object') { + for (const mappingKey in recMapping) { + /* $FlowFixMe(>=0.53.0 site=react_native_fb,react_native_oss) This + * comment suppresses an error when upgrading Flow's support for + * React. To see the error delete this comment and run Flow. */ + traverse(recMapping[mappingKey], recEvt[mappingKey], mappingKey); + } + } + }; + + if (!this.__isNative) { + this._argMapping.forEach((mapping, idx) => { + traverse(mapping, args[idx], 'arg' + idx); + }); + } + this._callListeners(...args); + }; + } + + _callListeners(...args) { + this._listeners.forEach(listener => listener(...args)); + } + + _validateMapping() { + const traverse = (recMapping, recEvt, key) => { + if (typeof recEvt === 'number') { + invariant( + recMapping instanceof AnimatedValue, + 'Bad mapping of type ' + + typeof recMapping + + ' for key ' + + key + + ', event value must map to AnimatedValue', + ); + return; + } + invariant( + typeof recMapping === 'object', + 'Bad mapping of type ' + typeof recMapping + ' for key ' + key, + ); + invariant( + typeof recEvt === 'object', + 'Bad event of type ' + typeof recEvt + ' for key ' + key, + ); + for (const mappingKey in recMapping) { + traverse(recMapping[mappingKey], recEvt[mappingKey], mappingKey); + } + }; + } +} + +module.exports = {AnimatedEvent, attachNativeEvent}; diff --git a/src/vendor/Animated/AnimatedImplementation.js b/src/vendor/Animated/AnimatedImplementation.js new file mode 100644 index 000000000..ef5669276 --- /dev/null +++ b/src/vendor/Animated/AnimatedImplementation.js @@ -0,0 +1,676 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedImplementation + * @flow + * @format + * @preventMunge + */ +'use strict'; + +const {AnimatedEvent, attachNativeEvent} = require('./AnimatedEvent'); +const AnimatedAddition = require('./nodes/AnimatedAddition'); +const AnimatedDiffClamp = require('./nodes/AnimatedDiffClamp'); +const AnimatedDivision = require('./nodes/AnimatedDivision'); +const AnimatedInterpolation = require('./nodes/AnimatedInterpolation'); +const AnimatedModulo = require('./nodes/AnimatedModulo'); +const AnimatedMultiplication = require('./nodes/AnimatedMultiplication'); +const AnimatedNode = require('./nodes/AnimatedNode'); +const AnimatedProps = require('./nodes/AnimatedProps'); +const AnimatedTracking = require('./nodes/AnimatedTracking'); +const AnimatedValue = require('./nodes/AnimatedValue'); +const AnimatedValueXY = require('./nodes/AnimatedValueXY'); +const DecayAnimation = require('./animations/DecayAnimation'); +const SpringAnimation = require('./animations/SpringAnimation'); +const TimingAnimation = require('./animations/TimingAnimation'); + +const createAnimatedComponent = require('./createAnimatedComponent'); + +import type { + AnimationConfig, + EndCallback, + EndResult, +} from './animations/Animation'; +import type {TimingAnimationConfig} from './animations/TimingAnimation'; +import type {DecayAnimationConfig} from './animations/DecayAnimation'; +import type {SpringAnimationConfig} from './animations/SpringAnimation'; +import type {Mapping, EventConfig} from './AnimatedEvent'; + +type CompositeAnimation = { + start: (callback?: ?EndCallback) => void, + stop: () => void, + reset: () => void, + _startNativeLoop: (iterations?: number) => void, + _isUsingNativeDriver: () => boolean, +}; + +const add = function( + a: AnimatedNode | number, + b: AnimatedNode | number, +): AnimatedAddition { + return new AnimatedAddition(a, b); +}; + +const divide = function( + a: AnimatedNode | number, + b: AnimatedNode | number, +): AnimatedDivision { + return new AnimatedDivision(a, b); +}; + +const multiply = function( + a: AnimatedNode | number, + b: AnimatedNode | number, +): AnimatedMultiplication { + return new AnimatedMultiplication(a, b); +}; + +const modulo = function(a: AnimatedNode, modulus: number): AnimatedModulo { + return new AnimatedModulo(a, modulus); +}; + +const diffClamp = function( + a: AnimatedNode, + min: number, + max: number, +): AnimatedDiffClamp { + return new AnimatedDiffClamp(a, min, max); +}; + +const _combineCallbacks = function( + callback: ?EndCallback, + config: AnimationConfig, +) { + if (callback && config.onComplete) { + return (...args) => { + config.onComplete && config.onComplete(...args); + callback && callback(...args); + }; + } else { + return callback || config.onComplete; + } +}; + +const maybeVectorAnim = function( + value: AnimatedValue | AnimatedValueXY, + config: Object, + anim: (value: AnimatedValue, config: Object) => CompositeAnimation, +): ?CompositeAnimation { + if (value instanceof AnimatedValueXY) { + const configX = {...config}; + const configY = {...config}; + for (const key in config) { + const {x, y} = config[key]; + if (x !== undefined && y !== undefined) { + configX[key] = x; + configY[key] = y; + } + } + const aX = anim((value: AnimatedValueXY).x, configX); + const aY = anim((value: AnimatedValueXY).y, configY); + // We use `stopTogether: false` here because otherwise tracking will break + // because the second animation will get stopped before it can update. + return parallel([aX, aY], {stopTogether: false}); + } + return null; +}; + +const spring = function( + value: AnimatedValue | AnimatedValueXY, + config: SpringAnimationConfig, +): CompositeAnimation { + const start = function( + animatedValue: AnimatedValue | AnimatedValueXY, + configuration: SpringAnimationConfig, + callback?: ?EndCallback, + ): void { + callback = _combineCallbacks(callback, configuration); + const singleValue: any = animatedValue; + const singleConfig: any = configuration; + singleValue.stopTracking(); + if (configuration.toValue instanceof AnimatedNode) { + singleValue.track( + new AnimatedTracking( + singleValue, + configuration.toValue, + SpringAnimation, + singleConfig, + callback, + ), + ); + } else { + singleValue.animate(new SpringAnimation(singleConfig), callback); + } + }; + return ( + maybeVectorAnim(value, config, spring) || { + start: function(callback?: ?EndCallback): void { + start(value, config, callback); + }, + + stop: function(): void { + value.stopAnimation(); + }, + + reset: function(): void { + value.resetAnimation(); + }, + + _startNativeLoop: function(iterations?: number): void { + const singleConfig = {...config, iterations}; + start(value, singleConfig); + }, + + _isUsingNativeDriver: function(): boolean { + return config.useNativeDriver || false; + }, + } + ); +}; + +const timing = function( + value: AnimatedValue | AnimatedValueXY, + config: TimingAnimationConfig, +): CompositeAnimation { + const start = function( + animatedValue: AnimatedValue | AnimatedValueXY, + configuration: TimingAnimationConfig, + callback?: ?EndCallback, + ): void { + callback = _combineCallbacks(callback, configuration); + const singleValue: any = animatedValue; + const singleConfig: any = configuration; + singleValue.stopTracking(); + if (configuration.toValue instanceof AnimatedNode) { + singleValue.track( + new AnimatedTracking( + singleValue, + configuration.toValue, + TimingAnimation, + singleConfig, + callback, + ), + ); + } else { + singleValue.animate(new TimingAnimation(singleConfig), callback); + } + }; + + return ( + maybeVectorAnim(value, config, timing) || { + start: function(callback?: ?EndCallback): void { + start(value, config, callback); + }, + + stop: function(): void { + value.stopAnimation(); + }, + + reset: function(): void { + value.resetAnimation(); + }, + + _startNativeLoop: function(iterations?: number): void { + const singleConfig = {...config, iterations}; + start(value, singleConfig); + }, + + _isUsingNativeDriver: function(): boolean { + return config.useNativeDriver || false; + }, + } + ); +}; + +const decay = function( + value: AnimatedValue | AnimatedValueXY, + config: DecayAnimationConfig, +): CompositeAnimation { + const start = function( + animatedValue: AnimatedValue | AnimatedValueXY, + configuration: DecayAnimationConfig, + callback?: ?EndCallback, + ): void { + callback = _combineCallbacks(callback, configuration); + const singleValue: any = animatedValue; + const singleConfig: any = configuration; + singleValue.stopTracking(); + singleValue.animate(new DecayAnimation(singleConfig), callback); + }; + + return ( + maybeVectorAnim(value, config, decay) || { + start: function(callback?: ?EndCallback): void { + start(value, config, callback); + }, + + stop: function(): void { + value.stopAnimation(); + }, + + reset: function(): void { + value.resetAnimation(); + }, + + _startNativeLoop: function(iterations?: number): void { + const singleConfig = {...config, iterations}; + start(value, singleConfig); + }, + + _isUsingNativeDriver: function(): boolean { + return config.useNativeDriver || false; + }, + } + ); +}; + +const sequence = function( + animations: Array, +): CompositeAnimation { + let current = 0; + return { + start: function(callback?: ?EndCallback) { + const onComplete = function(result) { + if (!result.finished) { + callback && callback(result); + return; + } + + current++; + + if (current === animations.length) { + callback && callback(result); + return; + } + + animations[current].start(onComplete); + }; + + if (animations.length === 0) { + callback && callback({finished: true}); + } else { + animations[current].start(onComplete); + } + }, + + stop: function() { + if (current < animations.length) { + animations[current].stop(); + } + }, + + reset: function() { + animations.forEach((animation, idx) => { + if (idx <= current) { + animation.reset(); + } + }); + current = 0; + }, + + _startNativeLoop: function() { + throw new Error( + 'Loops run using the native driver cannot contain Animated.sequence animations', + ); + }, + + _isUsingNativeDriver: function(): boolean { + return false; + }, + }; +}; + +type ParallelConfig = { + stopTogether?: boolean, // If one is stopped, stop all. default: true +}; +const parallel = function( + animations: Array, + config?: ?ParallelConfig, +): CompositeAnimation { + let doneCount = 0; + // Make sure we only call stop() at most once for each animation + const hasEnded = {}; + const stopTogether = !(config && config.stopTogether === false); + + const result = { + start: function(callback?: ?EndCallback) { + if (doneCount === animations.length) { + callback && callback({finished: true}); + return; + } + + animations.forEach((animation, idx) => { + const cb = function(endResult) { + hasEnded[idx] = true; + doneCount++; + if (doneCount === animations.length) { + doneCount = 0; + callback && callback(endResult); + return; + } + + if (!endResult.finished && stopTogether) { + result.stop(); + } + }; + + if (!animation) { + cb({finished: true}); + } else { + animation.start(cb); + } + }); + }, + + stop: function(): void { + animations.forEach((animation, idx) => { + !hasEnded[idx] && animation.stop(); + hasEnded[idx] = true; + }); + }, + + reset: function(): void { + animations.forEach((animation, idx) => { + animation.reset(); + hasEnded[idx] = false; + doneCount = 0; + }); + }, + + _startNativeLoop: function() { + throw new Error( + 'Loops run using the native driver cannot contain Animated.parallel animations', + ); + }, + + _isUsingNativeDriver: function(): boolean { + return false; + }, + }; + + return result; +}; + +const delay = function(time: number): CompositeAnimation { + // Would be nice to make a specialized implementation + return timing(new AnimatedValue(0), {toValue: 0, delay: time, duration: 0}); +}; + +const stagger = function( + time: number, + animations: Array, +): CompositeAnimation { + return parallel( + animations.map((animation, i) => { + return sequence([delay(time * i), animation]); + }), + ); +}; + +type LoopAnimationConfig = {iterations: number}; + +const loop = function( + animation: CompositeAnimation, + {iterations = -1}: LoopAnimationConfig = {}, +): CompositeAnimation { + let isFinished = false; + let iterationsSoFar = 0; + return { + start: function(callback?: ?EndCallback) { + const restart = function(result: EndResult = {finished: true}): void { + if ( + isFinished || + iterationsSoFar === iterations || + result.finished === false + ) { + callback && callback(result); + } else { + iterationsSoFar++; + animation.reset(); + animation.start(restart); + } + }; + if (!animation || iterations === 0) { + callback && callback({finished: true}); + } else { + if (animation._isUsingNativeDriver()) { + animation._startNativeLoop(iterations); + } else { + restart(); // Start looping recursively on the js thread + } + } + }, + + stop: function(): void { + isFinished = true; + animation.stop(); + }, + + reset: function(): void { + iterationsSoFar = 0; + isFinished = false; + animation.reset(); + }, + + _startNativeLoop: function() { + throw new Error( + 'Loops run using the native driver cannot contain Animated.loop animations', + ); + }, + + _isUsingNativeDriver: function(): boolean { + return animation._isUsingNativeDriver(); + }, + }; +}; + +function forkEvent( + event: ?AnimatedEvent | ?Function, + listener: Function, +): AnimatedEvent | Function { + if (!event) { + return listener; + } else if (event instanceof AnimatedEvent) { + event.__addListener(listener); + return event; + } else { + return (...args) => { + typeof event === 'function' && event(...args); + listener(...args); + }; + } +} + +function unforkEvent( + event: ?AnimatedEvent | ?Function, + listener: Function, +): void { + if (event && event instanceof AnimatedEvent) { + event.__removeListener(listener); + } +} + +const event = function(argMapping: Array, config?: EventConfig): any { + const animatedEvent = new AnimatedEvent(argMapping, config); + if (animatedEvent.__isNative) { + return animatedEvent; + } else { + return animatedEvent.__getHandler(); + } +}; + +/** + * The `Animated` library is designed to make animations fluid, powerful, and + * easy to build and maintain. `Animated` focuses on declarative relationships + * between inputs and outputs, with configurable transforms in between, and + * simple `start`/`stop` methods to control time-based animation execution. + * + * See http://facebook.github.io/react-native/docs/animated.html + */ +module.exports = { + /** + * Standard value class for driving animations. Typically initialized with + * `new Animated.Value(0);` + * + * See http://facebook.github.io/react-native/docs/animated.html#value + */ + Value: AnimatedValue, + /** + * 2D value class for driving 2D animations, such as pan gestures. + * + * See https://facebook.github.io/react-native/releases/next/docs/animatedvaluexy.html + */ + ValueXY: AnimatedValueXY, + /** + * Exported to use the Interpolation type in flow. + * + * See http://facebook.github.io/react-native/docs/animated.html#interpolation + */ + Interpolation: AnimatedInterpolation, + /** + * Exported for ease of type checking. All animated values derive from this + * class. + * + * See http://facebook.github.io/react-native/docs/animated.html#node + */ + Node: AnimatedNode, + + /** + * Animates a value from an initial velocity to zero based on a decay + * coefficient. + * + * See http://facebook.github.io/react-native/docs/animated.html#decay + */ + decay, + /** + * Animates a value along a timed easing curve. The Easing module has tons of + * predefined curves, or you can use your own function. + * + * See http://facebook.github.io/react-native/docs/animated.html#timing + */ + timing, + /** + * Animates a value according to an analytical spring model based on + * damped harmonic oscillation. + * + * See http://facebook.github.io/react-native/docs/animated.html#spring + */ + spring, + + /** + * Creates a new Animated value composed from two Animated values added + * together. + * + * See http://facebook.github.io/react-native/docs/animated.html#add + */ + add, + + /** + * Creates a new Animated value composed by dividing the first Animated value + * by the second Animated value. + * + * See http://facebook.github.io/react-native/docs/animated.html#divide + */ + divide, + + /** + * Creates a new Animated value composed from two Animated values multiplied + * together. + * + * See http://facebook.github.io/react-native/docs/animated.html#multiply + */ + multiply, + + /** + * Creates a new Animated value that is the (non-negative) modulo of the + * provided Animated value. + * + * See http://facebook.github.io/react-native/docs/animated.html#modulo + */ + modulo, + + /** + * Create a new Animated value that is limited between 2 values. It uses the + * difference between the last value so even if the value is far from the + * bounds it will start changing when the value starts getting closer again. + * + * See http://facebook.github.io/react-native/docs/animated.html#diffclamp + */ + diffClamp, + + /** + * Starts an animation after the given delay. + * + * See http://facebook.github.io/react-native/docs/animated.html#delay + */ + delay, + /** + * Starts an array of animations in order, waiting for each to complete + * before starting the next. If the current running animation is stopped, no + * following animations will be started. + * + * See http://facebook.github.io/react-native/docs/animated.html#sequence + */ + sequence, + /** + * Starts an array of animations all at the same time. By default, if one + * of the animations is stopped, they will all be stopped. You can override + * this with the `stopTogether` flag. + * + * See http://facebook.github.io/react-native/docs/animated.html#parallel + */ + parallel, + /** + * Array of animations may run in parallel (overlap), but are started in + * sequence with successive delays. Nice for doing trailing effects. + * + * See http://facebook.github.io/react-native/docs/animated.html#stagger + */ + stagger, + /** + * Loops a given animation continuously, so that each time it reaches the + * end, it resets and begins again from the start. + * + * See http://facebook.github.io/react-native/docs/animated.html#loop + */ + loop, + + /** + * Takes an array of mappings and extracts values from each arg accordingly, + * then calls `setValue` on the mapped outputs. + * + * See http://facebook.github.io/react-native/docs/animated.html#event + */ + event, + + /** + * Make any React component Animatable. Used to create `Animated.View`, etc. + * + * See http://facebook.github.io/react-native/docs/animated.html#createanimatedcomponent + */ + createAnimatedComponent, + + /** + * Imperative API to attach an animated value to an event on a view. Prefer + * using `Animated.event` with `useNativeDrive: true` if possible. + * + * See http://facebook.github.io/react-native/docs/animated.html#attachnativeevent + */ + attachNativeEvent, + + /** + * Advanced imperative API for snooping on animated events that are passed in + * through props. Use values directly where possible. + * + * See http://facebook.github.io/react-native/docs/animated.html#forkevent + */ + forkEvent, + unforkEvent, + + __PropsOnlyForTests: AnimatedProps, +}; diff --git a/src/vendor/Animated/Easing.js b/src/vendor/Animated/Easing.js new file mode 100644 index 000000000..988f8164f --- /dev/null +++ b/src/vendor/Animated/Easing.js @@ -0,0 +1,303 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule Easing + * @flow + */ +'use strict'; + +let ease; + +/** + * The `Easing` module implements common easing functions. This module is used + * by [Animate.timing()](docs/animate.html#timing) to convey physically + * believable motion in animations. + * + * You can find a visualization of some common easing functions at + * http://easings.net/ + * + * ### Predefined animations + * + * The `Easing` module provides several predefined animations through the + * following methods: + * + * - [`back`](docs/easing.html#back) provides a simple animation where the + * object goes slightly back before moving forward + * - [`bounce`](docs/easing.html#bounce) provides a bouncing animation + * - [`ease`](docs/easing.html#ease) provides a simple inertial animation + * - [`elastic`](docs/easing.html#elastic) provides a simple spring interaction + * + * ### Standard functions + * + * Three standard easing functions are provided: + * + * - [`linear`](docs/easing.html#linear) + * - [`quad`](docs/easing.html#quad) + * - [`cubic`](docs/easing.html#cubic) + * + * The [`poly`](docs/easing.html#poly) function can be used to implement + * quartic, quintic, and other higher power functions. + * + * ### Additional functions + * + * Additional mathematical functions are provided by the following methods: + * + * - [`bezier`](docs/easing.html#bezier) provides a cubic bezier curve + * - [`circle`](docs/easing.html#circle) provides a circular function + * - [`sin`](docs/easing.html#sin) provides a sinusoidal function + * - [`exp`](docs/easing.html#exp) provides an exponential function + * + * The following helpers are used to modify other easing functions. + * + * - [`in`](docs/easing.html#in) runs an easing function forwards + * - [`inOut`](docs/easing.html#inout) makes any easing function symmetrical + * - [`out`](docs/easing.html#out) runs an easing function backwards + */ +class Easing { + /** + * A stepping function, returns 1 for any positive value of `n`. + */ + /* $FlowFixMe(>=0.59.0 site=react_native_fb) This comment suppresses an error + * caught by Flow 0.59 which was not caught before. Most likely, this error + * is because an exported function parameter is missing an annotation. + * Without an annotation, these parameters are uncovered by Flow. */ + static step0(n) { + return n > 0 ? 1 : 0; + } + + /** + * A stepping function, returns 1 if `n` is greater than or equal to 1. + */ + /* $FlowFixMe(>=0.59.0 site=react_native_fb) This comment suppresses an error + * caught by Flow 0.59 which was not caught before. Most likely, this error + * is because an exported function parameter is missing an annotation. + * Without an annotation, these parameters are uncovered by Flow. */ + static step1(n) { + return n >= 1 ? 1 : 0; + } + + /** + * A linear function, `f(t) = t`. Position correlates to elapsed time one to + * one. + * + * http://cubic-bezier.com/#0,0,1,1 + */ + /* $FlowFixMe(>=0.59.0 site=react_native_fb) This comment suppresses an error + * caught by Flow 0.59 which was not caught before. Most likely, this error + * is because an exported function parameter is missing an annotation. + * Without an annotation, these parameters are uncovered by Flow. */ + static linear(t) { + return t; + } + + /** + * A simple inertial interaction, similar to an object slowly accelerating to + * speed. + * + * http://cubic-bezier.com/#.42,0,1,1 + */ + static ease(t: number): number { + if (!ease) { + ease = Easing.bezier(0.42, 0, 1, 1); + } + return ease(t); + } + + /** + * A quadratic function, `f(t) = t * t`. Position equals the square of elapsed + * time. + * + * http://easings.net/#easeInQuad + */ + /* $FlowFixMe(>=0.59.0 site=react_native_fb) This comment suppresses an error + * caught by Flow 0.59 which was not caught before. Most likely, this error + * is because an exported function parameter is missing an annotation. + * Without an annotation, these parameters are uncovered by Flow. */ + static quad(t) { + return t * t; + } + + /** + * A cubic function, `f(t) = t * t * t`. Position equals the cube of elapsed + * time. + * + * http://easings.net/#easeInCubic + */ + /* $FlowFixMe(>=0.59.0 site=react_native_fb) This comment suppresses an error + * caught by Flow 0.59 which was not caught before. Most likely, this error + * is because an exported function parameter is missing an annotation. + * Without an annotation, these parameters are uncovered by Flow. */ + static cubic(t) { + return t * t * t; + } + + /** + * A power function. Position is equal to the Nth power of elapsed time. + * + * n = 4: http://easings.net/#easeInQuart + * n = 5: http://easings.net/#easeInQuint + */ + /* $FlowFixMe(>=0.59.0 site=react_native_fb) This comment suppresses an error + * caught by Flow 0.59 which was not caught before. Most likely, this error + * is because an exported function parameter is missing an annotation. + * Without an annotation, these parameters are uncovered by Flow. */ + static poly(n) { + /* $FlowFixMe(>=0.59.0 site=react_native_fb) This comment suppresses an + * error caught by Flow 0.59 which was not caught before. Most likely, this + * error is because an exported function parameter is missing an + * annotation. Without an annotation, these parameters are uncovered by + * Flow. */ + return (t) => Math.pow(t, n); + } + + /** + * A sinusoidal function. + * + * http://easings.net/#easeInSine + */ + /* $FlowFixMe(>=0.59.0 site=react_native_fb) This comment suppresses an error + * caught by Flow 0.59 which was not caught before. Most likely, this error + * is because an exported function parameter is missing an annotation. + * Without an annotation, these parameters are uncovered by Flow. */ + static sin(t) { + return 1 - Math.cos(t * Math.PI / 2); + } + + /** + * A circular function. + * + * http://easings.net/#easeInCirc + */ + /* $FlowFixMe(>=0.59.0 site=react_native_fb) This comment suppresses an error + * caught by Flow 0.59 which was not caught before. Most likely, this error + * is because an exported function parameter is missing an annotation. + * Without an annotation, these parameters are uncovered by Flow. */ + static circle(t) { + return 1 - Math.sqrt(1 - t * t); + } + + /** + * An exponential function. + * + * http://easings.net/#easeInExpo + */ + /* $FlowFixMe(>=0.59.0 site=react_native_fb) This comment suppresses an error + * caught by Flow 0.59 which was not caught before. Most likely, this error + * is because an exported function parameter is missing an annotation. + * Without an annotation, these parameters are uncovered by Flow. */ + static exp(t) { + return Math.pow(2, 10 * (t - 1)); + } + + /** + * A simple elastic interaction, similar to a spring oscillating back and + * forth. + * + * Default bounciness is 1, which overshoots a little bit once. 0 bounciness + * doesn't overshoot at all, and bounciness of N > 1 will overshoot about N + * times. + * + * http://easings.net/#easeInElastic + */ + static elastic(bounciness: number = 1): (t: number) => number { + const p = bounciness * Math.PI; + return (t) => 1 - Math.pow(Math.cos(t * Math.PI / 2), 3) * Math.cos(t * p); + } + + /** + * Use with `Animated.parallel()` to create a simple effect where the object + * animates back slightly as the animation starts. + * + * Wolfram Plot: + * + * - http://tiny.cc/back_default (s = 1.70158, default) + */ + static back(s: number): (t: number) => number { + if (s === undefined) { + s = 1.70158; + } + return (t) => t * t * ((s + 1) * t - s); + } + + /** + * Provides a simple bouncing effect. + * + * http://easings.net/#easeInBounce + */ + static bounce(t: number): number { + if (t < 1 / 2.75) { + return 7.5625 * t * t; + } + + if (t < 2 / 2.75) { + t -= 1.5 / 2.75; + return 7.5625 * t * t + 0.75; + } + + if (t < 2.5 / 2.75) { + t -= 2.25 / 2.75; + return 7.5625 * t * t + 0.9375; + } + + t -= 2.625 / 2.75; + return 7.5625 * t * t + 0.984375; + } + + /** + * Provides a cubic bezier curve, equivalent to CSS Transitions' + * `transition-timing-function`. + * + * A useful tool to visualize cubic bezier curves can be found at + * http://cubic-bezier.com/ + */ + static bezier( + x1: number, + y1: number, + x2: number, + y2: number + ): (t: number) => number { + const _bezier = require('./bezier'); + return _bezier(x1, y1, x2, y2); + } + + /** + * Runs an easing function forwards. + */ + static in( + easing: (t: number) => number, + ): (t: number) => number { + return easing; + } + + /** + * Runs an easing function backwards. + */ + static out( + easing: (t: number) => number, + ): (t: number) => number { + return (t) => 1 - easing(1 - t); + } + + /** + * Makes any easing function symmetrical. The easing function will run + * forwards for half of the duration, then backwards for the rest of the + * duration. + */ + static inOut( + easing: (t: number) => number, + ): (t: number) => number { + return (t) => { + if (t < 0.5) { + return easing(t * 2) / 2; + } + return 1 - easing((1 - t) * 2) / 2; + }; + } +} + +module.exports = Easing; diff --git a/src/vendor/Animated/NativeAnimatedHelper.js b/src/vendor/Animated/NativeAnimatedHelper.js new file mode 100644 index 000000000..9ba6ab545 --- /dev/null +++ b/src/vendor/Animated/NativeAnimatedHelper.js @@ -0,0 +1,259 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule NativeAnimatedHelper + * @flow + * @format + */ +'use strict'; + +const invariant = require('fbjs/lib/invariant'); +const NativeModules = require('../../modules/NativeModules'); +const NativeEventEmitter = require('../../modules/NativeEventEmitter'); + +import type {AnimationConfig} from './animations/Animation'; +import type {EventConfig} from './AnimatedEvent'; + +const NativeAnimatedModule = NativeModules.NativeAnimatedModule; + +let __nativeAnimatedNodeTagCount = 1; /* used for animated nodes */ +let __nativeAnimationIdCount = 1; /* used for started animations */ + +type EndResult = {finished: boolean}; +type EndCallback = (result: EndResult) => void; +type EventMapping = { + nativeEventPath: Array, + animatedValueTag: ?number, +}; + +let nativeEventEmitter; + +/** + * Simple wrappers around NativeAnimatedModule to provide flow and autocmplete support for + * the native module methods + */ +const API = { + createAnimatedNode: function(tag: ?number, config: Object): void { + assertNativeAnimatedModule(); + NativeAnimatedModule.createAnimatedNode(tag, config); + }, + startListeningToAnimatedNodeValue: function(tag: ?number) { + assertNativeAnimatedModule(); + NativeAnimatedModule.startListeningToAnimatedNodeValue(tag); + }, + stopListeningToAnimatedNodeValue: function(tag: ?number) { + assertNativeAnimatedModule(); + NativeAnimatedModule.stopListeningToAnimatedNodeValue(tag); + }, + connectAnimatedNodes: function(parentTag: ?number, childTag: ?number): void { + assertNativeAnimatedModule(); + NativeAnimatedModule.connectAnimatedNodes(parentTag, childTag); + }, + disconnectAnimatedNodes: function( + parentTag: ?number, + childTag: ?number, + ): void { + assertNativeAnimatedModule(); + NativeAnimatedModule.disconnectAnimatedNodes(parentTag, childTag); + }, + startAnimatingNode: function( + animationId: ?number, + nodeTag: ?number, + config: Object, + endCallback: EndCallback, + ): void { + assertNativeAnimatedModule(); + NativeAnimatedModule.startAnimatingNode( + animationId, + nodeTag, + config, + endCallback, + ); + }, + stopAnimation: function(animationId: ?number) { + assertNativeAnimatedModule(); + NativeAnimatedModule.stopAnimation(animationId); + }, + setAnimatedNodeValue: function(nodeTag: ?number, value: ?number): void { + assertNativeAnimatedModule(); + NativeAnimatedModule.setAnimatedNodeValue(nodeTag, value); + }, + setAnimatedNodeOffset: function(nodeTag: ?number, offset: ?number): void { + assertNativeAnimatedModule(); + NativeAnimatedModule.setAnimatedNodeOffset(nodeTag, offset); + }, + flattenAnimatedNodeOffset: function(nodeTag: ?number): void { + assertNativeAnimatedModule(); + NativeAnimatedModule.flattenAnimatedNodeOffset(nodeTag); + }, + extractAnimatedNodeOffset: function(nodeTag: ?number): void { + assertNativeAnimatedModule(); + NativeAnimatedModule.extractAnimatedNodeOffset(nodeTag); + }, + connectAnimatedNodeToView: function( + nodeTag: ?number, + viewTag: ?number, + ): void { + assertNativeAnimatedModule(); + NativeAnimatedModule.connectAnimatedNodeToView(nodeTag, viewTag); + }, + disconnectAnimatedNodeFromView: function( + nodeTag: ?number, + viewTag: ?number, + ): void { + assertNativeAnimatedModule(); + NativeAnimatedModule.disconnectAnimatedNodeFromView(nodeTag, viewTag); + }, + dropAnimatedNode: function(tag: ?number): void { + assertNativeAnimatedModule(); + NativeAnimatedModule.dropAnimatedNode(tag); + }, + addAnimatedEventToView: function( + viewTag: ?number, + eventName: string, + eventMapping: EventMapping, + ) { + assertNativeAnimatedModule(); + NativeAnimatedModule.addAnimatedEventToView( + viewTag, + eventName, + eventMapping, + ); + }, + removeAnimatedEventFromView( + viewTag: ?number, + eventName: string, + animatedNodeTag: ?number, + ) { + assertNativeAnimatedModule(); + NativeAnimatedModule.removeAnimatedEventFromView( + viewTag, + eventName, + animatedNodeTag, + ); + }, +}; + +/** + * Styles allowed by the native animated implementation. + * + * In general native animated implementation should support any numeric property that doesn't need + * to be updated through the shadow view hierarchy (all non-layout properties). + */ +const STYLES_WHITELIST = { + opacity: true, + transform: true, + /* ios styles */ + shadowOpacity: true, + shadowRadius: true, + /* legacy android transform properties */ + scaleX: true, + scaleY: true, + translateX: true, + translateY: true, +}; + +const TRANSFORM_WHITELIST = { + translateX: true, + translateY: true, + scale: true, + scaleX: true, + scaleY: true, + rotate: true, + rotateX: true, + rotateY: true, + perspective: true, +}; + +function validateTransform(configs: Array): void { + configs.forEach(config => { + if (!TRANSFORM_WHITELIST.hasOwnProperty(config.property)) { + throw new Error( + `Property '${config.property}' is not supported by native animated module`, + ); + } + }); +} + +function validateStyles(styles: Object): void { + for (var key in styles) { + if (!STYLES_WHITELIST.hasOwnProperty(key)) { + throw new Error( + `Style property '${key}' is not supported by native animated module`, + ); + } + } +} + +function validateInterpolation(config: Object): void { + var SUPPORTED_INTERPOLATION_PARAMS = { + inputRange: true, + outputRange: true, + extrapolate: true, + extrapolateRight: true, + extrapolateLeft: true, + }; + for (var key in config) { + if (!SUPPORTED_INTERPOLATION_PARAMS.hasOwnProperty(key)) { + throw new Error( + `Interpolation property '${key}' is not supported by native animated module`, + ); + } + } +} + +function generateNewNodeTag(): number { + return __nativeAnimatedNodeTagCount++; +} + +function generateNewAnimationId(): number { + return __nativeAnimationIdCount++; +} + +function assertNativeAnimatedModule(): void { + invariant(NativeAnimatedModule, 'Native animated module is not available'); +} + +let _warnedMissingNativeAnimated = false; + +function shouldUseNativeDriver(config: AnimationConfig | EventConfig): boolean { + if (config.useNativeDriver && !NativeAnimatedModule) { + if (!_warnedMissingNativeAnimated) { + console.warn( + 'Animated: `useNativeDriver` is not supported because the native ' + + 'animated module is missing. Falling back to JS-based animation. To ' + + 'resolve this, add `RCTAnimation` module to this app, or remove ' + + '`useNativeDriver`. ' + + 'More info: https://github.com/facebook/react-native/issues/11094#issuecomment-263240420', + ); + _warnedMissingNativeAnimated = true; + } + return false; + } + + return config.useNativeDriver || false; +} + +const NativeAnimatedHelper = { + API, + validateStyles, + validateTransform, + validateInterpolation, + generateNewNodeTag, + generateNewAnimationId, + assertNativeAnimatedModule, + shouldUseNativeDriver, + get nativeEventEmitter() { + if (!nativeEventEmitter) { + nativeEventEmitter = new NativeEventEmitter(NativeAnimatedModule); + } + return nativeEventEmitter; + }, +}; + +module.exports = NativeAnimatedHelper; diff --git a/src/vendor/Animated/SHA b/src/vendor/Animated/SHA new file mode 100644 index 000000000..c21c34958 --- /dev/null +++ b/src/vendor/Animated/SHA @@ -0,0 +1 @@ +facebook/react-native@71006f74cdafdae7212c8a10603fb972c6ee338c diff --git a/src/vendor/Animated/SpringConfig.js b/src/vendor/Animated/SpringConfig.js new file mode 100644 index 000000000..e74d167ef --- /dev/null +++ b/src/vendor/Animated/SpringConfig.js @@ -0,0 +1,102 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SpringConfig + * @flow + */ + +'use strict'; + +type SpringConfigType = { + stiffness: number, + damping: number, +}; + +function stiffnessFromOrigamiValue(oValue) { + return (oValue - 30) * 3.62 + 194; +} + +function dampingFromOrigamiValue(oValue) { + return (oValue - 8) * 3 + 25; +} + +function fromOrigamiTensionAndFriction( + tension: number, + friction: number, +): SpringConfigType { + return { + stiffness: stiffnessFromOrigamiValue(tension), + damping: dampingFromOrigamiValue(friction), + }; +} + +function fromBouncinessAndSpeed( + bounciness: number, + speed: number, +): SpringConfigType { + function normalize(value, startValue, endValue) { + return (value - startValue) / (endValue - startValue); + } + + function projectNormal(n, start, end) { + return start + (n * (end - start)); + } + + function linearInterpolation(t, start, end) { + return t * end + (1 - t) * start; + } + + function quadraticOutInterpolation(t, start, end) { + return linearInterpolation(2 * t - t * t, start, end); + } + + function b3Friction1(x) { + return (0.0007 * Math.pow(x, 3)) - + (0.031 * Math.pow(x, 2)) + 0.64 * x + 1.28; + } + + function b3Friction2(x) { + return (0.000044 * Math.pow(x, 3)) - + (0.006 * Math.pow(x, 2)) + 0.36 * x + 2; + } + + function b3Friction3(x) { + return (0.00000045 * Math.pow(x, 3)) - + (0.000332 * Math.pow(x, 2)) + 0.1078 * x + 5.84; + } + + function b3Nobounce(tension) { + if (tension <= 18) { + return b3Friction1(tension); + } else if (tension > 18 && tension <= 44) { + return b3Friction2(tension); + } else { + return b3Friction3(tension); + } + } + + var b = normalize(bounciness / 1.7, 0, 20); + b = projectNormal(b, 0, 0.8); + var s = normalize(speed / 1.7, 0, 20); + var bouncyTension = projectNormal(s, 0.5, 200); + var bouncyFriction = quadraticOutInterpolation( + b, + b3Nobounce(bouncyTension), + 0.01 + ); + + return { + stiffness: stiffnessFromOrigamiValue(bouncyTension), + damping: dampingFromOrigamiValue(bouncyFriction), + }; +} + +module.exports = { + fromOrigamiTensionAndFriction, + fromBouncinessAndSpeed, +}; diff --git a/src/vendor/Animated/animations/Animation.js b/src/vendor/Animated/animations/Animation.js new file mode 100644 index 000000000..2ee6a6f91 --- /dev/null +++ b/src/vendor/Animated/animations/Animation.js @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule Animation + * @flow + * @format + */ +'use strict'; + +const NativeAnimatedHelper = require('../NativeAnimatedHelper'); + +import type AnimatedValue from '../nodes/AnimatedValue'; + +export type EndResult = {finished: boolean}; +export type EndCallback = (result: EndResult) => void; + +export type AnimationConfig = { + isInteraction?: boolean, + useNativeDriver?: boolean, + onComplete?: ?EndCallback, + iterations?: number, +}; + +// Important note: start() and stop() will only be called at most once. +// Once an animation has been stopped or finished its course, it will +// not be reused. +class Animation { + __active: boolean; + __isInteraction: boolean; + __nativeId: number; + __onEnd: ?EndCallback; + __iterations: number; + start( + fromValue: number, + onUpdate: (value: number) => void, + onEnd: ?EndCallback, + previousAnimation: ?Animation, + animatedValue: AnimatedValue, + ): void {} + stop(): void { + if (this.__nativeId) { + NativeAnimatedHelper.API.stopAnimation(this.__nativeId); + } + } + __getNativeAnimationConfig(): any { + // Subclasses that have corresponding animation implementation done in native + // should override this method + throw new Error('This animation type cannot be offloaded to native'); + } + // Helper function for subclasses to make sure onEnd is only called once. + __debouncedOnEnd(result: EndResult): void { + const onEnd = this.__onEnd; + this.__onEnd = null; + onEnd && onEnd(result); + } + __startNativeAnimation(animatedValue: AnimatedValue): void { + animatedValue.__makeNative(); + this.__nativeId = NativeAnimatedHelper.generateNewAnimationId(); + NativeAnimatedHelper.API.startAnimatingNode( + this.__nativeId, + animatedValue.__getNativeTag(), + this.__getNativeAnimationConfig(), + this.__debouncedOnEnd.bind(this), + ); + } +} + +module.exports = Animation; diff --git a/src/vendor/Animated/animations/DecayAnimation.js b/src/vendor/Animated/animations/DecayAnimation.js new file mode 100644 index 000000000..652bd9c9d --- /dev/null +++ b/src/vendor/Animated/animations/DecayAnimation.js @@ -0,0 +1,112 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule DecayAnimation + * @flow + * @format + */ +'use strict'; + +const Animation = require('./Animation'); + +const {shouldUseNativeDriver} = require('../NativeAnimatedHelper'); + +import type {AnimationConfig, EndCallback} from './Animation'; +import type AnimatedValue from '../nodes/AnimatedValue'; + +export type DecayAnimationConfig = AnimationConfig & { + velocity: number | {x: number, y: number}, + deceleration?: number, +}; + +export type DecayAnimationConfigSingle = AnimationConfig & { + velocity: number, + deceleration?: number, +}; + +class DecayAnimation extends Animation { + _startTime: number; + _lastValue: number; + _fromValue: number; + _deceleration: number; + _velocity: number; + _onUpdate: (value: number) => void; + _animationFrame: any; + _useNativeDriver: boolean; + + constructor(config: DecayAnimationConfigSingle) { + super(); + this._deceleration = + config.deceleration !== undefined ? config.deceleration : 0.998; + this._velocity = config.velocity; + this._useNativeDriver = shouldUseNativeDriver(config); + this.__isInteraction = + config.isInteraction !== undefined ? config.isInteraction : true; + this.__iterations = config.iterations !== undefined ? config.iterations : 1; + } + + __getNativeAnimationConfig() { + return { + type: 'decay', + deceleration: this._deceleration, + velocity: this._velocity, + iterations: this.__iterations, + }; + } + + start( + fromValue: number, + onUpdate: (value: number) => void, + onEnd: ?EndCallback, + previousAnimation: ?Animation, + animatedValue: AnimatedValue, + ): void { + this.__active = true; + this._lastValue = fromValue; + this._fromValue = fromValue; + this._onUpdate = onUpdate; + this.__onEnd = onEnd; + this._startTime = Date.now(); + if (this._useNativeDriver) { + this.__startNativeAnimation(animatedValue); + } else { + this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this)); + } + } + + onUpdate(): void { + const now = Date.now(); + + const value = + this._fromValue + + this._velocity / + (1 - this._deceleration) * + (1 - Math.exp(-(1 - this._deceleration) * (now - this._startTime))); + + this._onUpdate(value); + + if (Math.abs(this._lastValue - value) < 0.1) { + this.__debouncedOnEnd({finished: true}); + return; + } + + this._lastValue = value; + if (this.__active) { + this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this)); + } + } + + stop(): void { + super.stop(); + this.__active = false; + global.cancelAnimationFrame(this._animationFrame); + this.__debouncedOnEnd({finished: false}); + } +} + +module.exports = DecayAnimation; diff --git a/src/vendor/Animated/animations/SpringAnimation.js b/src/vendor/Animated/animations/SpringAnimation.js new file mode 100644 index 000000000..67dee081b --- /dev/null +++ b/src/vendor/Animated/animations/SpringAnimation.js @@ -0,0 +1,342 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SpringAnimation + * @flow + * @format + */ +'use strict'; + +const AnimatedValue = require('../nodes/AnimatedValue'); +const AnimatedValueXY = require('../nodes/AnimatedValueXY'); +const Animation = require('./Animation'); +const SpringConfig = require('../SpringConfig'); + +const invariant = require('fbjs/lib/invariant'); +const {shouldUseNativeDriver} = require('../NativeAnimatedHelper'); + +import type {AnimationConfig, EndCallback} from './Animation'; + +export type SpringAnimationConfig = AnimationConfig & { + toValue: number | AnimatedValue | {x: number, y: number} | AnimatedValueXY, + overshootClamping?: boolean, + restDisplacementThreshold?: number, + restSpeedThreshold?: number, + velocity?: number | {x: number, y: number}, + bounciness?: number, + speed?: number, + tension?: number, + friction?: number, + stiffness?: number, + damping?: number, + mass?: number, + delay?: number, +}; + +export type SpringAnimationConfigSingle = AnimationConfig & { + toValue: number | AnimatedValue, + overshootClamping?: boolean, + restDisplacementThreshold?: number, + restSpeedThreshold?: number, + velocity?: number, + bounciness?: number, + speed?: number, + tension?: number, + friction?: number, + stiffness?: number, + damping?: number, + mass?: number, + delay?: number, +}; + +function withDefault(value: ?T, defaultValue: T): T { + if (value === undefined || value === null) { + return defaultValue; + } + return value; +} + +class SpringAnimation extends Animation { + _overshootClamping: boolean; + _restDisplacementThreshold: number; + _restSpeedThreshold: number; + _lastVelocity: number; + _startPosition: number; + _lastPosition: number; + _fromValue: number; + _toValue: any; + _stiffness: number; + _damping: number; + _mass: number; + _initialVelocity: number; + _delay: number; + _timeout: any; + _startTime: number; + _lastTime: number; + _frameTime: number; + _onUpdate: (value: number) => void; + _animationFrame: any; + _useNativeDriver: boolean; + + constructor(config: SpringAnimationConfigSingle) { + super(); + + this._overshootClamping = withDefault(config.overshootClamping, false); + this._restDisplacementThreshold = withDefault( + config.restDisplacementThreshold, + 0.001, + ); + this._restSpeedThreshold = withDefault(config.restSpeedThreshold, 0.001); + this._initialVelocity = withDefault(config.velocity, 0); + this._lastVelocity = withDefault(config.velocity, 0); + this._toValue = config.toValue; + this._delay = withDefault(config.delay, 0); + this._useNativeDriver = shouldUseNativeDriver(config); + this.__isInteraction = + config.isInteraction !== undefined ? config.isInteraction : true; + this.__iterations = config.iterations !== undefined ? config.iterations : 1; + + if ( + config.stiffness !== undefined || + config.damping !== undefined || + config.mass !== undefined + ) { + invariant( + config.bounciness === undefined && + config.speed === undefined && + config.tension === undefined && + config.friction === undefined, + 'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one', + ); + this._stiffness = withDefault(config.stiffness, 100); + this._damping = withDefault(config.damping, 10); + this._mass = withDefault(config.mass, 1); + } else if (config.bounciness !== undefined || config.speed !== undefined) { + // Convert the origami bounciness/speed values to stiffness/damping + // We assume mass is 1. + invariant( + config.tension === undefined && + config.friction === undefined && + config.stiffness === undefined && + config.damping === undefined && + config.mass === undefined, + 'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one', + ); + const springConfig = SpringConfig.fromBouncinessAndSpeed( + withDefault(config.bounciness, 8), + withDefault(config.speed, 12), + ); + this._stiffness = springConfig.stiffness; + this._damping = springConfig.damping; + this._mass = 1; + } else { + // Convert the origami tension/friction values to stiffness/damping + // We assume mass is 1. + const springConfig = SpringConfig.fromOrigamiTensionAndFriction( + withDefault(config.tension, 40), + withDefault(config.friction, 7), + ); + this._stiffness = springConfig.stiffness; + this._damping = springConfig.damping; + this._mass = 1; + } + + invariant(this._stiffness > 0, 'Stiffness value must be greater than 0'); + invariant(this._damping > 0, 'Damping value must be greater than 0'); + invariant(this._mass > 0, 'Mass value must be greater than 0'); + } + + __getNativeAnimationConfig() { + return { + type: 'spring', + overshootClamping: this._overshootClamping, + restDisplacementThreshold: this._restDisplacementThreshold, + restSpeedThreshold: this._restSpeedThreshold, + stiffness: this._stiffness, + damping: this._damping, + mass: this._mass, + initialVelocity: withDefault(this._initialVelocity, this._lastVelocity), + toValue: this._toValue, + iterations: this.__iterations, + }; + } + + start( + fromValue: number, + onUpdate: (value: number) => void, + onEnd: ?EndCallback, + previousAnimation: ?Animation, + animatedValue: AnimatedValue, + ): void { + this.__active = true; + this._startPosition = fromValue; + this._lastPosition = this._startPosition; + + this._onUpdate = onUpdate; + this.__onEnd = onEnd; + this._lastTime = Date.now(); + this._frameTime = 0.0; + + if (previousAnimation instanceof SpringAnimation) { + const internalState = previousAnimation.getInternalState(); + this._lastPosition = internalState.lastPosition; + this._lastVelocity = internalState.lastVelocity; + // Set the initial velocity to the last velocity + this._initialVelocity = this._lastVelocity; + this._lastTime = internalState.lastTime; + } + + const start = () => { + if (this._useNativeDriver) { + this.__startNativeAnimation(animatedValue); + } else { + this.onUpdate(); + } + }; + + // If this._delay is more than 0, we start after the timeout. + if (this._delay) { + this._timeout = setTimeout(start, this._delay); + } else { + start(); + } + } + + getInternalState(): Object { + return { + lastPosition: this._lastPosition, + lastVelocity: this._lastVelocity, + lastTime: this._lastTime, + }; + } + + /** + * This spring model is based off of a damped harmonic oscillator + * (https://en.wikipedia.org/wiki/Harmonic_oscillator#Damped_harmonic_oscillator). + * + * We use the closed form of the second order differential equation: + * + * x'' + (2ζ⍵_0)x' + ⍵^2x = 0 + * + * where + * ⍵_0 = √(k / m) (undamped angular frequency of the oscillator), + * ζ = c / 2√mk (damping ratio), + * c = damping constant + * k = stiffness + * m = mass + * + * The derivation of the closed form is described in detail here: + * http://planetmath.org/sites/default/files/texpdf/39745.pdf + * + * This algorithm happens to match the algorithm used by CASpringAnimation, + * a QuartzCore (iOS) API that creates spring animations. + */ + onUpdate(): void { + // If for some reason we lost a lot of frames (e.g. process large payload or + // stopped in the debugger), we only advance by 4 frames worth of + // computation and will continue on the next frame. It's better to have it + // running at faster speed than jumping to the end. + const MAX_STEPS = 64; + let now = Date.now(); + if (now > this._lastTime + MAX_STEPS) { + now = this._lastTime + MAX_STEPS; + } + + const deltaTime = (now - this._lastTime) / 1000; + this._frameTime += deltaTime; + + const c: number = this._damping; + const m: number = this._mass; + const k: number = this._stiffness; + const v0: number = -this._initialVelocity; + + const zeta = c / (2 * Math.sqrt(k * m)); // damping ratio + const omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms) + const omega1 = omega0 * Math.sqrt(1.0 - zeta * zeta); // exponential decay + const x0 = this._toValue - this._startPosition; // calculate the oscillation from x0 = 1 to x = 0 + + let position = 0.0; + let velocity = 0.0; + const t = this._frameTime; + if (zeta < 1) { + // Under damped + const envelope = Math.exp(-zeta * omega0 * t); + position = + this._toValue - + envelope * + ((v0 + zeta * omega0 * x0) / omega1 * Math.sin(omega1 * t) + + x0 * Math.cos(omega1 * t)); + // This looks crazy -- it's actually just the derivative of the + // oscillation function + velocity = + zeta * + omega0 * + envelope * + (Math.sin(omega1 * t) * (v0 + zeta * omega0 * x0) / omega1 + + x0 * Math.cos(omega1 * t)) - + envelope * + (Math.cos(omega1 * t) * (v0 + zeta * omega0 * x0) - + omega1 * x0 * Math.sin(omega1 * t)); + } else { + // Critically damped + const envelope = Math.exp(-omega0 * t); + position = this._toValue - envelope * (x0 + (v0 + omega0 * x0) * t); + velocity = + envelope * (v0 * (t * omega0 - 1) + t * x0 * (omega0 * omega0)); + } + + this._lastTime = now; + this._lastPosition = position; + this._lastVelocity = velocity; + + this._onUpdate(position); + if (!this.__active) { + // a listener might have stopped us in _onUpdate + return; + } + + // Conditions for stopping the spring animation + let isOvershooting = false; + if (this._overshootClamping && this._stiffness !== 0) { + if (this._startPosition < this._toValue) { + isOvershooting = position > this._toValue; + } else { + isOvershooting = position < this._toValue; + } + } + const isVelocity = Math.abs(velocity) <= this._restSpeedThreshold; + let isDisplacement = true; + if (this._stiffness !== 0) { + isDisplacement = + Math.abs(this._toValue - position) <= this._restDisplacementThreshold; + } + + if (isOvershooting || (isVelocity && isDisplacement)) { + if (this._stiffness !== 0) { + // Ensure that we end up with a round value + this._lastPosition = this._toValue; + this._lastVelocity = 0; + this._onUpdate(this._toValue); + } + + this.__debouncedOnEnd({finished: true}); + return; + } + this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this)); + } + + stop(): void { + super.stop(); + this.__active = false; + clearTimeout(this._timeout); + global.cancelAnimationFrame(this._animationFrame); + this.__debouncedOnEnd({finished: false}); + } +} + +module.exports = SpringAnimation; diff --git a/src/vendor/Animated/animations/TimingAnimation.js b/src/vendor/Animated/animations/TimingAnimation.js new file mode 100644 index 000000000..14d3e3dc9 --- /dev/null +++ b/src/vendor/Animated/animations/TimingAnimation.js @@ -0,0 +1,155 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule TimingAnimation + * @flow + * @format + */ +'use strict'; + +const AnimatedValue = require('../nodes/AnimatedValue'); +const AnimatedValueXY = require('../nodes/AnimatedValueXY'); +const Animation = require('./Animation'); + +const {shouldUseNativeDriver} = require('../NativeAnimatedHelper'); + +import type {AnimationConfig, EndCallback} from './Animation'; + +export type TimingAnimationConfig = AnimationConfig & { + toValue: number | AnimatedValue | {x: number, y: number} | AnimatedValueXY, + easing?: (value: number) => number, + duration?: number, + delay?: number, +}; + +export type TimingAnimationConfigSingle = AnimationConfig & { + toValue: number | AnimatedValue, + easing?: (value: number) => number, + duration?: number, + delay?: number, +}; + +let _easeInOut; +function easeInOut() { + if (!_easeInOut) { + const Easing = require('../Easing'); + _easeInOut = Easing.inOut(Easing.ease); + } + return _easeInOut; +} + +class TimingAnimation extends Animation { + _startTime: number; + _fromValue: number; + _toValue: any; + _duration: number; + _delay: number; + _easing: (value: number) => number; + _onUpdate: (value: number) => void; + _animationFrame: any; + _timeout: any; + _useNativeDriver: boolean; + + constructor(config: TimingAnimationConfigSingle) { + super(); + this._toValue = config.toValue; + this._easing = config.easing !== undefined ? config.easing : easeInOut(); + this._duration = config.duration !== undefined ? config.duration : 500; + this._delay = config.delay !== undefined ? config.delay : 0; + this.__iterations = config.iterations !== undefined ? config.iterations : 1; + this.__isInteraction = + config.isInteraction !== undefined ? config.isInteraction : true; + this._useNativeDriver = shouldUseNativeDriver(config); + } + + __getNativeAnimationConfig(): any { + const frameDuration = 1000.0 / 60.0; + const frames = []; + for (let dt = 0.0; dt < this._duration; dt += frameDuration) { + frames.push(this._easing(dt / this._duration)); + } + frames.push(this._easing(1)); + return { + type: 'frames', + frames, + toValue: this._toValue, + iterations: this.__iterations, + }; + } + + start( + fromValue: number, + onUpdate: (value: number) => void, + onEnd: ?EndCallback, + previousAnimation: ?Animation, + animatedValue: AnimatedValue, + ): void { + this.__active = true; + this._fromValue = fromValue; + this._onUpdate = onUpdate; + this.__onEnd = onEnd; + + const start = () => { + // Animations that sometimes have 0 duration and sometimes do not + // still need to use the native driver when duration is 0 so as to + // not cause intermixed JS and native animations. + if (this._duration === 0 && !this._useNativeDriver) { + this._onUpdate(this._toValue); + this.__debouncedOnEnd({finished: true}); + } else { + this._startTime = Date.now(); + if (this._useNativeDriver) { + this.__startNativeAnimation(animatedValue); + } else { + this._animationFrame = requestAnimationFrame( + this.onUpdate.bind(this), + ); + } + } + }; + if (this._delay) { + this._timeout = setTimeout(start, this._delay); + } else { + start(); + } + } + + onUpdate(): void { + const now = Date.now(); + if (now >= this._startTime + this._duration) { + if (this._duration === 0) { + this._onUpdate(this._toValue); + } else { + this._onUpdate( + this._fromValue + this._easing(1) * (this._toValue - this._fromValue), + ); + } + this.__debouncedOnEnd({finished: true}); + return; + } + + this._onUpdate( + this._fromValue + + this._easing((now - this._startTime) / this._duration) * + (this._toValue - this._fromValue), + ); + if (this.__active) { + this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this)); + } + } + + stop(): void { + super.stop(); + this.__active = false; + clearTimeout(this._timeout); + global.cancelAnimationFrame(this._animationFrame); + this.__debouncedOnEnd({finished: false}); + } +} + +module.exports = TimingAnimation; diff --git a/src/vendor/Animated/bezier.js b/src/vendor/Animated/bezier.js new file mode 100644 index 000000000..2bd594930 --- /dev/null +++ b/src/vendor/Animated/bezier.js @@ -0,0 +1,108 @@ +/** + * BezierEasing - use bezier curve for transition easing function + * https://github.com/gre/bezier-easing + * + * @copyright 2014-2015 Gaëtan Renaudeau. MIT License. + * @providesModule bezier + * @noflow + */ +'use strict'; + + // These values are established by empiricism with tests (tradeoff: performance VS precision) + var NEWTON_ITERATIONS = 4; + var NEWTON_MIN_SLOPE = 0.001; + var SUBDIVISION_PRECISION = 0.0000001; + var SUBDIVISION_MAX_ITERATIONS = 10; + + var kSplineTableSize = 11; + var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0); + + var float32ArraySupported = typeof Float32Array === 'function'; + + function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; } + function B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; } + function C (aA1) { return 3.0 * aA1; } + + // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2. + function calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; } + + // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2. + function getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); } + + function binarySubdivide (aX, aA, aB, mX1, mX2) { + var currentX, currentT, i = 0; + do { + currentT = aA + (aB - aA) / 2.0; + currentX = calcBezier(currentT, mX1, mX2) - aX; + if (currentX > 0.0) { + aB = currentT; + } else { + aA = currentT; + } + } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); + return currentT; + } + + function newtonRaphsonIterate (aX, aGuessT, mX1, mX2) { + for (var i = 0; i < NEWTON_ITERATIONS; ++i) { + var currentSlope = getSlope(aGuessT, mX1, mX2); + if (currentSlope === 0.0) { + return aGuessT; + } + var currentX = calcBezier(aGuessT, mX1, mX2) - aX; + aGuessT -= currentX / currentSlope; + } + return aGuessT; + } + + module.exports = function bezier (mX1, mY1, mX2, mY2) { + if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) { // eslint-disable-line yoda + throw new Error('bezier x values must be in [0, 1] range'); + } + + // Precompute samples table + var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); + if (mX1 !== mY1 || mX2 !== mY2) { + for (var i = 0; i < kSplineTableSize; ++i) { + sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2); + } + } + + function getTForX (aX) { + var intervalStart = 0.0; + var currentSample = 1; + var lastSample = kSplineTableSize - 1; + + for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) { + intervalStart += kSampleStepSize; + } + --currentSample; + + // Interpolate to provide an initial guess for t + var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]); + var guessForT = intervalStart + dist * kSampleStepSize; + + var initialSlope = getSlope(guessForT, mX1, mX2); + if (initialSlope >= NEWTON_MIN_SLOPE) { + return newtonRaphsonIterate(aX, guessForT, mX1, mX2); + } else if (initialSlope === 0.0) { + return guessForT; + } else { + return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2); + } + } + + return function BezierEasing (x) { + if (mX1 === mY1 && mX2 === mY2) { + return x; // linear + } + // Because JavaScript number are imprecise, we should guarantee the extremes are right. + if (x === 0) { + return 0; + } + if (x === 1) { + return 1; + } + return calcBezier(getTForX(x), mY1, mY2); + }; + }; diff --git a/src/vendor/Animated/createAnimatedComponent.js b/src/vendor/Animated/createAnimatedComponent.js new file mode 100644 index 000000000..6a424f2a6 --- /dev/null +++ b/src/vendor/Animated/createAnimatedComponent.js @@ -0,0 +1,200 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule createAnimatedComponent + * @flow + * @format + */ +'use strict'; + +const {AnimatedEvent} = require('./AnimatedEvent'); +const AnimatedProps = require('./nodes/AnimatedProps'); +const React = require('react'); +const ViewStylePropTypes = require('../../components/View/ViewStylePropTypes').default; + +function createAnimatedComponent(Component: any): any { + class AnimatedComponent extends React.Component { + _component: any; + _invokeAnimatedPropsCallbackOnMount: boolean = false; + _prevComponent: any; + _propsAnimated: AnimatedProps; + _eventDetachers: Array = []; + _setComponentRef: Function; + + static __skipSetNativeProps_FOR_TESTS_ONLY = false; + + constructor(props: Object) { + super(props); + this._setComponentRef = this._setComponentRef.bind(this); + } + + componentWillUnmount() { + this._propsAnimated && this._propsAnimated.__detach(); + this._detachNativeEvents(); + } + + setNativeProps(props) { + this._component.setNativeProps(props); + } + + componentWillMount() { + this._attachProps(this.props); + } + + componentDidMount() { + if (this._invokeAnimatedPropsCallbackOnMount) { + this._invokeAnimatedPropsCallbackOnMount = false; + this._animatedPropsCallback(); + } + + this._propsAnimated.setNativeView(this._component); + this._attachNativeEvents(); + } + + _attachNativeEvents() { + // Make sure to get the scrollable node for components that implement + // `ScrollResponder.Mixin`. + const scrollableNode = this._component.getScrollableNode + ? this._component.getScrollableNode() + : this._component; + + for (const key in this.props) { + const prop = this.props[key]; + if (prop instanceof AnimatedEvent && prop.__isNative) { + prop.__attach(scrollableNode, key); + this._eventDetachers.push(() => prop.__detach(scrollableNode, key)); + } + } + } + + _detachNativeEvents() { + this._eventDetachers.forEach(remove => remove()); + this._eventDetachers = []; + } + + // The system is best designed when setNativeProps is implemented. It is + // able to avoid re-rendering and directly set the attributes that changed. + // However, setNativeProps can only be implemented on leaf native + // components. If you want to animate a composite component, you need to + // re-render it. In this case, we have a fallback that uses forceUpdate. + _animatedPropsCallback = () => { + if (this._component == null) { + // AnimatedProps is created in will-mount because it's used in render. + // But this callback may be invoked before mount in async mode, + // In which case we should defer the setNativeProps() call. + // React may throw away uncommitted work in async mode, + // So a deferred call won't always be invoked. + this._invokeAnimatedPropsCallbackOnMount = true; + } else if ( + AnimatedComponent.__skipSetNativeProps_FOR_TESTS_ONLY || + typeof this._component.setNativeProps !== 'function' + ) { + this.forceUpdate(); + } else if (!this._propsAnimated.__isNative) { + this._component.setNativeProps( + this._propsAnimated.__getAnimatedValue(), + ); + } else { + throw new Error( + 'Attempting to run JS driven animation on animated ' + + 'node that has been moved to "native" earlier by starting an ' + + 'animation with `useNativeDriver: true`', + ); + } + }; + + _attachProps(nextProps) { + const oldPropsAnimated = this._propsAnimated; + + this._propsAnimated = new AnimatedProps( + nextProps, + this._animatedPropsCallback, + ); + + // When you call detach, it removes the element from the parent list + // of children. If it goes to 0, then the parent also detaches itself + // and so on. + // An optimization is to attach the new elements and THEN detach the old + // ones instead of detaching and THEN attaching. + // This way the intermediate state isn't to go to 0 and trigger + // this expensive recursive detaching to then re-attach everything on + // the very next operation. + oldPropsAnimated && oldPropsAnimated.__detach(); + } + + componentWillReceiveProps(newProps) { + this._attachProps(newProps); + } + + componentDidUpdate(prevProps) { + if (this._component !== this._prevComponent) { + this._propsAnimated.setNativeView(this._component); + } + if (this._component !== this._prevComponent || prevProps !== this.props) { + this._detachNativeEvents(); + this._attachNativeEvents(); + } + } + + render() { + const props = this._propsAnimated.__getValue(); + return ( + + ); + } + + _setComponentRef(c) { + this._prevComponent = this._component; + this._component = c; + } + + // A third party library can use getNode() + // to get the node reference of the decorated component + getNode() { + return this._component; + } + } + + const propTypes = Component.propTypes; + + AnimatedComponent.propTypes = { + style: function(props, propName, componentName) { + if (!propTypes) { + return; + } + + for (const key in ViewStylePropTypes) { + if (!propTypes[key] && props[key] !== undefined) { + console.warn( + 'You are setting the style `{ ' + + key + + ': ... }` as a prop. You ' + + 'should nest it in a style object. ' + + 'E.g. `{ style: { ' + + key + + ': ... } }`', + ); + } + } + }, + }; + + return AnimatedComponent; +} + +module.exports = createAnimatedComponent; diff --git a/src/vendor/Animated/nodes/AnimatedAddition.js b/src/vendor/Animated/nodes/AnimatedAddition.js new file mode 100644 index 000000000..53d338836 --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedAddition.js @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedAddition + * @flow + * @format + */ +'use strict'; + +const AnimatedInterpolation = require('./AnimatedInterpolation'); +const AnimatedNode = require('./AnimatedNode'); +const AnimatedValue = require('./AnimatedValue'); +const AnimatedWithChildren = require('./AnimatedWithChildren'); + +import type {InterpolationConfigType} from './AnimatedInterpolation'; + +class AnimatedAddition extends AnimatedWithChildren { + _a: AnimatedNode; + _b: AnimatedNode; + + constructor(a: AnimatedNode | number, b: AnimatedNode | number) { + super(); + this._a = typeof a === 'number' ? new AnimatedValue(a) : a; + this._b = typeof b === 'number' ? new AnimatedValue(b) : b; + } + + __makeNative() { + this._a.__makeNative(); + this._b.__makeNative(); + super.__makeNative(); + } + + __getValue(): number { + return this._a.__getValue() + this._b.__getValue(); + } + + interpolate(config: InterpolationConfigType): AnimatedInterpolation { + return new AnimatedInterpolation(this, config); + } + + __attach(): void { + this._a.__addChild(this); + this._b.__addChild(this); + } + + __detach(): void { + this._a.__removeChild(this); + this._b.__removeChild(this); + super.__detach(); + } + + __getNativeConfig(): any { + return { + type: 'addition', + input: [this._a.__getNativeTag(), this._b.__getNativeTag()], + }; + } +} + +module.exports = AnimatedAddition; diff --git a/src/vendor/Animated/nodes/AnimatedDiffClamp.js b/src/vendor/Animated/nodes/AnimatedDiffClamp.js new file mode 100644 index 000000000..eac26a102 --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedDiffClamp.js @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedDiffClamp + * @flow + * @format + */ +'use strict'; + +const AnimatedInterpolation = require('./AnimatedInterpolation'); +const AnimatedNode = require('./AnimatedNode'); +const AnimatedWithChildren = require('./AnimatedWithChildren'); + +import type {InterpolationConfigType} from './AnimatedInterpolation'; + +class AnimatedDiffClamp extends AnimatedWithChildren { + _a: AnimatedNode; + _min: number; + _max: number; + _value: number; + _lastValue: number; + + constructor(a: AnimatedNode, min: number, max: number) { + super(); + + this._a = a; + this._min = min; + this._max = max; + this._value = this._lastValue = this._a.__getValue(); + } + + __makeNative() { + this._a.__makeNative(); + super.__makeNative(); + } + + interpolate(config: InterpolationConfigType): AnimatedInterpolation { + return new AnimatedInterpolation(this, config); + } + + __getValue(): number { + const value = this._a.__getValue(); + const diff = value - this._lastValue; + this._lastValue = value; + this._value = Math.min(Math.max(this._value + diff, this._min), this._max); + return this._value; + } + + __attach(): void { + this._a.__addChild(this); + } + + __detach(): void { + this._a.__removeChild(this); + super.__detach(); + } + + __getNativeConfig(): any { + return { + type: 'diffclamp', + input: this._a.__getNativeTag(), + min: this._min, + max: this._max, + }; + } +} + +module.exports = AnimatedDiffClamp; diff --git a/src/vendor/Animated/nodes/AnimatedDivision.js b/src/vendor/Animated/nodes/AnimatedDivision.js new file mode 100644 index 000000000..8d658f458 --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedDivision.js @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedDivision + * @flow + * @format + */ +'use strict'; + +const AnimatedInterpolation = require('./AnimatedInterpolation'); +const AnimatedNode = require('./AnimatedNode'); +const AnimatedValue = require('./AnimatedValue'); +const AnimatedWithChildren = require('./AnimatedWithChildren'); + +import type {InterpolationConfigType} from './AnimatedInterpolation'; + +class AnimatedDivision extends AnimatedWithChildren { + _a: AnimatedNode; + _b: AnimatedNode; + + constructor(a: AnimatedNode | number, b: AnimatedNode | number) { + super(); + this._a = typeof a === 'number' ? new AnimatedValue(a) : a; + this._b = typeof b === 'number' ? new AnimatedValue(b) : b; + } + + __makeNative() { + this._a.__makeNative(); + this._b.__makeNative(); + super.__makeNative(); + } + + __getValue(): number { + const a = this._a.__getValue(); + const b = this._b.__getValue(); + if (b === 0) { + console.error('Detected division by zero in AnimatedDivision'); + } + return a / b; + } + + interpolate(config: InterpolationConfigType): AnimatedInterpolation { + return new AnimatedInterpolation(this, config); + } + + __attach(): void { + this._a.__addChild(this); + this._b.__addChild(this); + } + + __detach(): void { + this._a.__removeChild(this); + this._b.__removeChild(this); + super.__detach(); + } + + __getNativeConfig(): any { + return { + type: 'division', + input: [this._a.__getNativeTag(), this._b.__getNativeTag()], + }; + } +} + +module.exports = AnimatedDivision; diff --git a/src/vendor/Animated/nodes/AnimatedInterpolation.js b/src/vendor/Animated/nodes/AnimatedInterpolation.js new file mode 100644 index 000000000..8d66c216b --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedInterpolation.js @@ -0,0 +1,388 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedInterpolation + * @flow + * @format + */ +/* eslint no-bitwise: 0 */ +'use strict'; + +const AnimatedNode = require('./AnimatedNode'); +const AnimatedWithChildren = require('./AnimatedWithChildren'); +const NativeAnimatedHelper = require('../NativeAnimatedHelper'); + +const invariant = require('fbjs/lib/invariant'); +const normalizeColor = require('normalize-css-color'); + +type ExtrapolateType = 'extend' | 'identity' | 'clamp'; + +export type InterpolationConfigType = { + inputRange: Array, + /* $FlowFixMe(>=0.38.0 site=react_native_fb,react_native_oss) - Flow error + * detected during the deployment of v0.38.0. To see the error, remove this + * comment and run flow + */ + outputRange: Array | Array, + easing?: (input: number) => number, + extrapolate?: ExtrapolateType, + extrapolateLeft?: ExtrapolateType, + extrapolateRight?: ExtrapolateType, +}; + +const linear = t => t; + +/** + * Very handy helper to map input ranges to output ranges with an easing + * function and custom behavior outside of the ranges. + */ +function createInterpolation( + config: InterpolationConfigType, +): (input: number) => number | string { + if (config.outputRange && typeof config.outputRange[0] === 'string') { + return createInterpolationFromStringOutputRange(config); + } + + const outputRange: Array = (config.outputRange: any); + checkInfiniteRange('outputRange', outputRange); + + const inputRange = config.inputRange; + checkInfiniteRange('inputRange', inputRange); + checkValidInputRange(inputRange); + + invariant( + inputRange.length === outputRange.length, + 'inputRange (' + + inputRange.length + + ') and outputRange (' + + outputRange.length + + ') must have the same length', + ); + + const easing = config.easing || linear; + + let extrapolateLeft: ExtrapolateType = 'extend'; + if (config.extrapolateLeft !== undefined) { + extrapolateLeft = config.extrapolateLeft; + } else if (config.extrapolate !== undefined) { + extrapolateLeft = config.extrapolate; + } + + let extrapolateRight: ExtrapolateType = 'extend'; + if (config.extrapolateRight !== undefined) { + extrapolateRight = config.extrapolateRight; + } else if (config.extrapolate !== undefined) { + extrapolateRight = config.extrapolate; + } + + return input => { + invariant( + typeof input === 'number', + 'Cannot interpolation an input which is not a number', + ); + + const range = findRange(input, inputRange); + return interpolate( + input, + inputRange[range], + inputRange[range + 1], + outputRange[range], + outputRange[range + 1], + easing, + extrapolateLeft, + extrapolateRight, + ); + }; +} + +function interpolate( + input: number, + inputMin: number, + inputMax: number, + outputMin: number, + outputMax: number, + easing: (input: number) => number, + extrapolateLeft: ExtrapolateType, + extrapolateRight: ExtrapolateType, +) { + let result = input; + + // Extrapolate + if (result < inputMin) { + if (extrapolateLeft === 'identity') { + return result; + } else if (extrapolateLeft === 'clamp') { + result = inputMin; + } else if (extrapolateLeft === 'extend') { + // noop + } + } + + if (result > inputMax) { + if (extrapolateRight === 'identity') { + return result; + } else if (extrapolateRight === 'clamp') { + result = inputMax; + } else if (extrapolateRight === 'extend') { + // noop + } + } + + if (outputMin === outputMax) { + return outputMin; + } + + if (inputMin === inputMax) { + if (input <= inputMin) { + return outputMin; + } + return outputMax; + } + + // Input Range + if (inputMin === -Infinity) { + result = -result; + } else if (inputMax === Infinity) { + result = result - inputMin; + } else { + result = (result - inputMin) / (inputMax - inputMin); + } + + // Easing + result = easing(result); + + // Output Range + if (outputMin === -Infinity) { + result = -result; + } else if (outputMax === Infinity) { + result = result + outputMin; + } else { + result = result * (outputMax - outputMin) + outputMin; + } + + return result; +} + +function colorToRgba(input: string): string { + let int32Color = normalizeColor(input); + if (int32Color === null) { + return input; + } + + int32Color = int32Color || 0; + + const r = (int32Color & 0xff000000) >>> 24; + const g = (int32Color & 0x00ff0000) >>> 16; + const b = (int32Color & 0x0000ff00) >>> 8; + const a = (int32Color & 0x000000ff) / 255; + + return `rgba(${r}, ${g}, ${b}, ${a})`; +} + +const stringShapeRegex = /[0-9\.-]+/g; + +/** + * Supports string shapes by extracting numbers so new values can be computed, + * and recombines those values into new strings of the same shape. Supports + * things like: + * + * rgba(123, 42, 99, 0.36) // colors + * -45deg // values with units + */ +function createInterpolationFromStringOutputRange( + config: InterpolationConfigType, +): (input: number) => string { + let outputRange: Array = (config.outputRange: any); + invariant(outputRange.length >= 2, 'Bad output range'); + outputRange = outputRange.map(colorToRgba); + checkPattern(outputRange); + + // ['rgba(0, 100, 200, 0)', 'rgba(50, 150, 250, 0.5)'] + // -> + // [ + // [0, 50], + // [100, 150], + // [200, 250], + // [0, 0.5], + // ] + /* $FlowFixMe(>=0.18.0): `outputRange[0].match()` can return `null`. Need to + * guard against this possibility. + */ + const outputRanges = outputRange[0].match(stringShapeRegex).map(() => []); + outputRange.forEach(value => { + /* $FlowFixMe(>=0.18.0): `value.match()` can return `null`. Need to guard + * against this possibility. + */ + value.match(stringShapeRegex).forEach((number, i) => { + outputRanges[i].push(+number); + }); + }); + + /* $FlowFixMe(>=0.18.0): `outputRange[0].match()` can return `null`. Need to + * guard against this possibility. + */ + const interpolations = outputRange[0] + .match(stringShapeRegex) + .map((value, i) => { + return createInterpolation({ + ...config, + outputRange: outputRanges[i], + }); + }); + + // rgba requires that the r,g,b are integers.... so we want to round them, but we *dont* want to + // round the opacity (4th column). + const shouldRound = isRgbOrRgba(outputRange[0]); + + return input => { + let i = 0; + // 'rgba(0, 100, 200, 0)' + // -> + // 'rgba(${interpolations[0](input)}, ${interpolations[1](input)}, ...' + return outputRange[0].replace(stringShapeRegex, () => { + const val = +interpolations[i++](input); + const rounded = + shouldRound && i < 4 ? Math.round(val) : Math.round(val * 1000) / 1000; + return String(rounded); + }); + }; +} + +function isRgbOrRgba(range) { + return typeof range === 'string' && range.startsWith('rgb'); +} + +function checkPattern(arr: Array) { + const pattern = arr[0].replace(stringShapeRegex, ''); + for (let i = 1; i < arr.length; ++i) { + invariant( + pattern === arr[i].replace(stringShapeRegex, ''), + 'invalid pattern ' + arr[0] + ' and ' + arr[i], + ); + } +} + +function findRange(input: number, inputRange: Array) { + let i; + for (i = 1; i < inputRange.length - 1; ++i) { + if (inputRange[i] >= input) { + break; + } + } + return i - 1; +} + +function checkValidInputRange(arr: Array) { + invariant(arr.length >= 2, 'inputRange must have at least 2 elements'); + for (let i = 1; i < arr.length; ++i) { + invariant( + arr[i] >= arr[i - 1], + /* $FlowFixMe(>=0.13.0) - In the addition expression below this comment, + * one or both of the operands may be something that doesn't cleanly + * convert to a string, like undefined, null, and object, etc. If you really + * mean this implicit string conversion, you can do something like + * String(myThing) + */ + 'inputRange must be monotonically increasing ' + arr, + ); + } +} + +function checkInfiniteRange(name: string, arr: Array) { + invariant(arr.length >= 2, name + ' must have at least 2 elements'); + invariant( + arr.length !== 2 || arr[0] !== -Infinity || arr[1] !== Infinity, + /* $FlowFixMe(>=0.13.0) - In the addition expression below this comment, + * one or both of the operands may be something that doesn't cleanly convert + * to a string, like undefined, null, and object, etc. If you really mean + * this implicit string conversion, you can do something like + * String(myThing) + */ + name + 'cannot be ]-infinity;+infinity[ ' + arr, + ); +} + +class AnimatedInterpolation extends AnimatedWithChildren { + // Export for testing. + static __createInterpolation = createInterpolation; + + _parent: AnimatedNode; + _config: InterpolationConfigType; + _interpolation: (input: number) => number | string; + + constructor(parent: AnimatedNode, config: InterpolationConfigType) { + super(); + this._parent = parent; + this._config = config; + this._interpolation = createInterpolation(config); + } + + __makeNative() { + this._parent.__makeNative(); + super.__makeNative(); + } + + __getValue(): number | string { + const parentValue: number = this._parent.__getValue(); + invariant( + typeof parentValue === 'number', + 'Cannot interpolate an input which is not a number.', + ); + return this._interpolation(parentValue); + } + + interpolate(config: InterpolationConfigType): AnimatedInterpolation { + return new AnimatedInterpolation(this, config); + } + + __attach(): void { + this._parent.__addChild(this); + } + + __detach(): void { + this._parent.__removeChild(this); + super.__detach(); + } + + __transformDataType(range: Array) { + // Change the string array type to number array + // So we can reuse the same logic in iOS and Android platform + return range.map(function(value) { + if (typeof value !== 'string') { + return value; + } + if (/deg$/.test(value)) { + const degrees = parseFloat(value) || 0; + const radians = degrees * Math.PI / 180.0; + return radians; + } else { + // Assume radians + return parseFloat(value) || 0; + } + }); + } + + __getNativeConfig(): any { + if (process.env.NODE_ENV !== 'production') { + NativeAnimatedHelper.validateInterpolation(this._config); + } + + return { + inputRange: this._config.inputRange, + // Only the `outputRange` can contain strings so we don't need to tranform `inputRange` here + outputRange: this.__transformDataType(this._config.outputRange), + extrapolateLeft: + this._config.extrapolateLeft || this._config.extrapolate || 'extend', + extrapolateRight: + this._config.extrapolateRight || this._config.extrapolate || 'extend', + type: 'interpolation', + }; + } +} + +module.exports = AnimatedInterpolation; diff --git a/src/vendor/Animated/nodes/AnimatedModulo.js b/src/vendor/Animated/nodes/AnimatedModulo.js new file mode 100644 index 000000000..3ff75e737 --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedModulo.js @@ -0,0 +1,64 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedModulo + * @flow + * @format + */ +'use strict'; + +const AnimatedInterpolation = require('./AnimatedInterpolation'); +const AnimatedNode = require('./AnimatedNode'); +const AnimatedWithChildren = require('./AnimatedWithChildren'); + +import type {InterpolationConfigType} from './AnimatedInterpolation'; + +class AnimatedModulo extends AnimatedWithChildren { + _a: AnimatedNode; + _modulus: number; + + constructor(a: AnimatedNode, modulus: number) { + super(); + this._a = a; + this._modulus = modulus; + } + + __makeNative() { + this._a.__makeNative(); + super.__makeNative(); + } + + __getValue(): number { + return ( + (this._a.__getValue() % this._modulus + this._modulus) % this._modulus + ); + } + + interpolate(config: InterpolationConfigType): AnimatedInterpolation { + return new AnimatedInterpolation(this, config); + } + + __attach(): void { + this._a.__addChild(this); + } + + __detach(): void { + this._a.__removeChild(this); + super.__detach(); + } + + __getNativeConfig(): any { + return { + type: 'modulus', + input: this._a.__getNativeTag(), + modulus: this._modulus, + }; + } +} + +module.exports = AnimatedModulo; diff --git a/src/vendor/Animated/nodes/AnimatedMultiplication.js b/src/vendor/Animated/nodes/AnimatedMultiplication.js new file mode 100644 index 000000000..d30ce2594 --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedMultiplication.js @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedMultiplication + * @flow + * @format + */ +'use strict'; + +const AnimatedInterpolation = require('./AnimatedInterpolation'); +const AnimatedNode = require('./AnimatedNode'); +const AnimatedValue = require('./AnimatedValue'); +const AnimatedWithChildren = require('./AnimatedWithChildren'); + +import type {InterpolationConfigType} from './AnimatedInterpolation'; + +class AnimatedMultiplication extends AnimatedWithChildren { + _a: AnimatedNode; + _b: AnimatedNode; + + constructor(a: AnimatedNode | number, b: AnimatedNode | number) { + super(); + this._a = typeof a === 'number' ? new AnimatedValue(a) : a; + this._b = typeof b === 'number' ? new AnimatedValue(b) : b; + } + + __makeNative() { + this._a.__makeNative(); + this._b.__makeNative(); + super.__makeNative(); + } + + __getValue(): number { + return this._a.__getValue() * this._b.__getValue(); + } + + interpolate(config: InterpolationConfigType): AnimatedInterpolation { + return new AnimatedInterpolation(this, config); + } + + __attach(): void { + this._a.__addChild(this); + this._b.__addChild(this); + } + + __detach(): void { + this._a.__removeChild(this); + this._b.__removeChild(this); + super.__detach(); + } + + __getNativeConfig(): any { + return { + type: 'multiplication', + input: [this._a.__getNativeTag(), this._b.__getNativeTag()], + }; + } +} + +module.exports = AnimatedMultiplication; diff --git a/src/vendor/Animated/nodes/AnimatedNode.js b/src/vendor/Animated/nodes/AnimatedNode.js new file mode 100644 index 000000000..c29f4b7f1 --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedNode.js @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedNode + * @flow + * @format + */ +'use strict'; + +const NativeAnimatedHelper = require('../NativeAnimatedHelper'); + +const invariant = require('fbjs/lib/invariant'); + +// Note(vjeux): this would be better as an interface but flow doesn't +// support them yet +class AnimatedNode { + __attach(): void {} + __detach(): void { + if (this.__isNative && this.__nativeTag != null) { + NativeAnimatedHelper.API.dropAnimatedNode(this.__nativeTag); + this.__nativeTag = undefined; + } + } + __getValue(): any {} + __getAnimatedValue(): any { + return this.__getValue(); + } + __addChild(child: AnimatedNode) {} + __removeChild(child: AnimatedNode) {} + __getChildren(): Array { + return []; + } + + /* Methods and props used by native Animated impl */ + __isNative: boolean; + __nativeTag: ?number; + __makeNative() { + if (!this.__isNative) { + throw new Error('This node cannot be made a "native" animated node'); + } + } + __getNativeTag(): ?number { + NativeAnimatedHelper.assertNativeAnimatedModule(); + invariant( + this.__isNative, + 'Attempt to get native tag from node not marked as "native"', + ); + if (this.__nativeTag == null) { + const nativeTag: ?number = NativeAnimatedHelper.generateNewNodeTag(); + NativeAnimatedHelper.API.createAnimatedNode( + nativeTag, + this.__getNativeConfig(), + ); + this.__nativeTag = nativeTag; + } + return this.__nativeTag; + } + __getNativeConfig(): Object { + throw new Error( + 'This JS animated node type cannot be used as native animated node', + ); + } + toJSON(): any { + return this.__getValue(); + } +} + +module.exports = AnimatedNode; diff --git a/src/vendor/Animated/nodes/AnimatedProps.js b/src/vendor/Animated/nodes/AnimatedProps.js new file mode 100644 index 000000000..6396d3a1a --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedProps.js @@ -0,0 +1,167 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedProps + * @flow + * @format + */ +'use strict'; + +const {AnimatedEvent} = require('../AnimatedEvent'); +const AnimatedNode = require('./AnimatedNode'); +const AnimatedStyle = require('./AnimatedStyle'); +const NativeAnimatedHelper = require('../NativeAnimatedHelper'); +const findNodeHandle = require('../../../modules/findNodeHandle').default; + +const invariant = require('fbjs/lib/invariant'); + +class AnimatedProps extends AnimatedNode { + _props: Object; + _animatedView: any; + _callback: () => void; + + constructor(props: Object, callback: () => void) { + super(); + if (props.style) { + props = { + ...props, + style: new AnimatedStyle(props.style), + }; + } + this._props = props; + this._callback = callback; + this.__attach(); + } + + __getValue(): Object { + const props = {}; + for (const key in this._props) { + const value = this._props[key]; + if (value instanceof AnimatedNode) { + if (!value.__isNative || value instanceof AnimatedStyle) { + // We cannot use value of natively driven nodes this way as the value we have access from + // JS may not be up to date. + props[key] = value.__getValue(); + } + } else if (value instanceof AnimatedEvent) { + props[key] = value.__getHandler(); + } else { + props[key] = value; + } + } + return props; + } + + __getAnimatedValue(): Object { + const props = {}; + for (const key in this._props) { + const value = this._props[key]; + if (value instanceof AnimatedNode) { + props[key] = value.__getAnimatedValue(); + } + } + return props; + } + + __attach(): void { + for (const key in this._props) { + const value = this._props[key]; + if (value instanceof AnimatedNode) { + value.__addChild(this); + } + } + } + + __detach(): void { + if (this.__isNative && this._animatedView) { + this.__disconnectAnimatedView(); + } + for (const key in this._props) { + const value = this._props[key]; + if (value instanceof AnimatedNode) { + value.__removeChild(this); + } + } + super.__detach(); + } + + update(): void { + this._callback(); + } + + __makeNative(): void { + if (!this.__isNative) { + this.__isNative = true; + for (const key in this._props) { + const value = this._props[key]; + if (value instanceof AnimatedNode) { + value.__makeNative(); + } + } + if (this._animatedView) { + this.__connectAnimatedView(); + } + } + } + + setNativeView(animatedView: any): void { + if (this._animatedView === animatedView) { + return; + } + this._animatedView = animatedView; + if (this.__isNative) { + this.__connectAnimatedView(); + } + } + + __connectAnimatedView(): void { + invariant(this.__isNative, 'Expected node to be marked as "native"'); + const nativeViewTag: ?number = findNodeHandle( + this._animatedView, + ); + invariant( + nativeViewTag != null, + 'Unable to locate attached view in the native tree', + ); + NativeAnimatedHelper.API.connectAnimatedNodeToView( + this.__getNativeTag(), + nativeViewTag, + ); + } + + __disconnectAnimatedView(): void { + invariant(this.__isNative, 'Expected node to be marked as "native"'); + const nativeViewTag: ?number = findNodeHandle( + this._animatedView, + ); + invariant( + nativeViewTag != null, + 'Unable to locate attached view in the native tree', + ); + NativeAnimatedHelper.API.disconnectAnimatedNodeFromView( + this.__getNativeTag(), + nativeViewTag, + ); + } + + __getNativeConfig(): Object { + const propsConfig = {}; + for (const propKey in this._props) { + const value = this._props[propKey]; + if (value instanceof AnimatedNode) { + propsConfig[propKey] = value.__getNativeTag(); + } + } + return { + type: 'props', + props: propsConfig, + }; + } +} + +module.exports = AnimatedProps; diff --git a/src/vendor/Animated/nodes/AnimatedStyle.js b/src/vendor/Animated/nodes/AnimatedStyle.js new file mode 100644 index 000000000..5e0fc3548 --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedStyle.js @@ -0,0 +1,127 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedStyle + * @noflow + * @format + */ +'use strict'; + +const AnimatedNode = require('./AnimatedNode'); +const AnimatedTransform = require('./AnimatedTransform'); +const AnimatedWithChildren = require('./AnimatedWithChildren'); +const NativeAnimatedHelper = require('../NativeAnimatedHelper'); + +const flattenStyle = require('../../../apis/StyleSheet/flattenStyle').default; + +class AnimatedStyle extends AnimatedWithChildren { + _style: Object; + + constructor(style: any) { + super(); + style = flattenStyle(style) || {}; + if (style.transform) { + style = { + ...style, + transform: new AnimatedTransform(style.transform), + }; + } + this._style = style; + } + + // Recursively get values for nested styles (like iOS's shadowOffset) + _walkStyleAndGetValues(style) { + const updatedStyle = {}; + for (const key in style) { + const value = style[key]; + if (value instanceof AnimatedNode) { + if (!value.__isNative) { + // We cannot use value of natively driven nodes this way as the value we have access from + // JS may not be up to date. + updatedStyle[key] = value.__getValue(); + } + } else if (value && !Array.isArray(value) && typeof value === 'object') { + // Support animating nested values (for example: shadowOffset.height) + updatedStyle[key] = this._walkStyleAndGetValues(value); + } else { + updatedStyle[key] = value; + } + } + return updatedStyle; + } + + __getValue(): Object { + return this._walkStyleAndGetValues(this._style); + } + + // Recursively get animated values for nested styles (like iOS's shadowOffset) + _walkStyleAndGetAnimatedValues(style) { + const updatedStyle = {}; + for (const key in style) { + const value = style[key]; + if (value instanceof AnimatedNode) { + updatedStyle[key] = value.__getAnimatedValue(); + } else if (value && !Array.isArray(value) && typeof value === 'object') { + // Support animating nested values (for example: shadowOffset.height) + updatedStyle[key] = this._walkStyleAndGetAnimatedValues(value); + } + } + return updatedStyle; + } + + __getAnimatedValue(): Object { + return this._walkStyleAndGetAnimatedValues(this._style); + } + + __attach(): void { + for (const key in this._style) { + const value = this._style[key]; + if (value instanceof AnimatedNode) { + value.__addChild(this); + } + } + } + + __detach(): void { + for (const key in this._style) { + const value = this._style[key]; + if (value instanceof AnimatedNode) { + value.__removeChild(this); + } + } + super.__detach(); + } + + __makeNative() { + super.__makeNative(); + for (const key in this._style) { + const value = this._style[key]; + if (value instanceof AnimatedNode) { + value.__makeNative(); + } + } + } + + __getNativeConfig(): Object { + const styleConfig = {}; + for (const styleKey in this._style) { + if (this._style[styleKey] instanceof AnimatedNode) { + styleConfig[styleKey] = this._style[styleKey].__getNativeTag(); + } + // Non-animated styles are set using `setNativeProps`, no need + // to pass those as a part of the node config + } + NativeAnimatedHelper.validateStyles(styleConfig); + return { + type: 'style', + style: styleConfig, + }; + } +} + +module.exports = AnimatedStyle; diff --git a/src/vendor/Animated/nodes/AnimatedTracking.js b/src/vendor/Animated/nodes/AnimatedTracking.js new file mode 100644 index 000000000..1a54f78ab --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedTracking.js @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedTracking + * @flow + * @format + */ +'use strict'; + +const AnimatedValue = require('./AnimatedValue'); +const AnimatedNode = require('./AnimatedNode'); + +import type {EndCallback} from '../animations/Animation'; + +class AnimatedTracking extends AnimatedNode { + _value: AnimatedValue; + _parent: AnimatedNode; + _callback: ?EndCallback; + _animationConfig: Object; + _animationClass: any; + + constructor( + value: AnimatedValue, + parent: AnimatedNode, + animationClass: any, + animationConfig: Object, + callback?: ?EndCallback, + ) { + super(); + this._value = value; + this._parent = parent; + this._animationClass = animationClass; + this._animationConfig = animationConfig; + this._callback = callback; + this.__attach(); + } + + __getValue(): Object { + return this._parent.__getValue(); + } + + __attach(): void { + this._parent.__addChild(this); + } + + __detach(): void { + this._parent.__removeChild(this); + super.__detach(); + } + + update(): void { + this._value.animate( + new this._animationClass({ + ...this._animationConfig, + toValue: (this._animationConfig.toValue: any).__getValue(), + }), + this._callback, + ); + } +} + +module.exports = AnimatedTracking; diff --git a/src/vendor/Animated/nodes/AnimatedTransform.js b/src/vendor/Animated/nodes/AnimatedTransform.js new file mode 100644 index 000000000..c95aa16f6 --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedTransform.js @@ -0,0 +1,123 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedTransform + * @flow + * @format + */ +'use strict'; + +const AnimatedNode = require('./AnimatedNode'); +const AnimatedWithChildren = require('./AnimatedWithChildren'); +const NativeAnimatedHelper = require('../NativeAnimatedHelper'); + +class AnimatedTransform extends AnimatedWithChildren { + _transforms: Array; + + constructor(transforms: Array) { + super(); + this._transforms = transforms; + } + + __makeNative() { + super.__makeNative(); + this._transforms.forEach(transform => { + for (const key in transform) { + const value = transform[key]; + if (value instanceof AnimatedNode) { + value.__makeNative(); + } + } + }); + } + + __getValue(): Array { + return this._transforms.map(transform => { + const result = {}; + for (const key in transform) { + const value = transform[key]; + if (value instanceof AnimatedNode) { + result[key] = value.__getValue(); + } else { + result[key] = value; + } + } + return result; + }); + } + + __getAnimatedValue(): Array { + return this._transforms.map(transform => { + const result = {}; + for (const key in transform) { + const value = transform[key]; + if (value instanceof AnimatedNode) { + result[key] = value.__getAnimatedValue(); + } else { + // All transform components needed to recompose matrix + result[key] = value; + } + } + return result; + }); + } + + __attach(): void { + this._transforms.forEach(transform => { + for (const key in transform) { + const value = transform[key]; + if (value instanceof AnimatedNode) { + value.__addChild(this); + } + } + }); + } + + __detach(): void { + this._transforms.forEach(transform => { + for (const key in transform) { + const value = transform[key]; + if (value instanceof AnimatedNode) { + value.__removeChild(this); + } + } + }); + super.__detach(); + } + + __getNativeConfig(): any { + const transConfigs = []; + + this._transforms.forEach(transform => { + for (const key in transform) { + const value = transform[key]; + if (value instanceof AnimatedNode) { + transConfigs.push({ + type: 'animated', + property: key, + nodeTag: value.__getNativeTag(), + }); + } else { + transConfigs.push({ + type: 'static', + property: key, + value, + }); + } + } + }); + + NativeAnimatedHelper.validateTransform(transConfigs); + return { + type: 'transform', + transforms: transConfigs, + }; + } +} + +module.exports = AnimatedTransform; diff --git a/src/vendor/Animated/nodes/AnimatedValue.js b/src/vendor/Animated/nodes/AnimatedValue.js new file mode 100644 index 000000000..b0e9e0c57 --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedValue.js @@ -0,0 +1,338 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedValue + * @flow + * @format + */ +'use strict'; + +const AnimatedInterpolation = require('./AnimatedInterpolation'); +const AnimatedNode = require('./AnimatedNode'); +const AnimatedWithChildren = require('./AnimatedWithChildren'); +const InteractionManager = require('../../../apis/InteractionManager').default; +const NativeAnimatedHelper = require('../NativeAnimatedHelper'); + +import type Animation, {EndCallback} from '../animations/Animation'; +import type {InterpolationConfigType} from './AnimatedInterpolation'; + +const NativeAnimatedAPI = NativeAnimatedHelper.API; + +type ValueListenerCallback = (state: {value: number}) => void; + +let _uniqueId = 1; + +/** + * Animated works by building a directed acyclic graph of dependencies + * transparently when you render your Animated components. + * + * new Animated.Value(0) + * .interpolate() .interpolate() new Animated.Value(1) + * opacity translateY scale + * style transform + * View#234 style + * View#123 + * + * A) Top Down phase + * When an Animated.Value is updated, we recursively go down through this + * graph in order to find leaf nodes: the views that we flag as needing + * an update. + * + * B) Bottom Up phase + * When a view is flagged as needing an update, we recursively go back up + * in order to build the new value that it needs. The reason why we need + * this two-phases process is to deal with composite props such as + * transform which can receive values from multiple parents. + */ +function _flush(rootNode: AnimatedValue): void { + const animatedStyles = new Set(); + function findAnimatedStyles(node) { + if (typeof node.update === 'function') { + animatedStyles.add(node); + } else { + node.__getChildren().forEach(findAnimatedStyles); + } + } + findAnimatedStyles(rootNode); + /* $FlowFixMe */ + animatedStyles.forEach(animatedStyle => animatedStyle.update()); +} + +/** + * Standard value for driving animations. One `Animated.Value` can drive + * multiple properties in a synchronized fashion, but can only be driven by one + * mechanism at a time. Using a new mechanism (e.g. starting a new animation, + * or calling `setValue`) will stop any previous ones. + * + * See http://facebook.github.io/react-native/docs/animatedvalue.html + */ +class AnimatedValue extends AnimatedWithChildren { + _value: number; + _startingValue: number; + _offset: number; + _animation: ?Animation; + _tracking: ?AnimatedNode; + _listeners: {[key: string]: ValueListenerCallback}; + __nativeAnimatedValueListener: ?any; + + constructor(value: number) { + super(); + this._startingValue = this._value = value; + this._offset = 0; + this._animation = null; + this._listeners = {}; + } + + __detach() { + this.stopAnimation(); + super.__detach(); + } + + __getValue(): number { + return this._value + this._offset; + } + + __makeNative() { + super.__makeNative(); + + if (Object.keys(this._listeners).length) { + this._startListeningToNativeValueUpdates(); + } + } + + /** + * Directly set the value. This will stop any animations running on the value + * and update all the bound properties. + * + * See http://facebook.github.io/react-native/docs/animatedvalue.html#setvalue + */ + setValue(value: number): void { + if (this._animation) { + this._animation.stop(); + this._animation = null; + } + this._updateValue( + value, + !this.__isNative /* don't perform a flush for natively driven values */, + ); + if (this.__isNative) { + NativeAnimatedAPI.setAnimatedNodeValue(this.__getNativeTag(), value); + } + } + + /** + * Sets an offset that is applied on top of whatever value is set, whether via + * `setValue`, an animation, or `Animated.event`. Useful for compensating + * things like the start of a pan gesture. + * + * See http://facebook.github.io/react-native/docs/animatedvalue.html#setoffset + */ + setOffset(offset: number): void { + this._offset = offset; + if (this.__isNative) { + NativeAnimatedAPI.setAnimatedNodeOffset(this.__getNativeTag(), offset); + } + } + + /** + * Merges the offset value into the base value and resets the offset to zero. + * The final output of the value is unchanged. + * + * See http://facebook.github.io/react-native/docs/animatedvalue.html#flattenoffset + */ + flattenOffset(): void { + this._value += this._offset; + this._offset = 0; + if (this.__isNative) { + NativeAnimatedAPI.flattenAnimatedNodeOffset(this.__getNativeTag()); + } + } + + /** + * Sets the offset value to the base value, and resets the base value to zero. + * The final output of the value is unchanged. + * + * See http://facebook.github.io/react-native/docs/animatedvalue.html#extractoffset + */ + extractOffset(): void { + this._offset += this._value; + this._value = 0; + if (this.__isNative) { + NativeAnimatedAPI.extractAnimatedNodeOffset(this.__getNativeTag()); + } + } + + /** + * Adds an asynchronous listener to the value so you can observe updates from + * animations. This is useful because there is no way to + * synchronously read the value because it might be driven natively. + * + * See http://facebook.github.io/react-native/docs/animatedvalue.html#addlistener + */ + addListener(callback: ValueListenerCallback): string { + const id = String(_uniqueId++); + this._listeners[id] = callback; + if (this.__isNative) { + this._startListeningToNativeValueUpdates(); + } + return id; + } + + /** + * Unregister a listener. The `id` param shall match the identifier + * previously returned by `addListener()`. + * + * See http://facebook.github.io/react-native/docs/animatedvalue.html#removelistener + */ + removeListener(id: string): void { + delete this._listeners[id]; + if (this.__isNative && Object.keys(this._listeners).length === 0) { + this._stopListeningForNativeValueUpdates(); + } + } + + /** + * Remove all registered listeners. + * + * See http://facebook.github.io/react-native/docs/animatedvalue.html#removealllisteners + */ + removeAllListeners(): void { + this._listeners = {}; + if (this.__isNative) { + this._stopListeningForNativeValueUpdates(); + } + } + + _startListeningToNativeValueUpdates() { + if (this.__nativeAnimatedValueListener) { + return; + } + + NativeAnimatedAPI.startListeningToAnimatedNodeValue(this.__getNativeTag()); + this.__nativeAnimatedValueListener = NativeAnimatedHelper.nativeEventEmitter.addListener( + 'onAnimatedValueUpdate', + data => { + if (data.tag !== this.__getNativeTag()) { + return; + } + this._updateValue(data.value, false /* flush */); + }, + ); + } + + _stopListeningForNativeValueUpdates() { + if (!this.__nativeAnimatedValueListener) { + return; + } + + this.__nativeAnimatedValueListener.remove(); + this.__nativeAnimatedValueListener = null; + NativeAnimatedAPI.stopListeningToAnimatedNodeValue(this.__getNativeTag()); + } + + /** + * Stops any running animation or tracking. `callback` is invoked with the + * final value after stopping the animation, which is useful for updating + * state to match the animation position with layout. + * + * See http://facebook.github.io/react-native/docs/animatedvalue.html#stopanimation + */ + stopAnimation(callback?: ?(value: number) => void): void { + this.stopTracking(); + this._animation && this._animation.stop(); + this._animation = null; + callback && callback(this.__getValue()); + } + + /** + * Stops any animation and resets the value to its original. + * + * See http://facebook.github.io/react-native/docs/animatedvalue.html#resetanimation + */ + resetAnimation(callback?: ?(value: number) => void): void { + this.stopAnimation(callback); + this._value = this._startingValue; + } + + /** + * Interpolates the value before updating the property, e.g. mapping 0-1 to + * 0-10. + */ + interpolate(config: InterpolationConfigType): AnimatedInterpolation { + return new AnimatedInterpolation(this, config); + } + + /** + * Typically only used internally, but could be used by a custom Animation + * class. + * + * See http://facebook.github.io/react-native/docs/animatedvalue.html#animate + */ + animate(animation: Animation, callback: ?EndCallback): void { + let handle = null; + if (animation.__isInteraction) { + handle = InteractionManager.createInteractionHandle(); + } + const previousAnimation = this._animation; + this._animation && this._animation.stop(); + this._animation = animation; + animation.start( + this._value, + value => { + // Natively driven animations will never call into that callback, therefore we can always + // pass flush = true to allow the updated value to propagate to native with setNativeProps + this._updateValue(value, true /* flush */); + }, + result => { + this._animation = null; + if (handle !== null) { + InteractionManager.clearInteractionHandle(handle); + } + callback && callback(result); + }, + previousAnimation, + this, + ); + } + + /** + * Typically only used internally. + */ + stopTracking(): void { + this._tracking && this._tracking.__detach(); + this._tracking = null; + } + + /** + * Typically only used internally. + */ + track(tracking: AnimatedNode): void { + this.stopTracking(); + this._tracking = tracking; + } + + _updateValue(value: number, flush: boolean): void { + this._value = value; + if (flush) { + _flush(this); + } + for (const key in this._listeners) { + this._listeners[key]({value: this.__getValue()}); + } + } + + __getNativeConfig(): Object { + return { + type: 'value', + value: this._value, + offset: this._offset, + }; + } +} + +module.exports = AnimatedValue; diff --git a/src/vendor/Animated/nodes/AnimatedValueXY.js b/src/vendor/Animated/nodes/AnimatedValueXY.js new file mode 100644 index 000000000..d04fe0940 --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedValueXY.js @@ -0,0 +1,197 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedValueXY + * @flow + * @format + */ +'use strict'; + +const AnimatedValue = require('./AnimatedValue'); +const AnimatedWithChildren = require('./AnimatedWithChildren'); + +const invariant = require('fbjs/lib/invariant'); + +type ValueXYListenerCallback = (value: {x: number, y: number}) => void; + +let _uniqueId = 1; + +/** + * 2D Value for driving 2D animations, such as pan gestures. Almost identical + * API to normal `Animated.Value`, but multiplexed. + * + * See http://facebook.github.io/react-native/docs/animatedvaluexy.html + */ +class AnimatedValueXY extends AnimatedWithChildren { + x: AnimatedValue; + y: AnimatedValue; + _listeners: {[key: string]: {x: string, y: string}}; + + constructor( + valueIn?: ?{x: number | AnimatedValue, y: number | AnimatedValue}, + ) { + super(); + const value: any = valueIn || {x: 0, y: 0}; // @flowfixme: shouldn't need `: any` + if (typeof value.x === 'number' && typeof value.y === 'number') { + this.x = new AnimatedValue(value.x); + this.y = new AnimatedValue(value.y); + } else { + invariant( + value.x instanceof AnimatedValue && value.y instanceof AnimatedValue, + 'AnimatedValueXY must be initalized with an object of numbers or ' + + 'AnimatedValues.', + ); + this.x = value.x; + this.y = value.y; + } + this._listeners = {}; + } + + /** + * Directly set the value. This will stop any animations running on the value + * and update all the bound properties. + * + * See http://facebook.github.io/react-native/docs/animatedvaluexy.html#setvalue + */ + setValue(value: {x: number, y: number}) { + this.x.setValue(value.x); + this.y.setValue(value.y); + } + + /** + * Sets an offset that is applied on top of whatever value is set, whether + * via `setValue`, an animation, or `Animated.event`. Useful for compensating + * things like the start of a pan gesture. + * + * See http://facebook.github.io/react-native/docs/animatedvaluexy.html#setoffset + */ + setOffset(offset: {x: number, y: number}) { + this.x.setOffset(offset.x); + this.y.setOffset(offset.y); + } + + /** + * Merges the offset value into the base value and resets the offset to zero. + * The final output of the value is unchanged. + * + * See http://facebook.github.io/react-native/docs/animatedvaluexy.html#flattenoffset + */ + flattenOffset(): void { + this.x.flattenOffset(); + this.y.flattenOffset(); + } + + /** + * Sets the offset value to the base value, and resets the base value to + * zero. The final output of the value is unchanged. + * + * See http://facebook.github.io/react-native/docs/animatedvaluexy.html#extractoffset + */ + extractOffset(): void { + this.x.extractOffset(); + this.y.extractOffset(); + } + + __getValue(): {x: number, y: number} { + return { + x: this.x.__getValue(), + y: this.y.__getValue(), + }; + } + + /** + * Stops any animation and resets the value to its original. + * + * See http://facebook.github.io/react-native/docs/animatedvaluexy.html#resetanimation + */ + resetAnimation(callback?: (value: {x: number, y: number}) => void): void { + this.x.resetAnimation(); + this.y.resetAnimation(); + callback && callback(this.__getValue()); + } + + /** + * Stops any running animation or tracking. `callback` is invoked with the + * final value after stopping the animation, which is useful for updating + * state to match the animation position with layout. + * + * See http://facebook.github.io/react-native/docs/animatedvaluexy.html#stopanimation + */ + stopAnimation(callback?: (value: {x: number, y: number}) => void): void { + this.x.stopAnimation(); + this.y.stopAnimation(); + callback && callback(this.__getValue()); + } + + /** + * Adds an asynchronous listener to the value so you can observe updates from + * animations. This is useful because there is no way to synchronously read + * the value because it might be driven natively. + * + * Returns a string that serves as an identifier for the listener. + * + * See http://facebook.github.io/react-native/docs/animatedvaluexy.html#addlistener + */ + addListener(callback: ValueXYListenerCallback): string { + const id = String(_uniqueId++); + const jointCallback = ({value: number}) => { + callback(this.__getValue()); + }; + this._listeners[id] = { + x: this.x.addListener(jointCallback), + y: this.y.addListener(jointCallback), + }; + return id; + } + + /** + * Unregister a listener. The `id` param shall match the identifier + * previously returned by `addListener()`. + * + * See http://facebook.github.io/react-native/docs/animatedvaluexy.html#removelistener + */ + removeListener(id: string): void { + this.x.removeListener(this._listeners[id].x); + this.y.removeListener(this._listeners[id].y); + delete this._listeners[id]; + } + + /** + * Remove all registered listeners. + * + * See http://facebook.github.io/react-native/docs/animatedvaluexy.html#removealllisteners + */ + removeAllListeners(): void { + this.x.removeAllListeners(); + this.y.removeAllListeners(); + this._listeners = {}; + } + + /** + * Converts `{x, y}` into `{left, top}` for use in style. + * + * See http://facebook.github.io/react-native/docs/animatedvaluexy.html#getlayout + */ + getLayout(): {[key: string]: AnimatedValue} { + return { + left: this.x, + top: this.y, + }; + } + + /** + * Converts `{x, y}` into a useable translation transform. + * + * See http://facebook.github.io/react-native/docs/animatedvaluexy.html#gettranslatetransform + */ + getTranslateTransform(): Array<{[key: string]: AnimatedValue}> { + return [{translateX: this.x}, {translateY: this.y}]; + } +} + +module.exports = AnimatedValueXY; diff --git a/src/vendor/Animated/nodes/AnimatedWithChildren.js b/src/vendor/Animated/nodes/AnimatedWithChildren.js new file mode 100644 index 000000000..4676437a9 --- /dev/null +++ b/src/vendor/Animated/nodes/AnimatedWithChildren.js @@ -0,0 +1,77 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule AnimatedWithChildren + * @flow + * @format + */ +'use strict'; + +const AnimatedNode = require('./AnimatedNode'); +const NativeAnimatedHelper = require('../NativeAnimatedHelper'); + +class AnimatedWithChildren extends AnimatedNode { + _children: Array; + + constructor() { + super(); + this._children = []; + } + + __makeNative() { + if (!this.__isNative) { + this.__isNative = true; + for (const child of this._children) { + child.__makeNative(); + NativeAnimatedHelper.API.connectAnimatedNodes( + this.__getNativeTag(), + child.__getNativeTag(), + ); + } + } + } + + __addChild(child: AnimatedNode): void { + if (this._children.length === 0) { + this.__attach(); + } + this._children.push(child); + if (this.__isNative) { + // Only accept "native" animated nodes as children + child.__makeNative(); + NativeAnimatedHelper.API.connectAnimatedNodes( + this.__getNativeTag(), + child.__getNativeTag(), + ); + } + } + + __removeChild(child: AnimatedNode): void { + const index = this._children.indexOf(child); + if (index === -1) { + console.warn("Trying to remove a child that doesn't exist"); + return; + } + if (this.__isNative && child.__isNative) { + NativeAnimatedHelper.API.disconnectAnimatedNodes( + this.__getNativeTag(), + child.__getNativeTag(), + ); + } + this._children.splice(index, 1); + if (this._children.length === 0) { + this.__detach(); + } + } + + __getChildren(): Array { + return this._children; + } +} + +module.exports = AnimatedWithChildren; diff --git a/src/vendor/PooledClass/index.js b/src/vendor/PooledClass/index.js index 923cbdefd..16c758a6b 100644 --- a/src/vendor/PooledClass/index.js +++ b/src/vendor/PooledClass/index.js @@ -7,6 +7,8 @@ * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. + * + * From React 16.0.0 */ import invariant from 'fbjs/lib/invariant'; diff --git a/src/vendor/dangerousStyleValue/index.js b/src/vendor/dangerousStyleValue/index.js index 710c156c3..38f8bc019 100644 --- a/src/vendor/dangerousStyleValue/index.js +++ b/src/vendor/dangerousStyleValue/index.js @@ -9,6 +9,7 @@ * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule dangerousStyleValue + * From React 16.0.0 */ import isUnitlessNumber from '../../modules/unitlessNumbers'; diff --git a/src/vendor/setValueForStyles/index.js b/src/vendor/setValueForStyles/index.js index 5ce55b590..146754f44 100644 --- a/src/vendor/setValueForStyles/index.js +++ b/src/vendor/setValueForStyles/index.js @@ -8,6 +8,7 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * + * From React 16.0.0 */ import dangerousStyleValue from '../dangerousStyleValue'; diff --git a/src/vendor/warnValidStyle/index.js b/src/vendor/warnValidStyle/index.js index cfaf05e5f..69bf70ce4 100644 --- a/src/vendor/warnValidStyle/index.js +++ b/src/vendor/warnValidStyle/index.js @@ -9,6 +9,7 @@ * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule warnValidStyle + * From React 16.0.0 */ var emptyFunction = require('fbjs/lib/emptyFunction'); diff --git a/yarn.lock b/yarn.lock index 44e6d7f01..2cccac545 100644 --- a/yarn.lock +++ b/yarn.lock @@ -169,13 +169,6 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -animated@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/animated/-/animated-0.2.0.tgz#1a0e96f097b3fbc5b64d7eddc723bcc0a6f97633" - dependencies: - invariant "^2.2.0" - normalize-css-color "^1.0.1" - ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" @@ -3925,7 +3918,7 @@ nopt@~3.0.6: dependencies: abbrev "1" -normalize-css-color@^1.0.1, normalize-css-color@^1.0.2: +normalize-css-color@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/normalize-css-color/-/normalize-css-color-1.0.2.tgz#02991e97cccec6623fe573afbbf0de6a1f3e9f8d" From f96d7b868f6ba3d2dc9df0bb5d49618878483374 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Wed, 6 Dec 2017 14:22:32 -0800 Subject: [PATCH 018/153] [change] update PanResponder implementation Fix #171 --- src/apis/PanResponder/index.js | 394 +------------------------ src/vendor/PanResponder/SHA | 1 + src/vendor/PanResponder/index.js | 415 +++++++++++++++++++++++++++ src/vendor/TouchHistoryMath/index.js | 2 +- 4 files changed, 418 insertions(+), 394 deletions(-) create mode 100644 src/vendor/PanResponder/SHA create mode 100644 src/vendor/PanResponder/index.js diff --git a/src/apis/PanResponder/index.js b/src/apis/PanResponder/index.js index e893ac868..882851a35 100644 --- a/src/apis/PanResponder/index.js +++ b/src/apis/PanResponder/index.js @@ -1,394 +1,2 @@ -/** - * Copyright (c) 2016-present, Nicolas Gallagher. - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - * - * @providesModule PanResponder - * @noflow - */ - -import TouchHistoryMath from '../../vendor/TouchHistoryMath'; - -const currentCentroidXOfTouchesChangedAfter = - TouchHistoryMath.currentCentroidXOfTouchesChangedAfter; -const currentCentroidYOfTouchesChangedAfter = - TouchHistoryMath.currentCentroidYOfTouchesChangedAfter; -const previousCentroidXOfTouchesChangedAfter = - TouchHistoryMath.previousCentroidXOfTouchesChangedAfter; -const previousCentroidYOfTouchesChangedAfter = - TouchHistoryMath.previousCentroidYOfTouchesChangedAfter; -const currentCentroidX = TouchHistoryMath.currentCentroidX; -const currentCentroidY = TouchHistoryMath.currentCentroidY; - -/** - * `PanResponder` reconciles several touches into a single gesture. It makes - * single-touch gestures resilient to extra touches, and can be used to - * recognize simple multi-touch gestures. - * - * It provides a predictable wrapper of the responder handlers provided by the - * [gesture responder system](docs/gesture-responder-system.html). - * For each handler, it provides a new `gestureState` object alongside the - * native event object: - * - * ``` - * onPanResponderMove: (event, gestureState) => {} - * ``` - * - * A native event is a synthetic touch event with the following form: - * - * - `nativeEvent` - * + `changedTouches` - Array of all touch events that have changed since the last event - * + `identifier` - The ID of the touch - * + `locationX` - The X position of the touch, relative to the element - * + `locationY` - The Y position of the touch, relative to the element - * + `pageX` - The X position of the touch, relative to the root element - * + `pageY` - The Y position of the touch, relative to the root element - * + `target` - The node id of the element receiving the touch event - * + `timestamp` - A time identifier for the touch, useful for velocity calculation - * + `touches` - Array of all current touches on the screen - * - * A `gestureState` object has the following: - * - * - `stateID` - ID of the gestureState- persisted as long as there at least - * one touch on screen - * - `moveX` - the latest screen coordinates of the recently-moved touch - * - `moveY` - the latest screen coordinates of the recently-moved touch - * - `x0` - the screen coordinates of the responder grant - * - `y0` - the screen coordinates of the responder grant - * - `dx` - accumulated distance of the gesture since the touch started - * - `dy` - accumulated distance of the gesture since the touch started - * - `vx` - current velocity of the gesture - * - `vy` - current velocity of the gesture - * - `numberActiveTouches` - Number of touches currently on screen - * - * ### Basic Usage - * - * ``` - * componentWillMount: function() { - * this._panResponder = PanResponder.create({ - * // Ask to be the responder: - * onStartShouldSetPanResponder: (evt, gestureState) => true, - * onStartShouldSetPanResponderCapture: (evt, gestureState) => true, - * onMoveShouldSetPanResponder: (evt, gestureState) => true, - * onMoveShouldSetPanResponderCapture: (evt, gestureState) => true, - * - * onPanResponderGrant: (evt, gestureState) => { - * // The guesture has started. Show visual feedback so the user knows - * // what is happening! - * - * // gestureState.{x,y}0 will be set to zero now - * }, - * onPanResponderMove: (evt, gestureState) => { - * // The most recent move distance is gestureState.move{X,Y} - * - * // The accumulated gesture distance since becoming responder is - * // gestureState.d{x,y} - * }, - * onPanResponderTerminationRequest: (evt, gestureState) => true, - * onPanResponderRelease: (evt, gestureState) => { - * // The user has released all touches while this view is the - * // responder. This typically means a gesture has succeeded - * }, - * onPanResponderTerminate: (evt, gestureState) => { - * // Another component has become the responder, so this gesture - * // should be cancelled - * }, - * onShouldBlockNativeResponder: (evt, gestureState) => { - * // Returns whether this component should block native components from becoming the JS - * // responder. Returns true by default. Is currently only supported on android. - * return true; - * }, - * }); - * }, - * - * render: function() { - * return ( - * - * ); - * }, - * - * ``` - * - * ### Working Example - * - * To see it in action, try the - * [PanResponder example in UIExplorer](https://github.com/facebook/react-native/blob/master/Examples/UIExplorer/PanResponderExample.js) - */ - -const PanResponder = { - /** - * - * A graphical explanation of the touch data flow: - * - * +----------------------------+ +--------------------------------+ - * | ResponderTouchHistoryStore | |TouchHistoryMath | - * +----------------------------+ +----------+---------------------+ - * |Global store of touchHistory| |Allocation-less math util | - * |including activeness, start | |on touch history (centroids | - * |position, prev/cur position.| |and multitouch movement etc) | - * | | | | - * +----^-----------------------+ +----^---------------------------+ - * | | - * | (records relevant history | - * | of touches relevant for | - * | implementing higher level | - * | gestures) | - * | | - * +----+-----------------------+ +----|---------------------------+ - * | ResponderEventPlugin | | | Your App/Component | - * +----------------------------+ +----|---------------------------+ - * |Negotiates which view gets | Low level | | High level | - * |onResponderMove events. | events w/ | +-+-------+ events w/ | - * |Also records history into | touchHistory| | Pan | multitouch + | - * |ResponderTouchHistoryStore. +---------------->Responder+-----> accumulative| - * +----------------------------+ attached to | | | distance and | - * each event | +---------+ velocity. | - * | | - * | | - * +--------------------------------+ - * - * - * - * Gesture that calculates cumulative movement over time in a way that just - * "does the right thing" for multiple touches. The "right thing" is very - * nuanced. When moving two touches in opposite directions, the cumulative - * distance is zero in each dimension. When two touches move in parallel five - * pixels in the same direction, the cumulative distance is five, not ten. If - * two touches start, one moves five in a direction, then stops and the other - * touch moves fives in the same direction, the cumulative distance is ten. - * - * This logic requires a kind of processing of time "clusters" of touch events - * so that two touch moves that essentially occur in parallel but move every - * other frame respectively, are considered part of the same movement. - * - * Explanation of some of the non-obvious fields: - * - * - moveX/moveY: If no move event has been observed, then `(moveX, moveY)` is - * invalid. If a move event has been observed, `(moveX, moveY)` is the - * centroid of the most recently moved "cluster" of active touches. - * (Currently all move have the same timeStamp, but later we should add some - * threshold for what is considered to be "moving"). If a palm is - * accidentally counted as a touch, but a finger is moving greatly, the palm - * will move slightly, but we only want to count the single moving touch. - * - x0/y0: Centroid location (non-cumulative) at the time of becoming - * responder. - * - dx/dy: Cumulative touch distance - not the same thing as sum of each touch - * distance. Accounts for touch moves that are clustered together in time, - * moving the same direction. Only valid when currently responder (otherwise, - * it only represents the drag distance below the threshold). - * - vx/vy: Velocity. - */ - - _initializeGestureState: function(gestureState) { - gestureState.moveX = 0; - gestureState.moveY = 0; - gestureState.x0 = 0; - gestureState.y0 = 0; - gestureState.dx = 0; - gestureState.dy = 0; - gestureState.vx = 0; - gestureState.vy = 0; - gestureState.numberActiveTouches = 0; - // All `gestureState` accounts for timeStamps up until: - gestureState._accountsForMovesUpTo = 0; - }, - - /** - * This is nuanced and is necessary. It is incorrect to continuously take all - * active *and* recently moved touches, find the centroid, and track how that - * result changes over time. Instead, we must take all recently moved - * touches, and calculate how the centroid has changed just for those - * recently moved touches, and append that change to an accumulator. This is - * to (at least) handle the case where the user is moving three fingers, and - * then one of the fingers stops but the other two continue. - * - * This is very different than taking all of the recently moved touches and - * storing their centroid as `dx/dy`. For correctness, we must *accumulate - * changes* in the centroid of recently moved touches. - * - * There is also some nuance with how we handle multiple moved touches in a - * single event. With the way `ReactNativeEventEmitter` dispatches touches as - * individual events, multiple touches generate two 'move' events, each of - * them triggering `onResponderMove`. But with the way `PanResponder` works, - * all of the gesture inference is performed on the first dispatch, since it - * looks at all of the touches (even the ones for which there hasn't been a - * native dispatch yet). Therefore, `PanResponder` does not call - * `onResponderMove` passed the first dispatch. This diverges from the - * typical responder callback pattern (without using `PanResponder`), but - * avoids more dispatches than necessary. - */ - _updateGestureStateOnMove: function(gestureState, touchHistory) { - gestureState.numberActiveTouches = touchHistory.numberActiveTouches; - gestureState.moveX = currentCentroidXOfTouchesChangedAfter( - touchHistory, - gestureState._accountsForMovesUpTo - ); - gestureState.moveY = currentCentroidYOfTouchesChangedAfter( - touchHistory, - gestureState._accountsForMovesUpTo - ); - const movedAfter = gestureState._accountsForMovesUpTo; - const prevX = previousCentroidXOfTouchesChangedAfter(touchHistory, movedAfter); - const x = currentCentroidXOfTouchesChangedAfter(touchHistory, movedAfter); - const prevY = previousCentroidYOfTouchesChangedAfter(touchHistory, movedAfter); - const y = currentCentroidYOfTouchesChangedAfter(touchHistory, movedAfter); - const nextDX = gestureState.dx + (x - prevX); - const nextDY = gestureState.dy + (y - prevY); - - // TODO: This must be filtered intelligently. - const dt = touchHistory.mostRecentTimeStamp - gestureState._accountsForMovesUpTo; - gestureState.vx = (nextDX - gestureState.dx) / dt; - gestureState.vy = (nextDY - gestureState.dy) / dt; - - gestureState.dx = nextDX; - gestureState.dy = nextDY; - gestureState._accountsForMovesUpTo = touchHistory.mostRecentTimeStamp; - }, - - /** - * @param {object} config Enhanced versions of all of the responder callbacks - * that provide not only the typical `ResponderSyntheticEvent`, but also the - * `PanResponder` gesture state. Simply replace the word `Responder` with - * `PanResponder` in each of the typical `onResponder*` callbacks. For - * example, the `config` object would look like: - * - * - `onMoveShouldSetPanResponder: (e, gestureState) => {...}` - * - `onMoveShouldSetPanResponderCapture: (e, gestureState) => {...}` - * - `onStartShouldSetPanResponder: (e, gestureState) => {...}` - * - `onStartShouldSetPanResponderCapture: (e, gestureState) => {...}` - * - `onPanResponderReject: (e, gestureState) => {...}` - * - `onPanResponderGrant: (e, gestureState) => {...}` - * - `onPanResponderStart: (e, gestureState) => {...}` - * - `onPanResponderEnd: (e, gestureState) => {...}` - * - `onPanResponderRelease: (e, gestureState) => {...}` - * - `onPanResponderMove: (e, gestureState) => {...}` - * - `onPanResponderTerminate: (e, gestureState) => {...}` - * - `onPanResponderTerminationRequest: (e, gestureState) => {...}` - * - `onShouldBlockNativeResponder: (e, gestureState) => {...}` - * - * In general, for events that have capture equivalents, we update the - * gestureState once in the capture phase and can use it in the bubble phase - * as well. - * - * Be careful with onStartShould* callbacks. They only reflect updated - * `gestureState` for start/end events that bubble/capture to the Node. - * Once the node is the responder, you can rely on every start/end event - * being processed by the gesture and `gestureState` being updated - * accordingly. (numberActiveTouches) may not be totally accurate unless you - * are the responder. - */ - create: function(config) { - const gestureState = { - // Useful for debugging - stateID: Math.random() - }; - PanResponder._initializeGestureState(gestureState); - const panHandlers = { - onStartShouldSetResponder: function(e) { - return config.onStartShouldSetPanResponder === undefined - ? false - : config.onStartShouldSetPanResponder(e, gestureState); - }, - onMoveShouldSetResponder: function(e) { - return config.onMoveShouldSetPanResponder === undefined - ? false - : config.onMoveShouldSetPanResponder(e, gestureState); - }, - onStartShouldSetResponderCapture: function(e) { - // TODO: Actually, we should reinitialize the state any time - // touches.length increases from 0 active to > 0 active. - if (e.nativeEvent.touches) { - if (e.nativeEvent.touches.length === 1) { - PanResponder._initializeGestureState(gestureState); - } - } else if ( - e.nativeEvent.originalEvent && - e.nativeEvent.originalEvent.type === 'mousedown' - ) { - PanResponder._initializeGestureState(gestureState); - } - gestureState.numberActiveTouches = e.touchHistory.numberActiveTouches; - return config.onStartShouldSetPanResponderCapture !== undefined - ? config.onStartShouldSetPanResponderCapture(e, gestureState) - : false; - }, - - onMoveShouldSetResponderCapture: function(e) { - const touchHistory = e.touchHistory; - // Responder system incorrectly dispatches should* to current responder - // Filter out any touch moves past the first one - we would have - // already processed multi-touch geometry during the first event. - if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) { - return false; - } - PanResponder._updateGestureStateOnMove(gestureState, touchHistory); - return config.onMoveShouldSetPanResponderCapture - ? config.onMoveShouldSetPanResponderCapture(e, gestureState) - : false; - }, - - onResponderGrant: function(e) { - gestureState.x0 = currentCentroidX(e.touchHistory); - gestureState.y0 = currentCentroidY(e.touchHistory); - gestureState.dx = 0; - gestureState.dy = 0; - config.onPanResponderGrant && config.onPanResponderGrant(e, gestureState); - // TODO: t7467124 investigate if this can be removed - return config.onShouldBlockNativeResponder === undefined - ? true - : config.onShouldBlockNativeResponder(); - }, - - onResponderReject: function(e) { - config.onPanResponderReject && config.onPanResponderReject(e, gestureState); - }, - - onResponderRelease: function(e) { - config.onPanResponderRelease && config.onPanResponderRelease(e, gestureState); - PanResponder._initializeGestureState(gestureState); - }, - - onResponderStart: function(e) { - const touchHistory = e.touchHistory; - gestureState.numberActiveTouches = touchHistory.numberActiveTouches; - config.onPanResponderStart && config.onPanResponderStart(e, gestureState); - }, - - onResponderMove: function(e) { - const touchHistory = e.touchHistory; - // Guard against the dispatch of two touch moves when there are two - // simultaneously changed touches. - if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) { - return; - } - // Filter out any touch moves past the first one - we would have - // already processed multi-touch geometry during the first event. - PanResponder._updateGestureStateOnMove(gestureState, touchHistory); - config.onPanResponderMove && config.onPanResponderMove(e, gestureState); - }, - - onResponderEnd: function(e) { - const touchHistory = e.touchHistory; - gestureState.numberActiveTouches = touchHistory.numberActiveTouches; - config.onPanResponderEnd && config.onPanResponderEnd(e, gestureState); - }, - - onResponderTerminate: function(e) { - config.onPanResponderTerminate && config.onPanResponderTerminate(e, gestureState); - PanResponder._initializeGestureState(gestureState); - }, - - onResponderTerminationRequest: function(e) { - return config.onPanResponderTerminationRequest === undefined - ? true - : config.onPanResponderTerminationRequest(e, gestureState); - } - }; - return { panHandlers: panHandlers }; - } -}; - +import PanResponder from '../../vendor/PanResponder'; export default PanResponder; diff --git a/src/vendor/PanResponder/SHA b/src/vendor/PanResponder/SHA new file mode 100644 index 000000000..c21c34958 --- /dev/null +++ b/src/vendor/PanResponder/SHA @@ -0,0 +1 @@ +facebook/react-native@71006f74cdafdae7212c8a10603fb972c6ee338c diff --git a/src/vendor/PanResponder/index.js b/src/vendor/PanResponder/index.js new file mode 100644 index 000000000..9fcf730fb --- /dev/null +++ b/src/vendor/PanResponder/index.js @@ -0,0 +1,415 @@ +/** + * Copyright (c) 2013-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule PanResponder + */ + +'use strict'; + +const InteractionManager = require('../../apis/InteractionManager').default; +const TouchHistoryMath = require('../TouchHistoryMath'); + +const currentCentroidXOfTouchesChangedAfter = TouchHistoryMath.currentCentroidXOfTouchesChangedAfter; +const currentCentroidYOfTouchesChangedAfter = TouchHistoryMath.currentCentroidYOfTouchesChangedAfter; +const previousCentroidXOfTouchesChangedAfter = TouchHistoryMath.previousCentroidXOfTouchesChangedAfter; +const previousCentroidYOfTouchesChangedAfter = TouchHistoryMath.previousCentroidYOfTouchesChangedAfter; +const currentCentroidX = TouchHistoryMath.currentCentroidX; +const currentCentroidY = TouchHistoryMath.currentCentroidY; + +/** + * `PanResponder` reconciles several touches into a single gesture. It makes + * single-touch gestures resilient to extra touches, and can be used to + * recognize simple multi-touch gestures. + * + * By default, `PanResponder` holds an `InteractionManager` handle to block + * long-running JS events from interrupting active gestures. + * + * It provides a predictable wrapper of the responder handlers provided by the + * [gesture responder system](docs/gesture-responder-system.html). + * For each handler, it provides a new `gestureState` object alongside the + * native event object: + * + * ``` + * onPanResponderMove: (event, gestureState) => {} + * ``` + * + * A native event is a synthetic touch event with the following form: + * + * - `nativeEvent` + * + `changedTouches` - Array of all touch events that have changed since the last event + * + `identifier` - The ID of the touch + * + `locationX` - The X position of the touch, relative to the element + * + `locationY` - The Y position of the touch, relative to the element + * + `pageX` - The X position of the touch, relative to the root element + * + `pageY` - The Y position of the touch, relative to the root element + * + `target` - The node id of the element receiving the touch event + * + `timestamp` - A time identifier for the touch, useful for velocity calculation + * + `touches` - Array of all current touches on the screen + * + * A `gestureState` object has the following: + * + * - `stateID` - ID of the gestureState- persisted as long as there at least + * one touch on screen + * - `moveX` - the latest screen coordinates of the recently-moved touch + * - `moveY` - the latest screen coordinates of the recently-moved touch + * - `x0` - the screen coordinates of the responder grant + * - `y0` - the screen coordinates of the responder grant + * - `dx` - accumulated distance of the gesture since the touch started + * - `dy` - accumulated distance of the gesture since the touch started + * - `vx` - current velocity of the gesture + * - `vy` - current velocity of the gesture + * - `numberActiveTouches` - Number of touches currently on screen + * + * ### Basic Usage + * + * ``` + * componentWillMount: function() { + * this._panResponder = PanResponder.create({ + * // Ask to be the responder: + * onStartShouldSetPanResponder: (evt, gestureState) => true, + * onStartShouldSetPanResponderCapture: (evt, gestureState) => true, + * onMoveShouldSetPanResponder: (evt, gestureState) => true, + * onMoveShouldSetPanResponderCapture: (evt, gestureState) => true, + * + * onPanResponderGrant: (evt, gestureState) => { + * // The gesture has started. Show visual feedback so the user knows + * // what is happening! + * + * // gestureState.d{x,y} will be set to zero now + * }, + * onPanResponderMove: (evt, gestureState) => { + * // The most recent move distance is gestureState.move{X,Y} + * + * // The accumulated gesture distance since becoming responder is + * // gestureState.d{x,y} + * }, + * onPanResponderTerminationRequest: (evt, gestureState) => true, + * onPanResponderRelease: (evt, gestureState) => { + * // The user has released all touches while this view is the + * // responder. This typically means a gesture has succeeded + * }, + * onPanResponderTerminate: (evt, gestureState) => { + * // Another component has become the responder, so this gesture + * // should be cancelled + * }, + * onShouldBlockNativeResponder: (evt, gestureState) => { + * // Returns whether this component should block native components from becoming the JS + * // responder. Returns true by default. Is currently only supported on android. + * return true; + * }, + * }); + * }, + * + * render: function() { + * return ( + * + * ); + * }, + * + * ``` + * + * ### Working Example + * + * To see it in action, try the + * [PanResponder example in RNTester](https://github.com/facebook/react-native/blob/master/RNTester/js/PanResponderExample.js) + */ + +const PanResponder = { + + /** + * + * A graphical explanation of the touch data flow: + * + * +----------------------------+ +--------------------------------+ + * | ResponderTouchHistoryStore | |TouchHistoryMath | + * +----------------------------+ +----------+---------------------+ + * |Global store of touchHistory| |Allocation-less math util | + * |including activeness, start | |on touch history (centroids | + * |position, prev/cur position.| |and multitouch movement etc) | + * | | | | + * +----^-----------------------+ +----^---------------------------+ + * | | + * | (records relevant history | + * | of touches relevant for | + * | implementing higher level | + * | gestures) | + * | | + * +----+-----------------------+ +----|---------------------------+ + * | ResponderEventPlugin | | | Your App/Component | + * +----------------------------+ +----|---------------------------+ + * |Negotiates which view gets | Low level | | High level | + * |onResponderMove events. | events w/ | +-+-------+ events w/ | + * |Also records history into | touchHistory| | Pan | multitouch + | + * |ResponderTouchHistoryStore. +---------------->Responder+-----> accumulative| + * +----------------------------+ attached to | | | distance and | + * each event | +---------+ velocity. | + * | | + * | | + * +--------------------------------+ + * + * + * + * Gesture that calculates cumulative movement over time in a way that just + * "does the right thing" for multiple touches. The "right thing" is very + * nuanced. When moving two touches in opposite directions, the cumulative + * distance is zero in each dimension. When two touches move in parallel five + * pixels in the same direction, the cumulative distance is five, not ten. If + * two touches start, one moves five in a direction, then stops and the other + * touch moves fives in the same direction, the cumulative distance is ten. + * + * This logic requires a kind of processing of time "clusters" of touch events + * so that two touch moves that essentially occur in parallel but move every + * other frame respectively, are considered part of the same movement. + * + * Explanation of some of the non-obvious fields: + * + * - moveX/moveY: If no move event has been observed, then `(moveX, moveY)` is + * invalid. If a move event has been observed, `(moveX, moveY)` is the + * centroid of the most recently moved "cluster" of active touches. + * (Currently all move have the same timeStamp, but later we should add some + * threshold for what is considered to be "moving"). If a palm is + * accidentally counted as a touch, but a finger is moving greatly, the palm + * will move slightly, but we only want to count the single moving touch. + * - x0/y0: Centroid location (non-cumulative) at the time of becoming + * responder. + * - dx/dy: Cumulative touch distance - not the same thing as sum of each touch + * distance. Accounts for touch moves that are clustered together in time, + * moving the same direction. Only valid when currently responder (otherwise, + * it only represents the drag distance below the threshold). + * - vx/vy: Velocity. + */ + + _initializeGestureState: function (gestureState) { + gestureState.moveX = 0; + gestureState.moveY = 0; + gestureState.x0 = 0; + gestureState.y0 = 0; + gestureState.dx = 0; + gestureState.dy = 0; + gestureState.vx = 0; + gestureState.vy = 0; + gestureState.numberActiveTouches = 0; + // All `gestureState` accounts for timeStamps up until: + gestureState._accountsForMovesUpTo = 0; + }, + + /** + * This is nuanced and is necessary. It is incorrect to continuously take all + * active *and* recently moved touches, find the centroid, and track how that + * result changes over time. Instead, we must take all recently moved + * touches, and calculate how the centroid has changed just for those + * recently moved touches, and append that change to an accumulator. This is + * to (at least) handle the case where the user is moving three fingers, and + * then one of the fingers stops but the other two continue. + * + * This is very different than taking all of the recently moved touches and + * storing their centroid as `dx/dy`. For correctness, we must *accumulate + * changes* in the centroid of recently moved touches. + * + * There is also some nuance with how we handle multiple moved touches in a + * single event. With the way `ReactNativeEventEmitter` dispatches touches as + * individual events, multiple touches generate two 'move' events, each of + * them triggering `onResponderMove`. But with the way `PanResponder` works, + * all of the gesture inference is performed on the first dispatch, since it + * looks at all of the touches (even the ones for which there hasn't been a + * native dispatch yet). Therefore, `PanResponder` does not call + * `onResponderMove` passed the first dispatch. This diverges from the + * typical responder callback pattern (without using `PanResponder`), but + * avoids more dispatches than necessary. + */ + _updateGestureStateOnMove: function (gestureState, touchHistory) { + gestureState.numberActiveTouches = touchHistory.numberActiveTouches; + gestureState.moveX = currentCentroidXOfTouchesChangedAfter(touchHistory, gestureState._accountsForMovesUpTo); + gestureState.moveY = currentCentroidYOfTouchesChangedAfter(touchHistory, gestureState._accountsForMovesUpTo); + const movedAfter = gestureState._accountsForMovesUpTo; + const prevX = previousCentroidXOfTouchesChangedAfter(touchHistory, movedAfter); + const x = currentCentroidXOfTouchesChangedAfter(touchHistory, movedAfter); + const prevY = previousCentroidYOfTouchesChangedAfter(touchHistory, movedAfter); + const y = currentCentroidYOfTouchesChangedAfter(touchHistory, movedAfter); + const nextDX = gestureState.dx + (x - prevX); + const nextDY = gestureState.dy + (y - prevY); + + // TODO: This must be filtered intelligently. + const dt = touchHistory.mostRecentTimeStamp - gestureState._accountsForMovesUpTo; + gestureState.vx = (nextDX - gestureState.dx) / dt; + gestureState.vy = (nextDY - gestureState.dy) / dt; + + gestureState.dx = nextDX; + gestureState.dy = nextDY; + gestureState._accountsForMovesUpTo = touchHistory.mostRecentTimeStamp; + }, + + /** + * @param {object} config Enhanced versions of all of the responder callbacks + * that provide not only the typical `ResponderSyntheticEvent`, but also the + * `PanResponder` gesture state. Simply replace the word `Responder` with + * `PanResponder` in each of the typical `onResponder*` callbacks. For + * example, the `config` object would look like: + * + * - `onMoveShouldSetPanResponder: (e, gestureState) => {...}` + * - `onMoveShouldSetPanResponderCapture: (e, gestureState) => {...}` + * - `onStartShouldSetPanResponder: (e, gestureState) => {...}` + * - `onStartShouldSetPanResponderCapture: (e, gestureState) => {...}` + * - `onPanResponderReject: (e, gestureState) => {...}` + * - `onPanResponderGrant: (e, gestureState) => {...}` + * - `onPanResponderStart: (e, gestureState) => {...}` + * - `onPanResponderEnd: (e, gestureState) => {...}` + * - `onPanResponderRelease: (e, gestureState) => {...}` + * - `onPanResponderMove: (e, gestureState) => {...}` + * - `onPanResponderTerminate: (e, gestureState) => {...}` + * - `onPanResponderTerminationRequest: (e, gestureState) => {...}` + * - `onShouldBlockNativeResponder: (e, gestureState) => {...}` + * + * In general, for events that have capture equivalents, we update the + * gestureState once in the capture phase and can use it in the bubble phase + * as well. + * + * Be careful with onStartShould* callbacks. They only reflect updated + * `gestureState` for start/end events that bubble/capture to the Node. + * Once the node is the responder, you can rely on every start/end event + * being processed by the gesture and `gestureState` being updated + * accordingly. (numberActiveTouches) may not be totally accurate unless you + * are the responder. + */ + create: function (config) { + const interactionState = { + handle: (null: ?number), + }; + const gestureState = { + // Useful for debugging + stateID: Math.random(), + }; + PanResponder._initializeGestureState(gestureState); + const panHandlers = { + onStartShouldSetResponder: function (e) { + return config.onStartShouldSetPanResponder === undefined ? + false : + config.onStartShouldSetPanResponder(e, gestureState); + }, + onMoveShouldSetResponder: function (e) { + return config.onMoveShouldSetPanResponder === undefined ? + false : + config.onMoveShouldSetPanResponder(e, gestureState); + }, + onStartShouldSetResponderCapture: function (e) { + // TODO: Actually, we should reinitialize the state any time + // touches.length increases from 0 active to > 0 active. + if (e.nativeEvent.touches.length === 1) { + PanResponder._initializeGestureState(gestureState); + } + gestureState.numberActiveTouches = e.touchHistory.numberActiveTouches; + return config.onStartShouldSetPanResponderCapture !== undefined ? + config.onStartShouldSetPanResponderCapture(e, gestureState) : + false; + }, + + onMoveShouldSetResponderCapture: function (e) { + const touchHistory = e.touchHistory; + // Responder system incorrectly dispatches should* to current responder + // Filter out any touch moves past the first one - we would have + // already processed multi-touch geometry during the first event. + if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) { + return false; + } + PanResponder._updateGestureStateOnMove(gestureState, touchHistory); + return config.onMoveShouldSetPanResponderCapture ? + config.onMoveShouldSetPanResponderCapture(e, gestureState) : + false; + }, + + onResponderGrant: function (e) { + if (!interactionState.handle) { + interactionState.handle = InteractionManager.createInteractionHandle(); + } + gestureState.x0 = currentCentroidX(e.touchHistory); + gestureState.y0 = currentCentroidY(e.touchHistory); + gestureState.dx = 0; + gestureState.dy = 0; + if (config.onPanResponderGrant) { + config.onPanResponderGrant(e, gestureState); + } + // TODO: t7467124 investigate if this can be removed + return config.onShouldBlockNativeResponder === undefined ? + true : + config.onShouldBlockNativeResponder(); + }, + + onResponderReject: function (e) { + clearInteractionHandle(interactionState, config.onPanResponderReject, e, gestureState); + }, + + onResponderRelease: function (e) { + clearInteractionHandle(interactionState, config.onPanResponderRelease, e, gestureState); + PanResponder._initializeGestureState(gestureState); + }, + + onResponderStart: function (e) { + const touchHistory = e.touchHistory; + gestureState.numberActiveTouches = touchHistory.numberActiveTouches; + if (config.onPanResponderStart) { + config.onPanResponderStart(e, gestureState); + } + }, + + onResponderMove: function (e) { + const touchHistory = e.touchHistory; + // Guard against the dispatch of two touch moves when there are two + // simultaneously changed touches. + if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) { + return; + } + // Filter out any touch moves past the first one - we would have + // already processed multi-touch geometry during the first event. + PanResponder._updateGestureStateOnMove(gestureState, touchHistory); + if (config.onPanResponderMove) { + config.onPanResponderMove(e, gestureState); + } + }, + + onResponderEnd: function (e) { + const touchHistory = e.touchHistory; + gestureState.numberActiveTouches = touchHistory.numberActiveTouches; + clearInteractionHandle(interactionState, config.onPanResponderEnd, e, gestureState); + }, + + onResponderTerminate: function (e) { + clearInteractionHandle(interactionState, config.onPanResponderTerminate, e, gestureState); + PanResponder._initializeGestureState(gestureState); + }, + + onResponderTerminationRequest: function (e) { + return config.onPanResponderTerminationRequest === undefined ? + true : + config.onPanResponderTerminationRequest(e, gestureState); + } + }; + return { + panHandlers, + getInteractionHandle(): ?number { + return interactionState.handle; + }, + }; + } +}; + +function clearInteractionHandle( + interactionState: {handle: ?number}, + callback: Function, + event: Object, + gestureState: Object +) { + if (interactionState.handle) { + InteractionManager.clearInteractionHandle(interactionState.handle); + interactionState.handle = null; + } + if (callback) { + callback(event, gestureState); + } +} + +module.exports = PanResponder; diff --git a/src/vendor/TouchHistoryMath/index.js b/src/vendor/TouchHistoryMath/index.js index bac290ddf..cef08aa82 100644 --- a/src/vendor/TouchHistoryMath/index.js +++ b/src/vendor/TouchHistoryMath/index.js @@ -121,4 +121,4 @@ var TouchHistoryMath = { noCentroid: -1 }; -export default TouchHistoryMath; +module.exports = TouchHistoryMath; From 034108a2a07e73e2de95824cb91f65275e3e3c85 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Wed, 6 Dec 2017 14:27:37 -0800 Subject: [PATCH 019/153] [add] SafeAreaView component --- src/components/SafeAreaView/index.js | 14 ++++++++++++++ src/module.js | 3 +++ 2 files changed, 17 insertions(+) create mode 100644 src/components/SafeAreaView/index.js diff --git a/src/components/SafeAreaView/index.js b/src/components/SafeAreaView/index.js new file mode 100644 index 000000000..e959f4fa8 --- /dev/null +++ b/src/components/SafeAreaView/index.js @@ -0,0 +1,14 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule SafeAreaView + * @flow + */ + +import View from '../View'; +export default View; diff --git a/src/module.js b/src/module.js index 5ac67f358..a0eee4b88 100644 --- a/src/module.js +++ b/src/module.js @@ -37,6 +37,7 @@ import Modal from './components/Modal'; import Picker from './components/Picker'; import ProgressBar from './components/ProgressBar'; import RefreshControl from './components/RefreshControl'; +import SafeAreaView from './components/SafeAreaView'; import ScrollView from './components/ScrollView'; import SectionList from './components/SectionList'; import Slider from './components/Slider'; @@ -101,6 +102,7 @@ export { Picker, ProgressBar, RefreshControl, + SafeAreaView, ScrollView, SectionList, Slider, @@ -168,6 +170,7 @@ const ReactNative = { Picker, ProgressBar, RefreshControl, + SafeAreaView, ScrollView, SectionList, Slider, From f1ce6c2acbdec24dcb73a9b84497592b34f7e1ca Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Mon, 18 Dec 2017 15:26:18 +0000 Subject: [PATCH 020/153] [fix] AppRegistry.getApplication style element keys Fix #734 --- src/apis/AppRegistry/renderApplication.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apis/AppRegistry/renderApplication.js b/src/apis/AppRegistry/renderApplication.js index d380e2f99..5503ebbea 100644 --- a/src/apis/AppRegistry/renderApplication.js +++ b/src/apis/AppRegistry/renderApplication.js @@ -38,7 +38,7 @@ export function getApplication(RootComponent: ComponentType, initialProp ); const stylesheets = StyleSheet.getStyleSheets().map(sheet => ( // ensure that CSS text is not escaped - " `; diff --git a/src/apis/StyleSheet/__tests__/__snapshots__/index-test.js.snap b/src/apis/StyleSheet/__tests__/__snapshots__/index-test.js.snap index 6faaa0f7a..acc3f418c 100644 --- a/src/apis/StyleSheet/__tests__/__snapshots__/index-test.js.snap +++ b/src/apis/StyleSheet/__tests__/__snapshots__/index-test.js.snap @@ -34,6 +34,9 @@ input::-webkit-inner-spin-button,input::-webkit-outer-spin-button,input::-webkit .rn-backgroundColor-wib322{background-color:transparent} .rn-backgroundColor-8ndhhv{background-color:rgba(33,150,243,1)} .rn-backgroundColor-15al3ab{background-color:rgba(223,223,223,1)} +.rn-backgroundColor-44z8sh{background-color:rgba(255,255,255,1)} +.rn-backgroundColor-5itogg{background-color:rgba(0,150,136,1)} +.rn-backgroundColor-1v82r4u{background-color:rgba(170,184,194,1)} .rn-backgroundColor-1hj8efq{background-color:rgba(213,213,213,1)} .rn-backgroundColor-1bgzomc{background-color:rgba(189,189,189,1)} .rn-color-homxoj{color:inherit} @@ -51,9 +54,13 @@ input::-webkit-inner-spin-button,input::-webkit-outer-spin-button,input::-webkit .rn-borderBottomStyle-rull8r{border-bottom-style:solid} .rn-borderLeftStyle-mm0ijv{border-left-style:solid} .rn-borderTopWidth-13yce4e{border-top-width:0px} +.rn-borderTopWidth-1jxfwug{border-top-width:2px} .rn-borderRightWidth-fnigne{border-right-width:0px} +.rn-borderRightWidth-18p6if4{border-right-width:2px} .rn-borderBottomWidth-ndvcnb{border-bottom-width:0px} +.rn-borderBottomWidth-wgabs5{border-bottom-width:2px} .rn-borderLeftWidth-gxnn5r{border-left-width:0px} +.rn-borderLeftWidth-dwliz8{border-left-width:2px} .rn-boxSizing-deolkf{box-sizing:border-box} .rn-display-6koalj{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex} .rn-display-xoduu5{display:-webkit-inline-box;display:-moz-inline-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex} @@ -93,6 +100,7 @@ input::-webkit-inner-spin-button,input::-webkit-outer-spin-button,input::-webkit .rn-height-1pi2tsx{height:100%} .rn-height-z80fyv{height:20px} .rn-height-1r8g8re{height:36px} +.rn-height-10ptun7{height:16px} .rn-height-4v7adb{height:5px} .rn-height-1dernwh{height:70%} .rn-opacity-1272l3b{opacity:0} @@ -100,6 +108,7 @@ input::-webkit-inner-spin-button,input::-webkit-outer-spin-button,input::-webkit .rn-width-13qz1uu{width:100%} .rn-width-19wmn03{width:20px} .rn-width-1acpoxo{width:36px} +.rn-width-1janqcz{width:16px} .rn-touchAction-19z077z{-ms-touch-action:none;touch-action:none} .rn-touchAction-1gvxusu{-ms-touch-action:manipulate;touch-action:manipulate} .rn-WebkitOverflowScrolling-150rngu{-webkit-overflow-scrolling:touch} @@ -147,12 +156,29 @@ input::-webkit-inner-spin-button,input::-webkit-outer-spin-button,input::-webkit .rn-borderBottomLeftRadius-pm2fo{border-bottom-left-radius:0px} .rn-fontWeight-majxgm{font-weight:500} .rn-textTransform-tsynxw{text-transform:uppercase} -.rn-alignSelf-k200y{-ms-flex-item-align:start;-webkit-align-self:flex-start;align-self:flex-start} -.rn-boxShadow-1ewcgjf{box-shadow:0px 1px 3px rgba(0,0,0,0.5)} +.rn-borderTopColor-j4x2lb{border-top-color:rgba(101,119,134,1)} +.rn-borderTopColor-gj2eto{border-top-color:rgba(0,150,136,1)} +.rn-borderTopColor-1j7vz2b{border-top-color:rgba(204,214,221,1)} +.rn-borderTopColor-2dclza{border-top-color:rgba(170,184,194,1)} .rn-borderTopColor-kqr9px{border-top-color:black} +.rn-borderRightColor-12i18q1{border-right-color:rgba(101,119,134,1)} +.rn-borderRightColor-31ud7z{border-right-color:rgba(0,150,136,1)} +.rn-borderRightColor-10fg1ub{border-right-color:rgba(204,214,221,1)} +.rn-borderRightColor-8jf312{border-right-color:rgba(170,184,194,1)} .rn-borderRightColor-q0dj5p{border-right-color:black} +.rn-borderBottomColor-mg3rfb{border-bottom-color:rgba(101,119,134,1)} +.rn-borderBottomColor-1bgnb8i{border-bottom-color:rgba(0,150,136,1)} +.rn-borderBottomColor-zxuuv6{border-bottom-color:rgba(204,214,221,1)} +.rn-borderBottomColor-1yeakrt{border-bottom-color:rgba(170,184,194,1)} .rn-borderBottomColor-1ah7hsa{border-bottom-color:black} +.rn-borderLeftColor-vnhemr{border-left-color:rgba(101,119,134,1)} +.rn-borderLeftColor-tbzcuz{border-left-color:rgba(0,150,136,1)} +.rn-borderLeftColor-1p34dw6{border-left-color:rgba(204,214,221,1)} +.rn-borderLeftColor-bluj2i{border-left-color:rgba(170,184,194,1)} .rn-borderLeftColor-137uh4u{border-left-color:black} +.rn-backgroundImage-rs94m5{background-image:url(\\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K\\")} +.rn-alignSelf-k200y{-ms-flex-item-align:start;-webkit-align-self:flex-start;align-self:flex-start} +.rn-boxShadow-1ewcgjf{box-shadow:0px 1px 3px rgba(0,0,0,0.5)} .rn-resize-1dz5y72{resize:none}", }, ] diff --git a/src/components/CheckBox/__tests__/index-test.js b/src/components/CheckBox/__tests__/index-test.js new file mode 100644 index 000000000..7f4437627 --- /dev/null +++ b/src/components/CheckBox/__tests__/index-test.js @@ -0,0 +1,60 @@ +/* eslint-env jest */ + +import CheckBox from '../'; +import React from 'react'; +import { shallow } from 'enzyme'; + +const checkboxSelector = 'input[type="checkbox"]'; + +describe('CheckBox', () => { + describe('disabled', () => { + test('when "false" a default checkbox is rendered', () => { + const component = shallow(); + expect(component.find(checkboxSelector).prop('disabled')).toBe(false); + }); + + test('when "true" a disabled checkbox is rendered', () => { + const component = shallow(); + expect(component.find(checkboxSelector).prop('disabled')).toBe(true); + }); + }); + + describe('onChange', () => { + test('is called with the event object', () => { + const onChange = jest.fn(); + const component = shallow(); + component.find('input').simulate('change', { nativeEvent: { target: { checked: true } } }); + expect(onChange).toHaveBeenCalledWith({ + nativeEvent: { target: { checked: true }, value: true } + }); + }); + }); + + describe('onValueChange', () => { + test('when value is "false" it receives "true"', () => { + const onValueChange = jest.fn(); + const component = shallow(); + component.find('input').simulate('change', { nativeEvent: { target: { checked: true } } }); + expect(onValueChange).toHaveBeenCalledWith(true); + }); + + test('when value is "true" it receives "false"', () => { + const onValueChange = jest.fn(); + const component = shallow(); + component.find('input').simulate('change', { nativeEvent: { target: { checked: false } } }); + expect(onValueChange).toHaveBeenCalledWith(false); + }); + }); + + describe('value', () => { + test('when "false" an unchecked checkbox is rendered', () => { + const component = shallow(); + expect(component.find(checkboxSelector).prop('checked')).toBe(false); + }); + + test('when "true" a checked checkbox is rendered', () => { + const component = shallow(); + expect(component.find(checkboxSelector).prop('checked')).toBe(true); + }); + }); +}); diff --git a/src/components/CheckBox/index.js b/src/components/CheckBox/index.js new file mode 100644 index 000000000..81aed8263 --- /dev/null +++ b/src/components/CheckBox/index.js @@ -0,0 +1,162 @@ +/** + * Copyright (c) 2017-present, Nicolas Gallagher. + * Copyright (c) 2017-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + * + * @providesModule CheckBox + * @flow + */ + +import applyNativeMethods from '../../modules/applyNativeMethods'; +import ColorPropType from '../../propTypes/ColorPropType'; +import createElement from '../../modules/createElement'; +import StyleSheet from '../../apis/StyleSheet'; +import UIManager from '../../apis/UIManager'; +import View from '../View'; +import ViewPropTypes, { type ViewProps } from '../View/ViewPropTypes'; +import React, { Component } from 'react'; +import { bool, func } from 'prop-types'; + +type Props = ViewProps & { + color?: ColorPropType, + disabled?: boolean, + onChange?: Function, + onValueChange?: Function, + value?: boolean +}; + +class CheckBox extends Component { + _checkboxElement: HTMLInputElement; + + static displayName = 'CheckBox'; + + static propTypes = { + ...ViewPropTypes, + color: ColorPropType, + disabled: bool, + onChange: func, + onValueChange: func, + value: bool + }; + + static defaultProps = { + disabled: false, + value: false + }; + + blur() { + UIManager.blur(this._checkboxElement); + } + + focus() { + UIManager.focus(this._checkboxElement); + } + + render() { + const { + color, + disabled, + /* eslint-disable */ + onChange, + onValueChange, + /* eslint-enable */ + style, + value, + ...other + } = this.props; + + const fakeControl = ( + + ); + + const nativeControl = createElement('input', { + checked: value, + disabled: disabled, + onChange: this._handleChange, + ref: this._setCheckboxRef, + style: [styles.nativeControl, styles.cursorInherit], + type: 'checkbox' + }); + + return ( + + {fakeControl} + {nativeControl} + + ); + } + + _handleChange = (event: Object) => { + const { onChange, onValueChange } = this.props; + const value = event.nativeEvent.target.checked; + event.nativeEvent.value = value; + onChange && onChange(event); + onValueChange && onValueChange(value); + }; + + _setCheckboxRef = element => { + this._checkboxElement = element; + }; +} + +const styles = StyleSheet.create({ + root: { + cursor: 'pointer', + height: 16, + userSelect: 'none', + width: 16 + }, + cursorDefault: { + cursor: 'default' + }, + cursorInherit: { + cursor: 'inherit' + }, + fakeControl: { + alignItems: 'center', + backgroundColor: '#fff', + borderColor: '#657786', + borderRadius: 2, + borderStyle: 'solid', + borderWidth: 2, + height: '100%', + justifyContent: 'center', + width: '100%' + }, + fakeControlChecked: { + backgroundColor: '#009688', + backgroundImage: + 'url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K")', + backgroundRepeat: 'no-repeat', + borderColor: '#009688' + }, + fakeControlDisabled: { + borderColor: '#CCD6DD' + }, + fakeControlCheckedAndDisabled: { + backgroundColor: '#AAB8C2', + borderColor: '#AAB8C2' + }, + nativeControl: { + ...StyleSheet.absoluteFillObject, + height: '100%', + margin: 0, + opacity: 0, + padding: 0, + width: '100%' + } +}); + +export default applyNativeMethods(CheckBox); diff --git a/src/components/Switch/index.js b/src/components/Switch/index.js index 999138c61..5f304b555 100644 --- a/src/components/Switch/index.js +++ b/src/components/Switch/index.js @@ -1,4 +1,10 @@ /** + * Copyright (c) 2016-present, Nicolas Gallagher. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + * * @providesModule Switch * @flow */ diff --git a/src/module.js b/src/module.js index 5b927a66d..f0ac07fac 100644 --- a/src/module.js +++ b/src/module.js @@ -30,6 +30,7 @@ import Vibration from './apis/Vibration'; import ActivityIndicator from './components/ActivityIndicator'; import ART from './components/ART'; import Button from './components/Button'; +import CheckBox from './components/CheckBox'; import FlatList from './components/FlatList'; import Image from './components/Image'; import ImageBackground from './components/Image/ImageBackground'; @@ -95,6 +96,7 @@ export { ActivityIndicator, ART, Button, + CheckBox, FlatList, Image, ImageBackground, @@ -163,6 +165,7 @@ const ReactNative = { ActivityIndicator, ART, Button, + CheckBox, FlatList, Image, ImageBackground, From a712a58eba3f74b6ad485c96e255810480d871a2 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Wed, 20 Dec 2017 15:01:12 +0000 Subject: [PATCH 034/153] 0.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b68b9342e..20f6c5fde 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-web", - "version": "0.1.16", + "version": "0.2.0", "description": "React Native for Web", "main": "dist/index.js", "files": [ From 0a5acdb996a0c438bc3cc9b292220b19be315f76 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Wed, 20 Dec 2017 15:05:58 +0000 Subject: [PATCH 035/153] Update version in benchmark results table --- benchmarks/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/README.md b/benchmarks/README.md index 3b5b754bf..e1d890094 100644 --- a/benchmarks/README.md +++ b/benchmarks/README.md @@ -25,7 +25,7 @@ Typical render timings*: mean ± two standard deviations. | Implementation | Deep tree (ms) | Wide tree (ms) | Tweets (ms) | | :--- | ---: | ---: | ---: | | `css-modules` | `80.47` `±25.13` | `144.87` `±32.70` | | -| `react-native-web@0.1.16` | `88.68` `±28.78` | `178.17` `±39.90` | `13.78` `±2.90ms` | +| `react-native-web@0.2.0` | `88.68` `±28.78` | `178.17` `±39.90` | `13.78` `±2.90ms` | Other libraries From 3ecf5d2ed2786d077616bc4d36d59fd26fa6a901 Mon Sep 17 00:00:00 2001 From: Johannes Date: Wed, 20 Dec 2017 17:45:45 +0100 Subject: [PATCH 036/153] [fix] corrupt hydrate import --- src/apis/AppRegistry/renderApplication.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apis/AppRegistry/renderApplication.js b/src/apis/AppRegistry/renderApplication.js index 71cf72c58..6668420c5 100644 --- a/src/apis/AppRegistry/renderApplication.js +++ b/src/apis/AppRegistry/renderApplication.js @@ -10,7 +10,7 @@ */ import invariant from 'fbjs/lib/invariant'; -import { hydrate } from '../../modules/hydrate'; +import hydrate from '../../modules/hydrate'; import AppContainer from './AppContainer'; import StyleSheet from '../../apis/StyleSheet'; import React, { type ComponentType } from 'react'; From 3e12ddfb2b924cc8c8e66106b633770a568c7346 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Wed, 20 Dec 2017 17:31:20 +0000 Subject: [PATCH 037/153] 0.2.1 --- benchmarks/README.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/README.md b/benchmarks/README.md index e1d890094..46a0c2e3c 100644 --- a/benchmarks/README.md +++ b/benchmarks/README.md @@ -25,7 +25,7 @@ Typical render timings*: mean ± two standard deviations. | Implementation | Deep tree (ms) | Wide tree (ms) | Tweets (ms) | | :--- | ---: | ---: | ---: | | `css-modules` | `80.47` `±25.13` | `144.87` `±32.70` | | -| `react-native-web@0.2.0` | `88.68` `±28.78` | `178.17` `±39.90` | `13.78` `±2.90ms` | +| `react-native-web@0.2.1` | `88.68` `±28.78` | `178.17` `±39.90` | `13.78` `±2.90ms` | Other libraries diff --git a/package.json b/package.json index 20f6c5fde..075b095e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-web", - "version": "0.2.0", + "version": "0.2.1", "description": "React Native for Web", "main": "dist/index.js", "files": [ From 4da4dd57c4860c4780cfe55dc949201908f65baf Mon Sep 17 00:00:00 2001 From: Mo Kouli Date: Wed, 20 Dec 2017 13:36:10 -0800 Subject: [PATCH 038/153] [fix] AppContainer initial state Regression introduced in: 217ad97bfd3d4caf2ad04dd59ad9f04d7ec630e7 Close #738 --- src/apis/AppRegistry/AppContainer.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/apis/AppRegistry/AppContainer.js b/src/apis/AppRegistry/AppContainer.js index e56cc3805..10d8bfc04 100644 --- a/src/apis/AppRegistry/AppContainer.js +++ b/src/apis/AppRegistry/AppContainer.js @@ -29,6 +29,8 @@ type State = { }; export default class AppContainer extends Component { + state = { mainKey: 1 }; + static childContextTypes = { rootTag: any }; From b545fe47a7e5962050c41b1519b504209df05965 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Wed, 20 Dec 2017 23:07:21 +0000 Subject: [PATCH 039/153] 0.2.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 075b095e2..56aba91d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-web", - "version": "0.2.1", + "version": "0.2.2", "description": "React Native for Web", "main": "dist/index.js", "files": [ From 5881f073239bee4834320577cf298acd303ec87b Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Wed, 20 Dec 2017 23:23:24 +0000 Subject: [PATCH 040/153] Fix typo in benchmark results --- benchmarks/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/README.md b/benchmarks/README.md index 46a0c2e3c..3f661e892 100644 --- a/benchmarks/README.md +++ b/benchmarks/README.md @@ -36,7 +36,7 @@ Other libraries | `glamor@2.20.40` | `109.92` `±29.88` | `193.01` `±32.03` | | `react-jss@8.2.0` | `134.28` `±49.00` | `278.78` `±50.39` | | `emotion@8.0.12` | `139.08` `±46.18` | `253.45` `±52.69` | -| `styled-components@2.3.2` | `194.43` `416.28` | `404.86` `±56.59` | +| `styled-components@2.3.2` | `194.43` `±46.28` | `404.86` `±56.59` | | `reactxp@0.46.6` | `219.46` `±57.24` | `424.18` `±76.10` | | `radium@0.19.6` | `359.32` `±90.27` | `795.91` `±88.93` | From 14d87f4b30c5edc256164c5c16bda7e66d5f15e6 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 23 Dec 2017 13:06:35 +0000 Subject: [PATCH 041/153] Fix tests not running in CI Accidentally stopped running tests after this patch: 9a5b932139b2ab0827c88a446a9d8cfa0920fc00 --- .travis.yml | 4 ++-- src/apis/Easing/index.js | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 78d76298a..3ff414602 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: node_js node_js: - - "6" + - "8" before_script: - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start script: - - yarn lint + - yarn test diff --git a/src/apis/Easing/index.js b/src/apis/Easing/index.js index 238a0120c..d004d3e61 100644 --- a/src/apis/Easing/index.js +++ b/src/apis/Easing/index.js @@ -5,7 +5,6 @@ * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. * - * @providesModule Easing * @flow */ From 3026465ae39b1708fb1f5f48212a81eb3ec65180 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Thu, 21 Dec 2017 17:28:36 +0000 Subject: [PATCH 042/153] Monorepo Introduces a monorepo structure, relies on yarn workspaces to share dependencies, and lerna for syncing versions across the monorepo. * Create 2 workspaces: 'packages' and 'website' * Create 2 public packages: 'babel-plugin-react-native-web' and 'react-native-web' * Create 1 private package: 'benchmarks' A simple release script runs the tests, builds the package assets, increments the package version numbers, git commits and tags, publishes the package to npm, pushes the changes to github, and releases the website update. Close #657 --- .babelrc | 8 + .eslintrc | 1 + .flowconfig | 12 +- .github/CONTRIBUTING.md | 39 +- .gitignore | 1 + .travis.yml | 15 +- README.md | 9 +- benchmarks/yarn.lock | 1443 ----- lerna.json | 10 + package.json | 119 +- .../babel-plugin-react-native-web/README.md | 39 + .../babel-plugin-react-native-web/index.js | 1 + .../package.json | 15 + .../__snapshots__/index-test.js.snap | 0 .../src}/__tests__/index-test.js | 0 .../src}/index.js | 0 {benchmarks => packages/benchmarks}/README.md | 7 +- .../benchmarks}/benchmark.js | 0 .../benchmarks}/createRenderBenchmark.js | 0 .../benchmarks}/index.html | 0 {benchmarks => packages/benchmarks}/index.js | 0 .../benchmarks}/package.json | 13 +- .../benchmarks}/src/aphrodite.js | 0 .../src/components/AppText/index.js | 0 .../src/components/AspectRatio/index.js | 0 .../src/components/Box/aphrodite.js | 0 .../src/components/Box/css-modules.js | 0 .../benchmarks}/src/components/Box/emotion.js | 0 .../benchmarks}/src/components/Box/glamor.js | 0 .../benchmarks}/src/components/Box/jss.js | 0 .../benchmarks}/src/components/Box/radium.js | 0 .../src/components/Box/react-native.js | 0 .../benchmarks}/src/components/Box/reactxp.js | 0 .../src/components/Box/styled-components.js | 0 .../benchmarks}/src/components/Box/styles.css | 0 .../src/components/Box/styletron.js | 0 .../src/components/GridView/index.js | 0 .../src/components/Icons/DirectMessage.js | 0 .../benchmarks}/src/components/Icons/Heart.js | 0 .../benchmarks}/src/components/Icons/Reply.js | 0 .../src/components/Icons/Retweet.js | 0 .../src/components/Icons/styles.js | 0 .../src/components/NestedTree/index.js | 0 .../benchmarks}/src/components/Tweet/index.js | 0 .../src/components/TweetAction/index.js | 0 .../src/components/TweetActionsBar/index.js | 0 .../src/components/TweetText/index.js | 0 .../src/components/TweetTextPart/index.js | 0 .../src/components/UserAvatar/index.js | 0 .../src/components/UserNames/index.js | 0 .../src/components/View/aphrodite.js | 0 .../src/components/View/css-modules.js | 0 .../src/components/View/emotion.js | 0 .../benchmarks}/src/components/View/glamor.js | 0 .../benchmarks}/src/components/View/jss.js | 0 .../benchmarks}/src/components/View/radium.js | 0 .../src/components/View/styled-components.js | 0 .../src/components/View/styles.css | 0 .../src/components/View/styletron.js | 0 .../benchmarks}/src/components/theme.js | 0 .../benchmarks}/src/css-modules.js | 0 .../benchmarks}/src/emotion.js | 0 .../benchmarks}/src/glamor.js | 0 .../benchmarks}/src/jss.js | 0 .../benchmarks}/src/radium.js | 0 .../benchmarks}/src/react-native.js | 0 .../benchmarks}/src/reactxp.js | 0 .../benchmarks}/src/styled-components.js | 0 .../benchmarks}/src/styletron.js | 0 .../benchmarks}/tests/renderDeepTree.js | 0 .../benchmarks}/tests/renderTweet.js | 0 .../benchmarks}/tests/renderWideTree.js | 0 .../benchmarks}/webpack.config.js | 2 +- packages/react-native-web/README.md | 127 + .../__snapshots__/serializer-test.js.snap | 0 .../jest}/__tests__/serializer-test.js | 0 .../jest}/createSerializer.js | 0 .../react-native-web/jest}/serializer.js | 0 packages/react-native-web/package.json | 45 + .../src}/apis/Animated/index.js | 0 .../src}/apis/AppRegistry/AppContainer.js | 0 .../renderApplication-test.js.snap | 0 .../__tests__/renderApplication-test.js | 0 .../src}/apis/AppRegistry/index.js | 0 .../apis/AppRegistry/renderApplication.js | 0 .../apis/AppState/__tests__/index-test.js | 0 .../src}/apis/AppState/index.js | 0 .../__snapshots__/index-test.js.snap | 0 .../apis/AsyncStorage/__tests__/index-test.js | 0 .../src}/apis/AsyncStorage/index.js | 0 .../src}/apis/BackHandler/index.js | 0 .../src}/apis/Clipboard/index.js | 0 .../__snapshots__/index-test.js.snap | 0 .../apis/Dimensions/__tests__/index-test.js | 0 .../src}/apis/Dimensions/index.js | 0 .../src}/apis/Easing/index.js | 0 .../apis/I18nManager/__tests__/index-test.js | 0 .../src}/apis/I18nManager/index.js | 0 .../src}/apis/InteractionManager/index.js | 0 .../src}/apis/Keyboard/index.js | 0 .../src}/apis/Linking/index.js | 0 .../src}/apis/NetInfo/__tests__/index-test.js | 0 .../src}/apis/NetInfo/index.js | 0 .../src}/apis/PanResponder/index.js | 0 .../apis/PixelRatio/__tests__/index-test.js | 0 .../src}/apis/PixelRatio/index.js | 0 .../src}/apis/Platform/index.js | 0 .../src}/apis/StyleSheet/StyleManager.js | 0 .../src}/apis/StyleSheet/StyleRegistry.js | 0 .../apis/StyleSheet/StyleSheetValidation.js | 0 .../StyleSheet/__tests__/StyleManager-test.js | 0 .../__tests__/StyleRegistry-test.js | 0 .../__snapshots__/StyleManager-test.js.snap | 0 .../__snapshots__/StyleRegistry-test.js.snap | 0 .../createReactDOMStyle-test.js.snap | 0 .../__snapshots__/flattenStyle-test.js.snap | 0 .../__snapshots__/generateCss-test.js.snap | 0 .../__snapshots__/i18nStyle-test.js.snap | 0 .../__snapshots__/index-test.js.snap | 0 .../__tests__/createReactDOMStyle-test.js | 0 .../StyleSheet/__tests__/flattenStyle-test.js | 0 .../StyleSheet/__tests__/generateCss-test.js | 0 .../StyleSheet/__tests__/i18nStyle-test.js | 0 .../apis/StyleSheet/__tests__/index-test.js | 0 .../__tests__/normalizeValue-test.js | 0 .../apis/StyleSheet/createReactDOMStyle.js | 0 .../src}/apis/StyleSheet/flattenStyle.js | 0 .../src}/apis/StyleSheet/generateCss.js | 0 .../src}/apis/StyleSheet/getHairlineWidth.js | 0 .../src}/apis/StyleSheet/i18nStyle.js | 0 .../src}/apis/StyleSheet/index.js | 0 .../src}/apis/StyleSheet/normalizeValue.js | 0 .../src}/apis/StyleSheet/registry.js | 0 .../src}/apis/StyleSheet/staticCss.js | 0 .../apis/UIManager/__tests__/index-test.js | 0 .../src}/apis/UIManager/index.js | 0 .../src}/apis/Vibration/index.js | 0 .../src}/components/ART/index.js | 0 .../__snapshots__/index-test.js.snap | 0 .../ActivityIndicator/__tests__/index-test.js | 0 .../components/ActivityIndicator/index.js | 0 .../components/Button/__tests__/index-test.js | 0 .../src}/components/Button/index.js | 0 .../CheckBox/__tests__/index-test.js | 0 .../src}/components/CheckBox/index.js | 0 .../src}/components/FlatList/index.js | 0 .../src}/components/Image/ImageBackground.js | 0 .../src}/components/Image/ImageResizeMode.js | 0 .../components/Image/ImageStylePropTypes.js | 0 .../src}/components/Image/ImageUriCache.js | 0 .../Image/__tests__/ImageBackground-test.js | 0 .../__snapshots__/index-test.js.snap | 0 .../components/Image/__tests__/index-test.js | 0 .../src}/components/Image/index.js | 0 .../components/KeyboardAvoidingView/index.js | 4 +- .../components/ListView/ListViewDataSource.js | 0 .../components/ListView/ListViewPropTypes.js | 0 .../ListView/__tests__/index-test.js | 0 .../src}/components/ListView/index.js | 0 .../src}/components/Modal/index.js | 0 .../components/Picker/PickerItemPropType.js | 0 .../components/Picker/PickerStylePropTypes.js | 0 .../__snapshots__/index-test.js.snap | 0 .../components/Picker/__tests__/index-test.js | 0 .../src}/components/Picker/index.js | 0 .../ProgressBar/__tests__/index-test.js | 0 .../src}/components/ProgressBar/index.js | 0 .../src}/components/RefreshControl/index.js | 0 .../src}/components/SafeAreaView/index.js | 0 .../components/ScrollView/ScrollViewBase.js | 0 .../ScrollView/__tests__/index-test.js | 0 .../src}/components/ScrollView/index.js | 0 .../src}/components/SectionList/index.js | 0 .../src}/components/Slider/index.js | 0 .../StaticContainer/__tests__/index-test.js | 0 .../src}/components/StaticContainer/index.js | 0 .../StaticRenderer/__tests__/index-test.js | 0 .../src}/components/StaticRenderer/index.js | 0 .../src}/components/StatusBar/index.js | 0 .../components/Switch/__tests__/index-test.js | 0 .../src}/components/Switch/index.js | 0 .../src}/components/Text/TextPropTypes.js | 0 .../components/Text/TextStylePropTypes.js | 0 .../__snapshots__/index-test.js.snap | 0 .../components/Text/__tests__/index-test.js | 0 .../src}/components/Text/index.js | 0 .../components/TextInput/TextInputState.js | 0 .../TextInput/TextInputStylePropTypes.js | 0 .../TextInput/__tests__/index-test.js | 0 .../src}/components/TextInput/index.js | 0 .../Touchable/BoundingDimensions.js | 0 .../src}/components/Touchable/Position.js | 0 .../src}/components/Touchable/Touchable.js | 0 .../Touchable/TouchableHighlight.js | 0 .../Touchable/TouchableNativeFeedback.js | 0 .../components/Touchable/TouchableOpacity.js | 0 .../Touchable/TouchableWithoutFeedback.js | 0 .../Touchable/__tests__/index-test.js | 0 .../Touchable/ensureComponentIsNative.js | 0 .../Touchable/ensurePositiveDelayProps.js | 0 .../components/UnimplementedView/index.js | 0 .../src}/components/View/ViewPropTypes.js | 0 .../components/View/ViewStylePropTypes.js | 0 .../__snapshots__/index-test.js.snap | 0 .../components/View/__tests__/index-test.js | 0 .../src}/components/View/index.js | 0 .../src}/components/VirtualizedList/index.js | 0 .../react-native-web/src}/index.js | 0 .../react-native-web/src}/module.js | 0 .../propsToAccessibilityComponent.js | 0 .../__tests__/propsToAriaRole-test.js | 0 .../__tests__/propsToTabIndex-test.js | 0 .../src}/modules/AccessibilityUtil/index.js | 0 .../modules/AccessibilityUtil/isDisabled.js | 0 .../propsToAccessibilityComponent.js | 0 .../AccessibilityUtil/propsToAriaRole.js | 0 .../AccessibilityUtil/propsToTabIndex.js | 0 .../src}/modules/AssetRegistry/index.js | 0 .../src}/modules/ImageLoader/index.js | 0 .../src}/modules/NativeEventEmitter/index.js | 0 .../src}/modules/NativeMethodsMixin/index.js | 0 .../src}/modules/NativeModules/index.js | 0 .../modules/ReactNativePropRegistry/index.js | 0 .../src}/modules/ScrollResponder/index.js | 0 .../src}/modules/applyLayout/index.js | 0 .../src}/modules/applyNativeMethods/index.js | 0 .../__snapshots__/index-test.js.snap | 0 .../createDOMProps/__tests__/index-test.js | 0 .../src}/modules/createDOMProps/index.js | 0 .../__snapshots__/index-test.js.snap | 0 .../createElement/__tests__/index-test.js | 0 .../src}/modules/createElement/index.js | 0 .../src}/modules/dismissKeyboard/index.js | 0 .../src}/modules/findNodeHandle/index.js | 0 .../src}/modules/flattenArray/index.js | 0 .../src}/modules/hydrate/index.js | 0 .../injectResponderEventPlugin/index.js | 0 .../src}/modules/mapKeyValue/index.js | 0 .../src}/modules/modality/index.js | 0 .../__tests__/index-test.js | 0 .../modules/multiplyStyleLengthValue/index.js | 0 .../__snapshots__/index-test.js.snap | 0 .../__tests__/index-test.js | 0 .../modules/normalizeNativeEvent/index.js | 0 .../prefixStyles/__tests__/index-test.js | 0 .../src}/modules/prefixStyles/index.js | 0 .../src}/modules/prefixStyles/static.js | 1 + .../processColor/__tests__/index-test.js | 0 .../src}/modules/processColor/index.js | 0 .../src}/modules/render/index.js | 0 .../src}/modules/requestIdleCallback/index.js | 0 .../src}/modules/unitlessNumbers/index.js | 0 .../modules/unmountComponentAtNode/index.js | 0 .../src}/propTypes/AnimationPropTypes.js | 0 .../src}/propTypes/BaseComponentPropTypes.js | 0 .../src}/propTypes/BorderPropTypes.js | 0 .../src}/propTypes/ColorPropType.js | 0 .../src}/propTypes/EdgeInsetsPropType.js | 0 .../src}/propTypes/LayoutPropTypes.js | 0 .../src}/propTypes/PointPropType.js | 0 .../src}/propTypes/ShadowPropTypes.js | 0 .../src}/propTypes/StyleSheetPropType.js | 0 .../src}/propTypes/TransformPropTypes.js | 0 .../propTypes/createStrictShapeTypeChecker.js | 0 .../src}/vendor/Animated/AnimatedEvent.js | 0 .../vendor/Animated/AnimatedImplementation.js | 0 .../src}/vendor/Animated/Easing.js | 0 .../vendor/Animated/NativeAnimatedHelper.js | 0 .../react-native-web/src}/vendor/Animated/SHA | 0 .../src}/vendor/Animated/SpringConfig.js | 0 .../vendor/Animated/animations/Animation.js | 0 .../Animated/animations/DecayAnimation.js | 0 .../Animated/animations/SpringAnimation.js | 0 .../Animated/animations/TimingAnimation.js | 0 .../src}/vendor/Animated/bezier.js | 0 .../Animated/createAnimatedComponent.js | 0 .../vendor/Animated/nodes/AnimatedAddition.js | 0 .../Animated/nodes/AnimatedDiffClamp.js | 0 .../vendor/Animated/nodes/AnimatedDivision.js | 0 .../Animated/nodes/AnimatedInterpolation.js | 0 .../vendor/Animated/nodes/AnimatedModulo.js | 0 .../Animated/nodes/AnimatedMultiplication.js | 0 .../vendor/Animated/nodes/AnimatedNode.js | 0 .../vendor/Animated/nodes/AnimatedProps.js | 0 .../vendor/Animated/nodes/AnimatedStyle.js | 0 .../vendor/Animated/nodes/AnimatedTracking.js | 0 .../Animated/nodes/AnimatedTransform.js | 0 .../vendor/Animated/nodes/AnimatedValue.js | 0 .../vendor/Animated/nodes/AnimatedValueXY.js | 0 .../Animated/nodes/AnimatedWithChildren.js | 0 .../src}/vendor/PanResponder/SHA | 0 .../src}/vendor/PanResponder/index.js | 0 .../src}/vendor/PooledClass/index.js | 0 .../src}/vendor/TouchHistoryMath/index.js | 0 .../src}/vendor/dangerousStyleValue/index.js | 0 .../src}/vendor/hash/index.js | 0 .../src}/vendor/setValueForStyles/index.js | 0 .../src}/vendor/warnValidStyle/index.js | 0 .../create.js} | 11 +- scripts/jest/config.js | 11 + .../jest/setupFramework.js | 6 +- scripts/release/publish.js | 19 + types/prop-types.js | 9 +- webpack.config.js | 60 - {docs => website}/guides/accessibility.md | 0 {docs => website}/guides/advanced.md | 0 .../guides/direct-manipulation.md | 0 {docs => website}/guides/getting-started.md | 0 .../guides/internationalization.md | 0 {docs => website}/guides/known-issues.md | 0 {docs => website}/guides/style.md | 0 {docs => website}/package.json | 12 +- website/storybook/.storybook/.babelrc | 8 + .../storybook/.storybook/addons.js | 0 .../storybook/.storybook/config.js | 0 .../.storybook/decorator-centered.js | 0 .../storybook/.storybook/webpack.config.js | 16 +- .../ActivityIndicatorScreen.js | 0 .../examples/PropAnimating.js | 0 .../ActivityIndicator/examples/PropColor.js | 0 .../examples/PropHidesWhenStopped.js | 0 .../ActivityIndicator/examples/PropSize.js | 0 .../1-components/Button/ButtonScreen.js | 0 .../1-components/Button/examples/PropColor.js | 0 .../Button/examples/PropDisabled.js | 0 .../Button/examples/PropOnPress.js | 0 .../storybook/1-components/Button/helpers.js | 0 .../1-components/CheckBox/CheckBoxScreen.js | 0 .../CheckBox/examples/CustomSize.js | 0 .../CheckBox/examples/PropColor.js | 0 .../CheckBox/examples/PropDisabled.js | 0 .../CheckBox/examples/PropOnValueChange.js | 0 .../CheckBox/examples/PropValue.js | 0 .../1-components/CheckBox/examples/styles.js | 0 .../1-components/CheckBox/helpers.js | 0 .../Image/ImageBackgroundScreen.js | 0 .../1-components/Image/ImageScreen.js | 0 .../Image/examples/MultipleSources.js | 0 .../Image/examples/NetworkImage.js | 0 .../Image/examples/PropChildren.js | 0 .../Image/examples/PropDefaultSource.js | 0 .../Image/examples/PropDraggable.js | 0 .../Image/examples/PropOnError.js | 0 .../1-components/Image/examples/PropOnLoad.js | 0 .../Image/examples/PropOnLoadEnd.js | 0 .../Image/examples/PropOnLoadStart.js | 0 .../Image/examples/PropResizeMode.js | 0 .../1-components/Image/examples/PropSource.js | 0 .../Image/examples/StaticGetSize.js | 0 .../Image/examples/StaticPrefetch.js | 0 .../storybook/1-components/Image/helpers.js | 0 .../1-components/Image/sources/index.js | 0 .../1-components/Image/sources/ladybug.jpg | Bin .../Image/sources/placeholder.jpg | Bin .../1-components/Picker/PickerScreen.js | 0 .../Picker/examples/PickerExample.js | 0 .../ProgressBar/ProgressScreen.js | 0 .../ProgressBar/examples/CustomSize.js | 0 .../ProgressBar/examples/PropColor.js | 0 .../ProgressBar/examples/PropIndeterminate.js | 0 .../ProgressBar/examples/PropProgress.js | 0 .../ProgressBar/examples/PropTrackColor.js | 0 .../1-components/ProgressBar/helpers.js | 0 .../ScrollView/ScrollViewScreen.js | 0 .../ScrollView/examples/Horizontal.js | 0 .../ScrollView/examples/ScrollTo.js | 0 .../ScrollView/examples/ScrollToEnd.js | 0 .../1-components/Switch/SwitchScreen.js | 0 .../Switch/examples/CustomSize.js | 0 .../Switch/examples/PropActiveThumbColor.js | 0 .../Switch/examples/PropActiveTrackColor.js | 0 .../Switch/examples/PropDisabled.js | 0 .../Switch/examples/PropOnValueChange.js | 0 .../Switch/examples/PropThumbColor.js | 0 .../Switch/examples/PropTrackColor.js | 0 .../1-components/Switch/examples/PropValue.js | 0 .../storybook/1-components/Switch/helpers.js | 0 .../storybook/1-components/Text/TextScreen.js | 0 .../Text/examples/PropChildren.js | 0 .../Text/examples/PropNumberOfLines.js | 0 .../Text/examples/PropOnLayout.js | 0 .../1-components/Text/examples/PropOnPress.js | 0 .../Text/examples/PropSelectable.js | 0 .../1-components/Text/examples/legacy.js | 0 .../1-components/TextInput/TextInputScreen.js | 0 .../examples/AutoExpandingTextInput.js | 0 .../TextInput/examples/PropAutoCapitalize.js | 0 .../TextInput/examples/PropAutoFocus.js | 0 .../TextInput/examples/PropBlurOnSubmit.js | 0 .../TextInput/examples/PropClearButtonMode.js | 0 .../examples/PropClearTextOnFocus.js | 0 .../TextInput/examples/PropEditable.js | 0 .../TextInput/examples/PropKeyboardType.js | 0 .../TextInput/examples/PropMaxLength.js | 0 .../TextInput/examples/PropMultiline.js | 0 .../TextInput/examples/PropNumberOfLines.js | 0 .../TextInput/examples/PropOnBlur.js | 0 .../TextInput/examples/PropOnChange.js | 0 .../TextInput/examples/PropOnChangeText.js | 0 .../TextInput/examples/PropOnFocus.js | 0 .../TextInput/examples/PropOnKeyPress.js | 0 .../examples/PropOnSelectionChange.js | 0 .../TextInput/examples/PropOnSubmitEditing.js | 0 .../TextInput/examples/PropPlaceholder.js | 0 .../TextInput/examples/PropSecureTextEntry.js | 0 .../examples/PropSelectTextOnFocus.js | 0 .../TextInput/examples/PropSelection.js | 0 .../TextInput/examples/PropStyle.js | 0 .../TextInput/examples/Rewrite.js | 0 .../TextInput/examples/TextInputEvents.js | 0 .../TextInput/examples/TouchableWrapper.js | 0 .../1-components/TextInput/helpers.js | 0 .../Touchable/TouchableHighlightScreen.js | 0 .../Touchable/TouchableOpacityScreen.js | 0 .../TouchableWithoutFeedbackScreen.js | 0 .../examples/CustomStyleOverrides.js | 0 .../Touchable/examples/DelayEvents.js | 0 .../Touchable/examples/FeedbackEvents.js | 0 .../Touchable/examples/PropDisabled.js | 0 .../Touchable/examples/PropHitSlop.js | 0 .../1-components/Touchable/examples/legacy.js | 0 .../storybook/1-components/View/ViewScreen.js | 0 .../View/examples/PropPointerEvents.js | 0 .../1-components/View/examples/PropStyle.js | 0 .../1-components/View/examples/ZIndex.js | 0 .../1-components/View/examples/legacy.js | 0 .../1-components/View/examples/transforms.js | 0 .../storybook/1-components/View/helpers.js | 0 .../2-apis/AppRegistry/AppRegistryScreen.js | 0 .../2-apis/AppState/AppStateScreen.js | 0 .../2-apis/AppState/examples/StateChanges.js | 0 .../2-apis/AsyncStorage/AsyncStorageScreen.js | 0 .../2-apis/Clipboard/ClipboardScreen.js | 0 .../2-apis/Clipboard/examples/SetString.js | 0 .../2-apis/Dimensions/DimensionsScreen.js | 0 .../Dimensions/examples/DimensionsChange.js | 0 .../2-apis/I18nManager/I18nManagerScreen.js | 0 .../2-apis/I18nManager/examples/RTLToggle.js | 0 .../storybook/2-apis/Linking/LinkingScreen.js | 0 .../2-apis/Linking/examples/OpenURL.js | 0 .../storybook/2-apis/NetInfo/NetInfoScreen.js | 0 .../2-apis/PanResponder/PanResponderScreen.js | 0 .../PanResponder/examples/DraggableCircle.js | 0 .../2-apis/PixelRatio/PixelRatioScreen.js | 0 .../2-apis/Platform/PlatformScreen.js | 0 .../2-apis/StyleSheet/StyleSheetScreen.js | 0 .../2-apis/Vibration/VibrationScreen.js | 0 .../3-demos/Calculator/Calculator.js | 0 .../3-demos/Calculator/CalculatorScreen.js | 0 .../storybook/3-demos/Game2048/Game2048.js | 0 .../3-demos/Game2048/Game2048Screen.js | 0 .../storybook/3-demos/Game2048/GameBoard.js | 0 .../storybook/3-demos/TicTacToe/TicTacToe.js | 0 .../3-demos/TicTacToe/TicTacToeScreen.js | 0 .../storybook/ui-explorer/AppText.js | 0 .../storybook/ui-explorer/Code.js | 0 .../storybook/ui-explorer/DocItem.js | 0 .../storybook/ui-explorer/ExternalLink.js | 0 .../storybook/ui-explorer/Section.js | 0 .../storybook/ui-explorer/StyleList.js | 0 .../storybook/ui-explorer/TextList.js | 0 .../storybook/ui-explorer/UIExplorer.js | 0 .../storybook/ui-explorer/index.js | 0 .../storybook/ui-explorer/insertBetween.js | 0 {docs => website}/yarn.lock | 0 yarn.lock | 4933 ++++++++++++----- 466 files changed, 4093 insertions(+), 2903 deletions(-) create mode 100644 .babelrc delete mode 100644 benchmarks/yarn.lock create mode 100644 lerna.json create mode 100644 packages/babel-plugin-react-native-web/README.md create mode 100644 packages/babel-plugin-react-native-web/index.js create mode 100644 packages/babel-plugin-react-native-web/package.json rename {babel => packages/babel-plugin-react-native-web/src}/__tests__/__snapshots__/index-test.js.snap (100%) rename {babel => packages/babel-plugin-react-native-web/src}/__tests__/index-test.js (100%) rename {babel => packages/babel-plugin-react-native-web/src}/index.js (100%) rename {benchmarks => packages/benchmarks}/README.md (90%) rename {benchmarks => packages/benchmarks}/benchmark.js (100%) rename {benchmarks => packages/benchmarks}/createRenderBenchmark.js (100%) rename {benchmarks => packages/benchmarks}/index.html (100%) rename {benchmarks => packages/benchmarks}/index.js (100%) rename {benchmarks => packages/benchmarks}/package.json (59%) rename {benchmarks => packages/benchmarks}/src/aphrodite.js (100%) rename {benchmarks => packages/benchmarks}/src/components/AppText/index.js (100%) rename {benchmarks => packages/benchmarks}/src/components/AspectRatio/index.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Box/aphrodite.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Box/css-modules.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Box/emotion.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Box/glamor.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Box/jss.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Box/radium.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Box/react-native.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Box/reactxp.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Box/styled-components.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Box/styles.css (100%) rename {benchmarks => packages/benchmarks}/src/components/Box/styletron.js (100%) rename {benchmarks => packages/benchmarks}/src/components/GridView/index.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Icons/DirectMessage.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Icons/Heart.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Icons/Reply.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Icons/Retweet.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Icons/styles.js (100%) rename {benchmarks => packages/benchmarks}/src/components/NestedTree/index.js (100%) rename {benchmarks => packages/benchmarks}/src/components/Tweet/index.js (100%) rename {benchmarks => packages/benchmarks}/src/components/TweetAction/index.js (100%) rename {benchmarks => packages/benchmarks}/src/components/TweetActionsBar/index.js (100%) rename {benchmarks => packages/benchmarks}/src/components/TweetText/index.js (100%) rename {benchmarks => packages/benchmarks}/src/components/TweetTextPart/index.js (100%) rename {benchmarks => packages/benchmarks}/src/components/UserAvatar/index.js (100%) rename {benchmarks => packages/benchmarks}/src/components/UserNames/index.js (100%) rename {benchmarks => packages/benchmarks}/src/components/View/aphrodite.js (100%) rename {benchmarks => packages/benchmarks}/src/components/View/css-modules.js (100%) rename {benchmarks => packages/benchmarks}/src/components/View/emotion.js (100%) rename {benchmarks => packages/benchmarks}/src/components/View/glamor.js (100%) rename {benchmarks => packages/benchmarks}/src/components/View/jss.js (100%) rename {benchmarks => packages/benchmarks}/src/components/View/radium.js (100%) rename {benchmarks => packages/benchmarks}/src/components/View/styled-components.js (100%) rename {benchmarks => packages/benchmarks}/src/components/View/styles.css (100%) rename {benchmarks => packages/benchmarks}/src/components/View/styletron.js (100%) rename {benchmarks => packages/benchmarks}/src/components/theme.js (100%) rename {benchmarks => packages/benchmarks}/src/css-modules.js (100%) rename {benchmarks => packages/benchmarks}/src/emotion.js (100%) rename {benchmarks => packages/benchmarks}/src/glamor.js (100%) rename {benchmarks => packages/benchmarks}/src/jss.js (100%) rename {benchmarks => packages/benchmarks}/src/radium.js (100%) rename {benchmarks => packages/benchmarks}/src/react-native.js (100%) rename {benchmarks => packages/benchmarks}/src/reactxp.js (100%) rename {benchmarks => packages/benchmarks}/src/styled-components.js (100%) rename {benchmarks => packages/benchmarks}/src/styletron.js (100%) rename {benchmarks => packages/benchmarks}/tests/renderDeepTree.js (100%) rename {benchmarks => packages/benchmarks}/tests/renderTweet.js (100%) rename {benchmarks => packages/benchmarks}/tests/renderWideTree.js (100%) rename {benchmarks => packages/benchmarks}/webpack.config.js (95%) create mode 100644 packages/react-native-web/README.md rename {jest => packages/react-native-web/jest}/__tests__/__snapshots__/serializer-test.js.snap (100%) rename {jest => packages/react-native-web/jest}/__tests__/serializer-test.js (100%) rename {jest => packages/react-native-web/jest}/createSerializer.js (100%) rename {jest => packages/react-native-web/jest}/serializer.js (100%) create mode 100644 packages/react-native-web/package.json rename {src => packages/react-native-web/src}/apis/Animated/index.js (100%) rename {src => packages/react-native-web/src}/apis/AppRegistry/AppContainer.js (100%) rename {src => packages/react-native-web/src}/apis/AppRegistry/__tests__/__snapshots__/renderApplication-test.js.snap (100%) rename {src => packages/react-native-web/src}/apis/AppRegistry/__tests__/renderApplication-test.js (100%) rename {src => packages/react-native-web/src}/apis/AppRegistry/index.js (100%) rename {src => packages/react-native-web/src}/apis/AppRegistry/renderApplication.js (100%) rename {src => packages/react-native-web/src}/apis/AppState/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/apis/AppState/index.js (100%) rename {src => packages/react-native-web/src}/apis/AsyncStorage/__tests__/__snapshots__/index-test.js.snap (100%) rename {src => packages/react-native-web/src}/apis/AsyncStorage/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/apis/AsyncStorage/index.js (100%) rename {src => packages/react-native-web/src}/apis/BackHandler/index.js (100%) rename {src => packages/react-native-web/src}/apis/Clipboard/index.js (100%) rename {src => packages/react-native-web/src}/apis/Dimensions/__tests__/__snapshots__/index-test.js.snap (100%) rename {src => packages/react-native-web/src}/apis/Dimensions/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/apis/Dimensions/index.js (100%) rename {src => packages/react-native-web/src}/apis/Easing/index.js (100%) rename {src => packages/react-native-web/src}/apis/I18nManager/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/apis/I18nManager/index.js (100%) rename {src => packages/react-native-web/src}/apis/InteractionManager/index.js (100%) rename {src => packages/react-native-web/src}/apis/Keyboard/index.js (100%) rename {src => packages/react-native-web/src}/apis/Linking/index.js (100%) rename {src => packages/react-native-web/src}/apis/NetInfo/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/apis/NetInfo/index.js (100%) rename {src => packages/react-native-web/src}/apis/PanResponder/index.js (100%) rename {src => packages/react-native-web/src}/apis/PixelRatio/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/apis/PixelRatio/index.js (100%) rename {src => packages/react-native-web/src}/apis/Platform/index.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/StyleManager.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/StyleRegistry.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/StyleSheetValidation.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/StyleManager-test.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/StyleRegistry-test.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/__snapshots__/StyleManager-test.js.snap (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/__snapshots__/StyleRegistry-test.js.snap (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/__snapshots__/flattenStyle-test.js.snap (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/__snapshots__/generateCss-test.js.snap (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/__snapshots__/i18nStyle-test.js.snap (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/__snapshots__/index-test.js.snap (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/createReactDOMStyle-test.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/flattenStyle-test.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/generateCss-test.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/i18nStyle-test.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/__tests__/normalizeValue-test.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/createReactDOMStyle.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/flattenStyle.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/generateCss.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/getHairlineWidth.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/i18nStyle.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/index.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/normalizeValue.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/registry.js (100%) rename {src => packages/react-native-web/src}/apis/StyleSheet/staticCss.js (100%) rename {src => packages/react-native-web/src}/apis/UIManager/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/apis/UIManager/index.js (100%) rename {src => packages/react-native-web/src}/apis/Vibration/index.js (100%) rename {src => packages/react-native-web/src}/components/ART/index.js (100%) rename {src => packages/react-native-web/src}/components/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap (100%) rename {src => packages/react-native-web/src}/components/ActivityIndicator/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/ActivityIndicator/index.js (100%) rename {src => packages/react-native-web/src}/components/Button/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/Button/index.js (100%) rename {src => packages/react-native-web/src}/components/CheckBox/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/CheckBox/index.js (100%) rename {src => packages/react-native-web/src}/components/FlatList/index.js (100%) rename {src => packages/react-native-web/src}/components/Image/ImageBackground.js (100%) rename {src => packages/react-native-web/src}/components/Image/ImageResizeMode.js (100%) rename {src => packages/react-native-web/src}/components/Image/ImageStylePropTypes.js (100%) rename {src => packages/react-native-web/src}/components/Image/ImageUriCache.js (100%) rename {src => packages/react-native-web/src}/components/Image/__tests__/ImageBackground-test.js (100%) rename {src => packages/react-native-web/src}/components/Image/__tests__/__snapshots__/index-test.js.snap (100%) rename {src => packages/react-native-web/src}/components/Image/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/Image/index.js (100%) rename {src => packages/react-native-web/src}/components/KeyboardAvoidingView/index.js (92%) rename {src => packages/react-native-web/src}/components/ListView/ListViewDataSource.js (100%) rename {src => packages/react-native-web/src}/components/ListView/ListViewPropTypes.js (100%) rename {src => packages/react-native-web/src}/components/ListView/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/ListView/index.js (100%) rename {src => packages/react-native-web/src}/components/Modal/index.js (100%) rename {src => packages/react-native-web/src}/components/Picker/PickerItemPropType.js (100%) rename {src => packages/react-native-web/src}/components/Picker/PickerStylePropTypes.js (100%) rename {src => packages/react-native-web/src}/components/Picker/__tests__/__snapshots__/index-test.js.snap (100%) rename {src => packages/react-native-web/src}/components/Picker/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/Picker/index.js (100%) rename {src => packages/react-native-web/src}/components/ProgressBar/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/ProgressBar/index.js (100%) rename {src => packages/react-native-web/src}/components/RefreshControl/index.js (100%) rename {src => packages/react-native-web/src}/components/SafeAreaView/index.js (100%) rename {src => packages/react-native-web/src}/components/ScrollView/ScrollViewBase.js (100%) rename {src => packages/react-native-web/src}/components/ScrollView/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/ScrollView/index.js (100%) rename {src => packages/react-native-web/src}/components/SectionList/index.js (100%) rename {src => packages/react-native-web/src}/components/Slider/index.js (100%) rename {src => packages/react-native-web/src}/components/StaticContainer/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/StaticContainer/index.js (100%) rename {src => packages/react-native-web/src}/components/StaticRenderer/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/StaticRenderer/index.js (100%) rename {src => packages/react-native-web/src}/components/StatusBar/index.js (100%) rename {src => packages/react-native-web/src}/components/Switch/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/Switch/index.js (100%) rename {src => packages/react-native-web/src}/components/Text/TextPropTypes.js (100%) rename {src => packages/react-native-web/src}/components/Text/TextStylePropTypes.js (100%) rename {src => packages/react-native-web/src}/components/Text/__tests__/__snapshots__/index-test.js.snap (100%) rename {src => packages/react-native-web/src}/components/Text/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/Text/index.js (100%) rename {src => packages/react-native-web/src}/components/TextInput/TextInputState.js (100%) rename {src => packages/react-native-web/src}/components/TextInput/TextInputStylePropTypes.js (100%) rename {src => packages/react-native-web/src}/components/TextInput/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/TextInput/index.js (100%) rename {src => packages/react-native-web/src}/components/Touchable/BoundingDimensions.js (100%) rename {src => packages/react-native-web/src}/components/Touchable/Position.js (100%) rename {src => packages/react-native-web/src}/components/Touchable/Touchable.js (100%) rename {src => packages/react-native-web/src}/components/Touchable/TouchableHighlight.js (100%) rename {src => packages/react-native-web/src}/components/Touchable/TouchableNativeFeedback.js (100%) rename {src => packages/react-native-web/src}/components/Touchable/TouchableOpacity.js (100%) rename {src => packages/react-native-web/src}/components/Touchable/TouchableWithoutFeedback.js (100%) rename {src => packages/react-native-web/src}/components/Touchable/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/Touchable/ensureComponentIsNative.js (100%) rename {src => packages/react-native-web/src}/components/Touchable/ensurePositiveDelayProps.js (100%) rename {src => packages/react-native-web/src}/components/UnimplementedView/index.js (100%) rename {src => packages/react-native-web/src}/components/View/ViewPropTypes.js (100%) rename {src => packages/react-native-web/src}/components/View/ViewStylePropTypes.js (100%) rename {src => packages/react-native-web/src}/components/View/__tests__/__snapshots__/index-test.js.snap (100%) rename {src => packages/react-native-web/src}/components/View/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/components/View/index.js (100%) rename {src => packages/react-native-web/src}/components/VirtualizedList/index.js (100%) rename {src => packages/react-native-web/src}/index.js (100%) rename {src => packages/react-native-web/src}/module.js (100%) rename {src => packages/react-native-web/src}/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent.js (100%) rename {src => packages/react-native-web/src}/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.js (100%) rename {src => packages/react-native-web/src}/modules/AccessibilityUtil/__tests__/propsToTabIndex-test.js (100%) rename {src => packages/react-native-web/src}/modules/AccessibilityUtil/index.js (100%) rename {src => packages/react-native-web/src}/modules/AccessibilityUtil/isDisabled.js (100%) rename {src => packages/react-native-web/src}/modules/AccessibilityUtil/propsToAccessibilityComponent.js (100%) rename {src => packages/react-native-web/src}/modules/AccessibilityUtil/propsToAriaRole.js (100%) rename {src => packages/react-native-web/src}/modules/AccessibilityUtil/propsToTabIndex.js (100%) rename {src => packages/react-native-web/src}/modules/AssetRegistry/index.js (100%) rename {src => packages/react-native-web/src}/modules/ImageLoader/index.js (100%) rename {src => packages/react-native-web/src}/modules/NativeEventEmitter/index.js (100%) rename {src => packages/react-native-web/src}/modules/NativeMethodsMixin/index.js (100%) rename {src => packages/react-native-web/src}/modules/NativeModules/index.js (100%) rename {src => packages/react-native-web/src}/modules/ReactNativePropRegistry/index.js (100%) rename {src => packages/react-native-web/src}/modules/ScrollResponder/index.js (100%) rename {src => packages/react-native-web/src}/modules/applyLayout/index.js (100%) rename {src => packages/react-native-web/src}/modules/applyNativeMethods/index.js (100%) rename {src => packages/react-native-web/src}/modules/createDOMProps/__tests__/__snapshots__/index-test.js.snap (100%) rename {src => packages/react-native-web/src}/modules/createDOMProps/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/modules/createDOMProps/index.js (100%) rename {src => packages/react-native-web/src}/modules/createElement/__tests__/__snapshots__/index-test.js.snap (100%) rename {src => packages/react-native-web/src}/modules/createElement/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/modules/createElement/index.js (100%) rename {src => packages/react-native-web/src}/modules/dismissKeyboard/index.js (100%) rename {src => packages/react-native-web/src}/modules/findNodeHandle/index.js (100%) rename {src => packages/react-native-web/src}/modules/flattenArray/index.js (100%) rename {src => packages/react-native-web/src}/modules/hydrate/index.js (100%) rename {src => packages/react-native-web/src}/modules/injectResponderEventPlugin/index.js (100%) rename {src => packages/react-native-web/src}/modules/mapKeyValue/index.js (100%) rename {src => packages/react-native-web/src}/modules/modality/index.js (100%) rename {src => packages/react-native-web/src}/modules/multiplyStyleLengthValue/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/modules/multiplyStyleLengthValue/index.js (100%) rename {src => packages/react-native-web/src}/modules/normalizeNativeEvent/__tests__/__snapshots__/index-test.js.snap (100%) rename {src => packages/react-native-web/src}/modules/normalizeNativeEvent/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/modules/normalizeNativeEvent/index.js (100%) rename {src => packages/react-native-web/src}/modules/prefixStyles/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/modules/prefixStyles/index.js (100%) rename {src => packages/react-native-web/src}/modules/prefixStyles/static.js (99%) rename {src => packages/react-native-web/src}/modules/processColor/__tests__/index-test.js (100%) rename {src => packages/react-native-web/src}/modules/processColor/index.js (100%) rename {src => packages/react-native-web/src}/modules/render/index.js (100%) rename {src => packages/react-native-web/src}/modules/requestIdleCallback/index.js (100%) rename {src => packages/react-native-web/src}/modules/unitlessNumbers/index.js (100%) rename {src => packages/react-native-web/src}/modules/unmountComponentAtNode/index.js (100%) rename {src => packages/react-native-web/src}/propTypes/AnimationPropTypes.js (100%) rename {src => packages/react-native-web/src}/propTypes/BaseComponentPropTypes.js (100%) rename {src => packages/react-native-web/src}/propTypes/BorderPropTypes.js (100%) rename {src => packages/react-native-web/src}/propTypes/ColorPropType.js (100%) rename {src => packages/react-native-web/src}/propTypes/EdgeInsetsPropType.js (100%) rename {src => packages/react-native-web/src}/propTypes/LayoutPropTypes.js (100%) rename {src => packages/react-native-web/src}/propTypes/PointPropType.js (100%) rename {src => packages/react-native-web/src}/propTypes/ShadowPropTypes.js (100%) rename {src => packages/react-native-web/src}/propTypes/StyleSheetPropType.js (100%) rename {src => packages/react-native-web/src}/propTypes/TransformPropTypes.js (100%) rename {src => packages/react-native-web/src}/propTypes/createStrictShapeTypeChecker.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/AnimatedEvent.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/AnimatedImplementation.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/Easing.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/NativeAnimatedHelper.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/SHA (100%) rename {src => packages/react-native-web/src}/vendor/Animated/SpringConfig.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/animations/Animation.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/animations/DecayAnimation.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/animations/SpringAnimation.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/animations/TimingAnimation.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/bezier.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/createAnimatedComponent.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedAddition.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedDiffClamp.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedDivision.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedInterpolation.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedModulo.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedMultiplication.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedNode.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedProps.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedStyle.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedTracking.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedTransform.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedValue.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedValueXY.js (100%) rename {src => packages/react-native-web/src}/vendor/Animated/nodes/AnimatedWithChildren.js (100%) rename {src => packages/react-native-web/src}/vendor/PanResponder/SHA (100%) rename {src => packages/react-native-web/src}/vendor/PanResponder/index.js (100%) rename {src => packages/react-native-web/src}/vendor/PooledClass/index.js (100%) rename {src => packages/react-native-web/src}/vendor/TouchHistoryMath/index.js (100%) rename {src => packages/react-native-web/src}/vendor/dangerousStyleValue/index.js (100%) rename {src => packages/react-native-web/src}/vendor/hash/index.js (100%) rename {src => packages/react-native-web/src}/vendor/setValueForStyles/index.js (100%) rename {src => packages/react-native-web/src}/vendor/warnValidStyle/index.js (100%) rename scripts/{createPrefixer.js => inline-style-prefixer/create.js} (50%) create mode 100644 scripts/jest/config.js rename jest-setup-framework.js => scripts/jest/setupFramework.js (53%) create mode 100644 scripts/release/publish.js delete mode 100644 webpack.config.js rename {docs => website}/guides/accessibility.md (100%) rename {docs => website}/guides/advanced.md (100%) rename {docs => website}/guides/direct-manipulation.md (100%) rename {docs => website}/guides/getting-started.md (100%) rename {docs => website}/guides/internationalization.md (100%) rename {docs => website}/guides/known-issues.md (100%) rename {docs => website}/guides/style.md (100%) rename {docs => website}/package.json (62%) create mode 100644 website/storybook/.storybook/.babelrc rename {docs => website}/storybook/.storybook/addons.js (100%) rename {docs => website}/storybook/.storybook/config.js (100%) rename {docs => website}/storybook/.storybook/decorator-centered.js (100%) rename {docs => website}/storybook/.storybook/webpack.config.js (58%) rename {docs => website}/storybook/1-components/ActivityIndicator/ActivityIndicatorScreen.js (100%) rename {docs => website}/storybook/1-components/ActivityIndicator/examples/PropAnimating.js (100%) rename {docs => website}/storybook/1-components/ActivityIndicator/examples/PropColor.js (100%) rename {docs => website}/storybook/1-components/ActivityIndicator/examples/PropHidesWhenStopped.js (100%) rename {docs => website}/storybook/1-components/ActivityIndicator/examples/PropSize.js (100%) rename {docs => website}/storybook/1-components/Button/ButtonScreen.js (100%) rename {docs => website}/storybook/1-components/Button/examples/PropColor.js (100%) rename {docs => website}/storybook/1-components/Button/examples/PropDisabled.js (100%) rename {docs => website}/storybook/1-components/Button/examples/PropOnPress.js (100%) rename {docs => website}/storybook/1-components/Button/helpers.js (100%) rename {docs => website}/storybook/1-components/CheckBox/CheckBoxScreen.js (100%) rename {docs => website}/storybook/1-components/CheckBox/examples/CustomSize.js (100%) rename {docs => website}/storybook/1-components/CheckBox/examples/PropColor.js (100%) rename {docs => website}/storybook/1-components/CheckBox/examples/PropDisabled.js (100%) rename {docs => website}/storybook/1-components/CheckBox/examples/PropOnValueChange.js (100%) rename {docs => website}/storybook/1-components/CheckBox/examples/PropValue.js (100%) rename {docs => website}/storybook/1-components/CheckBox/examples/styles.js (100%) rename {docs => website}/storybook/1-components/CheckBox/helpers.js (100%) rename {docs => website}/storybook/1-components/Image/ImageBackgroundScreen.js (100%) rename {docs => website}/storybook/1-components/Image/ImageScreen.js (100%) rename {docs => website}/storybook/1-components/Image/examples/MultipleSources.js (100%) rename {docs => website}/storybook/1-components/Image/examples/NetworkImage.js (100%) rename {docs => website}/storybook/1-components/Image/examples/PropChildren.js (100%) rename {docs => website}/storybook/1-components/Image/examples/PropDefaultSource.js (100%) rename {docs => website}/storybook/1-components/Image/examples/PropDraggable.js (100%) rename {docs => website}/storybook/1-components/Image/examples/PropOnError.js (100%) rename {docs => website}/storybook/1-components/Image/examples/PropOnLoad.js (100%) rename {docs => website}/storybook/1-components/Image/examples/PropOnLoadEnd.js (100%) rename {docs => website}/storybook/1-components/Image/examples/PropOnLoadStart.js (100%) rename {docs => website}/storybook/1-components/Image/examples/PropResizeMode.js (100%) rename {docs => website}/storybook/1-components/Image/examples/PropSource.js (100%) rename {docs => website}/storybook/1-components/Image/examples/StaticGetSize.js (100%) rename {docs => website}/storybook/1-components/Image/examples/StaticPrefetch.js (100%) rename {docs => website}/storybook/1-components/Image/helpers.js (100%) rename {docs => website}/storybook/1-components/Image/sources/index.js (100%) rename {docs => website}/storybook/1-components/Image/sources/ladybug.jpg (100%) rename {docs => website}/storybook/1-components/Image/sources/placeholder.jpg (100%) rename {docs => website}/storybook/1-components/Picker/PickerScreen.js (100%) rename {docs => website}/storybook/1-components/Picker/examples/PickerExample.js (100%) rename {docs => website}/storybook/1-components/ProgressBar/ProgressScreen.js (100%) rename {docs => website}/storybook/1-components/ProgressBar/examples/CustomSize.js (100%) rename {docs => website}/storybook/1-components/ProgressBar/examples/PropColor.js (100%) rename {docs => website}/storybook/1-components/ProgressBar/examples/PropIndeterminate.js (100%) rename {docs => website}/storybook/1-components/ProgressBar/examples/PropProgress.js (100%) rename {docs => website}/storybook/1-components/ProgressBar/examples/PropTrackColor.js (100%) rename {docs => website}/storybook/1-components/ProgressBar/helpers.js (100%) rename {docs => website}/storybook/1-components/ScrollView/ScrollViewScreen.js (100%) rename {docs => website}/storybook/1-components/ScrollView/examples/Horizontal.js (100%) rename {docs => website}/storybook/1-components/ScrollView/examples/ScrollTo.js (100%) rename {docs => website}/storybook/1-components/ScrollView/examples/ScrollToEnd.js (100%) rename {docs => website}/storybook/1-components/Switch/SwitchScreen.js (100%) rename {docs => website}/storybook/1-components/Switch/examples/CustomSize.js (100%) rename {docs => website}/storybook/1-components/Switch/examples/PropActiveThumbColor.js (100%) rename {docs => website}/storybook/1-components/Switch/examples/PropActiveTrackColor.js (100%) rename {docs => website}/storybook/1-components/Switch/examples/PropDisabled.js (100%) rename {docs => website}/storybook/1-components/Switch/examples/PropOnValueChange.js (100%) rename {docs => website}/storybook/1-components/Switch/examples/PropThumbColor.js (100%) rename {docs => website}/storybook/1-components/Switch/examples/PropTrackColor.js (100%) rename {docs => website}/storybook/1-components/Switch/examples/PropValue.js (100%) rename {docs => website}/storybook/1-components/Switch/helpers.js (100%) rename {docs => website}/storybook/1-components/Text/TextScreen.js (100%) rename {docs => website}/storybook/1-components/Text/examples/PropChildren.js (100%) rename {docs => website}/storybook/1-components/Text/examples/PropNumberOfLines.js (100%) rename {docs => website}/storybook/1-components/Text/examples/PropOnLayout.js (100%) rename {docs => website}/storybook/1-components/Text/examples/PropOnPress.js (100%) rename {docs => website}/storybook/1-components/Text/examples/PropSelectable.js (100%) rename {docs => website}/storybook/1-components/Text/examples/legacy.js (100%) rename {docs => website}/storybook/1-components/TextInput/TextInputScreen.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/AutoExpandingTextInput.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropAutoCapitalize.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropAutoFocus.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropBlurOnSubmit.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropClearButtonMode.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropClearTextOnFocus.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropEditable.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropKeyboardType.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropMaxLength.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropMultiline.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropNumberOfLines.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropOnBlur.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropOnChange.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropOnChangeText.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropOnFocus.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropOnKeyPress.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropOnSelectionChange.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropOnSubmitEditing.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropPlaceholder.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropSecureTextEntry.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropSelectTextOnFocus.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropSelection.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/PropStyle.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/Rewrite.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/TextInputEvents.js (100%) rename {docs => website}/storybook/1-components/TextInput/examples/TouchableWrapper.js (100%) rename {docs => website}/storybook/1-components/TextInput/helpers.js (100%) rename {docs => website}/storybook/1-components/Touchable/TouchableHighlightScreen.js (100%) rename {docs => website}/storybook/1-components/Touchable/TouchableOpacityScreen.js (100%) rename {docs => website}/storybook/1-components/Touchable/TouchableWithoutFeedbackScreen.js (100%) rename {docs => website}/storybook/1-components/Touchable/examples/CustomStyleOverrides.js (100%) rename {docs => website}/storybook/1-components/Touchable/examples/DelayEvents.js (100%) rename {docs => website}/storybook/1-components/Touchable/examples/FeedbackEvents.js (100%) rename {docs => website}/storybook/1-components/Touchable/examples/PropDisabled.js (100%) rename {docs => website}/storybook/1-components/Touchable/examples/PropHitSlop.js (100%) rename {docs => website}/storybook/1-components/Touchable/examples/legacy.js (100%) rename {docs => website}/storybook/1-components/View/ViewScreen.js (100%) rename {docs => website}/storybook/1-components/View/examples/PropPointerEvents.js (100%) rename {docs => website}/storybook/1-components/View/examples/PropStyle.js (100%) rename {docs => website}/storybook/1-components/View/examples/ZIndex.js (100%) rename {docs => website}/storybook/1-components/View/examples/legacy.js (100%) rename {docs => website}/storybook/1-components/View/examples/transforms.js (100%) rename {docs => website}/storybook/1-components/View/helpers.js (100%) rename {docs => website}/storybook/2-apis/AppRegistry/AppRegistryScreen.js (100%) rename {docs => website}/storybook/2-apis/AppState/AppStateScreen.js (100%) rename {docs => website}/storybook/2-apis/AppState/examples/StateChanges.js (100%) rename {docs => website}/storybook/2-apis/AsyncStorage/AsyncStorageScreen.js (100%) rename {docs => website}/storybook/2-apis/Clipboard/ClipboardScreen.js (100%) rename {docs => website}/storybook/2-apis/Clipboard/examples/SetString.js (100%) rename {docs => website}/storybook/2-apis/Dimensions/DimensionsScreen.js (100%) rename {docs => website}/storybook/2-apis/Dimensions/examples/DimensionsChange.js (100%) rename {docs => website}/storybook/2-apis/I18nManager/I18nManagerScreen.js (100%) rename {docs => website}/storybook/2-apis/I18nManager/examples/RTLToggle.js (100%) rename {docs => website}/storybook/2-apis/Linking/LinkingScreen.js (100%) rename {docs => website}/storybook/2-apis/Linking/examples/OpenURL.js (100%) rename {docs => website}/storybook/2-apis/NetInfo/NetInfoScreen.js (100%) rename {docs => website}/storybook/2-apis/PanResponder/PanResponderScreen.js (100%) rename {docs => website}/storybook/2-apis/PanResponder/examples/DraggableCircle.js (100%) rename {docs => website}/storybook/2-apis/PixelRatio/PixelRatioScreen.js (100%) rename {docs => website}/storybook/2-apis/Platform/PlatformScreen.js (100%) rename {docs => website}/storybook/2-apis/StyleSheet/StyleSheetScreen.js (100%) rename {docs => website}/storybook/2-apis/Vibration/VibrationScreen.js (100%) rename {docs => website}/storybook/3-demos/Calculator/Calculator.js (100%) rename {docs => website}/storybook/3-demos/Calculator/CalculatorScreen.js (100%) rename {docs => website}/storybook/3-demos/Game2048/Game2048.js (100%) rename {docs => website}/storybook/3-demos/Game2048/Game2048Screen.js (100%) rename {docs => website}/storybook/3-demos/Game2048/GameBoard.js (100%) rename {docs => website}/storybook/3-demos/TicTacToe/TicTacToe.js (100%) rename {docs => website}/storybook/3-demos/TicTacToe/TicTacToeScreen.js (100%) rename {docs => website}/storybook/ui-explorer/AppText.js (100%) rename {docs => website}/storybook/ui-explorer/Code.js (100%) rename {docs => website}/storybook/ui-explorer/DocItem.js (100%) rename {docs => website}/storybook/ui-explorer/ExternalLink.js (100%) rename {docs => website}/storybook/ui-explorer/Section.js (100%) rename {docs => website}/storybook/ui-explorer/StyleList.js (100%) rename {docs => website}/storybook/ui-explorer/TextList.js (100%) rename {docs => website}/storybook/ui-explorer/UIExplorer.js (100%) rename {docs => website}/storybook/ui-explorer/index.js (100%) rename {docs => website}/storybook/ui-explorer/insertBetween.js (100%) rename {docs => website}/yarn.lock (100%) diff --git a/.babelrc b/.babelrc new file mode 100644 index 000000000..2e2e0fb30 --- /dev/null +++ b/.babelrc @@ -0,0 +1,8 @@ +{ + "presets": [ + "react-native" + ], + "plugins": [ + [ "transform-react-remove-prop-types", { "mode": "wrap" } ] + ] +} diff --git a/.eslintrc b/.eslintrc index 31728b5a9..5127cd73a 100644 --- a/.eslintrc +++ b/.eslintrc @@ -56,6 +56,7 @@ "no-dupe-class-members": 2, "no-dupe-keys": 2, "no-duplicate-case": 2, + "no-duplicate-imports": 2, "no-empty-character-class": 2, "no-empty-pattern": 2, "no-eval": 2, diff --git a/.flowconfig b/.flowconfig index ee67ef33d..afa0a0bfe 100644 --- a/.flowconfig +++ b/.flowconfig @@ -1,13 +1,17 @@ +[version] +^0.61.0 + [ignore] -.*/__tests__/.* -.*/benchmarks/.* -.*/docs/.* +/.*/__tests__/.* +/packages/benchmarks/.* +/packages/.*/dist/.* +/website/.* .*/node_modules/babel-plugin-transform-react-remove-prop-types/* [include] [libs] -types +/types [options] unsafe.enable_getters_and_setters=true diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 40ac206d3..477d3dc6b 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -25,6 +25,12 @@ yarn ## Automated tests +To run the linter: + +``` +yarn lint +``` + To run flow: ``` @@ -40,47 +46,49 @@ yarn jest …in watch mode: ``` -yarn jest:watch +yarn jest --watch ``` -To run all automated tests: +To run all these automated tests: ``` yarn test ``` -## Visual tests +## Compile and build -To run the interactive storybook: +To compile the `react-native-web` source code: ``` -yarn docs:start +yarn compile ``` -To generate a static build of the storybook: +…in watch mode: ``` -yarn docs:build +yarn compile --watch ``` -To run the performance benchmarks in a browser (opening `./benchmarks/index.html`): +## Website and visual tests + +To run the interactive storybook: ``` -yarn benchmark +yarn docs:start ``` -## Compile and build - -To compile the source code to `dist`: +When you're also making changes to the 'react-native-web' source files, run this command in another process: ``` -yarn compile +yarn compile --watch ``` -To create a UMD bundle of the library: +## Benchmarks + +To run the performance benchmarks in a browser (opening `./packages/benchmarks/index.html`): ``` -yarn build +yarn benchmark ``` ### Pre-commit @@ -95,7 +103,6 @@ To format and lint the entire project: ``` yarn fmt -yarn lint ``` ### New Features diff --git a/.gitignore b/.gitignore index f06235c46..03cbfc4e3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +coverage node_modules dist diff --git a/.travis.yml b/.travis.yml index 3ff414602..78b656153 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,17 @@ language: node_js + node_js: - "8" -before_script: - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start + +before_install: + # Install Yarn + - curl -o- -L https://yarnpkg.com/install.sh | bash + - export PATH=$HOME/.yarn/bin:$PATH + +cache: + yarn: true + directories: + - node_modules + script: - yarn test diff --git a/README.md b/README.md index bfa7ccc6a..ca64689f5 100644 --- a/README.md +++ b/README.md @@ -27,19 +27,20 @@ Install in your existing app using `yarn` or `npm`: ``` yarn add react react-dom react-native-web +yarn add --dev babel-plugin-react-native-web ``` -Add the `react-native-web/babel` plugin to your Babel configuration. This will +Add the `react-native-web` plugin to your Babel configuration. This will alias `react-native` to `react-native-web` and exclude any modules not required by the app. ```json { - "plugins": [ - "react-native-web/babel" - ], "presets": [ "react-native" + ], + "plugins": [ + "react-native-web" ] } ``` diff --git a/benchmarks/yarn.lock b/benchmarks/yarn.lock deleted file mode 100644 index 6faa303ab..000000000 --- a/benchmarks/yarn.lock +++ /dev/null @@ -1,1443 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/helper-module-imports@7.0.0-beta.32": - version "7.0.0-beta.32" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.32.tgz#8126fc024107c226879841b973677a4f4e510a03" - dependencies: - "@babel/types" "7.0.0-beta.32" - lodash "^4.2.0" - -"@babel/types@7.0.0-beta.32": - version "7.0.0-beta.32" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.32.tgz#c317d0ecc89297b80bbcb2f50608e31f6452a5ff" - dependencies: - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^2.0.0" - -"@types/lodash@^4.14.64": - version "4.14.74" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.74.tgz#ac3bd8db988e7f7038e5d22bd76a7ba13f876168" - -"@types/lodash@^4.14.78": - version "4.14.91" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.91.tgz#794611b28056d16b5436059c6d800b39d573cd3a" - -"@types/node@*": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.1.tgz#4ec3020bcdfe2abffeef9ba3fbf26fca097514b5" - -"@types/react-dom@^16.0.0": - version "16.0.3" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.3.tgz#8accad7eabdab4cca3e1a56f5ccb57de2da0ff64" - dependencies: - "@types/node" "*" - "@types/react" "*" - -"@types/react@*", "@types/react@^16.0.0": - version "16.0.31" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.31.tgz#5285da62f3ac62b797f6d0729a1d6181f3180c3e" - -abbrev@1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" - -ajv@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.0.tgz#c1735024c5da2ef75cc190713073d44f098bf486" - dependencies: - co "^4.6.0" - fast-deep-equal "^0.1.0" - json-schema-traverse "^0.3.0" - json-stable-stringify "^1.0.1" - -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -aphrodite@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/aphrodite/-/aphrodite-1.2.5.tgz#8358c36c80bb03aee9b97165aaa70186225b4983" - dependencies: - asap "^2.0.3" - inline-style-prefixer "^3.0.1" - string-hash "^1.1.3" - -argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" - dependencies: - sprintf-js "~1.0.2" - -array-find@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" - -asap@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - -asap@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" - -assert@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - -autoprefixer@^6.3.1: - version "6.7.5" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.5.tgz#50848f39dc08730091d9495023487e7cc21f518d" - dependencies: - browserslist "^1.7.5" - caniuse-db "^1.0.30000624" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.15" - postcss-value-parser "^3.2.3" - -babel-code-frame@^6.11.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" - dependencies: - chalk "^1.1.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -babel-macros@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/babel-macros/-/babel-macros-1.2.0.tgz#39e47ed6d286d4a98f1948d8bab45dac17e4e2d4" - dependencies: - cosmiconfig "3.1.0" - -babel-plugin-emotion@^8.0.12: - version "8.0.12" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-8.0.12.tgz#2ed844001416b0ae2ff787a06b1804ec5f531c89" - dependencies: - "@babel/helper-module-imports" "7.0.0-beta.32" - babel-macros "^1.2.0" - babel-plugin-syntax-jsx "^6.18.0" - convert-source-map "^1.5.0" - emotion-utils "^8.0.12" - find-root "^1.1.0" - source-map "^0.5.7" - touch "^1.0.0" - -babel-plugin-syntax-jsx@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - -balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - -base64-js@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" - -big.js@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" - -bowser@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.6.0.tgz#37fc387b616cb6aef370dab4d6bd402b74c5c54d" - -bowser@^1.6.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.7.1.tgz#a4de8f18a1a0dc9531eb2a92a1521fb6a9ba96a5" - -bowser@^1.7.3: - version "1.8.1" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.8.1.tgz#49785777e7302febadb1a5b71d9a646520ed310d" - -brcast@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.1.tgz#6256a8349b20de9eed44257a9b24d71493cd48dd" - -browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.5: - version "1.7.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.5.tgz#eca4713897b51e444283241facf3985de49a9e2b" - dependencies: - caniuse-db "^1.0.30000624" - electron-to-chromium "^1.2.3" - -buffer@^5.0.3: - version "5.0.5" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.0.5.tgz#35c9393244a90aff83581063d16f0882cecc9418" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -caniuse-api@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.3.tgz#5018e674b51c393e4d50614275dc017e27c4a2a2" - dependencies: - browserslist "^1.0.1" - caniuse-db "^1.0.30000346" - lodash.memoize "^4.1.0" - lodash.uniq "^4.3.0" - -caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000624: - version "1.0.30000628" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000628.tgz#3d010e2a8e2537a8d135792e90e4f2ce0eb838cc" - -chalk@^1.1.0, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -clap@^1.0.9: - version "1.1.2" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.2.tgz#316545bf22229225a2cecaa6824cd2f56a9709ed" - dependencies: - chalk "^1.1.3" - -classnames@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" - -clone@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -coa@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" - dependencies: - q "^1.1.2" - -color-convert@^1.3.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" - dependencies: - color-name "^1.1.1" - -color-name@^1.0.0, color-name@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" - -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - dependencies: - color-name "^1.0.0" - -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" - -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" - -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - -convert-source-map@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" - -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - -cosmiconfig@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397" - dependencies: - is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^3.0.0" - require-from-string "^2.0.1" - -css-color-keywords@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" - -css-color-names@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - -css-in-js-utils@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-1.0.3.tgz#9ac7e02f763cf85d94017666565ed68a5b5f3215" - dependencies: - hyphenate-style-name "^1.0.2" - -css-in-js-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.0.tgz#5af1dd70f4b06b331f48d22a3d86e0786c0b9435" - dependencies: - hyphenate-style-name "^1.0.2" - -css-loader@^0.28.7: - version "0.28.7" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b" - dependencies: - babel-code-frame "^6.11.0" - css-selector-tokenizer "^0.7.0" - cssnano ">=2.6.1 <4" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash.camelcase "^4.3.0" - object-assign "^4.0.1" - postcss "^5.0.6" - postcss-modules-extract-imports "^1.0.0" - postcss-modules-local-by-default "^1.0.1" - postcss-modules-scope "^1.0.0" - postcss-modules-values "^1.1.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - -css-selector-tokenizer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - -css-selector-tokenizer@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - -css-to-react-native@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.0.3.tgz#7d3a11409ac283acef447a13d3bbd09980c68a4f" - dependencies: - css-color-keywords "^1.0.0" - fbjs "^0.8.5" - postcss-value-parser "^3.3.0" - -css-vendor@^0.3.8: - version "0.3.8" - resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa" - dependencies: - is-in-browser "^1.0.2" - -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - -"cssnano@>=2.6.1 <4": - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - -csso@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.1.tgz#4f8d91a156f2f1c2aebb40b8fb1b5eb83d94d3b9" - dependencies: - clap "^1.0.9" - source-map "^0.5.3" - -decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -electron-to-chromium@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.4.tgz#9751cbea89fa120bf88c226ba41eb8d0b6f1b597" - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - -emotion-utils@^8.0.12: - version "8.0.12" - resolved "https://registry.yarnpkg.com/emotion-utils/-/emotion-utils-8.0.12.tgz#5e0fd72db3008f26ce4f80b1972df08841df2168" - -emotion@^8.0.12: - version "8.0.12" - resolved "https://registry.yarnpkg.com/emotion/-/emotion-8.0.12.tgz#03de11ce26b1b2401c334b94d438652124c514c6" - dependencies: - babel-plugin-emotion "^8.0.12" - emotion-utils "^8.0.12" - stylis "^3.3.2" - stylis-rule-sheet "^0.0.5" - -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - dependencies: - iconv-lite "~0.4.13" - -error-ex@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" - dependencies: - is-arrayish "^0.2.1" - -escape-string-regexp@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -exenv@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" - -fast-deep-equal@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-0.1.0.tgz#5c6f4599aba6b333ee3342e2ed978672f1001f8d" - -fastparse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" - -fbjs@^0.8.12: - version "0.8.14" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.14.tgz#d1dbe2be254c35a91e09f31f9cd50a40b2a0ed1c" - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.9" - -fbjs@^0.8.16: - version "0.8.16" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.9" - -fbjs@^0.8.5, fbjs@^0.8.9: - version "0.8.12" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.9" - -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - -flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" - -function-bind@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" - -glamor@^2.20.40: - version "2.20.40" - resolved "https://registry.yarnpkg.com/glamor/-/glamor-2.20.40.tgz#f606660357b7cf18dface731ad1a2cfa93817f05" - dependencies: - fbjs "^0.8.12" - inline-style-prefixer "^3.0.6" - object-assign "^4.1.1" - prop-types "^15.5.10" - through "^2.3.8" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - -hoist-non-react-statics@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" - -hoist-non-react-statics@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0" - -html-comment-regex@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" - -hyphenate-style-name@^1.0.1, hyphenate-style-name@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b" - -iconv-lite@~0.4.13: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" - -icss-replace-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5" - -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - dependencies: - postcss "^6.0.1" - -ieee754@^1.1.4: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" - -ifvisible.js@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/ifvisible.js/-/ifvisible.js-1.0.6.tgz#52eb151ce89c56f15316226462e892d1f8451261" - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - -inline-style-prefixer@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-2.0.5.tgz#c153c7e88fd84fef5c602e95a8168b2770671fe7" - dependencies: - bowser "^1.0.0" - hyphenate-style-name "^1.0.1" - -inline-style-prefixer@^3.0.1, inline-style-prefixer@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.6.tgz#b27fe309b4168a31eaf38c8e8c60ab9e7c11731f" - dependencies: - bowser "^1.6.0" - css-in-js-utils "^1.0.3" - -inline-style-prefixer@^3.0.3: - version "3.0.8" - resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534" - dependencies: - bowser "^1.7.3" - css-in-js-utils "^2.0.0" - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - -is-function@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" - -is-in-browser@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.0.2.tgz#f688bea8f1e5aadc3244ebc870d188cfb9b613cf" - -is-in-browser@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - -is-plain-object@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.1.tgz#4d7ca539bc9db9b737b8acb612f2318ef92f294f" - dependencies: - isobject "^1.0.0" - -is-stream@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - dependencies: - html-comment-regex "^1.1.0" - -isobject@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-1.0.2.tgz#f0f9b8ce92dd540fa0740882e3835a2e022ec78a" - -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - -js-base64@^2.1.9: - version "2.1.9" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" - -js-tokens@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" - -js-yaml@^3.9.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jss-camel-case@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/jss-camel-case/-/jss-camel-case-6.0.0.tgz#7cf8453e395c31fed931d11efbc885edcd61132e" - -jss-compose@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/jss-compose/-/jss-compose-5.0.0.tgz#ce01b2e4521d65c37ea42cf49116e5f7ab596484" - dependencies: - warning "^3.0.0" - -jss-default-unit@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/jss-default-unit/-/jss-default-unit-8.0.2.tgz#cc1e889bae4c0b9419327b314ab1c8e2826890e6" - -jss-expand@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/jss-expand/-/jss-expand-5.1.0.tgz#b1ad74ec18631f34f65a2124fcfceb6400610e3d" - -jss-extend@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jss-extend/-/jss-extend-6.1.0.tgz#85f3d39944018e8f44b322c14fa316068aa7bb0b" - dependencies: - warning "^3.0.0" - -jss-global@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jss-global/-/jss-global-3.0.0.tgz#e19e5c91ab2b96353c227e30aa2cbd938cdaafa2" - -jss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jss-nested/-/jss-nested-6.0.1.tgz#ef992b79d6e8f63d939c4397b9d99b5cbbe824ca" - dependencies: - warning "^3.0.0" - -jss-preset-default@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jss-preset-default/-/jss-preset-default-4.0.1.tgz#822cecb87c27ff91633774422f4c221d61486b65" - dependencies: - jss-camel-case "^6.0.0" - jss-compose "^5.0.0" - jss-default-unit "^8.0.0" - jss-expand "^5.0.0" - jss-extend "^6.0.1" - jss-global "^3.0.0" - jss-nested "^6.0.1" - jss-props-sort "^6.0.0" - jss-template "^1.0.0" - jss-vendor-prefixer "^7.0.0" - -jss-props-sort@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/jss-props-sort/-/jss-props-sort-6.0.0.tgz#9105101a3b5071fab61e2d85ea74cc22e9b16323" - -jss-template@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jss-template/-/jss-template-1.0.0.tgz#4b874608706ddceecacdb5567e254aecb6ea69b3" - dependencies: - warning "^3.0.0" - -jss-vendor-prefixer@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz#0166729650015ef19d9f02437c73667231605c71" - dependencies: - css-vendor "^0.3.8" - -jss@^9.3.2: - version "9.4.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-9.4.0.tgz#fbfd1a63556c5afd5bfcffd98df3c50eb2614ed3" - dependencies: - is-in-browser "^1.1.3" - symbol-observable "^1.1.0" - warning "^3.0.0" - -loader-utils@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.0.2.tgz#a9f923c865a974623391a8602d031137fad74830" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - -lodash.memoize@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - -lodash.uniq@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - -lodash@^4.17.1, lodash@^4.17.4, lodash@^4.2.0: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -loose-envify@^1.0.0, loose-envify@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - dependencies: - js-tokens "^3.0.0" - -macaddress@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" - -marky@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.0.tgz#9617ed647bbbea8f45d19526da33dec70606df42" - -math-expression-evaluator@^1.2.14: - version "1.2.16" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -node-fetch@^1.0.1: - version "1.6.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - dependencies: - abbrev "1" - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - -normalize-url@^1.4.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.0.tgz#c2bb50035edee62cd81edb2d45da68dc25e3423e" - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -parse-json@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-3.0.0.tgz#fa6f47b18e23826ead32f263e744d0e1e847fb13" - dependencies: - error-ex "^1.3.1" - -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - dependencies: - postcss "^5.0.14" - -postcss-discard-duplicates@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.0.2.tgz#02be520e91571ffb10738766a981d5770989bb32" - dependencies: - postcss "^5.0.4" - -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - dependencies: - postcss "^5.0.14" - -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - dependencies: - postcss "^5.0.16" - -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" - -postcss-filter-plugins@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" - dependencies: - postcss "^5.0.4" - uniqid "^4.0.0" - -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - dependencies: - postcss "^5.0.4" - -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" - -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" - -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - -postcss-modules-extract-imports@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341" - dependencies: - postcss "^5.0.4" - -postcss-modules-local-by-default@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce" - dependencies: - css-selector-tokenizer "^0.6.0" - postcss "^5.0.4" - -postcss-modules-scope@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29" - dependencies: - css-selector-tokenizer "^0.6.0" - postcss "^5.0.4" - -postcss-modules-values@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1" - dependencies: - icss-replace-symbols "^1.0.2" - postcss "^5.0.14" - -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" - dependencies: - postcss "^5.0.5" - -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" - -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - dependencies: - postcss "^5.0.4" - -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" - -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" - -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" - -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.15: - version "5.2.15" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.15.tgz#a9e8685e50e06cc5b3fdea5297273246c26f5b30" - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.1: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.3.tgz#b7f565b3d956fbb8565ca7c1e239d0506e427d8b" - dependencies: - chalk "^1.1.3" - source-map "^0.5.6" - supports-color "^4.0.0" - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - -promise@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" - dependencies: - asap "~2.0.3" - -prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.5.9: - version "15.5.10" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" - dependencies: - fbjs "^0.8.9" - loose-envify "^1.3.1" - -prop-types@^15.6.0: - version "15.6.0" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.3.1" - object-assign "^4.1.1" - -q@^1.1.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" - -query-string@^4.1.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -radium@^0.19.6: - version "0.19.6" - resolved "https://registry.yarnpkg.com/radium/-/radium-0.19.6.tgz#b86721d08dbd303b061a4ae2ebb06cc6e335ae72" - dependencies: - array-find "^1.0.0" - exenv "^1.2.1" - inline-style-prefixer "^2.0.5" - prop-types "^15.5.8" - -react-jss@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/react-jss/-/react-jss-8.2.0.tgz#8440f08aef27d408ba31f63df09167ed22a5b99b" - dependencies: - hoist-non-react-statics "^2.3.1" - jss "^9.3.2" - jss-preset-default "^4.0.1" - prop-types "^15.6.0" - theming "^1.3.0" - -reactxp@^0.46.6: - version "0.46.6" - resolved "https://registry.yarnpkg.com/reactxp/-/reactxp-0.46.6.tgz#166a503a7147f3a1e29efc4469bda32603471a5f" - dependencies: - "@types/lodash" "^4.14.78" - "@types/react" "^16.0.0" - "@types/react-dom" "^16.0.0" - assert "^1.3.0" - ifvisible.js "^1.0.6" - lodash "^4.17.1" - prop-types "^15.5.9" - rebound "^0.0.13" - subscribableevent "^1.0.0" - synctasks "^0.3.0" - -rebound@^0.0.13: - version "0.0.13" - resolved "https://registry.yarnpkg.com/rebound/-/rebound-0.0.13.tgz#4a225254caf7da756797b19c5817bf7a7941fac1" - -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - -reduce-function-call@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" - dependencies: - balanced-match "^0.4.2" - -regenerate@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" - -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -require-from-string@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" - -sax@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" - -schema-utils@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" - dependencies: - ajv "^5.0.0" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" - -source-map@^0.5.3, source-map@^0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - -source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - -string-hash@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -style-loader@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.1.tgz#591ffc80bcefe268b77c5d9ebc0505d772619f85" - dependencies: - loader-utils "^1.0.2" - schema-utils "^0.3.0" - -styled-components@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-2.3.2.tgz#323d86cc9ac89f3fd233a2dfa0849da236f143e3" - dependencies: - buffer "^5.0.3" - css-to-react-native "^2.0.3" - fbjs "^0.8.9" - hoist-non-react-statics "^1.2.0" - is-plain-object "^2.0.1" - prop-types "^15.5.4" - stylis "^3.4.0" - supports-color "^3.2.3" - -styletron-client@^3.0.0-rc.5: - version "3.0.0-rc.5" - resolved "https://registry.yarnpkg.com/styletron-client/-/styletron-client-3.0.0-rc.5.tgz#275ca0b5f971d244f0e42079ad570be9c31a2a70" - dependencies: - styletron-core "^3.0.0-rc.3" - -styletron-core@^3.0.0-rc.3: - version "3.0.0-rc.3" - resolved "https://registry.yarnpkg.com/styletron-core/-/styletron-core-3.0.0-rc.3.tgz#9468e275d9085d2e5d6d6468cc6d8733dbfa3cba" - -styletron-utils@^3.0.0-rc.3: - version "3.0.0-rc.3" - resolved "https://registry.yarnpkg.com/styletron-utils/-/styletron-utils-3.0.0-rc.3.tgz#21fef2099f1c368e6ff2b8f76bf7a64bb547b760" - dependencies: - inline-style-prefixer "^3.0.3" - -stylis-rule-sheet@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.5.tgz#ebae935cc1f6fb31b9b62dba47f2ea8b833dad9f" - -stylis@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.0.tgz#55c6530ebceeca5976d54fb4adc67578afee828d" - -stylis@^3.4.0: - version "3.4.5" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.5.tgz#d7b9595fc18e7b9c8775eca8270a9a1d3e59806e" - -subscribableevent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/subscribableevent/-/subscribableevent-1.0.0.tgz#bde9500fa9009c7740c924109bac6119cd9898e6" - dependencies: - "@types/lodash" "^4.14.64" - lodash "^4.17.4" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -supports-color@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.0.0.tgz#33a7c680aa512c9d03ef929cacbb974d203d2790" - dependencies: - has-flag "^2.0.0" - -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - -symbol-observable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.1.0.tgz#5c68fd8d54115d9dfb72a84720549222e8db9b32" - -synctasks@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/synctasks/-/synctasks-0.3.1.tgz#1f9012b23792ad775ba2693e0cafcfcd65b80d97" - -theming@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/theming/-/theming-1.3.0.tgz#286d5bae80be890d0adc645e5ca0498723725bdc" - dependencies: - brcast "^3.0.1" - is-function "^1.0.1" - is-plain-object "^2.0.1" - prop-types "^15.5.8" - -through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - -touch@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-1.0.0.tgz#449cbe2dbae5a8c8038e30d71fa0ff464947c4de" - dependencies: - nopt "~1.0.10" - -ua-parser-js@^0.7.9: - version "0.7.12" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - -uniqid@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" - dependencies: - macaddress "^0.2.8" - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - -vendors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" - -warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - dependencies: - loose-envify "^1.0.0" - -whatwg-fetch@>=0.10.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.2.tgz#fe294d1d89e36c5be8b3195057f2e4bc74fc980e" - -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" diff --git a/lerna.json b/lerna.json new file mode 100644 index 000000000..c8f6bdc89 --- /dev/null +++ b/lerna.json @@ -0,0 +1,10 @@ +{ + "lerna": "2.5.1", + "version": "0.2.2", + "npmClient": "yarn", + "useWorkspaces": true, + "packages": [ + "packages/*", + "website" + ] +} diff --git a/package.json b/package.json index 56aba91d7..65d328a15 100644 --- a/package.json +++ b/package.json @@ -1,85 +1,28 @@ { - "name": "react-native-web", - "version": "0.2.2", - "description": "React Native for Web", - "main": "dist/index.js", - "files": [ - "babel", - "dist", - "jest", - "src", - "!**/__tests__" - ], + "private": true, + "name": "react-native-web-monorepo", "scripts": { - "benchmark": "cd benchmarks && yarn && webpack && open index.html", - "build": "yarn clean-dist && yarn compile && webpack --config webpack.config.js --sort-assets-by --progress", - "clean-dist": "del ./dist && mkdir dist", - "compile": "babel src -d dist --ignore *-test.js", - "docs:build": "cd docs && yarn build", - "docs:start": "cd docs && yarn && yarn start", - "docs:release": "cd docs && yarn release", + "benchmark": "cd packages/benchmarks && yarn benchmark", + "clean": "del ./packages/*/dist", + "compile": "yarn clean && cd packages/react-native-web && babel src --optional runtime --out-dir dist --ignore \"__tests__\"", + "docs:start": "cd website && yarn start", + "docs:release": "cd website && yarn release", "flow": "flow", - "fmt": "find babel benchmarks docs jest src -name '*.js' | grep -v -E '(node_modules|dist|vendor)' | xargs yarn fmt:cmd", + "fmt": "find packages scripts types website -name '*.js' | grep -v -E '(node_modules|dist|vendor)' | xargs yarn fmt:cmd", "fmt:cmd": "prettier --print-width=100 --single-quote --write", - "jest": "jest", - "jest:watch": "yarn test --watch", - "lint": "yarn lint:cmd babel benchmarks docs jest src", - "lint:cmd": "eslint --ignore-path .gitignore --ignore-pattern '/src/vendor/*' --fix", + "jest": "jest --config ./scripts/jest/config.js", + "lint": "yarn lint:check --fix", + "lint:check": "yarn lint:cmd packages scripts website", + "lint:cmd": "eslint --ignore-path .gitignore --ignore-pattern 'packages/**/vendor/*'", "precommit": "lint-staged", - "release": "yarn lint && yarn test && yarn build && npm publish", - "test": "flow && jest" - }, - "babel": { - "presets": [ - "react-native" - ], - "plugins": [ - [ - "transform-react-remove-prop-types", - { - "mode": "wrap" - } - ] - ] - }, - "jest": { - "testEnvironment": "jsdom", - "timers": "fake", - "setupFiles": [ - "raf/polyfill" - ], - "setupTestFrameworkScriptFile": "/jest-setup-framework.js", - "snapshotSerializers": [ - "enzyme-to-json/serializer" - ] - }, - "lint-staged": { - "**/*.js": [ - "fmt:cmd", - "git update-index --again", - "lint:cmd" - ] - }, - "dependencies": { - "array-find-index": "^1.0.2", - "babel-runtime": "^6.26.0", - "create-react-class": "^15.6.2", - "debounce": "^1.1.0", - "deep-assign": "^2.0.0", - "fbjs": "^0.8.16", - "hyphenate-style-name": "^1.0.2", - "inline-style-prefixer": "^3.0.8", - "normalize-css-color": "^1.0.2", - "prop-types": "^15.6.0", - "react-art": "^16.2.0", - "react-timer-mixin": "^0.13.3" + "release": "yarn test && yarn build && node ./scripts/release/publish.js && yarn docs:release", + "test": "yarn flow && yarn lint:check && yarn jest" }, "devDependencies": { "babel-cli": "^6.26.0", "babel-core": "^6.26.0", "babel-eslint": "^8.0.3", "babel-loader": "^7.1.2", - "babel-plugin-tester": "^4.0.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.10", "babel-preset-react-native": "^4.0.0", "caniuse-api": "^2.0.0", @@ -91,36 +34,24 @@ "eslint-config-prettier": "^2.9.0", "eslint-plugin-promise": "^3.6.0", "eslint-plugin-react": "^7.5.1", - "file-loader": "^1.1.5", - "flow-bin": "^0.60.1", + "flow-bin": "^0.61.0", "jest": "^21.2.1", + "lerna": "^2.5.1", "lint-staged": "^4.1.3", "prettier": "^1.8.2", "raf": "^3.4.0", "react": "^16.2.0", "react-dom": "^16.2.0", - "react-test-renderer": "^16.2.0", - "url-loader": "^0.6.2", - "webpack": "^3.9.1", - "webpack-bundle-analyzer": "^2.9.1" + "react-test-renderer": "^16.2.0" }, - "peerDependencies": { - "react": "16.x.x", - "react-dom": "16.x.x" + "workspaces": ["packages/*", "website"], + "lint-staged": { + "**/*.js": [ + "fmt:cmd", + "git update-index --again", + "lint:cmd" + ] }, "author": "Nicolas Gallagher", - "license": "BSD-3-Clause", - "repository": { - "type": "git", - "url": "git://github.com/necolas/react-native-web.git" - }, - "tags": [ - "react" - ], - "keywords": [ - "react", - "react-component", - "react-native", - "web" - ] + "license": "BSD-3-Clause" } diff --git a/packages/babel-plugin-react-native-web/README.md b/packages/babel-plugin-react-native-web/README.md new file mode 100644 index 000000000..5571712d4 --- /dev/null +++ b/packages/babel-plugin-react-native-web/README.md @@ -0,0 +1,39 @@ +# babel-plugin-react-native-web + +A Babel plugin that will alias `react-native` to `react-native-web` and exclude +any modules not required by your app (keeping bundle size down). + +## Installation + +``` +yarn add --dev babel-plugin-react-native-web +``` + +## Usage + +**.babelrc** + +``` +{ + "plugins": ["react-native-web"] +} +``` + +## Example + +NOTE: `react-native-web` internal paths are _not stable_ and you must not rely +on them. Always use the Babel plugin to optimize your build. What follows is an +example of the rewrite performed by the plugin. + +**Before** + +```js +import { StyleSheet, View } from 'react-native'; +``` + +**After** + +```js +import StyleSheet from 'react-native-web/dist/apis/StyleSheet'; +import View from 'react-native-web/dist/components/View'; +``` diff --git a/packages/babel-plugin-react-native-web/index.js b/packages/babel-plugin-react-native-web/index.js new file mode 100644 index 000000000..3fc779821 --- /dev/null +++ b/packages/babel-plugin-react-native-web/index.js @@ -0,0 +1 @@ +module.exports = require('./src'); diff --git a/packages/babel-plugin-react-native-web/package.json b/packages/babel-plugin-react-native-web/package.json new file mode 100644 index 000000000..68a71652a --- /dev/null +++ b/packages/babel-plugin-react-native-web/package.json @@ -0,0 +1,15 @@ +{ + "name": "babel-plugin-react-native-web", + "version": "0.2.2", + "description": "Babel plugin for React Native for Web", + "main": "index.js", + "devDependencies": { + "babel-plugin-tester": "^4.0.0" + }, + "author": "Nicolas Gallagher", + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/necolas/react-native-web.git" + } +} diff --git a/babel/__tests__/__snapshots__/index-test.js.snap b/packages/babel-plugin-react-native-web/src/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from babel/__tests__/__snapshots__/index-test.js.snap rename to packages/babel-plugin-react-native-web/src/__tests__/__snapshots__/index-test.js.snap diff --git a/babel/__tests__/index-test.js b/packages/babel-plugin-react-native-web/src/__tests__/index-test.js similarity index 100% rename from babel/__tests__/index-test.js rename to packages/babel-plugin-react-native-web/src/__tests__/index-test.js diff --git a/babel/index.js b/packages/babel-plugin-react-native-web/src/index.js similarity index 100% rename from babel/index.js rename to packages/babel-plugin-react-native-web/src/index.js diff --git a/benchmarks/README.md b/packages/benchmarks/README.md similarity index 90% rename from benchmarks/README.md rename to packages/benchmarks/README.md index 3f661e892..941b37cd8 100644 --- a/benchmarks/README.md +++ b/packages/benchmarks/README.md @@ -1,10 +1,9 @@ -# Performance +# benchmarks -To run these benchmarks from the root of the project: +To run these benchmarks: ``` yarn benchmark -open ./benchmarks/index.html ``` Append `?fastest` to the URL to include the fastest "other libraries", and @@ -25,7 +24,7 @@ Typical render timings*: mean ± two standard deviations. | Implementation | Deep tree (ms) | Wide tree (ms) | Tweets (ms) | | :--- | ---: | ---: | ---: | | `css-modules` | `80.47` `±25.13` | `144.87` `±32.70` | | -| `react-native-web@0.2.1` | `88.68` `±28.78` | `178.17` `±39.90` | `13.78` `±2.90ms` | +| `react-native-web@0.2.2` | `88.68` `±28.78` | `178.17` `±39.90` | `13.78` `±2.90ms` | Other libraries diff --git a/benchmarks/benchmark.js b/packages/benchmarks/benchmark.js similarity index 100% rename from benchmarks/benchmark.js rename to packages/benchmarks/benchmark.js diff --git a/benchmarks/createRenderBenchmark.js b/packages/benchmarks/createRenderBenchmark.js similarity index 100% rename from benchmarks/createRenderBenchmark.js rename to packages/benchmarks/createRenderBenchmark.js diff --git a/benchmarks/index.html b/packages/benchmarks/index.html similarity index 100% rename from benchmarks/index.html rename to packages/benchmarks/index.html diff --git a/benchmarks/index.js b/packages/benchmarks/index.js similarity index 100% rename from benchmarks/index.js rename to packages/benchmarks/index.js diff --git a/benchmarks/package.json b/packages/benchmarks/package.json similarity index 59% rename from benchmarks/package.json rename to packages/benchmarks/package.json index f707ba507..52835828a 100644 --- a/benchmarks/package.json +++ b/packages/benchmarks/package.json @@ -1,6 +1,10 @@ { - "name": "benchmarks", "private": true, + "name": "benchmarks", + "version": "0.2.2", + "scripts": { + "benchmark": "webpack --config ./webpack.config.js && open index.html" + }, "dependencies": { "aphrodite": "^1.2.5", "classnames": "^2.2.5", @@ -8,7 +12,10 @@ "glamor": "^2.20.40", "marky": "^1.2.0", "radium": "^0.19.6", + "react": "^16.2.0", + "react-dom": "^16.2.0", "react-jss": "^8.2.0", + "react-native-web": "^0.2.2", "reactxp": "^0.46.6", "styled-components": "^2.3.2", "styletron-client": "^3.0.0-rc.5", @@ -16,6 +23,8 @@ }, "devDependencies": { "css-loader": "^0.28.7", - "style-loader": "^0.19.1" + "style-loader": "^0.19.1", + "webpack": "^3.10.0", + "webpack-bundle-analyzer": "^2.9.1" } } diff --git a/benchmarks/src/aphrodite.js b/packages/benchmarks/src/aphrodite.js similarity index 100% rename from benchmarks/src/aphrodite.js rename to packages/benchmarks/src/aphrodite.js diff --git a/benchmarks/src/components/AppText/index.js b/packages/benchmarks/src/components/AppText/index.js similarity index 100% rename from benchmarks/src/components/AppText/index.js rename to packages/benchmarks/src/components/AppText/index.js diff --git a/benchmarks/src/components/AspectRatio/index.js b/packages/benchmarks/src/components/AspectRatio/index.js similarity index 100% rename from benchmarks/src/components/AspectRatio/index.js rename to packages/benchmarks/src/components/AspectRatio/index.js diff --git a/benchmarks/src/components/Box/aphrodite.js b/packages/benchmarks/src/components/Box/aphrodite.js similarity index 100% rename from benchmarks/src/components/Box/aphrodite.js rename to packages/benchmarks/src/components/Box/aphrodite.js diff --git a/benchmarks/src/components/Box/css-modules.js b/packages/benchmarks/src/components/Box/css-modules.js similarity index 100% rename from benchmarks/src/components/Box/css-modules.js rename to packages/benchmarks/src/components/Box/css-modules.js diff --git a/benchmarks/src/components/Box/emotion.js b/packages/benchmarks/src/components/Box/emotion.js similarity index 100% rename from benchmarks/src/components/Box/emotion.js rename to packages/benchmarks/src/components/Box/emotion.js diff --git a/benchmarks/src/components/Box/glamor.js b/packages/benchmarks/src/components/Box/glamor.js similarity index 100% rename from benchmarks/src/components/Box/glamor.js rename to packages/benchmarks/src/components/Box/glamor.js diff --git a/benchmarks/src/components/Box/jss.js b/packages/benchmarks/src/components/Box/jss.js similarity index 100% rename from benchmarks/src/components/Box/jss.js rename to packages/benchmarks/src/components/Box/jss.js diff --git a/benchmarks/src/components/Box/radium.js b/packages/benchmarks/src/components/Box/radium.js similarity index 100% rename from benchmarks/src/components/Box/radium.js rename to packages/benchmarks/src/components/Box/radium.js diff --git a/benchmarks/src/components/Box/react-native.js b/packages/benchmarks/src/components/Box/react-native.js similarity index 100% rename from benchmarks/src/components/Box/react-native.js rename to packages/benchmarks/src/components/Box/react-native.js diff --git a/benchmarks/src/components/Box/reactxp.js b/packages/benchmarks/src/components/Box/reactxp.js similarity index 100% rename from benchmarks/src/components/Box/reactxp.js rename to packages/benchmarks/src/components/Box/reactxp.js diff --git a/benchmarks/src/components/Box/styled-components.js b/packages/benchmarks/src/components/Box/styled-components.js similarity index 100% rename from benchmarks/src/components/Box/styled-components.js rename to packages/benchmarks/src/components/Box/styled-components.js diff --git a/benchmarks/src/components/Box/styles.css b/packages/benchmarks/src/components/Box/styles.css similarity index 100% rename from benchmarks/src/components/Box/styles.css rename to packages/benchmarks/src/components/Box/styles.css diff --git a/benchmarks/src/components/Box/styletron.js b/packages/benchmarks/src/components/Box/styletron.js similarity index 100% rename from benchmarks/src/components/Box/styletron.js rename to packages/benchmarks/src/components/Box/styletron.js diff --git a/benchmarks/src/components/GridView/index.js b/packages/benchmarks/src/components/GridView/index.js similarity index 100% rename from benchmarks/src/components/GridView/index.js rename to packages/benchmarks/src/components/GridView/index.js diff --git a/benchmarks/src/components/Icons/DirectMessage.js b/packages/benchmarks/src/components/Icons/DirectMessage.js similarity index 100% rename from benchmarks/src/components/Icons/DirectMessage.js rename to packages/benchmarks/src/components/Icons/DirectMessage.js diff --git a/benchmarks/src/components/Icons/Heart.js b/packages/benchmarks/src/components/Icons/Heart.js similarity index 100% rename from benchmarks/src/components/Icons/Heart.js rename to packages/benchmarks/src/components/Icons/Heart.js diff --git a/benchmarks/src/components/Icons/Reply.js b/packages/benchmarks/src/components/Icons/Reply.js similarity index 100% rename from benchmarks/src/components/Icons/Reply.js rename to packages/benchmarks/src/components/Icons/Reply.js diff --git a/benchmarks/src/components/Icons/Retweet.js b/packages/benchmarks/src/components/Icons/Retweet.js similarity index 100% rename from benchmarks/src/components/Icons/Retweet.js rename to packages/benchmarks/src/components/Icons/Retweet.js diff --git a/benchmarks/src/components/Icons/styles.js b/packages/benchmarks/src/components/Icons/styles.js similarity index 100% rename from benchmarks/src/components/Icons/styles.js rename to packages/benchmarks/src/components/Icons/styles.js diff --git a/benchmarks/src/components/NestedTree/index.js b/packages/benchmarks/src/components/NestedTree/index.js similarity index 100% rename from benchmarks/src/components/NestedTree/index.js rename to packages/benchmarks/src/components/NestedTree/index.js diff --git a/benchmarks/src/components/Tweet/index.js b/packages/benchmarks/src/components/Tweet/index.js similarity index 100% rename from benchmarks/src/components/Tweet/index.js rename to packages/benchmarks/src/components/Tweet/index.js diff --git a/benchmarks/src/components/TweetAction/index.js b/packages/benchmarks/src/components/TweetAction/index.js similarity index 100% rename from benchmarks/src/components/TweetAction/index.js rename to packages/benchmarks/src/components/TweetAction/index.js diff --git a/benchmarks/src/components/TweetActionsBar/index.js b/packages/benchmarks/src/components/TweetActionsBar/index.js similarity index 100% rename from benchmarks/src/components/TweetActionsBar/index.js rename to packages/benchmarks/src/components/TweetActionsBar/index.js diff --git a/benchmarks/src/components/TweetText/index.js b/packages/benchmarks/src/components/TweetText/index.js similarity index 100% rename from benchmarks/src/components/TweetText/index.js rename to packages/benchmarks/src/components/TweetText/index.js diff --git a/benchmarks/src/components/TweetTextPart/index.js b/packages/benchmarks/src/components/TweetTextPart/index.js similarity index 100% rename from benchmarks/src/components/TweetTextPart/index.js rename to packages/benchmarks/src/components/TweetTextPart/index.js diff --git a/benchmarks/src/components/UserAvatar/index.js b/packages/benchmarks/src/components/UserAvatar/index.js similarity index 100% rename from benchmarks/src/components/UserAvatar/index.js rename to packages/benchmarks/src/components/UserAvatar/index.js diff --git a/benchmarks/src/components/UserNames/index.js b/packages/benchmarks/src/components/UserNames/index.js similarity index 100% rename from benchmarks/src/components/UserNames/index.js rename to packages/benchmarks/src/components/UserNames/index.js diff --git a/benchmarks/src/components/View/aphrodite.js b/packages/benchmarks/src/components/View/aphrodite.js similarity index 100% rename from benchmarks/src/components/View/aphrodite.js rename to packages/benchmarks/src/components/View/aphrodite.js diff --git a/benchmarks/src/components/View/css-modules.js b/packages/benchmarks/src/components/View/css-modules.js similarity index 100% rename from benchmarks/src/components/View/css-modules.js rename to packages/benchmarks/src/components/View/css-modules.js diff --git a/benchmarks/src/components/View/emotion.js b/packages/benchmarks/src/components/View/emotion.js similarity index 100% rename from benchmarks/src/components/View/emotion.js rename to packages/benchmarks/src/components/View/emotion.js diff --git a/benchmarks/src/components/View/glamor.js b/packages/benchmarks/src/components/View/glamor.js similarity index 100% rename from benchmarks/src/components/View/glamor.js rename to packages/benchmarks/src/components/View/glamor.js diff --git a/benchmarks/src/components/View/jss.js b/packages/benchmarks/src/components/View/jss.js similarity index 100% rename from benchmarks/src/components/View/jss.js rename to packages/benchmarks/src/components/View/jss.js diff --git a/benchmarks/src/components/View/radium.js b/packages/benchmarks/src/components/View/radium.js similarity index 100% rename from benchmarks/src/components/View/radium.js rename to packages/benchmarks/src/components/View/radium.js diff --git a/benchmarks/src/components/View/styled-components.js b/packages/benchmarks/src/components/View/styled-components.js similarity index 100% rename from benchmarks/src/components/View/styled-components.js rename to packages/benchmarks/src/components/View/styled-components.js diff --git a/benchmarks/src/components/View/styles.css b/packages/benchmarks/src/components/View/styles.css similarity index 100% rename from benchmarks/src/components/View/styles.css rename to packages/benchmarks/src/components/View/styles.css diff --git a/benchmarks/src/components/View/styletron.js b/packages/benchmarks/src/components/View/styletron.js similarity index 100% rename from benchmarks/src/components/View/styletron.js rename to packages/benchmarks/src/components/View/styletron.js diff --git a/benchmarks/src/components/theme.js b/packages/benchmarks/src/components/theme.js similarity index 100% rename from benchmarks/src/components/theme.js rename to packages/benchmarks/src/components/theme.js diff --git a/benchmarks/src/css-modules.js b/packages/benchmarks/src/css-modules.js similarity index 100% rename from benchmarks/src/css-modules.js rename to packages/benchmarks/src/css-modules.js diff --git a/benchmarks/src/emotion.js b/packages/benchmarks/src/emotion.js similarity index 100% rename from benchmarks/src/emotion.js rename to packages/benchmarks/src/emotion.js diff --git a/benchmarks/src/glamor.js b/packages/benchmarks/src/glamor.js similarity index 100% rename from benchmarks/src/glamor.js rename to packages/benchmarks/src/glamor.js diff --git a/benchmarks/src/jss.js b/packages/benchmarks/src/jss.js similarity index 100% rename from benchmarks/src/jss.js rename to packages/benchmarks/src/jss.js diff --git a/benchmarks/src/radium.js b/packages/benchmarks/src/radium.js similarity index 100% rename from benchmarks/src/radium.js rename to packages/benchmarks/src/radium.js diff --git a/benchmarks/src/react-native.js b/packages/benchmarks/src/react-native.js similarity index 100% rename from benchmarks/src/react-native.js rename to packages/benchmarks/src/react-native.js diff --git a/benchmarks/src/reactxp.js b/packages/benchmarks/src/reactxp.js similarity index 100% rename from benchmarks/src/reactxp.js rename to packages/benchmarks/src/reactxp.js diff --git a/benchmarks/src/styled-components.js b/packages/benchmarks/src/styled-components.js similarity index 100% rename from benchmarks/src/styled-components.js rename to packages/benchmarks/src/styled-components.js diff --git a/benchmarks/src/styletron.js b/packages/benchmarks/src/styletron.js similarity index 100% rename from benchmarks/src/styletron.js rename to packages/benchmarks/src/styletron.js diff --git a/benchmarks/tests/renderDeepTree.js b/packages/benchmarks/tests/renderDeepTree.js similarity index 100% rename from benchmarks/tests/renderDeepTree.js rename to packages/benchmarks/tests/renderDeepTree.js diff --git a/benchmarks/tests/renderTweet.js b/packages/benchmarks/tests/renderTweet.js similarity index 100% rename from benchmarks/tests/renderTweet.js rename to packages/benchmarks/tests/renderTweet.js diff --git a/benchmarks/tests/renderWideTree.js b/packages/benchmarks/tests/renderWideTree.js similarity index 100% rename from benchmarks/tests/renderWideTree.js rename to packages/benchmarks/tests/renderWideTree.js diff --git a/benchmarks/webpack.config.js b/packages/benchmarks/webpack.config.js similarity index 95% rename from benchmarks/webpack.config.js rename to packages/benchmarks/webpack.config.js index e8b920ba7..9add3251f 100644 --- a/benchmarks/webpack.config.js +++ b/packages/benchmarks/webpack.config.js @@ -51,7 +51,7 @@ module.exports = { ], resolve: { alias: { - 'react-native': path.join(__dirname, '../src') + 'react-native': 'react-native-web' } } }; diff --git a/packages/react-native-web/README.md b/packages/react-native-web/README.md new file mode 100644 index 000000000..ca64689f5 --- /dev/null +++ b/packages/react-native-web/README.md @@ -0,0 +1,127 @@ +# React Native for Web + +[![Build Status][travis-image]][travis-url] +[![npm version][npm-image]][npm-url] + +"React Native for Web" brings the platform-agnostic Components and APIs of +[React Native][react-native-url] to the Web. + +Browse the [interactive +documentation](https://necolas.github.io/react-native-web/storybook/) or [try +it out](https://glitch.com/edit/#!/react-native-web-playground) on Glitch. + +## Features + +* Interoperability with ReactDOM components. +* Native-like touch handling. +* Built-in integration with web accessibility APIs. +* Built-in support for LTR and RTL layouts. +* Built-in expressive and reliable subset of CSS. +* Optimized, vendor-prefixed CSS with [good runtime performance](benchmarks/README.md). +* Server-side rendering of HTML and critical CSS. +* Browser support: Chrome, Firefox, Safari >= 7, IE 10, Edge. + +## Quick start + +Install in your existing app using `yarn` or `npm`: + +``` +yarn add react react-dom react-native-web +yarn add --dev babel-plugin-react-native-web +``` + +Add the `react-native-web` plugin to your Babel configuration. This will +alias `react-native` to `react-native-web` and exclude any modules not required +by the app. + +```json +{ + "presets": [ + "react-native" + ], + "plugins": [ + "react-native-web" + ] +} +``` + +(For React/ReactDOM 15.4 – 15.6 support, install `react-native-web@<0.1.0`) + +See the [Getting Started](docs/guides/getting-started.md) guide for more details. + +## Documentation + +The [interactive +documentation](https://necolas.github.io/react-native-web/storybook/) shows all +the supported APIs and Components. + +Guides: + +* [Getting started](docs/guides/getting-started.md) +* [Style](docs/guides/style.md) +* [Accessibility](docs/guides/accessibility.md) +* [Direct manipulation](docs/guides/direct-manipulation.md) +* [Internationalization](docs/guides/internationalization.md) +* [Advanced use](docs/guides/advanced.md) +* [Known issues](docs/guides/known-issues.md) + +## Example code + +```js +import React from 'react' +import { AppRegistry, Image, StyleSheet, Text, View } from 'react-native' + +// Components +const Card = ({ children }) => {children} +const Title = ({ children }) => {children} +const Photo = ({ uri }) => +const App = () => ( + + App Card + + +) + +// Styles +const styles = StyleSheet.create({ + card: { + flexGrow: 1, + justifyContent: 'center' + }, + title: { + fontSize: '1.25rem', + fontWeight: 'bold' + }, + image: { + height: 40, + marginVertical: 10, + width: 40 + } +}) + +// App registration and rendering +AppRegistry.registerComponent('MyApp', () => App) +AppRegistry.runApplication('MyApp', { rootTag: document.getElementById('react-root') }) +``` + +## Starter kits + +* [Glitch](https://glitch.com/edit/#!/react-native-web-playground) +* [create-react-app](https://github.com/facebookincubator/create-react-app) + +## Related projects + +* [react-primitives](https://github.com/lelandrichardson/react-primitives/) +* [react-sketchapp](https://github.com/airbnb/react-sketchapp) +* [reactxp](https://github.com/microsoft/reactxp) +* [react-native-web-player](https://github.com/dabbott/react-native-web-player) + +## License + +React Native for Web is [BSD licensed](LICENSE). + +[npm-image]: https://badge.fury.io/js/react-native-web.svg +[npm-url]: https://yarnpkg.com/en/package/react-native-web +[react-native-url]: https://facebook.github.io/react-native/ +[travis-image]: https://travis-ci.org/necolas/react-native-web.svg?branch=master +[travis-url]: https://travis-ci.org/necolas/react-native-web diff --git a/jest/__tests__/__snapshots__/serializer-test.js.snap b/packages/react-native-web/jest/__tests__/__snapshots__/serializer-test.js.snap similarity index 100% rename from jest/__tests__/__snapshots__/serializer-test.js.snap rename to packages/react-native-web/jest/__tests__/__snapshots__/serializer-test.js.snap diff --git a/jest/__tests__/serializer-test.js b/packages/react-native-web/jest/__tests__/serializer-test.js similarity index 100% rename from jest/__tests__/serializer-test.js rename to packages/react-native-web/jest/__tests__/serializer-test.js diff --git a/jest/createSerializer.js b/packages/react-native-web/jest/createSerializer.js similarity index 100% rename from jest/createSerializer.js rename to packages/react-native-web/jest/createSerializer.js diff --git a/jest/serializer.js b/packages/react-native-web/jest/serializer.js similarity index 100% rename from jest/serializer.js rename to packages/react-native-web/jest/serializer.js diff --git a/packages/react-native-web/package.json b/packages/react-native-web/package.json new file mode 100644 index 000000000..0f85d3a4c --- /dev/null +++ b/packages/react-native-web/package.json @@ -0,0 +1,45 @@ +{ + "name": "react-native-web", + "version": "0.2.2", + "description": "React Native for Web", + "main": "dist/index.js", + "files": [ + "dist", + "jest", + "src", + "!**/__tests__" + ], + "dependencies": { + "array-find-index": "^1.0.2", + "babel-runtime": "^6.26.0", + "create-react-class": "^15.6.2", + "debounce": "^1.1.0", + "deep-assign": "^2.0.0", + "fbjs": "^0.8.16", + "hyphenate-style-name": "^1.0.2", + "inline-style-prefixer": "^3.0.8", + "normalize-css-color": "^1.0.2", + "prop-types": "^15.6.0", + "react-art": "^16.2.0", + "react-timer-mixin": "^0.13.3" + }, + "peerDependencies": { + "react": "16.x.x", + "react-dom": "16.x.x" + }, + "author": "Nicolas Gallagher", + "license": "BSD-3-Clause", + "repository": { + "type": "git", + "url": "git://github.com/necolas/react-native-web.git" + }, + "tags": [ + "react" + ], + "keywords": [ + "react", + "react-component", + "react-native", + "web" + ] +} diff --git a/src/apis/Animated/index.js b/packages/react-native-web/src/apis/Animated/index.js similarity index 100% rename from src/apis/Animated/index.js rename to packages/react-native-web/src/apis/Animated/index.js diff --git a/src/apis/AppRegistry/AppContainer.js b/packages/react-native-web/src/apis/AppRegistry/AppContainer.js similarity index 100% rename from src/apis/AppRegistry/AppContainer.js rename to packages/react-native-web/src/apis/AppRegistry/AppContainer.js diff --git a/src/apis/AppRegistry/__tests__/__snapshots__/renderApplication-test.js.snap b/packages/react-native-web/src/apis/AppRegistry/__tests__/__snapshots__/renderApplication-test.js.snap similarity index 100% rename from src/apis/AppRegistry/__tests__/__snapshots__/renderApplication-test.js.snap rename to packages/react-native-web/src/apis/AppRegistry/__tests__/__snapshots__/renderApplication-test.js.snap diff --git a/src/apis/AppRegistry/__tests__/renderApplication-test.js b/packages/react-native-web/src/apis/AppRegistry/__tests__/renderApplication-test.js similarity index 100% rename from src/apis/AppRegistry/__tests__/renderApplication-test.js rename to packages/react-native-web/src/apis/AppRegistry/__tests__/renderApplication-test.js diff --git a/src/apis/AppRegistry/index.js b/packages/react-native-web/src/apis/AppRegistry/index.js similarity index 100% rename from src/apis/AppRegistry/index.js rename to packages/react-native-web/src/apis/AppRegistry/index.js diff --git a/src/apis/AppRegistry/renderApplication.js b/packages/react-native-web/src/apis/AppRegistry/renderApplication.js similarity index 100% rename from src/apis/AppRegistry/renderApplication.js rename to packages/react-native-web/src/apis/AppRegistry/renderApplication.js diff --git a/src/apis/AppState/__tests__/index-test.js b/packages/react-native-web/src/apis/AppState/__tests__/index-test.js similarity index 100% rename from src/apis/AppState/__tests__/index-test.js rename to packages/react-native-web/src/apis/AppState/__tests__/index-test.js diff --git a/src/apis/AppState/index.js b/packages/react-native-web/src/apis/AppState/index.js similarity index 100% rename from src/apis/AppState/index.js rename to packages/react-native-web/src/apis/AppState/index.js diff --git a/src/apis/AsyncStorage/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/apis/AsyncStorage/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from src/apis/AsyncStorage/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/apis/AsyncStorage/__tests__/__snapshots__/index-test.js.snap diff --git a/src/apis/AsyncStorage/__tests__/index-test.js b/packages/react-native-web/src/apis/AsyncStorage/__tests__/index-test.js similarity index 100% rename from src/apis/AsyncStorage/__tests__/index-test.js rename to packages/react-native-web/src/apis/AsyncStorage/__tests__/index-test.js diff --git a/src/apis/AsyncStorage/index.js b/packages/react-native-web/src/apis/AsyncStorage/index.js similarity index 100% rename from src/apis/AsyncStorage/index.js rename to packages/react-native-web/src/apis/AsyncStorage/index.js diff --git a/src/apis/BackHandler/index.js b/packages/react-native-web/src/apis/BackHandler/index.js similarity index 100% rename from src/apis/BackHandler/index.js rename to packages/react-native-web/src/apis/BackHandler/index.js diff --git a/src/apis/Clipboard/index.js b/packages/react-native-web/src/apis/Clipboard/index.js similarity index 100% rename from src/apis/Clipboard/index.js rename to packages/react-native-web/src/apis/Clipboard/index.js diff --git a/src/apis/Dimensions/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/apis/Dimensions/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from src/apis/Dimensions/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/apis/Dimensions/__tests__/__snapshots__/index-test.js.snap diff --git a/src/apis/Dimensions/__tests__/index-test.js b/packages/react-native-web/src/apis/Dimensions/__tests__/index-test.js similarity index 100% rename from src/apis/Dimensions/__tests__/index-test.js rename to packages/react-native-web/src/apis/Dimensions/__tests__/index-test.js diff --git a/src/apis/Dimensions/index.js b/packages/react-native-web/src/apis/Dimensions/index.js similarity index 100% rename from src/apis/Dimensions/index.js rename to packages/react-native-web/src/apis/Dimensions/index.js diff --git a/src/apis/Easing/index.js b/packages/react-native-web/src/apis/Easing/index.js similarity index 100% rename from src/apis/Easing/index.js rename to packages/react-native-web/src/apis/Easing/index.js diff --git a/src/apis/I18nManager/__tests__/index-test.js b/packages/react-native-web/src/apis/I18nManager/__tests__/index-test.js similarity index 100% rename from src/apis/I18nManager/__tests__/index-test.js rename to packages/react-native-web/src/apis/I18nManager/__tests__/index-test.js diff --git a/src/apis/I18nManager/index.js b/packages/react-native-web/src/apis/I18nManager/index.js similarity index 100% rename from src/apis/I18nManager/index.js rename to packages/react-native-web/src/apis/I18nManager/index.js diff --git a/src/apis/InteractionManager/index.js b/packages/react-native-web/src/apis/InteractionManager/index.js similarity index 100% rename from src/apis/InteractionManager/index.js rename to packages/react-native-web/src/apis/InteractionManager/index.js diff --git a/src/apis/Keyboard/index.js b/packages/react-native-web/src/apis/Keyboard/index.js similarity index 100% rename from src/apis/Keyboard/index.js rename to packages/react-native-web/src/apis/Keyboard/index.js diff --git a/src/apis/Linking/index.js b/packages/react-native-web/src/apis/Linking/index.js similarity index 100% rename from src/apis/Linking/index.js rename to packages/react-native-web/src/apis/Linking/index.js diff --git a/src/apis/NetInfo/__tests__/index-test.js b/packages/react-native-web/src/apis/NetInfo/__tests__/index-test.js similarity index 100% rename from src/apis/NetInfo/__tests__/index-test.js rename to packages/react-native-web/src/apis/NetInfo/__tests__/index-test.js diff --git a/src/apis/NetInfo/index.js b/packages/react-native-web/src/apis/NetInfo/index.js similarity index 100% rename from src/apis/NetInfo/index.js rename to packages/react-native-web/src/apis/NetInfo/index.js diff --git a/src/apis/PanResponder/index.js b/packages/react-native-web/src/apis/PanResponder/index.js similarity index 100% rename from src/apis/PanResponder/index.js rename to packages/react-native-web/src/apis/PanResponder/index.js diff --git a/src/apis/PixelRatio/__tests__/index-test.js b/packages/react-native-web/src/apis/PixelRatio/__tests__/index-test.js similarity index 100% rename from src/apis/PixelRatio/__tests__/index-test.js rename to packages/react-native-web/src/apis/PixelRatio/__tests__/index-test.js diff --git a/src/apis/PixelRatio/index.js b/packages/react-native-web/src/apis/PixelRatio/index.js similarity index 100% rename from src/apis/PixelRatio/index.js rename to packages/react-native-web/src/apis/PixelRatio/index.js diff --git a/src/apis/Platform/index.js b/packages/react-native-web/src/apis/Platform/index.js similarity index 100% rename from src/apis/Platform/index.js rename to packages/react-native-web/src/apis/Platform/index.js diff --git a/src/apis/StyleSheet/StyleManager.js b/packages/react-native-web/src/apis/StyleSheet/StyleManager.js similarity index 100% rename from src/apis/StyleSheet/StyleManager.js rename to packages/react-native-web/src/apis/StyleSheet/StyleManager.js diff --git a/src/apis/StyleSheet/StyleRegistry.js b/packages/react-native-web/src/apis/StyleSheet/StyleRegistry.js similarity index 100% rename from src/apis/StyleSheet/StyleRegistry.js rename to packages/react-native-web/src/apis/StyleSheet/StyleRegistry.js diff --git a/src/apis/StyleSheet/StyleSheetValidation.js b/packages/react-native-web/src/apis/StyleSheet/StyleSheetValidation.js similarity index 100% rename from src/apis/StyleSheet/StyleSheetValidation.js rename to packages/react-native-web/src/apis/StyleSheet/StyleSheetValidation.js diff --git a/src/apis/StyleSheet/__tests__/StyleManager-test.js b/packages/react-native-web/src/apis/StyleSheet/__tests__/StyleManager-test.js similarity index 100% rename from src/apis/StyleSheet/__tests__/StyleManager-test.js rename to packages/react-native-web/src/apis/StyleSheet/__tests__/StyleManager-test.js diff --git a/src/apis/StyleSheet/__tests__/StyleRegistry-test.js b/packages/react-native-web/src/apis/StyleSheet/__tests__/StyleRegistry-test.js similarity index 100% rename from src/apis/StyleSheet/__tests__/StyleRegistry-test.js rename to packages/react-native-web/src/apis/StyleSheet/__tests__/StyleRegistry-test.js diff --git a/src/apis/StyleSheet/__tests__/__snapshots__/StyleManager-test.js.snap b/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/StyleManager-test.js.snap similarity index 100% rename from src/apis/StyleSheet/__tests__/__snapshots__/StyleManager-test.js.snap rename to packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/StyleManager-test.js.snap diff --git a/src/apis/StyleSheet/__tests__/__snapshots__/StyleRegistry-test.js.snap b/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/StyleRegistry-test.js.snap similarity index 100% rename from src/apis/StyleSheet/__tests__/__snapshots__/StyleRegistry-test.js.snap rename to packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/StyleRegistry-test.js.snap diff --git a/src/apis/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap b/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap similarity index 100% rename from src/apis/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap rename to packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap diff --git a/src/apis/StyleSheet/__tests__/__snapshots__/flattenStyle-test.js.snap b/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/flattenStyle-test.js.snap similarity index 100% rename from src/apis/StyleSheet/__tests__/__snapshots__/flattenStyle-test.js.snap rename to packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/flattenStyle-test.js.snap diff --git a/src/apis/StyleSheet/__tests__/__snapshots__/generateCss-test.js.snap b/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/generateCss-test.js.snap similarity index 100% rename from src/apis/StyleSheet/__tests__/__snapshots__/generateCss-test.js.snap rename to packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/generateCss-test.js.snap diff --git a/src/apis/StyleSheet/__tests__/__snapshots__/i18nStyle-test.js.snap b/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/i18nStyle-test.js.snap similarity index 100% rename from src/apis/StyleSheet/__tests__/__snapshots__/i18nStyle-test.js.snap rename to packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/i18nStyle-test.js.snap diff --git a/src/apis/StyleSheet/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from src/apis/StyleSheet/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/index-test.js.snap diff --git a/src/apis/StyleSheet/__tests__/createReactDOMStyle-test.js b/packages/react-native-web/src/apis/StyleSheet/__tests__/createReactDOMStyle-test.js similarity index 100% rename from src/apis/StyleSheet/__tests__/createReactDOMStyle-test.js rename to packages/react-native-web/src/apis/StyleSheet/__tests__/createReactDOMStyle-test.js diff --git a/src/apis/StyleSheet/__tests__/flattenStyle-test.js b/packages/react-native-web/src/apis/StyleSheet/__tests__/flattenStyle-test.js similarity index 100% rename from src/apis/StyleSheet/__tests__/flattenStyle-test.js rename to packages/react-native-web/src/apis/StyleSheet/__tests__/flattenStyle-test.js diff --git a/src/apis/StyleSheet/__tests__/generateCss-test.js b/packages/react-native-web/src/apis/StyleSheet/__tests__/generateCss-test.js similarity index 100% rename from src/apis/StyleSheet/__tests__/generateCss-test.js rename to packages/react-native-web/src/apis/StyleSheet/__tests__/generateCss-test.js diff --git a/src/apis/StyleSheet/__tests__/i18nStyle-test.js b/packages/react-native-web/src/apis/StyleSheet/__tests__/i18nStyle-test.js similarity index 100% rename from src/apis/StyleSheet/__tests__/i18nStyle-test.js rename to packages/react-native-web/src/apis/StyleSheet/__tests__/i18nStyle-test.js diff --git a/src/apis/StyleSheet/__tests__/index-test.js b/packages/react-native-web/src/apis/StyleSheet/__tests__/index-test.js similarity index 100% rename from src/apis/StyleSheet/__tests__/index-test.js rename to packages/react-native-web/src/apis/StyleSheet/__tests__/index-test.js diff --git a/src/apis/StyleSheet/__tests__/normalizeValue-test.js b/packages/react-native-web/src/apis/StyleSheet/__tests__/normalizeValue-test.js similarity index 100% rename from src/apis/StyleSheet/__tests__/normalizeValue-test.js rename to packages/react-native-web/src/apis/StyleSheet/__tests__/normalizeValue-test.js diff --git a/src/apis/StyleSheet/createReactDOMStyle.js b/packages/react-native-web/src/apis/StyleSheet/createReactDOMStyle.js similarity index 100% rename from src/apis/StyleSheet/createReactDOMStyle.js rename to packages/react-native-web/src/apis/StyleSheet/createReactDOMStyle.js diff --git a/src/apis/StyleSheet/flattenStyle.js b/packages/react-native-web/src/apis/StyleSheet/flattenStyle.js similarity index 100% rename from src/apis/StyleSheet/flattenStyle.js rename to packages/react-native-web/src/apis/StyleSheet/flattenStyle.js diff --git a/src/apis/StyleSheet/generateCss.js b/packages/react-native-web/src/apis/StyleSheet/generateCss.js similarity index 100% rename from src/apis/StyleSheet/generateCss.js rename to packages/react-native-web/src/apis/StyleSheet/generateCss.js diff --git a/src/apis/StyleSheet/getHairlineWidth.js b/packages/react-native-web/src/apis/StyleSheet/getHairlineWidth.js similarity index 100% rename from src/apis/StyleSheet/getHairlineWidth.js rename to packages/react-native-web/src/apis/StyleSheet/getHairlineWidth.js diff --git a/src/apis/StyleSheet/i18nStyle.js b/packages/react-native-web/src/apis/StyleSheet/i18nStyle.js similarity index 100% rename from src/apis/StyleSheet/i18nStyle.js rename to packages/react-native-web/src/apis/StyleSheet/i18nStyle.js diff --git a/src/apis/StyleSheet/index.js b/packages/react-native-web/src/apis/StyleSheet/index.js similarity index 100% rename from src/apis/StyleSheet/index.js rename to packages/react-native-web/src/apis/StyleSheet/index.js diff --git a/src/apis/StyleSheet/normalizeValue.js b/packages/react-native-web/src/apis/StyleSheet/normalizeValue.js similarity index 100% rename from src/apis/StyleSheet/normalizeValue.js rename to packages/react-native-web/src/apis/StyleSheet/normalizeValue.js diff --git a/src/apis/StyleSheet/registry.js b/packages/react-native-web/src/apis/StyleSheet/registry.js similarity index 100% rename from src/apis/StyleSheet/registry.js rename to packages/react-native-web/src/apis/StyleSheet/registry.js diff --git a/src/apis/StyleSheet/staticCss.js b/packages/react-native-web/src/apis/StyleSheet/staticCss.js similarity index 100% rename from src/apis/StyleSheet/staticCss.js rename to packages/react-native-web/src/apis/StyleSheet/staticCss.js diff --git a/src/apis/UIManager/__tests__/index-test.js b/packages/react-native-web/src/apis/UIManager/__tests__/index-test.js similarity index 100% rename from src/apis/UIManager/__tests__/index-test.js rename to packages/react-native-web/src/apis/UIManager/__tests__/index-test.js diff --git a/src/apis/UIManager/index.js b/packages/react-native-web/src/apis/UIManager/index.js similarity index 100% rename from src/apis/UIManager/index.js rename to packages/react-native-web/src/apis/UIManager/index.js diff --git a/src/apis/Vibration/index.js b/packages/react-native-web/src/apis/Vibration/index.js similarity index 100% rename from src/apis/Vibration/index.js rename to packages/react-native-web/src/apis/Vibration/index.js diff --git a/src/components/ART/index.js b/packages/react-native-web/src/components/ART/index.js similarity index 100% rename from src/components/ART/index.js rename to packages/react-native-web/src/components/ART/index.js diff --git a/src/components/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/components/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from src/components/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/components/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap diff --git a/src/components/ActivityIndicator/__tests__/index-test.js b/packages/react-native-web/src/components/ActivityIndicator/__tests__/index-test.js similarity index 100% rename from src/components/ActivityIndicator/__tests__/index-test.js rename to packages/react-native-web/src/components/ActivityIndicator/__tests__/index-test.js diff --git a/src/components/ActivityIndicator/index.js b/packages/react-native-web/src/components/ActivityIndicator/index.js similarity index 100% rename from src/components/ActivityIndicator/index.js rename to packages/react-native-web/src/components/ActivityIndicator/index.js diff --git a/src/components/Button/__tests__/index-test.js b/packages/react-native-web/src/components/Button/__tests__/index-test.js similarity index 100% rename from src/components/Button/__tests__/index-test.js rename to packages/react-native-web/src/components/Button/__tests__/index-test.js diff --git a/src/components/Button/index.js b/packages/react-native-web/src/components/Button/index.js similarity index 100% rename from src/components/Button/index.js rename to packages/react-native-web/src/components/Button/index.js diff --git a/src/components/CheckBox/__tests__/index-test.js b/packages/react-native-web/src/components/CheckBox/__tests__/index-test.js similarity index 100% rename from src/components/CheckBox/__tests__/index-test.js rename to packages/react-native-web/src/components/CheckBox/__tests__/index-test.js diff --git a/src/components/CheckBox/index.js b/packages/react-native-web/src/components/CheckBox/index.js similarity index 100% rename from src/components/CheckBox/index.js rename to packages/react-native-web/src/components/CheckBox/index.js diff --git a/src/components/FlatList/index.js b/packages/react-native-web/src/components/FlatList/index.js similarity index 100% rename from src/components/FlatList/index.js rename to packages/react-native-web/src/components/FlatList/index.js diff --git a/src/components/Image/ImageBackground.js b/packages/react-native-web/src/components/Image/ImageBackground.js similarity index 100% rename from src/components/Image/ImageBackground.js rename to packages/react-native-web/src/components/Image/ImageBackground.js diff --git a/src/components/Image/ImageResizeMode.js b/packages/react-native-web/src/components/Image/ImageResizeMode.js similarity index 100% rename from src/components/Image/ImageResizeMode.js rename to packages/react-native-web/src/components/Image/ImageResizeMode.js diff --git a/src/components/Image/ImageStylePropTypes.js b/packages/react-native-web/src/components/Image/ImageStylePropTypes.js similarity index 100% rename from src/components/Image/ImageStylePropTypes.js rename to packages/react-native-web/src/components/Image/ImageStylePropTypes.js diff --git a/src/components/Image/ImageUriCache.js b/packages/react-native-web/src/components/Image/ImageUriCache.js similarity index 100% rename from src/components/Image/ImageUriCache.js rename to packages/react-native-web/src/components/Image/ImageUriCache.js diff --git a/src/components/Image/__tests__/ImageBackground-test.js b/packages/react-native-web/src/components/Image/__tests__/ImageBackground-test.js similarity index 100% rename from src/components/Image/__tests__/ImageBackground-test.js rename to packages/react-native-web/src/components/Image/__tests__/ImageBackground-test.js diff --git a/src/components/Image/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/components/Image/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from src/components/Image/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/components/Image/__tests__/__snapshots__/index-test.js.snap diff --git a/src/components/Image/__tests__/index-test.js b/packages/react-native-web/src/components/Image/__tests__/index-test.js similarity index 100% rename from src/components/Image/__tests__/index-test.js rename to packages/react-native-web/src/components/Image/__tests__/index-test.js diff --git a/src/components/Image/index.js b/packages/react-native-web/src/components/Image/index.js similarity index 100% rename from src/components/Image/index.js rename to packages/react-native-web/src/components/Image/index.js diff --git a/src/components/KeyboardAvoidingView/index.js b/packages/react-native-web/src/components/KeyboardAvoidingView/index.js similarity index 92% rename from src/components/KeyboardAvoidingView/index.js rename to packages/react-native-web/src/components/KeyboardAvoidingView/index.js index 4d9b42efd..bef1a6fea 100644 --- a/src/components/KeyboardAvoidingView/index.js +++ b/packages/react-native-web/src/components/KeyboardAvoidingView/index.js @@ -11,11 +11,9 @@ */ import View from '../View'; -import ViewPropTypes from '../View/ViewPropTypes'; import { number, oneOf } from 'prop-types'; import React, { Component } from 'react'; - -import type { ViewLayout, ViewLayoutEvent } from '../View/ViewPropTypes'; +import ViewPropTypes, { type ViewLayout, type ViewLayoutEvent } from '../View/ViewPropTypes'; class KeyboardAvoidingView extends Component<*> { static propTypes = { diff --git a/src/components/ListView/ListViewDataSource.js b/packages/react-native-web/src/components/ListView/ListViewDataSource.js similarity index 100% rename from src/components/ListView/ListViewDataSource.js rename to packages/react-native-web/src/components/ListView/ListViewDataSource.js diff --git a/src/components/ListView/ListViewPropTypes.js b/packages/react-native-web/src/components/ListView/ListViewPropTypes.js similarity index 100% rename from src/components/ListView/ListViewPropTypes.js rename to packages/react-native-web/src/components/ListView/ListViewPropTypes.js diff --git a/src/components/ListView/__tests__/index-test.js b/packages/react-native-web/src/components/ListView/__tests__/index-test.js similarity index 100% rename from src/components/ListView/__tests__/index-test.js rename to packages/react-native-web/src/components/ListView/__tests__/index-test.js diff --git a/src/components/ListView/index.js b/packages/react-native-web/src/components/ListView/index.js similarity index 100% rename from src/components/ListView/index.js rename to packages/react-native-web/src/components/ListView/index.js diff --git a/src/components/Modal/index.js b/packages/react-native-web/src/components/Modal/index.js similarity index 100% rename from src/components/Modal/index.js rename to packages/react-native-web/src/components/Modal/index.js diff --git a/src/components/Picker/PickerItemPropType.js b/packages/react-native-web/src/components/Picker/PickerItemPropType.js similarity index 100% rename from src/components/Picker/PickerItemPropType.js rename to packages/react-native-web/src/components/Picker/PickerItemPropType.js diff --git a/src/components/Picker/PickerStylePropTypes.js b/packages/react-native-web/src/components/Picker/PickerStylePropTypes.js similarity index 100% rename from src/components/Picker/PickerStylePropTypes.js rename to packages/react-native-web/src/components/Picker/PickerStylePropTypes.js diff --git a/src/components/Picker/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/components/Picker/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from src/components/Picker/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/components/Picker/__tests__/__snapshots__/index-test.js.snap diff --git a/src/components/Picker/__tests__/index-test.js b/packages/react-native-web/src/components/Picker/__tests__/index-test.js similarity index 100% rename from src/components/Picker/__tests__/index-test.js rename to packages/react-native-web/src/components/Picker/__tests__/index-test.js diff --git a/src/components/Picker/index.js b/packages/react-native-web/src/components/Picker/index.js similarity index 100% rename from src/components/Picker/index.js rename to packages/react-native-web/src/components/Picker/index.js diff --git a/src/components/ProgressBar/__tests__/index-test.js b/packages/react-native-web/src/components/ProgressBar/__tests__/index-test.js similarity index 100% rename from src/components/ProgressBar/__tests__/index-test.js rename to packages/react-native-web/src/components/ProgressBar/__tests__/index-test.js diff --git a/src/components/ProgressBar/index.js b/packages/react-native-web/src/components/ProgressBar/index.js similarity index 100% rename from src/components/ProgressBar/index.js rename to packages/react-native-web/src/components/ProgressBar/index.js diff --git a/src/components/RefreshControl/index.js b/packages/react-native-web/src/components/RefreshControl/index.js similarity index 100% rename from src/components/RefreshControl/index.js rename to packages/react-native-web/src/components/RefreshControl/index.js diff --git a/src/components/SafeAreaView/index.js b/packages/react-native-web/src/components/SafeAreaView/index.js similarity index 100% rename from src/components/SafeAreaView/index.js rename to packages/react-native-web/src/components/SafeAreaView/index.js diff --git a/src/components/ScrollView/ScrollViewBase.js b/packages/react-native-web/src/components/ScrollView/ScrollViewBase.js similarity index 100% rename from src/components/ScrollView/ScrollViewBase.js rename to packages/react-native-web/src/components/ScrollView/ScrollViewBase.js diff --git a/src/components/ScrollView/__tests__/index-test.js b/packages/react-native-web/src/components/ScrollView/__tests__/index-test.js similarity index 100% rename from src/components/ScrollView/__tests__/index-test.js rename to packages/react-native-web/src/components/ScrollView/__tests__/index-test.js diff --git a/src/components/ScrollView/index.js b/packages/react-native-web/src/components/ScrollView/index.js similarity index 100% rename from src/components/ScrollView/index.js rename to packages/react-native-web/src/components/ScrollView/index.js diff --git a/src/components/SectionList/index.js b/packages/react-native-web/src/components/SectionList/index.js similarity index 100% rename from src/components/SectionList/index.js rename to packages/react-native-web/src/components/SectionList/index.js diff --git a/src/components/Slider/index.js b/packages/react-native-web/src/components/Slider/index.js similarity index 100% rename from src/components/Slider/index.js rename to packages/react-native-web/src/components/Slider/index.js diff --git a/src/components/StaticContainer/__tests__/index-test.js b/packages/react-native-web/src/components/StaticContainer/__tests__/index-test.js similarity index 100% rename from src/components/StaticContainer/__tests__/index-test.js rename to packages/react-native-web/src/components/StaticContainer/__tests__/index-test.js diff --git a/src/components/StaticContainer/index.js b/packages/react-native-web/src/components/StaticContainer/index.js similarity index 100% rename from src/components/StaticContainer/index.js rename to packages/react-native-web/src/components/StaticContainer/index.js diff --git a/src/components/StaticRenderer/__tests__/index-test.js b/packages/react-native-web/src/components/StaticRenderer/__tests__/index-test.js similarity index 100% rename from src/components/StaticRenderer/__tests__/index-test.js rename to packages/react-native-web/src/components/StaticRenderer/__tests__/index-test.js diff --git a/src/components/StaticRenderer/index.js b/packages/react-native-web/src/components/StaticRenderer/index.js similarity index 100% rename from src/components/StaticRenderer/index.js rename to packages/react-native-web/src/components/StaticRenderer/index.js diff --git a/src/components/StatusBar/index.js b/packages/react-native-web/src/components/StatusBar/index.js similarity index 100% rename from src/components/StatusBar/index.js rename to packages/react-native-web/src/components/StatusBar/index.js diff --git a/src/components/Switch/__tests__/index-test.js b/packages/react-native-web/src/components/Switch/__tests__/index-test.js similarity index 100% rename from src/components/Switch/__tests__/index-test.js rename to packages/react-native-web/src/components/Switch/__tests__/index-test.js diff --git a/src/components/Switch/index.js b/packages/react-native-web/src/components/Switch/index.js similarity index 100% rename from src/components/Switch/index.js rename to packages/react-native-web/src/components/Switch/index.js diff --git a/src/components/Text/TextPropTypes.js b/packages/react-native-web/src/components/Text/TextPropTypes.js similarity index 100% rename from src/components/Text/TextPropTypes.js rename to packages/react-native-web/src/components/Text/TextPropTypes.js diff --git a/src/components/Text/TextStylePropTypes.js b/packages/react-native-web/src/components/Text/TextStylePropTypes.js similarity index 100% rename from src/components/Text/TextStylePropTypes.js rename to packages/react-native-web/src/components/Text/TextStylePropTypes.js diff --git a/src/components/Text/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/components/Text/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from src/components/Text/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/components/Text/__tests__/__snapshots__/index-test.js.snap diff --git a/src/components/Text/__tests__/index-test.js b/packages/react-native-web/src/components/Text/__tests__/index-test.js similarity index 100% rename from src/components/Text/__tests__/index-test.js rename to packages/react-native-web/src/components/Text/__tests__/index-test.js diff --git a/src/components/Text/index.js b/packages/react-native-web/src/components/Text/index.js similarity index 100% rename from src/components/Text/index.js rename to packages/react-native-web/src/components/Text/index.js diff --git a/src/components/TextInput/TextInputState.js b/packages/react-native-web/src/components/TextInput/TextInputState.js similarity index 100% rename from src/components/TextInput/TextInputState.js rename to packages/react-native-web/src/components/TextInput/TextInputState.js diff --git a/src/components/TextInput/TextInputStylePropTypes.js b/packages/react-native-web/src/components/TextInput/TextInputStylePropTypes.js similarity index 100% rename from src/components/TextInput/TextInputStylePropTypes.js rename to packages/react-native-web/src/components/TextInput/TextInputStylePropTypes.js diff --git a/src/components/TextInput/__tests__/index-test.js b/packages/react-native-web/src/components/TextInput/__tests__/index-test.js similarity index 100% rename from src/components/TextInput/__tests__/index-test.js rename to packages/react-native-web/src/components/TextInput/__tests__/index-test.js diff --git a/src/components/TextInput/index.js b/packages/react-native-web/src/components/TextInput/index.js similarity index 100% rename from src/components/TextInput/index.js rename to packages/react-native-web/src/components/TextInput/index.js diff --git a/src/components/Touchable/BoundingDimensions.js b/packages/react-native-web/src/components/Touchable/BoundingDimensions.js similarity index 100% rename from src/components/Touchable/BoundingDimensions.js rename to packages/react-native-web/src/components/Touchable/BoundingDimensions.js diff --git a/src/components/Touchable/Position.js b/packages/react-native-web/src/components/Touchable/Position.js similarity index 100% rename from src/components/Touchable/Position.js rename to packages/react-native-web/src/components/Touchable/Position.js diff --git a/src/components/Touchable/Touchable.js b/packages/react-native-web/src/components/Touchable/Touchable.js similarity index 100% rename from src/components/Touchable/Touchable.js rename to packages/react-native-web/src/components/Touchable/Touchable.js diff --git a/src/components/Touchable/TouchableHighlight.js b/packages/react-native-web/src/components/Touchable/TouchableHighlight.js similarity index 100% rename from src/components/Touchable/TouchableHighlight.js rename to packages/react-native-web/src/components/Touchable/TouchableHighlight.js diff --git a/src/components/Touchable/TouchableNativeFeedback.js b/packages/react-native-web/src/components/Touchable/TouchableNativeFeedback.js similarity index 100% rename from src/components/Touchable/TouchableNativeFeedback.js rename to packages/react-native-web/src/components/Touchable/TouchableNativeFeedback.js diff --git a/src/components/Touchable/TouchableOpacity.js b/packages/react-native-web/src/components/Touchable/TouchableOpacity.js similarity index 100% rename from src/components/Touchable/TouchableOpacity.js rename to packages/react-native-web/src/components/Touchable/TouchableOpacity.js diff --git a/src/components/Touchable/TouchableWithoutFeedback.js b/packages/react-native-web/src/components/Touchable/TouchableWithoutFeedback.js similarity index 100% rename from src/components/Touchable/TouchableWithoutFeedback.js rename to packages/react-native-web/src/components/Touchable/TouchableWithoutFeedback.js diff --git a/src/components/Touchable/__tests__/index-test.js b/packages/react-native-web/src/components/Touchable/__tests__/index-test.js similarity index 100% rename from src/components/Touchable/__tests__/index-test.js rename to packages/react-native-web/src/components/Touchable/__tests__/index-test.js diff --git a/src/components/Touchable/ensureComponentIsNative.js b/packages/react-native-web/src/components/Touchable/ensureComponentIsNative.js similarity index 100% rename from src/components/Touchable/ensureComponentIsNative.js rename to packages/react-native-web/src/components/Touchable/ensureComponentIsNative.js diff --git a/src/components/Touchable/ensurePositiveDelayProps.js b/packages/react-native-web/src/components/Touchable/ensurePositiveDelayProps.js similarity index 100% rename from src/components/Touchable/ensurePositiveDelayProps.js rename to packages/react-native-web/src/components/Touchable/ensurePositiveDelayProps.js diff --git a/src/components/UnimplementedView/index.js b/packages/react-native-web/src/components/UnimplementedView/index.js similarity index 100% rename from src/components/UnimplementedView/index.js rename to packages/react-native-web/src/components/UnimplementedView/index.js diff --git a/src/components/View/ViewPropTypes.js b/packages/react-native-web/src/components/View/ViewPropTypes.js similarity index 100% rename from src/components/View/ViewPropTypes.js rename to packages/react-native-web/src/components/View/ViewPropTypes.js diff --git a/src/components/View/ViewStylePropTypes.js b/packages/react-native-web/src/components/View/ViewStylePropTypes.js similarity index 100% rename from src/components/View/ViewStylePropTypes.js rename to packages/react-native-web/src/components/View/ViewStylePropTypes.js diff --git a/src/components/View/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/components/View/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from src/components/View/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/components/View/__tests__/__snapshots__/index-test.js.snap diff --git a/src/components/View/__tests__/index-test.js b/packages/react-native-web/src/components/View/__tests__/index-test.js similarity index 100% rename from src/components/View/__tests__/index-test.js rename to packages/react-native-web/src/components/View/__tests__/index-test.js diff --git a/src/components/View/index.js b/packages/react-native-web/src/components/View/index.js similarity index 100% rename from src/components/View/index.js rename to packages/react-native-web/src/components/View/index.js diff --git a/src/components/VirtualizedList/index.js b/packages/react-native-web/src/components/VirtualizedList/index.js similarity index 100% rename from src/components/VirtualizedList/index.js rename to packages/react-native-web/src/components/VirtualizedList/index.js diff --git a/src/index.js b/packages/react-native-web/src/index.js similarity index 100% rename from src/index.js rename to packages/react-native-web/src/index.js diff --git a/src/module.js b/packages/react-native-web/src/module.js similarity index 100% rename from src/module.js rename to packages/react-native-web/src/module.js diff --git a/src/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent.js b/packages/react-native-web/src/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent.js similarity index 100% rename from src/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent.js rename to packages/react-native-web/src/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent.js diff --git a/src/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.js b/packages/react-native-web/src/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.js similarity index 100% rename from src/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.js rename to packages/react-native-web/src/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.js diff --git a/src/modules/AccessibilityUtil/__tests__/propsToTabIndex-test.js b/packages/react-native-web/src/modules/AccessibilityUtil/__tests__/propsToTabIndex-test.js similarity index 100% rename from src/modules/AccessibilityUtil/__tests__/propsToTabIndex-test.js rename to packages/react-native-web/src/modules/AccessibilityUtil/__tests__/propsToTabIndex-test.js diff --git a/src/modules/AccessibilityUtil/index.js b/packages/react-native-web/src/modules/AccessibilityUtil/index.js similarity index 100% rename from src/modules/AccessibilityUtil/index.js rename to packages/react-native-web/src/modules/AccessibilityUtil/index.js diff --git a/src/modules/AccessibilityUtil/isDisabled.js b/packages/react-native-web/src/modules/AccessibilityUtil/isDisabled.js similarity index 100% rename from src/modules/AccessibilityUtil/isDisabled.js rename to packages/react-native-web/src/modules/AccessibilityUtil/isDisabled.js diff --git a/src/modules/AccessibilityUtil/propsToAccessibilityComponent.js b/packages/react-native-web/src/modules/AccessibilityUtil/propsToAccessibilityComponent.js similarity index 100% rename from src/modules/AccessibilityUtil/propsToAccessibilityComponent.js rename to packages/react-native-web/src/modules/AccessibilityUtil/propsToAccessibilityComponent.js diff --git a/src/modules/AccessibilityUtil/propsToAriaRole.js b/packages/react-native-web/src/modules/AccessibilityUtil/propsToAriaRole.js similarity index 100% rename from src/modules/AccessibilityUtil/propsToAriaRole.js rename to packages/react-native-web/src/modules/AccessibilityUtil/propsToAriaRole.js diff --git a/src/modules/AccessibilityUtil/propsToTabIndex.js b/packages/react-native-web/src/modules/AccessibilityUtil/propsToTabIndex.js similarity index 100% rename from src/modules/AccessibilityUtil/propsToTabIndex.js rename to packages/react-native-web/src/modules/AccessibilityUtil/propsToTabIndex.js diff --git a/src/modules/AssetRegistry/index.js b/packages/react-native-web/src/modules/AssetRegistry/index.js similarity index 100% rename from src/modules/AssetRegistry/index.js rename to packages/react-native-web/src/modules/AssetRegistry/index.js diff --git a/src/modules/ImageLoader/index.js b/packages/react-native-web/src/modules/ImageLoader/index.js similarity index 100% rename from src/modules/ImageLoader/index.js rename to packages/react-native-web/src/modules/ImageLoader/index.js diff --git a/src/modules/NativeEventEmitter/index.js b/packages/react-native-web/src/modules/NativeEventEmitter/index.js similarity index 100% rename from src/modules/NativeEventEmitter/index.js rename to packages/react-native-web/src/modules/NativeEventEmitter/index.js diff --git a/src/modules/NativeMethodsMixin/index.js b/packages/react-native-web/src/modules/NativeMethodsMixin/index.js similarity index 100% rename from src/modules/NativeMethodsMixin/index.js rename to packages/react-native-web/src/modules/NativeMethodsMixin/index.js diff --git a/src/modules/NativeModules/index.js b/packages/react-native-web/src/modules/NativeModules/index.js similarity index 100% rename from src/modules/NativeModules/index.js rename to packages/react-native-web/src/modules/NativeModules/index.js diff --git a/src/modules/ReactNativePropRegistry/index.js b/packages/react-native-web/src/modules/ReactNativePropRegistry/index.js similarity index 100% rename from src/modules/ReactNativePropRegistry/index.js rename to packages/react-native-web/src/modules/ReactNativePropRegistry/index.js diff --git a/src/modules/ScrollResponder/index.js b/packages/react-native-web/src/modules/ScrollResponder/index.js similarity index 100% rename from src/modules/ScrollResponder/index.js rename to packages/react-native-web/src/modules/ScrollResponder/index.js diff --git a/src/modules/applyLayout/index.js b/packages/react-native-web/src/modules/applyLayout/index.js similarity index 100% rename from src/modules/applyLayout/index.js rename to packages/react-native-web/src/modules/applyLayout/index.js diff --git a/src/modules/applyNativeMethods/index.js b/packages/react-native-web/src/modules/applyNativeMethods/index.js similarity index 100% rename from src/modules/applyNativeMethods/index.js rename to packages/react-native-web/src/modules/applyNativeMethods/index.js diff --git a/src/modules/createDOMProps/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/modules/createDOMProps/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from src/modules/createDOMProps/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/modules/createDOMProps/__tests__/__snapshots__/index-test.js.snap diff --git a/src/modules/createDOMProps/__tests__/index-test.js b/packages/react-native-web/src/modules/createDOMProps/__tests__/index-test.js similarity index 100% rename from src/modules/createDOMProps/__tests__/index-test.js rename to packages/react-native-web/src/modules/createDOMProps/__tests__/index-test.js diff --git a/src/modules/createDOMProps/index.js b/packages/react-native-web/src/modules/createDOMProps/index.js similarity index 100% rename from src/modules/createDOMProps/index.js rename to packages/react-native-web/src/modules/createDOMProps/index.js diff --git a/src/modules/createElement/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/modules/createElement/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from src/modules/createElement/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/modules/createElement/__tests__/__snapshots__/index-test.js.snap diff --git a/src/modules/createElement/__tests__/index-test.js b/packages/react-native-web/src/modules/createElement/__tests__/index-test.js similarity index 100% rename from src/modules/createElement/__tests__/index-test.js rename to packages/react-native-web/src/modules/createElement/__tests__/index-test.js diff --git a/src/modules/createElement/index.js b/packages/react-native-web/src/modules/createElement/index.js similarity index 100% rename from src/modules/createElement/index.js rename to packages/react-native-web/src/modules/createElement/index.js diff --git a/src/modules/dismissKeyboard/index.js b/packages/react-native-web/src/modules/dismissKeyboard/index.js similarity index 100% rename from src/modules/dismissKeyboard/index.js rename to packages/react-native-web/src/modules/dismissKeyboard/index.js diff --git a/src/modules/findNodeHandle/index.js b/packages/react-native-web/src/modules/findNodeHandle/index.js similarity index 100% rename from src/modules/findNodeHandle/index.js rename to packages/react-native-web/src/modules/findNodeHandle/index.js diff --git a/src/modules/flattenArray/index.js b/packages/react-native-web/src/modules/flattenArray/index.js similarity index 100% rename from src/modules/flattenArray/index.js rename to packages/react-native-web/src/modules/flattenArray/index.js diff --git a/src/modules/hydrate/index.js b/packages/react-native-web/src/modules/hydrate/index.js similarity index 100% rename from src/modules/hydrate/index.js rename to packages/react-native-web/src/modules/hydrate/index.js diff --git a/src/modules/injectResponderEventPlugin/index.js b/packages/react-native-web/src/modules/injectResponderEventPlugin/index.js similarity index 100% rename from src/modules/injectResponderEventPlugin/index.js rename to packages/react-native-web/src/modules/injectResponderEventPlugin/index.js diff --git a/src/modules/mapKeyValue/index.js b/packages/react-native-web/src/modules/mapKeyValue/index.js similarity index 100% rename from src/modules/mapKeyValue/index.js rename to packages/react-native-web/src/modules/mapKeyValue/index.js diff --git a/src/modules/modality/index.js b/packages/react-native-web/src/modules/modality/index.js similarity index 100% rename from src/modules/modality/index.js rename to packages/react-native-web/src/modules/modality/index.js diff --git a/src/modules/multiplyStyleLengthValue/__tests__/index-test.js b/packages/react-native-web/src/modules/multiplyStyleLengthValue/__tests__/index-test.js similarity index 100% rename from src/modules/multiplyStyleLengthValue/__tests__/index-test.js rename to packages/react-native-web/src/modules/multiplyStyleLengthValue/__tests__/index-test.js diff --git a/src/modules/multiplyStyleLengthValue/index.js b/packages/react-native-web/src/modules/multiplyStyleLengthValue/index.js similarity index 100% rename from src/modules/multiplyStyleLengthValue/index.js rename to packages/react-native-web/src/modules/multiplyStyleLengthValue/index.js diff --git a/src/modules/normalizeNativeEvent/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/modules/normalizeNativeEvent/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from src/modules/normalizeNativeEvent/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/modules/normalizeNativeEvent/__tests__/__snapshots__/index-test.js.snap diff --git a/src/modules/normalizeNativeEvent/__tests__/index-test.js b/packages/react-native-web/src/modules/normalizeNativeEvent/__tests__/index-test.js similarity index 100% rename from src/modules/normalizeNativeEvent/__tests__/index-test.js rename to packages/react-native-web/src/modules/normalizeNativeEvent/__tests__/index-test.js diff --git a/src/modules/normalizeNativeEvent/index.js b/packages/react-native-web/src/modules/normalizeNativeEvent/index.js similarity index 100% rename from src/modules/normalizeNativeEvent/index.js rename to packages/react-native-web/src/modules/normalizeNativeEvent/index.js diff --git a/src/modules/prefixStyles/__tests__/index-test.js b/packages/react-native-web/src/modules/prefixStyles/__tests__/index-test.js similarity index 100% rename from src/modules/prefixStyles/__tests__/index-test.js rename to packages/react-native-web/src/modules/prefixStyles/__tests__/index-test.js diff --git a/src/modules/prefixStyles/index.js b/packages/react-native-web/src/modules/prefixStyles/index.js similarity index 100% rename from src/modules/prefixStyles/index.js rename to packages/react-native-web/src/modules/prefixStyles/index.js diff --git a/src/modules/prefixStyles/static.js b/packages/react-native-web/src/modules/prefixStyles/static.js similarity index 99% rename from src/modules/prefixStyles/static.js rename to packages/react-native-web/src/modules/prefixStyles/static.js index 64d2a3fe4..b0855d2ad 100644 --- a/src/modules/prefixStyles/static.js +++ b/packages/react-native-web/src/modules/prefixStyles/static.js @@ -84,6 +84,7 @@ export default { columns: wm, columnSpan: wm, columnWidth: wm, + writingMode: wms, flex: wms, flexBasis: w, flexDirection: wms, diff --git a/src/modules/processColor/__tests__/index-test.js b/packages/react-native-web/src/modules/processColor/__tests__/index-test.js similarity index 100% rename from src/modules/processColor/__tests__/index-test.js rename to packages/react-native-web/src/modules/processColor/__tests__/index-test.js diff --git a/src/modules/processColor/index.js b/packages/react-native-web/src/modules/processColor/index.js similarity index 100% rename from src/modules/processColor/index.js rename to packages/react-native-web/src/modules/processColor/index.js diff --git a/src/modules/render/index.js b/packages/react-native-web/src/modules/render/index.js similarity index 100% rename from src/modules/render/index.js rename to packages/react-native-web/src/modules/render/index.js diff --git a/src/modules/requestIdleCallback/index.js b/packages/react-native-web/src/modules/requestIdleCallback/index.js similarity index 100% rename from src/modules/requestIdleCallback/index.js rename to packages/react-native-web/src/modules/requestIdleCallback/index.js diff --git a/src/modules/unitlessNumbers/index.js b/packages/react-native-web/src/modules/unitlessNumbers/index.js similarity index 100% rename from src/modules/unitlessNumbers/index.js rename to packages/react-native-web/src/modules/unitlessNumbers/index.js diff --git a/src/modules/unmountComponentAtNode/index.js b/packages/react-native-web/src/modules/unmountComponentAtNode/index.js similarity index 100% rename from src/modules/unmountComponentAtNode/index.js rename to packages/react-native-web/src/modules/unmountComponentAtNode/index.js diff --git a/src/propTypes/AnimationPropTypes.js b/packages/react-native-web/src/propTypes/AnimationPropTypes.js similarity index 100% rename from src/propTypes/AnimationPropTypes.js rename to packages/react-native-web/src/propTypes/AnimationPropTypes.js diff --git a/src/propTypes/BaseComponentPropTypes.js b/packages/react-native-web/src/propTypes/BaseComponentPropTypes.js similarity index 100% rename from src/propTypes/BaseComponentPropTypes.js rename to packages/react-native-web/src/propTypes/BaseComponentPropTypes.js diff --git a/src/propTypes/BorderPropTypes.js b/packages/react-native-web/src/propTypes/BorderPropTypes.js similarity index 100% rename from src/propTypes/BorderPropTypes.js rename to packages/react-native-web/src/propTypes/BorderPropTypes.js diff --git a/src/propTypes/ColorPropType.js b/packages/react-native-web/src/propTypes/ColorPropType.js similarity index 100% rename from src/propTypes/ColorPropType.js rename to packages/react-native-web/src/propTypes/ColorPropType.js diff --git a/src/propTypes/EdgeInsetsPropType.js b/packages/react-native-web/src/propTypes/EdgeInsetsPropType.js similarity index 100% rename from src/propTypes/EdgeInsetsPropType.js rename to packages/react-native-web/src/propTypes/EdgeInsetsPropType.js diff --git a/src/propTypes/LayoutPropTypes.js b/packages/react-native-web/src/propTypes/LayoutPropTypes.js similarity index 100% rename from src/propTypes/LayoutPropTypes.js rename to packages/react-native-web/src/propTypes/LayoutPropTypes.js diff --git a/src/propTypes/PointPropType.js b/packages/react-native-web/src/propTypes/PointPropType.js similarity index 100% rename from src/propTypes/PointPropType.js rename to packages/react-native-web/src/propTypes/PointPropType.js diff --git a/src/propTypes/ShadowPropTypes.js b/packages/react-native-web/src/propTypes/ShadowPropTypes.js similarity index 100% rename from src/propTypes/ShadowPropTypes.js rename to packages/react-native-web/src/propTypes/ShadowPropTypes.js diff --git a/src/propTypes/StyleSheetPropType.js b/packages/react-native-web/src/propTypes/StyleSheetPropType.js similarity index 100% rename from src/propTypes/StyleSheetPropType.js rename to packages/react-native-web/src/propTypes/StyleSheetPropType.js diff --git a/src/propTypes/TransformPropTypes.js b/packages/react-native-web/src/propTypes/TransformPropTypes.js similarity index 100% rename from src/propTypes/TransformPropTypes.js rename to packages/react-native-web/src/propTypes/TransformPropTypes.js diff --git a/src/propTypes/createStrictShapeTypeChecker.js b/packages/react-native-web/src/propTypes/createStrictShapeTypeChecker.js similarity index 100% rename from src/propTypes/createStrictShapeTypeChecker.js rename to packages/react-native-web/src/propTypes/createStrictShapeTypeChecker.js diff --git a/src/vendor/Animated/AnimatedEvent.js b/packages/react-native-web/src/vendor/Animated/AnimatedEvent.js similarity index 100% rename from src/vendor/Animated/AnimatedEvent.js rename to packages/react-native-web/src/vendor/Animated/AnimatedEvent.js diff --git a/src/vendor/Animated/AnimatedImplementation.js b/packages/react-native-web/src/vendor/Animated/AnimatedImplementation.js similarity index 100% rename from src/vendor/Animated/AnimatedImplementation.js rename to packages/react-native-web/src/vendor/Animated/AnimatedImplementation.js diff --git a/src/vendor/Animated/Easing.js b/packages/react-native-web/src/vendor/Animated/Easing.js similarity index 100% rename from src/vendor/Animated/Easing.js rename to packages/react-native-web/src/vendor/Animated/Easing.js diff --git a/src/vendor/Animated/NativeAnimatedHelper.js b/packages/react-native-web/src/vendor/Animated/NativeAnimatedHelper.js similarity index 100% rename from src/vendor/Animated/NativeAnimatedHelper.js rename to packages/react-native-web/src/vendor/Animated/NativeAnimatedHelper.js diff --git a/src/vendor/Animated/SHA b/packages/react-native-web/src/vendor/Animated/SHA similarity index 100% rename from src/vendor/Animated/SHA rename to packages/react-native-web/src/vendor/Animated/SHA diff --git a/src/vendor/Animated/SpringConfig.js b/packages/react-native-web/src/vendor/Animated/SpringConfig.js similarity index 100% rename from src/vendor/Animated/SpringConfig.js rename to packages/react-native-web/src/vendor/Animated/SpringConfig.js diff --git a/src/vendor/Animated/animations/Animation.js b/packages/react-native-web/src/vendor/Animated/animations/Animation.js similarity index 100% rename from src/vendor/Animated/animations/Animation.js rename to packages/react-native-web/src/vendor/Animated/animations/Animation.js diff --git a/src/vendor/Animated/animations/DecayAnimation.js b/packages/react-native-web/src/vendor/Animated/animations/DecayAnimation.js similarity index 100% rename from src/vendor/Animated/animations/DecayAnimation.js rename to packages/react-native-web/src/vendor/Animated/animations/DecayAnimation.js diff --git a/src/vendor/Animated/animations/SpringAnimation.js b/packages/react-native-web/src/vendor/Animated/animations/SpringAnimation.js similarity index 100% rename from src/vendor/Animated/animations/SpringAnimation.js rename to packages/react-native-web/src/vendor/Animated/animations/SpringAnimation.js diff --git a/src/vendor/Animated/animations/TimingAnimation.js b/packages/react-native-web/src/vendor/Animated/animations/TimingAnimation.js similarity index 100% rename from src/vendor/Animated/animations/TimingAnimation.js rename to packages/react-native-web/src/vendor/Animated/animations/TimingAnimation.js diff --git a/src/vendor/Animated/bezier.js b/packages/react-native-web/src/vendor/Animated/bezier.js similarity index 100% rename from src/vendor/Animated/bezier.js rename to packages/react-native-web/src/vendor/Animated/bezier.js diff --git a/src/vendor/Animated/createAnimatedComponent.js b/packages/react-native-web/src/vendor/Animated/createAnimatedComponent.js similarity index 100% rename from src/vendor/Animated/createAnimatedComponent.js rename to packages/react-native-web/src/vendor/Animated/createAnimatedComponent.js diff --git a/src/vendor/Animated/nodes/AnimatedAddition.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedAddition.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedAddition.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedAddition.js diff --git a/src/vendor/Animated/nodes/AnimatedDiffClamp.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedDiffClamp.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedDiffClamp.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedDiffClamp.js diff --git a/src/vendor/Animated/nodes/AnimatedDivision.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedDivision.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedDivision.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedDivision.js diff --git a/src/vendor/Animated/nodes/AnimatedInterpolation.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedInterpolation.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedInterpolation.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedInterpolation.js diff --git a/src/vendor/Animated/nodes/AnimatedModulo.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedModulo.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedModulo.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedModulo.js diff --git a/src/vendor/Animated/nodes/AnimatedMultiplication.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedMultiplication.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedMultiplication.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedMultiplication.js diff --git a/src/vendor/Animated/nodes/AnimatedNode.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedNode.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedNode.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedNode.js diff --git a/src/vendor/Animated/nodes/AnimatedProps.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedProps.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedProps.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedProps.js diff --git a/src/vendor/Animated/nodes/AnimatedStyle.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedStyle.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedStyle.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedStyle.js diff --git a/src/vendor/Animated/nodes/AnimatedTracking.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedTracking.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedTracking.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedTracking.js diff --git a/src/vendor/Animated/nodes/AnimatedTransform.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedTransform.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedTransform.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedTransform.js diff --git a/src/vendor/Animated/nodes/AnimatedValue.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedValue.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedValue.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedValue.js diff --git a/src/vendor/Animated/nodes/AnimatedValueXY.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedValueXY.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedValueXY.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedValueXY.js diff --git a/src/vendor/Animated/nodes/AnimatedWithChildren.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedWithChildren.js similarity index 100% rename from src/vendor/Animated/nodes/AnimatedWithChildren.js rename to packages/react-native-web/src/vendor/Animated/nodes/AnimatedWithChildren.js diff --git a/src/vendor/PanResponder/SHA b/packages/react-native-web/src/vendor/PanResponder/SHA similarity index 100% rename from src/vendor/PanResponder/SHA rename to packages/react-native-web/src/vendor/PanResponder/SHA diff --git a/src/vendor/PanResponder/index.js b/packages/react-native-web/src/vendor/PanResponder/index.js similarity index 100% rename from src/vendor/PanResponder/index.js rename to packages/react-native-web/src/vendor/PanResponder/index.js diff --git a/src/vendor/PooledClass/index.js b/packages/react-native-web/src/vendor/PooledClass/index.js similarity index 100% rename from src/vendor/PooledClass/index.js rename to packages/react-native-web/src/vendor/PooledClass/index.js diff --git a/src/vendor/TouchHistoryMath/index.js b/packages/react-native-web/src/vendor/TouchHistoryMath/index.js similarity index 100% rename from src/vendor/TouchHistoryMath/index.js rename to packages/react-native-web/src/vendor/TouchHistoryMath/index.js diff --git a/src/vendor/dangerousStyleValue/index.js b/packages/react-native-web/src/vendor/dangerousStyleValue/index.js similarity index 100% rename from src/vendor/dangerousStyleValue/index.js rename to packages/react-native-web/src/vendor/dangerousStyleValue/index.js diff --git a/src/vendor/hash/index.js b/packages/react-native-web/src/vendor/hash/index.js similarity index 100% rename from src/vendor/hash/index.js rename to packages/react-native-web/src/vendor/hash/index.js diff --git a/src/vendor/setValueForStyles/index.js b/packages/react-native-web/src/vendor/setValueForStyles/index.js similarity index 100% rename from src/vendor/setValueForStyles/index.js rename to packages/react-native-web/src/vendor/setValueForStyles/index.js diff --git a/src/vendor/warnValidStyle/index.js b/packages/react-native-web/src/vendor/warnValidStyle/index.js similarity index 100% rename from src/vendor/warnValidStyle/index.js rename to packages/react-native-web/src/vendor/warnValidStyle/index.js diff --git a/scripts/createPrefixer.js b/scripts/inline-style-prefixer/create.js similarity index 50% rename from scripts/createPrefixer.js rename to scripts/inline-style-prefixer/create.js index 167f94206..18ed2f14c 100644 --- a/scripts/createPrefixer.js +++ b/scripts/inline-style-prefixer/create.js @@ -1,4 +1,6 @@ -const generateData = require('inline-style-prefixer/generator'); +'use strict'; + +const generator = require('inline-style-prefixer/generator'); const path = require('path'); const browserList = { @@ -16,6 +18,9 @@ const browserList = { and_chr: 38 }; -generateData(browserList, { - staticPath: path.join(__dirname, '../src/modules/prefixStyles/static.js'), +generator(browserList, { + staticPath: path.join( + __dirname, + '../packages/react-native-web/src/modules/prefixStyles/static.js' + ) }); diff --git a/scripts/jest/config.js b/scripts/jest/config.js new file mode 100644 index 000000000..912f68352 --- /dev/null +++ b/scripts/jest/config.js @@ -0,0 +1,11 @@ +'use strict'; + +module.exports = { + rootDir: process.cwd(), + roots: ['/packages'], + setupFiles: ['raf/polyfill'], + setupTestFrameworkScriptFile: require.resolve('./setupFramework.js'), + snapshotSerializers: ['enzyme-to-json/serializer'], + testEnvironment: 'jsdom', + timers: 'fake' +}; diff --git a/jest-setup-framework.js b/scripts/jest/setupFramework.js similarity index 53% rename from jest-setup-framework.js rename to scripts/jest/setupFramework.js index 0d9c7ecee..1bb126d03 100644 --- a/jest-setup-framework.js +++ b/scripts/jest/setupFramework.js @@ -1,7 +1,9 @@ +/* eslint-env jasmine, jest */ + import Adapter from 'enzyme-adapter-react-16'; -import createSerializer from './jest/createSerializer'; import Enzyme from 'enzyme'; -import { StyleSheet } from './src'; +import createSerializer from '../../packages/react-native-web/jest/createSerializer'; +import { StyleSheet } from '../../packages/react-native-web/src'; const serializer = createSerializer(StyleSheet); diff --git a/scripts/release/publish.js b/scripts/release/publish.js new file mode 100644 index 000000000..1ff45f8c6 --- /dev/null +++ b/scripts/release/publish.js @@ -0,0 +1,19 @@ +#!/usr/bin/env node + +'use strict'; + +const execSync = require('child_process').execSync; + +const version = process.argv.slice(2)[0]; + +console.log(`Publishing ${version}`); +// use lerna to bump versions and dependencies +execSync(`./node_modules/.bin/lerna publish --skip-git --skip-npm --repo-version ${version} --yes`); +// add changes +execSync('git add .'); +// commit and tag +execSync(`git commit -m "${version}" && git tag -m ${version} "${version}"`); +// publish to npm +execSync('yarn publish'); +// push to github +execSync('git push --tags origin master'); diff --git a/types/prop-types.js b/types/prop-types.js index 113b0b5c4..409eb5704 100644 --- a/types/prop-types.js +++ b/types/prop-types.js @@ -5,7 +5,8 @@ type $npm$propTypes$ReactPropsCheckType = ( props: any, propName: string, componentName: string, - href?: string) => ?Error; + href?: string +) => ?Error; declare module 'prop-types' { declare var array: React$PropType$Primitive>; @@ -25,10 +26,10 @@ declare module 'prop-types' { declare var shape: React$PropType$Shape; declare function checkPropTypes( - propTypes: $Subtype<{[_: $Keys]: $npm$propTypes$ReactPropsCheckType}>, + propTypes: $Subtype<{ [_: $Keys]: $npm$propTypes$ReactPropsCheckType }>, values: V, location: string, componentName: string, - getStack: ?(() => ?string) - ) : void; + getStack: ?() => ?string + ): void; } diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 55e4a5337..000000000 --- a/webpack.config.js +++ /dev/null @@ -1,60 +0,0 @@ -const path = require('path'); -const webpack = require('webpack'); -const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; - -const SRC_DIRECTORY = path.resolve(__dirname, 'src'); -const DIST_DIRECTORY = path.resolve(__dirname, 'dist'); - -module.exports = { - entry: SRC_DIRECTORY, - externals: [ - { - react: { - root: 'React', - commonjs2: 'react', - commonjs: 'react', - amd: 'react' - } - } - ], - module: { - rules: [ - { - test: /\.js$/, - exclude: /node_modules/, - use: { - loader: 'babel-loader', - options: { cacheDirectory: true } - } - }, - { - test: /\.(gif|jpe?g|png|svg)$/, - use: { - loader: 'url-loader', - options: { name: '[name].[ext]' } - } - } - ] - }, - output: { - filename: 'ReactNative.js', - library: 'ReactNative', - libraryTarget: 'umd', - path: DIST_DIRECTORY - }, - plugins: [ - new BundleAnalyzerPlugin({ - analyzerMode: 'static', - openAnalyzer: false - }), - new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production') }), - new webpack.optimize.UglifyJsPlugin({ - compress: { - dead_code: true, - drop_console: true, - screw_ie8: true, - warnings: false - } - }) - ] -}; diff --git a/docs/guides/accessibility.md b/website/guides/accessibility.md similarity index 100% rename from docs/guides/accessibility.md rename to website/guides/accessibility.md diff --git a/docs/guides/advanced.md b/website/guides/advanced.md similarity index 100% rename from docs/guides/advanced.md rename to website/guides/advanced.md diff --git a/docs/guides/direct-manipulation.md b/website/guides/direct-manipulation.md similarity index 100% rename from docs/guides/direct-manipulation.md rename to website/guides/direct-manipulation.md diff --git a/docs/guides/getting-started.md b/website/guides/getting-started.md similarity index 100% rename from docs/guides/getting-started.md rename to website/guides/getting-started.md diff --git a/docs/guides/internationalization.md b/website/guides/internationalization.md similarity index 100% rename from docs/guides/internationalization.md rename to website/guides/internationalization.md diff --git a/docs/guides/known-issues.md b/website/guides/known-issues.md similarity index 100% rename from docs/guides/known-issues.md rename to website/guides/known-issues.md diff --git a/docs/guides/style.md b/website/guides/style.md similarity index 100% rename from docs/guides/style.md rename to website/guides/style.md diff --git a/docs/package.json b/website/package.json similarity index 62% rename from docs/package.json rename to website/package.json index 6776dd056..3427ef6bc 100644 --- a/docs/package.json +++ b/website/package.json @@ -1,4 +1,7 @@ { + "private": true, + "name": "website", + "version": "0.2.2", "scripts": { "build": "yarn && build-storybook -o ./dist -c ./storybook/.storybook", "start": "start-storybook -p 9001 -c ./storybook/.storybook", @@ -6,6 +9,13 @@ }, "dependencies": { "@storybook/addon-options": "^3.1.6", - "@storybook/react": "^3.1.9" + "@storybook/react": "^3.2.18", + "react": "^16.2.0", + "react-dom": "^16.2.0", + "react-native-web": "^0.2.2" + }, + "devDependencies": { + "url-loader": "^0.6.2", + "webpack": "^3.10.0" } } diff --git a/website/storybook/.storybook/.babelrc b/website/storybook/.storybook/.babelrc new file mode 100644 index 000000000..64eb43d5c --- /dev/null +++ b/website/storybook/.storybook/.babelrc @@ -0,0 +1,8 @@ +{ + "presets": [ + "react-native" + ], + "plugins": [ + "react-native-web" + ] +} diff --git a/docs/storybook/.storybook/addons.js b/website/storybook/.storybook/addons.js similarity index 100% rename from docs/storybook/.storybook/addons.js rename to website/storybook/.storybook/addons.js diff --git a/docs/storybook/.storybook/config.js b/website/storybook/.storybook/config.js similarity index 100% rename from docs/storybook/.storybook/config.js rename to website/storybook/.storybook/config.js diff --git a/docs/storybook/.storybook/decorator-centered.js b/website/storybook/.storybook/decorator-centered.js similarity index 100% rename from docs/storybook/.storybook/decorator-centered.js rename to website/storybook/.storybook/decorator-centered.js diff --git a/docs/storybook/.storybook/webpack.config.js b/website/storybook/.storybook/webpack.config.js similarity index 58% rename from docs/storybook/.storybook/webpack.config.js rename to website/storybook/.storybook/webpack.config.js index 8f6342b3c..09475a8a3 100644 --- a/docs/storybook/.storybook/webpack.config.js +++ b/website/storybook/.storybook/webpack.config.js @@ -4,15 +4,6 @@ const webpack = require('webpack'); module.exports = (storybookBaseConfig, configType) => { const DEV = configType === 'DEVELOPMENT'; - storybookBaseConfig.module.rules.push({ - test: /\.js$/, - exclude: /node_modules/, - use: { - loader: 'babel-loader', - options: { cacheDirectory: true } - } - }); - storybookBaseConfig.module.rules.push({ test: /\.(gif|jpe?g|png|svg)$/, use: { @@ -23,14 +14,9 @@ module.exports = (storybookBaseConfig, configType) => { storybookBaseConfig.plugins.push( new webpack.DefinePlugin({ - 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'), - 'process.env.__REACT_NATIVE_DEBUG_ENABLED__': DEV + 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development') }) ); - storybookBaseConfig.resolve.alias = { - 'react-native': path.join(__dirname, '../../../src/module') - }; - return storybookBaseConfig; }; diff --git a/docs/storybook/1-components/ActivityIndicator/ActivityIndicatorScreen.js b/website/storybook/1-components/ActivityIndicator/ActivityIndicatorScreen.js similarity index 100% rename from docs/storybook/1-components/ActivityIndicator/ActivityIndicatorScreen.js rename to website/storybook/1-components/ActivityIndicator/ActivityIndicatorScreen.js diff --git a/docs/storybook/1-components/ActivityIndicator/examples/PropAnimating.js b/website/storybook/1-components/ActivityIndicator/examples/PropAnimating.js similarity index 100% rename from docs/storybook/1-components/ActivityIndicator/examples/PropAnimating.js rename to website/storybook/1-components/ActivityIndicator/examples/PropAnimating.js diff --git a/docs/storybook/1-components/ActivityIndicator/examples/PropColor.js b/website/storybook/1-components/ActivityIndicator/examples/PropColor.js similarity index 100% rename from docs/storybook/1-components/ActivityIndicator/examples/PropColor.js rename to website/storybook/1-components/ActivityIndicator/examples/PropColor.js diff --git a/docs/storybook/1-components/ActivityIndicator/examples/PropHidesWhenStopped.js b/website/storybook/1-components/ActivityIndicator/examples/PropHidesWhenStopped.js similarity index 100% rename from docs/storybook/1-components/ActivityIndicator/examples/PropHidesWhenStopped.js rename to website/storybook/1-components/ActivityIndicator/examples/PropHidesWhenStopped.js diff --git a/docs/storybook/1-components/ActivityIndicator/examples/PropSize.js b/website/storybook/1-components/ActivityIndicator/examples/PropSize.js similarity index 100% rename from docs/storybook/1-components/ActivityIndicator/examples/PropSize.js rename to website/storybook/1-components/ActivityIndicator/examples/PropSize.js diff --git a/docs/storybook/1-components/Button/ButtonScreen.js b/website/storybook/1-components/Button/ButtonScreen.js similarity index 100% rename from docs/storybook/1-components/Button/ButtonScreen.js rename to website/storybook/1-components/Button/ButtonScreen.js diff --git a/docs/storybook/1-components/Button/examples/PropColor.js b/website/storybook/1-components/Button/examples/PropColor.js similarity index 100% rename from docs/storybook/1-components/Button/examples/PropColor.js rename to website/storybook/1-components/Button/examples/PropColor.js diff --git a/docs/storybook/1-components/Button/examples/PropDisabled.js b/website/storybook/1-components/Button/examples/PropDisabled.js similarity index 100% rename from docs/storybook/1-components/Button/examples/PropDisabled.js rename to website/storybook/1-components/Button/examples/PropDisabled.js diff --git a/docs/storybook/1-components/Button/examples/PropOnPress.js b/website/storybook/1-components/Button/examples/PropOnPress.js similarity index 100% rename from docs/storybook/1-components/Button/examples/PropOnPress.js rename to website/storybook/1-components/Button/examples/PropOnPress.js diff --git a/docs/storybook/1-components/Button/helpers.js b/website/storybook/1-components/Button/helpers.js similarity index 100% rename from docs/storybook/1-components/Button/helpers.js rename to website/storybook/1-components/Button/helpers.js diff --git a/docs/storybook/1-components/CheckBox/CheckBoxScreen.js b/website/storybook/1-components/CheckBox/CheckBoxScreen.js similarity index 100% rename from docs/storybook/1-components/CheckBox/CheckBoxScreen.js rename to website/storybook/1-components/CheckBox/CheckBoxScreen.js diff --git a/docs/storybook/1-components/CheckBox/examples/CustomSize.js b/website/storybook/1-components/CheckBox/examples/CustomSize.js similarity index 100% rename from docs/storybook/1-components/CheckBox/examples/CustomSize.js rename to website/storybook/1-components/CheckBox/examples/CustomSize.js diff --git a/docs/storybook/1-components/CheckBox/examples/PropColor.js b/website/storybook/1-components/CheckBox/examples/PropColor.js similarity index 100% rename from docs/storybook/1-components/CheckBox/examples/PropColor.js rename to website/storybook/1-components/CheckBox/examples/PropColor.js diff --git a/docs/storybook/1-components/CheckBox/examples/PropDisabled.js b/website/storybook/1-components/CheckBox/examples/PropDisabled.js similarity index 100% rename from docs/storybook/1-components/CheckBox/examples/PropDisabled.js rename to website/storybook/1-components/CheckBox/examples/PropDisabled.js diff --git a/docs/storybook/1-components/CheckBox/examples/PropOnValueChange.js b/website/storybook/1-components/CheckBox/examples/PropOnValueChange.js similarity index 100% rename from docs/storybook/1-components/CheckBox/examples/PropOnValueChange.js rename to website/storybook/1-components/CheckBox/examples/PropOnValueChange.js diff --git a/docs/storybook/1-components/CheckBox/examples/PropValue.js b/website/storybook/1-components/CheckBox/examples/PropValue.js similarity index 100% rename from docs/storybook/1-components/CheckBox/examples/PropValue.js rename to website/storybook/1-components/CheckBox/examples/PropValue.js diff --git a/docs/storybook/1-components/CheckBox/examples/styles.js b/website/storybook/1-components/CheckBox/examples/styles.js similarity index 100% rename from docs/storybook/1-components/CheckBox/examples/styles.js rename to website/storybook/1-components/CheckBox/examples/styles.js diff --git a/docs/storybook/1-components/CheckBox/helpers.js b/website/storybook/1-components/CheckBox/helpers.js similarity index 100% rename from docs/storybook/1-components/CheckBox/helpers.js rename to website/storybook/1-components/CheckBox/helpers.js diff --git a/docs/storybook/1-components/Image/ImageBackgroundScreen.js b/website/storybook/1-components/Image/ImageBackgroundScreen.js similarity index 100% rename from docs/storybook/1-components/Image/ImageBackgroundScreen.js rename to website/storybook/1-components/Image/ImageBackgroundScreen.js diff --git a/docs/storybook/1-components/Image/ImageScreen.js b/website/storybook/1-components/Image/ImageScreen.js similarity index 100% rename from docs/storybook/1-components/Image/ImageScreen.js rename to website/storybook/1-components/Image/ImageScreen.js diff --git a/docs/storybook/1-components/Image/examples/MultipleSources.js b/website/storybook/1-components/Image/examples/MultipleSources.js similarity index 100% rename from docs/storybook/1-components/Image/examples/MultipleSources.js rename to website/storybook/1-components/Image/examples/MultipleSources.js diff --git a/docs/storybook/1-components/Image/examples/NetworkImage.js b/website/storybook/1-components/Image/examples/NetworkImage.js similarity index 100% rename from docs/storybook/1-components/Image/examples/NetworkImage.js rename to website/storybook/1-components/Image/examples/NetworkImage.js diff --git a/docs/storybook/1-components/Image/examples/PropChildren.js b/website/storybook/1-components/Image/examples/PropChildren.js similarity index 100% rename from docs/storybook/1-components/Image/examples/PropChildren.js rename to website/storybook/1-components/Image/examples/PropChildren.js diff --git a/docs/storybook/1-components/Image/examples/PropDefaultSource.js b/website/storybook/1-components/Image/examples/PropDefaultSource.js similarity index 100% rename from docs/storybook/1-components/Image/examples/PropDefaultSource.js rename to website/storybook/1-components/Image/examples/PropDefaultSource.js diff --git a/docs/storybook/1-components/Image/examples/PropDraggable.js b/website/storybook/1-components/Image/examples/PropDraggable.js similarity index 100% rename from docs/storybook/1-components/Image/examples/PropDraggable.js rename to website/storybook/1-components/Image/examples/PropDraggable.js diff --git a/docs/storybook/1-components/Image/examples/PropOnError.js b/website/storybook/1-components/Image/examples/PropOnError.js similarity index 100% rename from docs/storybook/1-components/Image/examples/PropOnError.js rename to website/storybook/1-components/Image/examples/PropOnError.js diff --git a/docs/storybook/1-components/Image/examples/PropOnLoad.js b/website/storybook/1-components/Image/examples/PropOnLoad.js similarity index 100% rename from docs/storybook/1-components/Image/examples/PropOnLoad.js rename to website/storybook/1-components/Image/examples/PropOnLoad.js diff --git a/docs/storybook/1-components/Image/examples/PropOnLoadEnd.js b/website/storybook/1-components/Image/examples/PropOnLoadEnd.js similarity index 100% rename from docs/storybook/1-components/Image/examples/PropOnLoadEnd.js rename to website/storybook/1-components/Image/examples/PropOnLoadEnd.js diff --git a/docs/storybook/1-components/Image/examples/PropOnLoadStart.js b/website/storybook/1-components/Image/examples/PropOnLoadStart.js similarity index 100% rename from docs/storybook/1-components/Image/examples/PropOnLoadStart.js rename to website/storybook/1-components/Image/examples/PropOnLoadStart.js diff --git a/docs/storybook/1-components/Image/examples/PropResizeMode.js b/website/storybook/1-components/Image/examples/PropResizeMode.js similarity index 100% rename from docs/storybook/1-components/Image/examples/PropResizeMode.js rename to website/storybook/1-components/Image/examples/PropResizeMode.js diff --git a/docs/storybook/1-components/Image/examples/PropSource.js b/website/storybook/1-components/Image/examples/PropSource.js similarity index 100% rename from docs/storybook/1-components/Image/examples/PropSource.js rename to website/storybook/1-components/Image/examples/PropSource.js diff --git a/docs/storybook/1-components/Image/examples/StaticGetSize.js b/website/storybook/1-components/Image/examples/StaticGetSize.js similarity index 100% rename from docs/storybook/1-components/Image/examples/StaticGetSize.js rename to website/storybook/1-components/Image/examples/StaticGetSize.js diff --git a/docs/storybook/1-components/Image/examples/StaticPrefetch.js b/website/storybook/1-components/Image/examples/StaticPrefetch.js similarity index 100% rename from docs/storybook/1-components/Image/examples/StaticPrefetch.js rename to website/storybook/1-components/Image/examples/StaticPrefetch.js diff --git a/docs/storybook/1-components/Image/helpers.js b/website/storybook/1-components/Image/helpers.js similarity index 100% rename from docs/storybook/1-components/Image/helpers.js rename to website/storybook/1-components/Image/helpers.js diff --git a/docs/storybook/1-components/Image/sources/index.js b/website/storybook/1-components/Image/sources/index.js similarity index 100% rename from docs/storybook/1-components/Image/sources/index.js rename to website/storybook/1-components/Image/sources/index.js diff --git a/docs/storybook/1-components/Image/sources/ladybug.jpg b/website/storybook/1-components/Image/sources/ladybug.jpg similarity index 100% rename from docs/storybook/1-components/Image/sources/ladybug.jpg rename to website/storybook/1-components/Image/sources/ladybug.jpg diff --git a/docs/storybook/1-components/Image/sources/placeholder.jpg b/website/storybook/1-components/Image/sources/placeholder.jpg similarity index 100% rename from docs/storybook/1-components/Image/sources/placeholder.jpg rename to website/storybook/1-components/Image/sources/placeholder.jpg diff --git a/docs/storybook/1-components/Picker/PickerScreen.js b/website/storybook/1-components/Picker/PickerScreen.js similarity index 100% rename from docs/storybook/1-components/Picker/PickerScreen.js rename to website/storybook/1-components/Picker/PickerScreen.js diff --git a/docs/storybook/1-components/Picker/examples/PickerExample.js b/website/storybook/1-components/Picker/examples/PickerExample.js similarity index 100% rename from docs/storybook/1-components/Picker/examples/PickerExample.js rename to website/storybook/1-components/Picker/examples/PickerExample.js diff --git a/docs/storybook/1-components/ProgressBar/ProgressScreen.js b/website/storybook/1-components/ProgressBar/ProgressScreen.js similarity index 100% rename from docs/storybook/1-components/ProgressBar/ProgressScreen.js rename to website/storybook/1-components/ProgressBar/ProgressScreen.js diff --git a/docs/storybook/1-components/ProgressBar/examples/CustomSize.js b/website/storybook/1-components/ProgressBar/examples/CustomSize.js similarity index 100% rename from docs/storybook/1-components/ProgressBar/examples/CustomSize.js rename to website/storybook/1-components/ProgressBar/examples/CustomSize.js diff --git a/docs/storybook/1-components/ProgressBar/examples/PropColor.js b/website/storybook/1-components/ProgressBar/examples/PropColor.js similarity index 100% rename from docs/storybook/1-components/ProgressBar/examples/PropColor.js rename to website/storybook/1-components/ProgressBar/examples/PropColor.js diff --git a/docs/storybook/1-components/ProgressBar/examples/PropIndeterminate.js b/website/storybook/1-components/ProgressBar/examples/PropIndeterminate.js similarity index 100% rename from docs/storybook/1-components/ProgressBar/examples/PropIndeterminate.js rename to website/storybook/1-components/ProgressBar/examples/PropIndeterminate.js diff --git a/docs/storybook/1-components/ProgressBar/examples/PropProgress.js b/website/storybook/1-components/ProgressBar/examples/PropProgress.js similarity index 100% rename from docs/storybook/1-components/ProgressBar/examples/PropProgress.js rename to website/storybook/1-components/ProgressBar/examples/PropProgress.js diff --git a/docs/storybook/1-components/ProgressBar/examples/PropTrackColor.js b/website/storybook/1-components/ProgressBar/examples/PropTrackColor.js similarity index 100% rename from docs/storybook/1-components/ProgressBar/examples/PropTrackColor.js rename to website/storybook/1-components/ProgressBar/examples/PropTrackColor.js diff --git a/docs/storybook/1-components/ProgressBar/helpers.js b/website/storybook/1-components/ProgressBar/helpers.js similarity index 100% rename from docs/storybook/1-components/ProgressBar/helpers.js rename to website/storybook/1-components/ProgressBar/helpers.js diff --git a/docs/storybook/1-components/ScrollView/ScrollViewScreen.js b/website/storybook/1-components/ScrollView/ScrollViewScreen.js similarity index 100% rename from docs/storybook/1-components/ScrollView/ScrollViewScreen.js rename to website/storybook/1-components/ScrollView/ScrollViewScreen.js diff --git a/docs/storybook/1-components/ScrollView/examples/Horizontal.js b/website/storybook/1-components/ScrollView/examples/Horizontal.js similarity index 100% rename from docs/storybook/1-components/ScrollView/examples/Horizontal.js rename to website/storybook/1-components/ScrollView/examples/Horizontal.js diff --git a/docs/storybook/1-components/ScrollView/examples/ScrollTo.js b/website/storybook/1-components/ScrollView/examples/ScrollTo.js similarity index 100% rename from docs/storybook/1-components/ScrollView/examples/ScrollTo.js rename to website/storybook/1-components/ScrollView/examples/ScrollTo.js diff --git a/docs/storybook/1-components/ScrollView/examples/ScrollToEnd.js b/website/storybook/1-components/ScrollView/examples/ScrollToEnd.js similarity index 100% rename from docs/storybook/1-components/ScrollView/examples/ScrollToEnd.js rename to website/storybook/1-components/ScrollView/examples/ScrollToEnd.js diff --git a/docs/storybook/1-components/Switch/SwitchScreen.js b/website/storybook/1-components/Switch/SwitchScreen.js similarity index 100% rename from docs/storybook/1-components/Switch/SwitchScreen.js rename to website/storybook/1-components/Switch/SwitchScreen.js diff --git a/docs/storybook/1-components/Switch/examples/CustomSize.js b/website/storybook/1-components/Switch/examples/CustomSize.js similarity index 100% rename from docs/storybook/1-components/Switch/examples/CustomSize.js rename to website/storybook/1-components/Switch/examples/CustomSize.js diff --git a/docs/storybook/1-components/Switch/examples/PropActiveThumbColor.js b/website/storybook/1-components/Switch/examples/PropActiveThumbColor.js similarity index 100% rename from docs/storybook/1-components/Switch/examples/PropActiveThumbColor.js rename to website/storybook/1-components/Switch/examples/PropActiveThumbColor.js diff --git a/docs/storybook/1-components/Switch/examples/PropActiveTrackColor.js b/website/storybook/1-components/Switch/examples/PropActiveTrackColor.js similarity index 100% rename from docs/storybook/1-components/Switch/examples/PropActiveTrackColor.js rename to website/storybook/1-components/Switch/examples/PropActiveTrackColor.js diff --git a/docs/storybook/1-components/Switch/examples/PropDisabled.js b/website/storybook/1-components/Switch/examples/PropDisabled.js similarity index 100% rename from docs/storybook/1-components/Switch/examples/PropDisabled.js rename to website/storybook/1-components/Switch/examples/PropDisabled.js diff --git a/docs/storybook/1-components/Switch/examples/PropOnValueChange.js b/website/storybook/1-components/Switch/examples/PropOnValueChange.js similarity index 100% rename from docs/storybook/1-components/Switch/examples/PropOnValueChange.js rename to website/storybook/1-components/Switch/examples/PropOnValueChange.js diff --git a/docs/storybook/1-components/Switch/examples/PropThumbColor.js b/website/storybook/1-components/Switch/examples/PropThumbColor.js similarity index 100% rename from docs/storybook/1-components/Switch/examples/PropThumbColor.js rename to website/storybook/1-components/Switch/examples/PropThumbColor.js diff --git a/docs/storybook/1-components/Switch/examples/PropTrackColor.js b/website/storybook/1-components/Switch/examples/PropTrackColor.js similarity index 100% rename from docs/storybook/1-components/Switch/examples/PropTrackColor.js rename to website/storybook/1-components/Switch/examples/PropTrackColor.js diff --git a/docs/storybook/1-components/Switch/examples/PropValue.js b/website/storybook/1-components/Switch/examples/PropValue.js similarity index 100% rename from docs/storybook/1-components/Switch/examples/PropValue.js rename to website/storybook/1-components/Switch/examples/PropValue.js diff --git a/docs/storybook/1-components/Switch/helpers.js b/website/storybook/1-components/Switch/helpers.js similarity index 100% rename from docs/storybook/1-components/Switch/helpers.js rename to website/storybook/1-components/Switch/helpers.js diff --git a/docs/storybook/1-components/Text/TextScreen.js b/website/storybook/1-components/Text/TextScreen.js similarity index 100% rename from docs/storybook/1-components/Text/TextScreen.js rename to website/storybook/1-components/Text/TextScreen.js diff --git a/docs/storybook/1-components/Text/examples/PropChildren.js b/website/storybook/1-components/Text/examples/PropChildren.js similarity index 100% rename from docs/storybook/1-components/Text/examples/PropChildren.js rename to website/storybook/1-components/Text/examples/PropChildren.js diff --git a/docs/storybook/1-components/Text/examples/PropNumberOfLines.js b/website/storybook/1-components/Text/examples/PropNumberOfLines.js similarity index 100% rename from docs/storybook/1-components/Text/examples/PropNumberOfLines.js rename to website/storybook/1-components/Text/examples/PropNumberOfLines.js diff --git a/docs/storybook/1-components/Text/examples/PropOnLayout.js b/website/storybook/1-components/Text/examples/PropOnLayout.js similarity index 100% rename from docs/storybook/1-components/Text/examples/PropOnLayout.js rename to website/storybook/1-components/Text/examples/PropOnLayout.js diff --git a/docs/storybook/1-components/Text/examples/PropOnPress.js b/website/storybook/1-components/Text/examples/PropOnPress.js similarity index 100% rename from docs/storybook/1-components/Text/examples/PropOnPress.js rename to website/storybook/1-components/Text/examples/PropOnPress.js diff --git a/docs/storybook/1-components/Text/examples/PropSelectable.js b/website/storybook/1-components/Text/examples/PropSelectable.js similarity index 100% rename from docs/storybook/1-components/Text/examples/PropSelectable.js rename to website/storybook/1-components/Text/examples/PropSelectable.js diff --git a/docs/storybook/1-components/Text/examples/legacy.js b/website/storybook/1-components/Text/examples/legacy.js similarity index 100% rename from docs/storybook/1-components/Text/examples/legacy.js rename to website/storybook/1-components/Text/examples/legacy.js diff --git a/docs/storybook/1-components/TextInput/TextInputScreen.js b/website/storybook/1-components/TextInput/TextInputScreen.js similarity index 100% rename from docs/storybook/1-components/TextInput/TextInputScreen.js rename to website/storybook/1-components/TextInput/TextInputScreen.js diff --git a/docs/storybook/1-components/TextInput/examples/AutoExpandingTextInput.js b/website/storybook/1-components/TextInput/examples/AutoExpandingTextInput.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/AutoExpandingTextInput.js rename to website/storybook/1-components/TextInput/examples/AutoExpandingTextInput.js diff --git a/docs/storybook/1-components/TextInput/examples/PropAutoCapitalize.js b/website/storybook/1-components/TextInput/examples/PropAutoCapitalize.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropAutoCapitalize.js rename to website/storybook/1-components/TextInput/examples/PropAutoCapitalize.js diff --git a/docs/storybook/1-components/TextInput/examples/PropAutoFocus.js b/website/storybook/1-components/TextInput/examples/PropAutoFocus.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropAutoFocus.js rename to website/storybook/1-components/TextInput/examples/PropAutoFocus.js diff --git a/docs/storybook/1-components/TextInput/examples/PropBlurOnSubmit.js b/website/storybook/1-components/TextInput/examples/PropBlurOnSubmit.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropBlurOnSubmit.js rename to website/storybook/1-components/TextInput/examples/PropBlurOnSubmit.js diff --git a/docs/storybook/1-components/TextInput/examples/PropClearButtonMode.js b/website/storybook/1-components/TextInput/examples/PropClearButtonMode.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropClearButtonMode.js rename to website/storybook/1-components/TextInput/examples/PropClearButtonMode.js diff --git a/docs/storybook/1-components/TextInput/examples/PropClearTextOnFocus.js b/website/storybook/1-components/TextInput/examples/PropClearTextOnFocus.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropClearTextOnFocus.js rename to website/storybook/1-components/TextInput/examples/PropClearTextOnFocus.js diff --git a/docs/storybook/1-components/TextInput/examples/PropEditable.js b/website/storybook/1-components/TextInput/examples/PropEditable.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropEditable.js rename to website/storybook/1-components/TextInput/examples/PropEditable.js diff --git a/docs/storybook/1-components/TextInput/examples/PropKeyboardType.js b/website/storybook/1-components/TextInput/examples/PropKeyboardType.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropKeyboardType.js rename to website/storybook/1-components/TextInput/examples/PropKeyboardType.js diff --git a/docs/storybook/1-components/TextInput/examples/PropMaxLength.js b/website/storybook/1-components/TextInput/examples/PropMaxLength.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropMaxLength.js rename to website/storybook/1-components/TextInput/examples/PropMaxLength.js diff --git a/docs/storybook/1-components/TextInput/examples/PropMultiline.js b/website/storybook/1-components/TextInput/examples/PropMultiline.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropMultiline.js rename to website/storybook/1-components/TextInput/examples/PropMultiline.js diff --git a/docs/storybook/1-components/TextInput/examples/PropNumberOfLines.js b/website/storybook/1-components/TextInput/examples/PropNumberOfLines.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropNumberOfLines.js rename to website/storybook/1-components/TextInput/examples/PropNumberOfLines.js diff --git a/docs/storybook/1-components/TextInput/examples/PropOnBlur.js b/website/storybook/1-components/TextInput/examples/PropOnBlur.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropOnBlur.js rename to website/storybook/1-components/TextInput/examples/PropOnBlur.js diff --git a/docs/storybook/1-components/TextInput/examples/PropOnChange.js b/website/storybook/1-components/TextInput/examples/PropOnChange.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropOnChange.js rename to website/storybook/1-components/TextInput/examples/PropOnChange.js diff --git a/docs/storybook/1-components/TextInput/examples/PropOnChangeText.js b/website/storybook/1-components/TextInput/examples/PropOnChangeText.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropOnChangeText.js rename to website/storybook/1-components/TextInput/examples/PropOnChangeText.js diff --git a/docs/storybook/1-components/TextInput/examples/PropOnFocus.js b/website/storybook/1-components/TextInput/examples/PropOnFocus.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropOnFocus.js rename to website/storybook/1-components/TextInput/examples/PropOnFocus.js diff --git a/docs/storybook/1-components/TextInput/examples/PropOnKeyPress.js b/website/storybook/1-components/TextInput/examples/PropOnKeyPress.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropOnKeyPress.js rename to website/storybook/1-components/TextInput/examples/PropOnKeyPress.js diff --git a/docs/storybook/1-components/TextInput/examples/PropOnSelectionChange.js b/website/storybook/1-components/TextInput/examples/PropOnSelectionChange.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropOnSelectionChange.js rename to website/storybook/1-components/TextInput/examples/PropOnSelectionChange.js diff --git a/docs/storybook/1-components/TextInput/examples/PropOnSubmitEditing.js b/website/storybook/1-components/TextInput/examples/PropOnSubmitEditing.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropOnSubmitEditing.js rename to website/storybook/1-components/TextInput/examples/PropOnSubmitEditing.js diff --git a/docs/storybook/1-components/TextInput/examples/PropPlaceholder.js b/website/storybook/1-components/TextInput/examples/PropPlaceholder.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropPlaceholder.js rename to website/storybook/1-components/TextInput/examples/PropPlaceholder.js diff --git a/docs/storybook/1-components/TextInput/examples/PropSecureTextEntry.js b/website/storybook/1-components/TextInput/examples/PropSecureTextEntry.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropSecureTextEntry.js rename to website/storybook/1-components/TextInput/examples/PropSecureTextEntry.js diff --git a/docs/storybook/1-components/TextInput/examples/PropSelectTextOnFocus.js b/website/storybook/1-components/TextInput/examples/PropSelectTextOnFocus.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropSelectTextOnFocus.js rename to website/storybook/1-components/TextInput/examples/PropSelectTextOnFocus.js diff --git a/docs/storybook/1-components/TextInput/examples/PropSelection.js b/website/storybook/1-components/TextInput/examples/PropSelection.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropSelection.js rename to website/storybook/1-components/TextInput/examples/PropSelection.js diff --git a/docs/storybook/1-components/TextInput/examples/PropStyle.js b/website/storybook/1-components/TextInput/examples/PropStyle.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/PropStyle.js rename to website/storybook/1-components/TextInput/examples/PropStyle.js diff --git a/docs/storybook/1-components/TextInput/examples/Rewrite.js b/website/storybook/1-components/TextInput/examples/Rewrite.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/Rewrite.js rename to website/storybook/1-components/TextInput/examples/Rewrite.js diff --git a/docs/storybook/1-components/TextInput/examples/TextInputEvents.js b/website/storybook/1-components/TextInput/examples/TextInputEvents.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/TextInputEvents.js rename to website/storybook/1-components/TextInput/examples/TextInputEvents.js diff --git a/docs/storybook/1-components/TextInput/examples/TouchableWrapper.js b/website/storybook/1-components/TextInput/examples/TouchableWrapper.js similarity index 100% rename from docs/storybook/1-components/TextInput/examples/TouchableWrapper.js rename to website/storybook/1-components/TextInput/examples/TouchableWrapper.js diff --git a/docs/storybook/1-components/TextInput/helpers.js b/website/storybook/1-components/TextInput/helpers.js similarity index 100% rename from docs/storybook/1-components/TextInput/helpers.js rename to website/storybook/1-components/TextInput/helpers.js diff --git a/docs/storybook/1-components/Touchable/TouchableHighlightScreen.js b/website/storybook/1-components/Touchable/TouchableHighlightScreen.js similarity index 100% rename from docs/storybook/1-components/Touchable/TouchableHighlightScreen.js rename to website/storybook/1-components/Touchable/TouchableHighlightScreen.js diff --git a/docs/storybook/1-components/Touchable/TouchableOpacityScreen.js b/website/storybook/1-components/Touchable/TouchableOpacityScreen.js similarity index 100% rename from docs/storybook/1-components/Touchable/TouchableOpacityScreen.js rename to website/storybook/1-components/Touchable/TouchableOpacityScreen.js diff --git a/docs/storybook/1-components/Touchable/TouchableWithoutFeedbackScreen.js b/website/storybook/1-components/Touchable/TouchableWithoutFeedbackScreen.js similarity index 100% rename from docs/storybook/1-components/Touchable/TouchableWithoutFeedbackScreen.js rename to website/storybook/1-components/Touchable/TouchableWithoutFeedbackScreen.js diff --git a/docs/storybook/1-components/Touchable/examples/CustomStyleOverrides.js b/website/storybook/1-components/Touchable/examples/CustomStyleOverrides.js similarity index 100% rename from docs/storybook/1-components/Touchable/examples/CustomStyleOverrides.js rename to website/storybook/1-components/Touchable/examples/CustomStyleOverrides.js diff --git a/docs/storybook/1-components/Touchable/examples/DelayEvents.js b/website/storybook/1-components/Touchable/examples/DelayEvents.js similarity index 100% rename from docs/storybook/1-components/Touchable/examples/DelayEvents.js rename to website/storybook/1-components/Touchable/examples/DelayEvents.js diff --git a/docs/storybook/1-components/Touchable/examples/FeedbackEvents.js b/website/storybook/1-components/Touchable/examples/FeedbackEvents.js similarity index 100% rename from docs/storybook/1-components/Touchable/examples/FeedbackEvents.js rename to website/storybook/1-components/Touchable/examples/FeedbackEvents.js diff --git a/docs/storybook/1-components/Touchable/examples/PropDisabled.js b/website/storybook/1-components/Touchable/examples/PropDisabled.js similarity index 100% rename from docs/storybook/1-components/Touchable/examples/PropDisabled.js rename to website/storybook/1-components/Touchable/examples/PropDisabled.js diff --git a/docs/storybook/1-components/Touchable/examples/PropHitSlop.js b/website/storybook/1-components/Touchable/examples/PropHitSlop.js similarity index 100% rename from docs/storybook/1-components/Touchable/examples/PropHitSlop.js rename to website/storybook/1-components/Touchable/examples/PropHitSlop.js diff --git a/docs/storybook/1-components/Touchable/examples/legacy.js b/website/storybook/1-components/Touchable/examples/legacy.js similarity index 100% rename from docs/storybook/1-components/Touchable/examples/legacy.js rename to website/storybook/1-components/Touchable/examples/legacy.js diff --git a/docs/storybook/1-components/View/ViewScreen.js b/website/storybook/1-components/View/ViewScreen.js similarity index 100% rename from docs/storybook/1-components/View/ViewScreen.js rename to website/storybook/1-components/View/ViewScreen.js diff --git a/docs/storybook/1-components/View/examples/PropPointerEvents.js b/website/storybook/1-components/View/examples/PropPointerEvents.js similarity index 100% rename from docs/storybook/1-components/View/examples/PropPointerEvents.js rename to website/storybook/1-components/View/examples/PropPointerEvents.js diff --git a/docs/storybook/1-components/View/examples/PropStyle.js b/website/storybook/1-components/View/examples/PropStyle.js similarity index 100% rename from docs/storybook/1-components/View/examples/PropStyle.js rename to website/storybook/1-components/View/examples/PropStyle.js diff --git a/docs/storybook/1-components/View/examples/ZIndex.js b/website/storybook/1-components/View/examples/ZIndex.js similarity index 100% rename from docs/storybook/1-components/View/examples/ZIndex.js rename to website/storybook/1-components/View/examples/ZIndex.js diff --git a/docs/storybook/1-components/View/examples/legacy.js b/website/storybook/1-components/View/examples/legacy.js similarity index 100% rename from docs/storybook/1-components/View/examples/legacy.js rename to website/storybook/1-components/View/examples/legacy.js diff --git a/docs/storybook/1-components/View/examples/transforms.js b/website/storybook/1-components/View/examples/transforms.js similarity index 100% rename from docs/storybook/1-components/View/examples/transforms.js rename to website/storybook/1-components/View/examples/transforms.js diff --git a/docs/storybook/1-components/View/helpers.js b/website/storybook/1-components/View/helpers.js similarity index 100% rename from docs/storybook/1-components/View/helpers.js rename to website/storybook/1-components/View/helpers.js diff --git a/docs/storybook/2-apis/AppRegistry/AppRegistryScreen.js b/website/storybook/2-apis/AppRegistry/AppRegistryScreen.js similarity index 100% rename from docs/storybook/2-apis/AppRegistry/AppRegistryScreen.js rename to website/storybook/2-apis/AppRegistry/AppRegistryScreen.js diff --git a/docs/storybook/2-apis/AppState/AppStateScreen.js b/website/storybook/2-apis/AppState/AppStateScreen.js similarity index 100% rename from docs/storybook/2-apis/AppState/AppStateScreen.js rename to website/storybook/2-apis/AppState/AppStateScreen.js diff --git a/docs/storybook/2-apis/AppState/examples/StateChanges.js b/website/storybook/2-apis/AppState/examples/StateChanges.js similarity index 100% rename from docs/storybook/2-apis/AppState/examples/StateChanges.js rename to website/storybook/2-apis/AppState/examples/StateChanges.js diff --git a/docs/storybook/2-apis/AsyncStorage/AsyncStorageScreen.js b/website/storybook/2-apis/AsyncStorage/AsyncStorageScreen.js similarity index 100% rename from docs/storybook/2-apis/AsyncStorage/AsyncStorageScreen.js rename to website/storybook/2-apis/AsyncStorage/AsyncStorageScreen.js diff --git a/docs/storybook/2-apis/Clipboard/ClipboardScreen.js b/website/storybook/2-apis/Clipboard/ClipboardScreen.js similarity index 100% rename from docs/storybook/2-apis/Clipboard/ClipboardScreen.js rename to website/storybook/2-apis/Clipboard/ClipboardScreen.js diff --git a/docs/storybook/2-apis/Clipboard/examples/SetString.js b/website/storybook/2-apis/Clipboard/examples/SetString.js similarity index 100% rename from docs/storybook/2-apis/Clipboard/examples/SetString.js rename to website/storybook/2-apis/Clipboard/examples/SetString.js diff --git a/docs/storybook/2-apis/Dimensions/DimensionsScreen.js b/website/storybook/2-apis/Dimensions/DimensionsScreen.js similarity index 100% rename from docs/storybook/2-apis/Dimensions/DimensionsScreen.js rename to website/storybook/2-apis/Dimensions/DimensionsScreen.js diff --git a/docs/storybook/2-apis/Dimensions/examples/DimensionsChange.js b/website/storybook/2-apis/Dimensions/examples/DimensionsChange.js similarity index 100% rename from docs/storybook/2-apis/Dimensions/examples/DimensionsChange.js rename to website/storybook/2-apis/Dimensions/examples/DimensionsChange.js diff --git a/docs/storybook/2-apis/I18nManager/I18nManagerScreen.js b/website/storybook/2-apis/I18nManager/I18nManagerScreen.js similarity index 100% rename from docs/storybook/2-apis/I18nManager/I18nManagerScreen.js rename to website/storybook/2-apis/I18nManager/I18nManagerScreen.js diff --git a/docs/storybook/2-apis/I18nManager/examples/RTLToggle.js b/website/storybook/2-apis/I18nManager/examples/RTLToggle.js similarity index 100% rename from docs/storybook/2-apis/I18nManager/examples/RTLToggle.js rename to website/storybook/2-apis/I18nManager/examples/RTLToggle.js diff --git a/docs/storybook/2-apis/Linking/LinkingScreen.js b/website/storybook/2-apis/Linking/LinkingScreen.js similarity index 100% rename from docs/storybook/2-apis/Linking/LinkingScreen.js rename to website/storybook/2-apis/Linking/LinkingScreen.js diff --git a/docs/storybook/2-apis/Linking/examples/OpenURL.js b/website/storybook/2-apis/Linking/examples/OpenURL.js similarity index 100% rename from docs/storybook/2-apis/Linking/examples/OpenURL.js rename to website/storybook/2-apis/Linking/examples/OpenURL.js diff --git a/docs/storybook/2-apis/NetInfo/NetInfoScreen.js b/website/storybook/2-apis/NetInfo/NetInfoScreen.js similarity index 100% rename from docs/storybook/2-apis/NetInfo/NetInfoScreen.js rename to website/storybook/2-apis/NetInfo/NetInfoScreen.js diff --git a/docs/storybook/2-apis/PanResponder/PanResponderScreen.js b/website/storybook/2-apis/PanResponder/PanResponderScreen.js similarity index 100% rename from docs/storybook/2-apis/PanResponder/PanResponderScreen.js rename to website/storybook/2-apis/PanResponder/PanResponderScreen.js diff --git a/docs/storybook/2-apis/PanResponder/examples/DraggableCircle.js b/website/storybook/2-apis/PanResponder/examples/DraggableCircle.js similarity index 100% rename from docs/storybook/2-apis/PanResponder/examples/DraggableCircle.js rename to website/storybook/2-apis/PanResponder/examples/DraggableCircle.js diff --git a/docs/storybook/2-apis/PixelRatio/PixelRatioScreen.js b/website/storybook/2-apis/PixelRatio/PixelRatioScreen.js similarity index 100% rename from docs/storybook/2-apis/PixelRatio/PixelRatioScreen.js rename to website/storybook/2-apis/PixelRatio/PixelRatioScreen.js diff --git a/docs/storybook/2-apis/Platform/PlatformScreen.js b/website/storybook/2-apis/Platform/PlatformScreen.js similarity index 100% rename from docs/storybook/2-apis/Platform/PlatformScreen.js rename to website/storybook/2-apis/Platform/PlatformScreen.js diff --git a/docs/storybook/2-apis/StyleSheet/StyleSheetScreen.js b/website/storybook/2-apis/StyleSheet/StyleSheetScreen.js similarity index 100% rename from docs/storybook/2-apis/StyleSheet/StyleSheetScreen.js rename to website/storybook/2-apis/StyleSheet/StyleSheetScreen.js diff --git a/docs/storybook/2-apis/Vibration/VibrationScreen.js b/website/storybook/2-apis/Vibration/VibrationScreen.js similarity index 100% rename from docs/storybook/2-apis/Vibration/VibrationScreen.js rename to website/storybook/2-apis/Vibration/VibrationScreen.js diff --git a/docs/storybook/3-demos/Calculator/Calculator.js b/website/storybook/3-demos/Calculator/Calculator.js similarity index 100% rename from docs/storybook/3-demos/Calculator/Calculator.js rename to website/storybook/3-demos/Calculator/Calculator.js diff --git a/docs/storybook/3-demos/Calculator/CalculatorScreen.js b/website/storybook/3-demos/Calculator/CalculatorScreen.js similarity index 100% rename from docs/storybook/3-demos/Calculator/CalculatorScreen.js rename to website/storybook/3-demos/Calculator/CalculatorScreen.js diff --git a/docs/storybook/3-demos/Game2048/Game2048.js b/website/storybook/3-demos/Game2048/Game2048.js similarity index 100% rename from docs/storybook/3-demos/Game2048/Game2048.js rename to website/storybook/3-demos/Game2048/Game2048.js diff --git a/docs/storybook/3-demos/Game2048/Game2048Screen.js b/website/storybook/3-demos/Game2048/Game2048Screen.js similarity index 100% rename from docs/storybook/3-demos/Game2048/Game2048Screen.js rename to website/storybook/3-demos/Game2048/Game2048Screen.js diff --git a/docs/storybook/3-demos/Game2048/GameBoard.js b/website/storybook/3-demos/Game2048/GameBoard.js similarity index 100% rename from docs/storybook/3-demos/Game2048/GameBoard.js rename to website/storybook/3-demos/Game2048/GameBoard.js diff --git a/docs/storybook/3-demos/TicTacToe/TicTacToe.js b/website/storybook/3-demos/TicTacToe/TicTacToe.js similarity index 100% rename from docs/storybook/3-demos/TicTacToe/TicTacToe.js rename to website/storybook/3-demos/TicTacToe/TicTacToe.js diff --git a/docs/storybook/3-demos/TicTacToe/TicTacToeScreen.js b/website/storybook/3-demos/TicTacToe/TicTacToeScreen.js similarity index 100% rename from docs/storybook/3-demos/TicTacToe/TicTacToeScreen.js rename to website/storybook/3-demos/TicTacToe/TicTacToeScreen.js diff --git a/docs/storybook/ui-explorer/AppText.js b/website/storybook/ui-explorer/AppText.js similarity index 100% rename from docs/storybook/ui-explorer/AppText.js rename to website/storybook/ui-explorer/AppText.js diff --git a/docs/storybook/ui-explorer/Code.js b/website/storybook/ui-explorer/Code.js similarity index 100% rename from docs/storybook/ui-explorer/Code.js rename to website/storybook/ui-explorer/Code.js diff --git a/docs/storybook/ui-explorer/DocItem.js b/website/storybook/ui-explorer/DocItem.js similarity index 100% rename from docs/storybook/ui-explorer/DocItem.js rename to website/storybook/ui-explorer/DocItem.js diff --git a/docs/storybook/ui-explorer/ExternalLink.js b/website/storybook/ui-explorer/ExternalLink.js similarity index 100% rename from docs/storybook/ui-explorer/ExternalLink.js rename to website/storybook/ui-explorer/ExternalLink.js diff --git a/docs/storybook/ui-explorer/Section.js b/website/storybook/ui-explorer/Section.js similarity index 100% rename from docs/storybook/ui-explorer/Section.js rename to website/storybook/ui-explorer/Section.js diff --git a/docs/storybook/ui-explorer/StyleList.js b/website/storybook/ui-explorer/StyleList.js similarity index 100% rename from docs/storybook/ui-explorer/StyleList.js rename to website/storybook/ui-explorer/StyleList.js diff --git a/docs/storybook/ui-explorer/TextList.js b/website/storybook/ui-explorer/TextList.js similarity index 100% rename from docs/storybook/ui-explorer/TextList.js rename to website/storybook/ui-explorer/TextList.js diff --git a/docs/storybook/ui-explorer/UIExplorer.js b/website/storybook/ui-explorer/UIExplorer.js similarity index 100% rename from docs/storybook/ui-explorer/UIExplorer.js rename to website/storybook/ui-explorer/UIExplorer.js diff --git a/docs/storybook/ui-explorer/index.js b/website/storybook/ui-explorer/index.js similarity index 100% rename from docs/storybook/ui-explorer/index.js rename to website/storybook/ui-explorer/index.js diff --git a/docs/storybook/ui-explorer/insertBetween.js b/website/storybook/ui-explorer/insertBetween.js similarity index 100% rename from docs/storybook/ui-explorer/insertBetween.js rename to website/storybook/ui-explorer/insertBetween.js diff --git a/docs/yarn.lock b/website/yarn.lock similarity index 100% rename from docs/yarn.lock rename to website/yarn.lock diff --git a/yarn.lock b/yarn.lock index ce290f638..d763899aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,6 +25,13 @@ dependencies: "@babel/types" "7.0.0-beta.31" +"@babel/helper-module-imports@7.0.0-beta.32": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.32.tgz#8126fc024107c226879841b973677a4f4e510a03" + dependencies: + "@babel/types" "7.0.0-beta.32" + lodash "^4.2.0" + "@babel/template@7.0.0-beta.31": version "7.0.0-beta.31" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda" @@ -55,23 +62,234 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" -"@types/node@^6.0.46": - version "6.0.88" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.88.tgz#f618f11a944f6a18d92b5c472028728a3e3d4b66" +"@babel/types@7.0.0-beta.32": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.32.tgz#c317d0ecc89297b80bbcb2f50608e31f6452a5ff" + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + +"@hypnosphi/fuse.js@^3.0.9": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@hypnosphi/fuse.js/-/fuse.js-3.0.9.tgz#ea99f6121b4a8f065b4c71f85595db2714498807" + +"@storybook/addon-actions@^3.2.18": + version "3.2.18" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.2.18.tgz#46d97b0add955698d66becb5d51e68a4d387b822" + dependencies: + "@storybook/addons" "^3.2.18" + deep-equal "^1.0.1" + json-stringify-safe "^5.0.1" + prop-types "^15.6.0" + react-inspector "^2.2.2" + uuid "^3.1.0" + +"@storybook/addon-links@^3.2.18": + version "3.2.18" + resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.2.18.tgz#a1fd96dd91d56204da92632baa36a2263d2aeebb" + dependencies: + "@storybook/addons" "^3.2.18" + +"@storybook/addon-options@^3.1.6": + version "3.2.18" + resolved "https://registry.yarnpkg.com/@storybook/addon-options/-/addon-options-3.2.18.tgz#d87dbe3ead00537c4ad851a3555be39910f05b31" + dependencies: + "@storybook/addons" "^3.2.18" + +"@storybook/addons@^3.2.18": + version "3.2.18" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.2.18.tgz#2c1d42a0b661db2e429d1c406e79765ae5c71458" + +"@storybook/channel-postmessage@^3.2.18": + version "3.2.18" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.2.18.tgz#8193e2fbae4f46a20a58fb6cdfd722c1743a3dd0" + dependencies: + "@storybook/channels" "^3.2.18" + global "^4.3.2" + json-stringify-safe "^5.0.1" + +"@storybook/channels@^3.2.18": + version "3.2.18" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.2.18.tgz#c5d8c4ac780c6ebb4b1c360d8faf9207fd4fbafd" + +"@storybook/components@^3.2.18": + version "3.2.18" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.2.18.tgz#142dd10414a717c24734f063af6b2b7b9bd06b4a" + dependencies: + glamor "^2.20.40" + glamorous "^4.11.0" + prop-types "^15.6.0" + +"@storybook/mantra-core@^1.7.0": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@storybook/mantra-core/-/mantra-core-1.7.2.tgz#e10c7faca29769e97131e0e0308ef7cfb655b70c" + dependencies: + "@storybook/react-komposer" "^2.0.1" + "@storybook/react-simple-di" "^1.2.1" + babel-runtime "6.x.x" + +"@storybook/react-fuzzy@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@storybook/react-fuzzy/-/react-fuzzy-0.4.3.tgz#36f7536ba97bf08b03cb57f47c58ae2cca330aec" + dependencies: + babel-runtime "^6.23.0" + classnames "^2.2.5" + fuse.js "^3.0.1" + prop-types "^15.5.9" + +"@storybook/react-komposer@^2.0.0", "@storybook/react-komposer@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@storybook/react-komposer/-/react-komposer-2.0.3.tgz#f9e12a9586b2ce95c24c137eabb8b71527ddb369" + dependencies: + "@storybook/react-stubber" "^1.0.0" + babel-runtime "^6.11.6" + hoist-non-react-statics "^1.2.0" + lodash.pick "^4.4.0" + shallowequal "^0.2.2" + +"@storybook/react-simple-di@^1.2.1": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@storybook/react-simple-di/-/react-simple-di-1.3.0.tgz#13116d89a2f42898716a7f8c4095b47415526371" + dependencies: + babel-runtime "6.x.x" + create-react-class "^15.6.2" + hoist-non-react-statics "1.x.x" + prop-types "^15.6.0" + +"@storybook/react-stubber@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@storybook/react-stubber/-/react-stubber-1.0.1.tgz#8c312c2658b9eeafce470e1c39e4193f0b5bf9b1" + dependencies: + babel-runtime "^6.5.0" + +"@storybook/react@^3.2.18": + version "3.2.18" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-3.2.18.tgz#bb0a86cf808c3c90fedc11e489f10660f650c781" + dependencies: + "@storybook/addon-actions" "^3.2.18" + "@storybook/addon-links" "^3.2.18" + "@storybook/addons" "^3.2.18" + "@storybook/channel-postmessage" "^3.2.18" + "@storybook/ui" "^3.2.18" + airbnb-js-shims "^1.4.0" + autoprefixer "^7.2.3" + babel-core "^6.26.0" + babel-loader "^7.1.2" + babel-plugin-react-docgen "^1.8.0" + babel-plugin-transform-regenerator "^6.26.0" + babel-plugin-transform-runtime "^6.23.0" + babel-preset-env "^1.6.1" + babel-preset-minify "^0.2.0" + babel-preset-react "^6.24.1" + babel-preset-react-app "^3.1.0" + babel-preset-stage-0 "^6.24.1" + babel-runtime "^6.26.0" + case-sensitive-paths-webpack-plugin "^2.1.1" + chalk "^2.3.0" + commander "^2.12.2" + common-tags "^1.5.1" + configstore "^3.1.1" + core-js "^2.5.3" + css-loader "^0.28.7" + dotenv-webpack "^1.5.4" + express "^4.16.2" + file-loader "^1.1.5" + find-cache-dir "^1.0.0" + glamor "^2.20.40" + glamorous "^4.11.0" + global "^4.3.2" + json-loader "^0.5.7" + json-stringify-safe "^5.0.1" + json5 "^0.5.1" + lodash.flattendeep "^4.4.0" + postcss-flexbugs-fixes "^3.2.0" + postcss-loader "^2.0.9" + prop-types "^15.6.0" + qs "^6.5.1" + redux "^3.7.2" + request "^2.83.0" + serve-favicon "^2.4.5" + shelljs "^0.7.8" + style-loader "^0.19.1" + url-loader "^0.6.2" + util-deprecate "^1.0.2" + uuid "^3.1.0" + webpack "^3.10.0" + webpack-dev-middleware "^1.12.2" + webpack-hot-middleware "^2.21.0" + +"@storybook/ui@^3.2.18": + version "3.2.18" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.2.18.tgz#4d19f8daff7ec37cebe4d2b5d20e81e3676d8938" + dependencies: + "@hypnosphi/fuse.js" "^3.0.9" + "@storybook/components" "^3.2.18" + "@storybook/mantra-core" "^1.7.0" + "@storybook/react-fuzzy" "^0.4.3" + "@storybook/react-komposer" "^2.0.0" + babel-runtime "^6.26.0" + deep-equal "^1.0.1" + events "^1.1.1" + global "^4.3.2" + json-stringify-safe "^5.0.1" + keycode "^2.1.8" + lodash.debounce "^4.0.8" + lodash.pick "^4.4.0" + lodash.sortby "^4.7.0" + podda "^1.2.2" + prop-types "^15.6.0" + qs "^6.5.1" + react-icons "^2.2.7" + react-inspector "^2.2.2" + react-modal "^3.1.8" + react-split-pane "^0.1.71" + react-treebeard "^2.0.3" + redux "^3.7.2" + +"@types/inline-style-prefixer@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/inline-style-prefixer/-/inline-style-prefixer-3.0.1.tgz#8541e636b029124b747952e9a28848286d2b5bf6" + +"@types/lodash@^4.14.64", "@types/lodash@^4.14.78": + version "4.14.91" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.91.tgz#794611b28056d16b5436059c6d800b39d573cd3a" + +"@types/node@*": + version "8.5.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.2.tgz#83b8103fa9a2c2e83d78f701a9aa7c9539739aa5" + +"@types/react-dom@^16.0.0": + version "16.0.3" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.3.tgz#8accad7eabdab4cca3e1a56f5ccb57de2da0ff64" + dependencies: + "@types/node" "*" + "@types/react" "*" + +"@types/react@*", "@types/react@^16.0.0", "@types/react@^16.0.18": + version "16.0.31" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.31.tgz#5285da62f3ac62b797f6d0729a1d6181f3180c3e" + +JSONStream@^1.0.4: + version "1.3.2" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" abab@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" abbrev@1: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" -accepts@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" +accepts@~1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" dependencies: - mime-types "~2.1.11" + mime-types "~2.1.16" negotiator "0.6.1" acorn-dynamic-import@^2.0.0: @@ -97,31 +315,37 @@ acorn@^3.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" acorn@^4.0.3, acorn@^4.0.4: - version "4.0.11" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" - -acorn@^5.0.0, acorn@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75" + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.2.1: +acorn@^5.0.0, acorn@^5.1.1, acorn@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" -ajv-keywords@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.1.1.tgz#02550bc605a3e576041565628af972e06c549d50" - -ajv-keywords@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0" +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" -ajv@^4.7.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.9.0.tgz#5a358085747b134eb567d6d15e015f1d7802f45c" +airbnb-js-shims@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-1.4.0.tgz#b920b0bc9fafe8b8ae2a073f29fb10303b1b2b18" dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" + array-includes "^3.0.3" + array.prototype.flatmap "^1.1.1" + array.prototype.flatten "^1.1.1" + es5-shim "^4.5.9" + es6-shim "^0.35.3" + function.prototype.name "^1.0.3" + object.entries "^1.0.4" + object.getownpropertydescriptors "^2.0.3" + object.values "^1.0.4" + promise.prototype.finally "^3.1.0" + string.prototype.padend "^3.0.0" + string.prototype.padstart "^3.0.0" + +ajv-keywords@^2.0.0, ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" ajv@^4.9.1: version "4.11.8" @@ -130,27 +354,9 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.0.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.3.tgz#c06f598778c44c6b161abafe3466b81ad1814ed2" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - json-schema-traverse "^0.3.0" - json-stable-stringify "^1.0.1" - -ajv@^5.1.5: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.0.tgz#c1735024c5da2ef75cc190713073d44f098bf486" - dependencies: - co "^4.6.0" - fast-deep-equal "^0.1.0" - json-schema-traverse "^0.3.0" - json-stable-stringify "^1.0.1" - -ajv@^5.3.0: - version "5.5.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.1.tgz#b38bb8876d9e86bee994956a04e721e88b248eb2" +ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" @@ -165,6 +371,10 @@ align-text@^0.1.1, align-text@^0.1.3: longest "^1.0.1" repeat-string "^1.5.2" +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" @@ -179,19 +389,15 @@ ansi-escapes@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" -ansi-escapes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" - ansi-escapes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" -ansi-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" -ansi-regex@^2.1.1: +ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -203,18 +409,26 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.0.0, ansi-styles@^3.1.0, ansi-styles@^3.2.0: +ansi-styles@^3.1.0, ansi-styles@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" dependencies: color-convert "^1.9.0" anymatch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" dependencies: - arrify "^1.0.0" micromatch "^2.1.5" + normalize-path "^2.0.0" + +aphrodite@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/aphrodite/-/aphrodite-1.2.5.tgz#8358c36c80bb03aee9b97165aaa70186225b4983" + dependencies: + asap "^2.0.3" + inline-style-prefixer "^3.0.1" + string-hash "^1.1.3" app-root-path@^2.0.0: version "2.0.1" @@ -227,15 +441,15 @@ append-transform@^0.4.0: default-require-extensions "^1.0.0" aproba@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" are-we-there-yet@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" dependencies: delegates "^1.0.0" - readable-stream "^2.0.0 || ^1.1.13" + readable-stream "^2.0.6" argparse@^1.0.7: version "1.0.9" @@ -250,21 +464,29 @@ arr-diff@^2.0.0: arr-flatten "^1.0.1" arr-flatten@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" -array-find-index, array-find-index@^1.0.1: +array-find-index@^1.0.1, array-find-index@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" +array-find@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + array-includes@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" @@ -286,6 +508,22 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" +array.prototype.flatmap@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.1.1.tgz#dbb6c44693c2a2a2fcab24e551dfbf47f67fde03" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.10.0" + function-bind "^1.1.1" + +array.prototype.flatten@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatten/-/array.prototype.flatten-1.1.1.tgz#301b351aa8a632356ee2f5311c6c8e8f50d318cc" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.10.0" + function-bind "^1.1.1" + arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -294,13 +532,13 @@ art@^0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/art/-/art-0.10.1.tgz#38541883e399225c5e193ff246e8f157cf7b2146" -asap@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" +asap@^2.0.3, asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" asn1.js@^4.0.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" + version "4.9.2" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a" dependencies: bn.js "^4.0.0" inherits "^2.0.1" @@ -310,20 +548,24 @@ asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" -assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert@^1.1.1: +assert@^1.1.1, assert@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" dependencies: util "0.10.3" +ast-types@0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -336,13 +578,13 @@ async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" -async@^1.4.0: +async@^1.4.0, async@^1.5.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" async@^2.1.2, async@^2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc" + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: lodash "^4.14.0" @@ -350,13 +592,39 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + +autoprefixer@^7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.3.tgz#c2841e38b7940c2d0a9bbffd72c75f33637854f8" + dependencies: + browserslist "^2.10.0" + caniuse-lite "^1.0.30000783" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.14" + postcss-value-parser "^3.2.3" + aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" -aws4@^1.2.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" babel-cli@^6.26.0: version "6.26.0" @@ -379,7 +647,7 @@ babel-cli@^6.26.0: optionalDependencies: chokidar "^1.6.1" -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -433,14 +701,29 @@ babel-generator@^6.18.0, babel-generator@^6.26.0: source-map "^0.5.6" trim-right "^1.0.1" -babel-helper-builder-react-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.18.0.tgz#ab02f19a2eb7ace936dd87fa55896d02be59bf71" +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" dependencies: - babel-runtime "^6.9.0" - babel-types "^6.18.0" - esutils "^2.0.0" - lodash "^4.2.0" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-builder-react-jsx@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + esutils "^2.0.2" babel-helper-call-delegate@^6.24.1: version "6.24.1" @@ -452,15 +735,40 @@ babel-helper-call-delegate@^6.24.1: babel-types "^6.24.1" babel-helper-define-map@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080" + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" dependencies: babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-evaluate-path@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.2.0.tgz#0bb2eb01996c0cef53c5e8405e999fe4a0244c08" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: babel-runtime "^6.22.0" + babel-traverse "^6.24.1" babel-types "^6.24.1" - lodash "^4.2.0" -babel-helper-function-name@^6.24.1, babel-helper-function-name@^6.8.0: +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + dependencies: + babel-helper-bindify-decorators "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-flip-expressions@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.2.0.tgz#160d2090a3d9f9c64a750905321a0bc218f884ec" + +babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" dependencies: @@ -484,6 +792,18 @@ babel-helper-hoist-variables@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-helper-is-nodes-equiv@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684" + +babel-helper-is-void-0@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.2.0.tgz#6ed0ada8a9b1c5b6e88af6b47c1b3b5c080860eb" + +babel-helper-mark-eval-scopes@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.2.0.tgz#7648aaf2ec92aae9b09a20ad91e8df5e1fcc94b2" + babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" @@ -491,6 +811,28 @@ babel-helper-optimise-call-expression@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-remove-or-void@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.2.0.tgz#8e46ad5b30560d57d7510b3fd93f332ee7c67386" + babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" @@ -502,6 +844,10 @@ babel-helper-replace-supers@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" +babel-helper-to-multiple-sequence-expressions@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.2.0.tgz#d1a419634c6cb301f27858c659167cfee0a9d318" + babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" @@ -524,53 +870,181 @@ babel-loader@^7.1.2: loader-utils "^1.0.2" mkdirp "^0.5.1" +babel-macros@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-macros/-/babel-macros-1.2.0.tgz#39e47ed6d286d4a98f1948d8bab45dac17e4e2d4" + dependencies: + cosmiconfig "3.1.0" + babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" dependencies: babel-runtime "^6.22.0" -babel-plugin-check-es2015-constants@^6.5.0: +babel-plugin-check-es2015-constants@^6.22.0, babel-plugin-check-es2015-constants@^6.5.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" dependencies: babel-runtime "^6.22.0" +babel-plugin-dynamic-import-node@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.1.0.tgz#bd1d88ac7aaf98df4917c384373b04d971a2b37a" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-emotion@^8.0.12: + version "8.0.12" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-8.0.12.tgz#2ed844001416b0ae2ff787a06b1804ec5f531c89" + dependencies: + "@babel/helper-module-imports" "7.0.0-beta.32" + babel-macros "^1.2.0" + babel-plugin-syntax-jsx "^6.18.0" + convert-source-map "^1.5.0" + emotion-utils "^8.0.12" + find-root "^1.1.0" + source-map "^0.5.7" + touch "^1.0.0" + babel-plugin-istanbul@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.0.0.tgz#36bde8fbef4837e5ff0366531a2beabd7b1ffa10" + version "4.1.5" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" dependencies: find-up "^2.1.0" - istanbul-lib-instrument "^1.4.2" - test-exclude "^4.0.0" + istanbul-lib-instrument "^1.7.5" + test-exclude "^4.1.1" babel-plugin-jest-hoist@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006" +babel-plugin-minify-builtins@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.2.0.tgz#317f824b0907210b6348671bb040ca072e2e0c82" + dependencies: + babel-helper-evaluate-path "^0.2.0" + +babel-plugin-minify-constant-folding@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.2.0.tgz#8c70b528b2eb7c13e94d95c8789077d4cdbc3970" + dependencies: + babel-helper-evaluate-path "^0.2.0" + +babel-plugin-minify-dead-code-elimination@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.2.0.tgz#e8025ee10a1e5e4f202633a6928ce892c33747e3" + dependencies: + babel-helper-evaluate-path "^0.2.0" + babel-helper-mark-eval-scopes "^0.2.0" + babel-helper-remove-or-void "^0.2.0" + lodash.some "^4.6.0" + +babel-plugin-minify-flip-comparisons@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.2.0.tgz#0c9c8e93155c8f09dedad8118b634c259f709ef5" + dependencies: + babel-helper-is-void-0 "^0.2.0" + +babel-plugin-minify-guarded-expressions@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.2.0.tgz#8a8c950040fce3e258a12e6eb21eab94ad7235ab" + dependencies: + babel-helper-flip-expressions "^0.2.0" + +babel-plugin-minify-infinity@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.2.0.tgz#30960c615ddbc657c045bb00a1d8eb4af257cf03" + +babel-plugin-minify-mangle-names@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.2.0.tgz#719892297ff0106a6ec1a4b0fc062f1f8b6a8529" + dependencies: + babel-helper-mark-eval-scopes "^0.2.0" + +babel-plugin-minify-numeric-literals@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.2.0.tgz#5746e851700167a380c05e93f289a7070459a0d1" + +babel-plugin-minify-replace@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.2.0.tgz#3c1f06bc4e6d3e301eacb763edc1be611efc39b0" + +babel-plugin-minify-simplify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.2.0.tgz#21ceec4857100c5476d7cef121f351156e5c9bc0" + dependencies: + babel-helper-flip-expressions "^0.2.0" + babel-helper-is-nodes-equiv "^0.0.1" + babel-helper-to-multiple-sequence-expressions "^0.2.0" + +babel-plugin-minify-type-constructors@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.2.0.tgz#7f3b6458be0863cfd59e9985bed6d134aa7a2e17" + dependencies: + babel-helper-is-void-0 "^0.2.0" + +babel-plugin-react-docgen@^1.8.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-1.8.1.tgz#6e08e057f5dcd46b434e7553e971baa604dae377" + dependencies: + babel-types "^6.24.1" + lodash "4.x.x" + react-docgen "^2.15.0" + babel-plugin-react-transform@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-3.0.0.tgz#402f25137b7bb66e9b54ead75557dfbc7ecaaa74" dependencies: lodash "^4.6.1" -babel-plugin-syntax-async-functions@^6.5.0: +babel-plugin-syntax-async-functions@^6.5.0, babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" -babel-plugin-syntax-class-properties@^6.5.0, babel-plugin-syntax-class-properties@^6.8.0: +babel-plugin-syntax-async-generators@^6.5.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" -babel-plugin-syntax-dynamic-import@^6.18.0: +babel-plugin-syntax-class-constructor-call@^6.18.0: version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + +babel-plugin-syntax-class-properties@^6.5.0, babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + +babel-plugin-syntax-do-expressions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" + +babel-plugin-syntax-dynamic-import@6.18.0, babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-export-extensions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.5.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" -babel-plugin-syntax-jsx@^6.5.0, babel-plugin-syntax-jsx@^6.8.0: +babel-plugin-syntax-function-bind@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" + +babel-plugin-syntax-jsx@^6.18.0, babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.5.0, babel-plugin-syntax-jsx@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" @@ -578,7 +1052,7 @@ babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest- version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" -babel-plugin-syntax-trailing-function-commas@^6.5.0: +babel-plugin-syntax-trailing-function-commas@^6.22.0, babel-plugin-syntax-trailing-function-commas@^6.5.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" @@ -593,31 +1067,79 @@ babel-plugin-tester@^4.0.0: path-exists "^3.0.0" strip-indent "^2.0.0" -babel-plugin-transform-class-properties@^6.5.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.16.0.tgz#969bca24d34e401d214f36b8af5c1346859bc904" +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" dependencies: - babel-helper-function-name "^6.8.0" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.9.1" + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" -babel-plugin-transform-es2015-arrow-functions@^6.5.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" +babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-es2015-block-scoping@^6.5.0: +babel-plugin-transform-class-constructor-call@^6.24.1: version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" dependencies: + babel-plugin-syntax-class-constructor-call "^6.18.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-class-properties@6.24.1, babel-plugin-transform-class-properties@^6.24.1, babel-plugin-transform-class-properties@^6.5.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + dependencies: + babel-helper-explode-class "^6.24.1" + babel-plugin-syntax-decorators "^6.13.0" babel-runtime "^6.22.0" babel-template "^6.24.1" - babel-traverse "^6.24.1" babel-types "^6.24.1" - lodash "^4.2.0" -babel-plugin-transform-es2015-classes@^6.5.0: +babel-plugin-transform-do-expressions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" + dependencies: + babel-plugin-syntax-do-expressions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0, babel-plugin-transform-es2015-arrow-functions@^6.5.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.5.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.5.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" dependencies: @@ -631,26 +1153,33 @@ babel-plugin-transform-es2015-classes@^6.5.0: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-es2015-computed-properties@^6.5.0: +babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.5.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-destructuring@^6.5.0: +babel-plugin-transform-es2015-destructuring@^6.23.0, babel-plugin-transform-es2015-destructuring@^6.5.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-for-of@^6.5.0: +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0, babel-plugin-transform-es2015-for-of@^6.5.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-function-name@^6.5.0: +babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.5.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" dependencies: @@ -658,22 +1187,53 @@ babel-plugin-transform-es2015-function-name@^6.5.0: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-plugin-transform-es2015-literals@^6.5.0: +babel-plugin-transform-es2015-literals@^6.22.0, babel-plugin-transform-es2015-literals@^6.5.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-modules-commonjs@^6.5.0: +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1, babel-plugin-transform-es2015-modules-commonjs@^6.5.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" dependencies: babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" babel-template "^6.24.1" - babel-types "^6.24.1" -babel-plugin-transform-es2015-parameters@^6.5.0: +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.5.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" dependencies: @@ -684,77 +1244,182 @@ babel-plugin-transform-es2015-parameters@^6.5.0: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-es2015-shorthand-properties@^6.5.0: +babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.5.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-plugin-transform-es2015-spread@^6.5.0: +babel-plugin-transform-es2015-spread@^6.22.0, babel-plugin-transform-es2015-spread@^6.5.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-template-literals@^6.5.0: +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0, babel-plugin-transform-es2015-template-literals@^6.5.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-flow-strip-types@^6.5.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.18.0.tgz#4d3e642158661e9b40db457c004a30817fa32592" +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-export-extensions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.22.0, babel-plugin-transform-flow-strip-types@^6.5.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" dependencies: babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-function-bind@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" + dependencies: + babel-plugin-syntax-function-bind "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-inline-consecutive-adds@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.2.0.tgz#15dae78921057f4004f8eafd79e15ddc5f12f426" + +babel-plugin-transform-member-expression-literals@^6.8.5: + version "6.8.5" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.5.tgz#e06ae305cf48d819822e93a70d79269f04d89eec" + +babel-plugin-transform-merge-sibling-variables@^6.8.6: + version "6.8.6" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.6.tgz#6d21efa5ee4981f71657fae716f9594bb2622aef" + +babel-plugin-transform-minify-booleans@^6.8.3: + version "6.8.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.3.tgz#5906ed776d3718250519abf1bace44b0b613ddf9" babel-plugin-transform-object-assign@^6.5.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.8.0.tgz#76e17f2dc0f36f14f548b9afd7aaef58d29ebb75" + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz#f99d2f66f1a0b0d498e346c5359684740caa20ba" dependencies: - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-object-rest-spread@^6.5.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.16.0.tgz#db441d56fffc1999052fdebe2e2f25ebd28e36a9" +babel-plugin-transform-object-rest-spread@6.26.0, babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.5.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.0.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-property-literals@^6.8.5: + version "6.8.5" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.5.tgz#67ed5930b34805443452c8b9690c7ebe1e206c40" + dependencies: + esutils "^2.0.2" + +babel-plugin-transform-react-constant-elements@6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.23.0.tgz#2f119bf4d2cdd45eb9baaae574053c604f6147dd" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-react-display-name@^6.23.0, babel-plugin-transform-react-display-name@^6.5.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + dependencies: + babel-runtime "^6.22.0" -babel-plugin-transform-react-display-name@^6.5.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.8.0.tgz#f7a084977383d728bdbdc2835bba0159577f660e" +babel-plugin-transform-react-jsx-self@6.22.0, babel-plugin-transform-react-jsx-self@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" dependencies: - babel-runtime "^6.0.0" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" -babel-plugin-transform-react-jsx-source@^6.5.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.9.0.tgz#af684a05c2067a86e0957d4f343295ccf5dccf00" +babel-plugin-transform-react-jsx-source@6.22.0, babel-plugin-transform-react-jsx-source@^6.22.0, babel-plugin-transform-react-jsx-source@^6.5.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" dependencies: babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.9.0" + babel-runtime "^6.22.0" -babel-plugin-transform-react-jsx@^6.5.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.8.0.tgz#94759942f70af18c617189aa7f3593f1644a71ab" +babel-plugin-transform-react-jsx@6.24.1, babel-plugin-transform-react-jsx@^6.24.1, babel-plugin-transform-react-jsx@^6.5.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" dependencies: - babel-helper-builder-react-jsx "^6.8.0" + babel-helper-builder-react-jsx "^6.24.1" babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" babel-plugin-transform-react-remove-prop-types@^0.4.10: - version "0.4.10" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.10.tgz#3c7f3a03ad8aa6bb8c00e93fd13a433910444545" + version "0.4.12" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.12.tgz#a382c27c42d6580748c80caf8c3d5091edbb60b8" -babel-plugin-transform-regenerator@^6.5.0: - version "6.16.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.16.1.tgz#a75de6b048a14154aae14b0122756c5bed392f59" +babel-plugin-transform-regenerator@6.26.0, babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.26.0, babel-plugin-transform-regenerator@^6.5.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" dependencies: - babel-runtime "^6.9.0" - babel-types "^6.16.0" - private "~0.1.5" + regenerator-transform "^0.10.0" + +babel-plugin-transform-regexp-constructors@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.2.0.tgz#6aa5dd0acc515db4be929bbcec4ed4c946c534a3" + +babel-plugin-transform-remove-console@^6.8.5: + version "6.8.5" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.8.5.tgz#fde9d2d3d725530b0fadd8d31078402410386810" + +babel-plugin-transform-remove-debugger@^6.8.5: + version "6.8.5" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.8.5.tgz#809584d412bf918f071fdf41e1fdb15ea89cdcd5" + +babel-plugin-transform-remove-undefined@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.2.0.tgz#94f052062054c707e8d094acefe79416b63452b1" + dependencies: + babel-helper-evaluate-path "^0.2.0" + +babel-plugin-transform-runtime@6.23.0, babel-plugin-transform-runtime@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-simplify-comparison-operators@^6.8.5: + version "6.8.5" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.5.tgz#a838786baf40cc33a93b95ae09e05591227e43bf" babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" @@ -763,6 +1428,10 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-plugin-transform-undefined-to-void@^6.8.3: + version "6.8.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.3.tgz#fc52707f6ee1ddc71bb91b0d314fbefdeef9beb4" + babel-polyfill@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" @@ -771,6 +1440,47 @@ babel-polyfill@^6.26.0: core-js "^2.5.0" regenerator-runtime "^0.10.5" +babel-preset-env@1.6.1, babel-preset-env@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^2.1.2" + invariant "^2.2.2" + semver "^5.3.0" + +babel-preset-flow@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + dependencies: + babel-plugin-transform-flow-strip-types "^6.22.0" + babel-preset-jest@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz#ff9d2bce08abd98e8a36d9a8a5189b9173b85638" @@ -778,6 +1488,51 @@ babel-preset-jest@^21.2.0: babel-plugin-jest-hoist "^21.2.0" babel-plugin-syntax-object-rest-spread "^6.13.0" +babel-preset-minify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.2.0.tgz#006566552d9b83834472273f306c0131062a0acc" + dependencies: + babel-plugin-minify-builtins "^0.2.0" + babel-plugin-minify-constant-folding "^0.2.0" + babel-plugin-minify-dead-code-elimination "^0.2.0" + babel-plugin-minify-flip-comparisons "^0.2.0" + babel-plugin-minify-guarded-expressions "^0.2.0" + babel-plugin-minify-infinity "^0.2.0" + babel-plugin-minify-mangle-names "^0.2.0" + babel-plugin-minify-numeric-literals "^0.2.0" + babel-plugin-minify-replace "^0.2.0" + babel-plugin-minify-simplify "^0.2.0" + babel-plugin-minify-type-constructors "^0.2.0" + babel-plugin-transform-inline-consecutive-adds "^0.2.0" + babel-plugin-transform-member-expression-literals "^6.8.5" + babel-plugin-transform-merge-sibling-variables "^6.8.6" + babel-plugin-transform-minify-booleans "^6.8.3" + babel-plugin-transform-property-literals "^6.8.5" + babel-plugin-transform-regexp-constructors "^0.2.0" + babel-plugin-transform-remove-console "^6.8.5" + babel-plugin-transform-remove-debugger "^6.8.5" + babel-plugin-transform-remove-undefined "^0.2.0" + babel-plugin-transform-simplify-comparison-operators "^6.8.5" + babel-plugin-transform-undefined-to-void "^6.8.3" + lodash.isplainobject "^4.0.6" + +babel-preset-react-app@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-3.1.0.tgz#d77f6061ab9d7bf4b3cdc86b7cde9ded0df03e48" + dependencies: + babel-plugin-dynamic-import-node "1.1.0" + babel-plugin-syntax-dynamic-import "6.18.0" + babel-plugin-transform-class-properties "6.24.1" + babel-plugin-transform-object-rest-spread "6.26.0" + babel-plugin-transform-react-constant-elements "6.23.0" + babel-plugin-transform-react-jsx "6.24.1" + babel-plugin-transform-react-jsx-self "6.22.0" + babel-plugin-transform-react-jsx-source "6.22.0" + babel-plugin-transform-regenerator "6.26.0" + babel-plugin-transform-runtime "6.23.0" + babel-preset-env "1.6.1" + babel-preset-react "6.24.1" + babel-preset-react-native@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-4.0.0.tgz#3df80dd33a453888cdd33bdb87224d17a5d73959" @@ -814,6 +1569,52 @@ babel-preset-react-native@^4.0.0: babel-template "^6.24.1" react-transform-hmr "^1.0.4" +babel-preset-react@6.24.1, babel-preset-react@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + dependencies: + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-react-display-name "^6.23.0" + babel-plugin-transform-react-jsx "^6.24.1" + babel-plugin-transform-react-jsx-self "^6.22.0" + babel-plugin-transform-react-jsx-source "^6.22.0" + babel-preset-flow "^6.23.0" + +babel-preset-stage-0@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a" + dependencies: + babel-plugin-transform-do-expressions "^6.22.0" + babel-plugin-transform-function-bind "^6.22.0" + babel-preset-stage-1 "^6.24.1" + +babel-preset-stage-1@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" + dependencies: + babel-plugin-transform-class-constructor-call "^6.24.1" + babel-plugin-transform-export-extensions "^6.22.0" + babel-preset-stage-2 "^6.24.1" + +babel-preset-stage-2@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" @@ -826,7 +1627,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.9.0, babel-runtime@^6.9.1: +babel-runtime@6.x.x, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.5.0, babel-runtime@^6.9.2: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -857,7 +1658,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: @@ -870,31 +1671,39 @@ babylon@7.0.0-beta.31: version "7.0.0-beta.31" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f" -babylon@^6.13.0, babylon@^6.18.0: +babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" +babylon@~5.8.3: + version "5.8.38" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd" + +balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" base64-js@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + version "1.2.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" bcrypt-pbkdf@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" dependencies: tweetnacl "^0.14.3" big.js@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" binary-extensions@^1.0.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.7.0.tgz#6c1610db163abfb34edfe42fa423343a1e01185d" + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" block-stream@*: version "0.0.9" @@ -903,8 +1712,23 @@ block-stream@*: inherits "~2.0.0" bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + +body-parser@1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.1" + http-errors "~1.6.2" + iconv-lite "0.4.19" + on-finished "~2.3.0" + qs "6.5.1" + raw-body "2.3.2" + type-is "~1.6.15" boolbase@~1.0.0: version "1.0.0" @@ -916,21 +1740,33 @@ boom@2.x.x: dependencies: hoek "2.x.x" -bowser@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.7.3.tgz#504bdb43118ca8db9cbbadf28fd60f265af96e4f" +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" -boxen@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.1.0.tgz#b1b69dd522305e807a99deee777dbd6e5167b102" +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +bowser@^1.0.0, bowser@^1.7.3: + version "1.9.1" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.1.tgz#f86ef2132e8cb10b3eb6ea5af018758c587020db" + +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" dependencies: ansi-align "^2.0.0" camelcase "^4.0.0" - chalk "^1.1.1" + chalk "^2.0.1" cli-boxes "^1.0.0" string-width "^2.0.0" - term-size "^0.1.0" - widest-line "^1.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" brace-expansion@^1.1.7: version "1.1.8" @@ -947,6 +1783,10 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" +brcast@^3.0.0, brcast@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.1.tgz#6256a8349b20de9eed44257a9b24d71493cd48dd" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -958,14 +1798,15 @@ browser-resolve@^1.11.2: resolve "1.1.7" browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" + version "1.1.1" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" dependencies: - buffer-xor "^1.0.2" + buffer-xor "^1.0.3" cipher-base "^1.0.0" create-hash "^1.1.0" - evp_bytestokey "^1.0.0" + evp_bytestokey "^1.0.3" inherits "^2.0.1" + safe-buffer "^5.0.1" browserify-cipher@^1.0.0: version "1.0.0" @@ -1002,18 +1843,25 @@ browserify-sign@^4.0.0: inherits "^2.0.1" parse-asn1 "^5.0.0" -browserify-zlib@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" dependencies: - pako "~0.2.0" + pako "~1.0.5" -browserslist@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.2.2.tgz#e9b4618b8a01c193f9786beea09f6fd10dbe31c3" +browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" dependencies: - caniuse-lite "^1.0.30000704" - electron-to-chromium "^1.3.16" + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +browserslist@^2.0.0, browserslist@^2.1.2, browserslist@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.10.0.tgz#bac5ee1cc69ca9d96403ffb8a3abdc5b6aed6346" + dependencies: + caniuse-lite "^1.0.30000780" + electron-to-chromium "^1.3.28" bser@^2.0.0: version "2.0.0" @@ -1021,11 +1869,7 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" -buffer-shims@^1.0.0, buffer-shims@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - -buffer-xor@^1.0.2: +buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -1037,6 +1881,13 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.0.3: + version "5.0.8" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.0.8.tgz#84daa52e7cf2fa8ce4195bc5cf0f7809e0930b24" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -1045,6 +1896,14 @@ builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" @@ -1078,6 +1937,15 @@ camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" +caniuse-api@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + dependencies: + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + caniuse-api@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-2.0.0.tgz#b1ddb5a5966b16f48dc4998444d4bbc6c7d9d834" @@ -1087,17 +1955,21 @@ caniuse-api@^2.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000704: - version "1.0.30000706" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000706.tgz#bc59abc41ba7d4a3634dda95befded6114e1f24e" +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000784" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000784.tgz#1be95012d9489c7719074f81aee57dbdffe6361b" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000780, caniuse-lite@^1.0.30000783: + version "1.0.30000784" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000784.tgz#129ced74e9a1280a441880b6cd2bce30ef59e6c0" capture-stack-trace@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" +case-sensitive-paths-webpack-plugin@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.1.tgz#3d29ced8c1f124bf6f53846fb3f5894731fdc909" caseless@~0.12.0: version "0.12.0" @@ -1110,6 +1982,10 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" +chain-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc" + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1120,7 +1996,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" dependencies: @@ -1128,13 +2004,9 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^4.0.0" -chalk@^2.0.1, chalk@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" cheerio@^1.0.0-rc.2: version "1.0.0-rc.2" @@ -1147,22 +2019,7 @@ cheerio@^1.0.0-rc.2: lodash "^4.15.0" parse5 "^3.0.1" -chokidar@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -chokidar@^1.7.0: +chokidar@^1.6.1, chokidar@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: @@ -1178,18 +2035,29 @@ chokidar@^1.7.0: fsevents "^1.0.0" ci-info@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + version "1.1.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" -cipher-base@^1.0.0, cipher-base@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" dependencies: inherits "^2.0.1" + safe-buffer "^5.0.1" -circular-json@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + +clap@^1.0.9: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + dependencies: + chalk "^1.1.3" + +classnames@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" cli-boxes@^1.0.0: version "1.0.0" @@ -1219,8 +2087,8 @@ cli-truncate@^0.2.1: string-width "^1.0.1" cli-width@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" cliui@^2.1.0: version "2.1.0" @@ -1238,53 +2106,114 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +clone@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" + +cmd-shim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" +coa@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + dependencies: + q "^1.1.2" + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" -color-convert@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" +color-convert@^1.3.0, color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" dependencies: color-name "^1.1.1" -color-name@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" +color-name@^1.0.0, color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" colors@0.5.x: version "0.5.1" resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +columnify@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" dependencies: delayed-stream "~1.0.0" -commander@^2.11.0, commander@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" +command-join@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/command-join/-/command-join-2.0.0.tgz#52e8b984f4872d952ff1bdc8b98397d27c7144cf" -common-tags@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.4.0.tgz#1187be4f3d4cf0c0427d43f74eef1f73501614c0" +commander@^2.11.0, commander@^2.12.2, commander@^2.9.0: + version "2.12.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" + +common-tags@^1.4.0, common-tags@^1.5.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.6.0.tgz#788e4bcc582f16993e5b2c92f76b1ccb80731537" dependencies: - babel-runtime "^6.18.0" + babel-runtime "^6.26.0" commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" +compare-func@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" + dependencies: + array-ify "^1.0.0" + dot-prop "^3.0.0" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.6.0: +concat-stream@^1.4.10, concat-stream@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -1292,9 +2221,9 @@ concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" -configstore@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.0.tgz#45df907073e26dfa1cf4b2d52f5b60545eaa11d1" +configstore@^3.0.0, configstore@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90" dependencies: dot-prop "^4.1.0" graceful-fs "^4.1.2" @@ -1322,16 +2251,161 @@ content-disposition@0.5.2: resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" content-type-parser@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" - -content-type@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +conventional-changelog-angular@^1.5.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.0.tgz#0a26a071f2c9fcfcf2b86ba0cfbf6e6301b75bfa" + dependencies: + compare-func "^1.3.1" + q "^1.4.1" + +conventional-changelog-atom@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-0.1.2.tgz#12595ad5267a6937c34cf900281b1c65198a4c63" + dependencies: + q "^1.4.1" + +conventional-changelog-cli@^1.3.2: + version "1.3.5" + resolved "https://registry.yarnpkg.com/conventional-changelog-cli/-/conventional-changelog-cli-1.3.5.tgz#46c51496216b7406588883defa6fac589e9bb31e" + dependencies: + add-stream "^1.0.0" + conventional-changelog "^1.1.7" + lodash "^4.1.0" + meow "^3.7.0" + tempfile "^1.1.1" + +conventional-changelog-codemirror@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.2.1.tgz#299a4f7147baf350e6c8158fc54954a291c5cc09" + dependencies: + q "^1.4.1" + +conventional-changelog-core@^1.9.3: + version "1.9.5" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-1.9.5.tgz#5db7566dad7c0cb75daf47fbb2976f7bf9928c1d" + dependencies: + conventional-changelog-writer "^2.0.3" + conventional-commits-parser "^2.1.0" + dateformat "^1.0.12" + get-pkg-repo "^1.0.0" + git-raw-commits "^1.3.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^1.2.3" + lodash "^4.0.0" + normalize-package-data "^2.3.5" + q "^1.4.1" + read-pkg "^1.1.0" + read-pkg-up "^1.0.1" + through2 "^2.0.0" + +conventional-changelog-ember@^0.2.9: + version "0.2.10" + resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-0.2.10.tgz#dcd6e4cdc2e6c2b58653cf4d2cb1656a60421929" + dependencies: + q "^1.4.1" + +conventional-changelog-eslint@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-0.2.1.tgz#2c2a11beb216f80649ba72834180293b687c0662" + dependencies: + q "^1.4.1" + +conventional-changelog-express@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-0.2.1.tgz#838d9e1e6c9099703b150b9c19aa2d781742bd6c" + dependencies: + q "^1.4.1" + +conventional-changelog-jquery@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz#0208397162e3846986e71273b6c79c5b5f80f510" + dependencies: + q "^1.4.1" + +conventional-changelog-jscs@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz#0479eb443cc7d72c58bf0bcf0ef1d444a92f0e5c" + dependencies: + q "^1.4.1" + +conventional-changelog-jshint@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-0.2.1.tgz#86139bb3ac99899f2b177e9617e09b37d99bcf3a" + dependencies: + compare-func "^1.3.1" + q "^1.4.1" + +conventional-changelog-writer@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-2.0.3.tgz#073b0c39f1cc8fc0fd9b1566e93833f51489c81c" + dependencies: + compare-func "^1.3.1" + conventional-commits-filter "^1.1.1" + dateformat "^1.0.11" + handlebars "^4.0.2" + json-stringify-safe "^5.0.1" + lodash "^4.0.0" + meow "^3.3.0" + semver "^5.0.1" + split "^1.0.0" + through2 "^2.0.0" + +conventional-changelog@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-1.1.7.tgz#9151a62b1d8edb2d82711dabf5b7cf71041f82b1" + dependencies: + conventional-changelog-angular "^1.5.2" + conventional-changelog-atom "^0.1.2" + conventional-changelog-codemirror "^0.2.1" + conventional-changelog-core "^1.9.3" + conventional-changelog-ember "^0.2.9" + conventional-changelog-eslint "^0.2.1" + conventional-changelog-express "^0.2.1" + conventional-changelog-jquery "^0.1.0" + conventional-changelog-jscs "^0.1.0" + conventional-changelog-jshint "^0.2.1" + +conventional-commits-filter@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.1.1.tgz#72172319c0c88328a015b30686b55527b3a5e54a" + dependencies: + is-subset "^0.1.1" + modify-values "^1.0.0" + +conventional-commits-parser@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.0.tgz#9b4b7c91124bf2a1a9a2cc1c72760d382cbbb229" + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.0" + lodash "^4.2.1" + meow "^3.3.0" + split2 "^2.0.0" + through2 "^2.0.0" + trim-off-newlines "^1.0.0" + +conventional-recommended-bump@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-1.1.0.tgz#964d4fcc70fb5259d41fa9b39d3df6afdb87d253" + dependencies: + concat-stream "^1.4.10" + conventional-commits-filter "^1.1.1" + conventional-commits-parser "^2.1.0" + git-raw-commits "^1.3.0" + git-semver-tags "^1.2.3" + meow "^3.3.0" + object-assign "^4.0.1" convert-source-map@^1.4.0, convert-source-map@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" cookie-signature@1.0.6: version "1.0.6" @@ -1345,18 +2419,23 @@ core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" -core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" - -core-js@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086" +core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0, core-js@^2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" -core-util-is@~1.0.0: +core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" +cosmiconfig@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^3.0.0" + require-from-string "^2.0.1" + cosmiconfig@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-1.1.0.tgz#0dea0f9804efdfb929fbb1b188e25553ea053d37" @@ -1370,6 +2449,18 @@ cosmiconfig@^1.1.0: pinkie-promise "^2.0.0" require-from-string "^1.1.0" +cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.4.3" + minimist "^1.2.0" + object-assign "^4.1.0" + os-homedir "^1.0.1" + parse-json "^2.2.0" + require-from-string "^1.1.0" + create-ecdh@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" @@ -1383,21 +2474,25 @@ create-error-class@^3.0.0: dependencies: capture-stack-trace "^1.0.0" -create-hash@^1.1.0, create-hash@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" dependencies: cipher-base "^1.0.1" inherits "^2.0.1" - ripemd160 "^1.0.0" - sha.js "^2.3.6" + ripemd160 "^2.0.0" + sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" dependencies: + cipher-base "^1.0.3" create-hash "^1.1.0" inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" create-react-class@^15.6.2: version "15.6.2" @@ -1407,13 +2502,6 @@ create-react-class@^15.6.2: loose-envify "^1.3.1" object-assign "^4.1.1" -cross-spawn-async@^2.1.1: - version "2.2.5" - resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" - dependencies: - lru-cache "^4.0.0" - which "^1.2.8" - cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -1428,9 +2516,15 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + crypto-browserify@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522" + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -1442,17 +2536,45 @@ crypto-browserify@^3.11.0: pbkdf2 "^3.0.3" public-encrypt "^4.0.0" randombytes "^2.0.0" + randomfill "^1.0.3" crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + +css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + css-in-js-utils@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.0.tgz#5af1dd70f4b06b331f48d22a3d86e0786c0b9435" dependencies: hyphenate-style-name "^1.0.2" +css-loader@^0.28.7: + version "0.28.7" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b" + dependencies: + babel-code-frame "^6.11.0" + css-selector-tokenizer "^0.7.0" + cssnano ">=2.6.1 <4" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + object-assign "^4.0.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.0.0" + postcss-modules-local-by-default "^1.0.1" + postcss-modules-scope "^1.0.0" + postcss-modules-values "^1.1.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" @@ -1462,10 +2584,80 @@ css-select@~1.2.0: domutils "1.5.1" nth-check "~1.0.1" +css-selector-tokenizer@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-to-react-native@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.0.4.tgz#cf4cc407558b3474d4ba8be1a2cd3b6ce713101b" + dependencies: + css-color-keywords "^1.0.0" + fbjs "^0.8.5" + postcss-value-parser "^3.3.0" + +css-vendor@^0.3.8: + version "0.3.8" + resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa" + dependencies: + is-in-browser "^1.0.2" + css-what@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +"cssnano@>=2.6.1 <4": + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" @@ -1488,71 +2680,70 @@ d@1: dependencies: es5-ext "^0.10.9" +dargs@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + dependencies: + number-is-nan "^1.0.0" + dashdash@^1.12.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141" + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" dependencies: assert-plus "^1.0.0" date-fns@^1.27.2: - version "1.28.5" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.5.tgz#257cfc45d322df45ef5658665967ee841cd73faf" + version "1.29.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" +dateformat@^1.0.11, dateformat@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + debounce@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.1.0.tgz#6a1a4ee2a9dc4b7c24bb012558dbcdb05b37f408" -debug@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" - dependencies: - ms "0.7.2" - -debug@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" - dependencies: - ms "0.7.2" - -debug@^2.2.0, debug@^2.6.3, debug@^2.6.8: - version "2.6.8" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" +debug@2.6.9, debug@^2.2.0, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" -debug@^3.0.1: +debug@^3.0.1, debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" -debug@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - dependencies: - ms "0.7.1" - decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" -deep-assign: +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + +deep-assign@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-2.0.0.tgz#ebe06b1f07f08dae597620e3dd1622f371a1c572" dependencies: is-obj "^1.0.0" -deep-equal@~1.0.1: +deep-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" deep-extend@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" deep-is@~0.1.3: version "0.1.3" @@ -1564,6 +2755,12 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + dependencies: + clone "^1.0.2" + define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" @@ -1571,7 +2768,7 @@ define-properties@^1.1.2: foreach "^2.0.5" object-keys "^1.0.8" -defined@~1.0.0: +defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" @@ -1614,9 +2811,9 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@1.1.0, depd@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" +depd@1.1.1, depd@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" des.js@^1.0.0: version "1.0.0" @@ -1635,9 +2832,17 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + diff@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + version "3.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" diffie-hellman@^5.0.0: version "5.0.2" @@ -1651,19 +2856,16 @@ discontinuous-range@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" -doctrine@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.0.2: +doctrine@^2.0.0, doctrine@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075" dependencies: esutils "^2.0.2" +dom-helpers@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" + dom-serializer@0, dom-serializer@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" @@ -1688,24 +2890,47 @@ domelementtype@~1.1.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" domhandler@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" dependencies: domelementtype "1" -domutils@1.5.1, domutils@^1.5.1: +domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" dependencies: dom-serializer "0" domelementtype "1" +domutils@^1.5.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff" + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + dependencies: + is-obj "^1.0.0" + dot-prop@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1" + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" dependencies: is-obj "^1.0.0" +dotenv-webpack@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-1.5.4.tgz#9c92e46e412a1cfbc60217ed33d69d2bbfddbf9f" + dependencies: + dotenv "^4.0.0" + +dotenv@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -1725,12 +2950,18 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" ejs@^2.5.6: - version "2.5.6" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" + version "2.5.7" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" + +electron-releases@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/electron-releases/-/electron-releases-2.1.0.tgz#c5614bf811f176ce3c836e368a0625782341fd4e" -electron-to-chromium@^1.3.16: - version "1.3.16" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.16.tgz#d0e026735754770901ae301a21664cba45d92f7d" +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.28: + version "1.3.30" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.30.tgz#9666f532a64586651fc56a72513692e820d06a80" + dependencies: + electron-releases "^2.1.0" elegant-spinner@^1.0.1: version "1.0.1" @@ -1752,6 +2983,19 @@ emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" +emotion-utils@^8.0.12: + version "8.0.12" + resolved "https://registry.yarnpkg.com/emotion-utils/-/emotion-utils-8.0.12.tgz#5e0fd72db3008f26ce4f80b1972df08841df2168" + +emotion@^8.0.12: + version "8.0.12" + resolved "https://registry.yarnpkg.com/emotion/-/emotion-8.0.12.tgz#03de11ce26b1b2401c334b94d438652124c514c6" + dependencies: + babel-plugin-emotion "^8.0.12" + emotion-utils "^8.0.12" + stylis "^3.3.2" + stylis-rule-sheet "^0.0.5" + encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" @@ -1776,27 +3020,28 @@ entities@^1.1.1, entities@~1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" enzyme-adapter-react-16@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.0.tgz#86c5db7c10f0be6ec25d54ca41b59f2abb397cf4" + version "1.1.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz#a8f4278b47e082fbca14f5bfb1ee50ee650717b4" dependencies: - enzyme-adapter-utils "^1.1.0" + enzyme-adapter-utils "^1.3.0" lodash "^4.17.4" object.assign "^4.0.4" object.values "^1.0.4" - prop-types "^15.5.10" + prop-types "^15.6.0" + react-reconciler "^0.7.0" react-test-renderer "^16.0.0-0" -enzyme-adapter-utils@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.2.0.tgz#7f4471ee0a70b91169ec8860d2bf0a6b551664b2" +enzyme-adapter-utils@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz#d6c85756826c257a8544d362cc7a67e97ea698c7" dependencies: lodash "^4.17.4" object.assign "^4.0.4" - prop-types "^15.5.10" + prop-types "^15.6.0" enzyme-to-json@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.2.2.tgz#110047c68dda97aaeb7af3cee7d995fe3d17e82a" + version "3.3.0" + resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.3.0.tgz#553e23a09ffb4b0cf09287e2edf9c6539fddaa84" dependencies: lodash "^4.17.4" @@ -1816,26 +3061,27 @@ enzyme@^3.2.0: raf "^3.4.0" rst-selector-parser "^2.2.3" -"errno@>=0.1.1 <0.2.0-0", errno@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" +errno@^0.1.3, errno@^0.1.4: + version "0.1.6" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026" dependencies: - prr "~0.0.0" + prr "~1.0.1" -error-ex@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: is-arrayish "^0.2.1" -es-abstract@^1.5.0, es-abstract@^1.6.1, es-abstract@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" +es-abstract@^1.10.0, es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.7.0, es-abstract@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" dependencies: es-to-primitive "^1.1.1" - function-bind "^1.1.0" + function-bind "^1.1.1" + has "^1.0.1" is-callable "^1.1.3" - is-regex "^1.0.3" + is-regex "^1.0.4" es-to-primitive@^1.1.1: version "1.1.1" @@ -1845,20 +3091,24 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.1" -es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.23" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.23.tgz#7578b51be974207a5487821b56538c224e4e7b38" +es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.37" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.37.tgz#0ee741d148b80069ba27d020393756af257defc3" dependencies: - es6-iterator "2" - es6-symbol "~3.1" + es6-iterator "~2.0.1" + es6-symbol "~3.1.1" -es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" +es5-shim@^4.5.9: + version "4.5.10" + resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.10.tgz#b7e17ef4df2a145b821f1497b50c25cf94026205" + +es6-iterator@^2.0.1, es6-iterator@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" dependencies: d "1" - es5-ext "^0.10.14" - es6-symbol "^3.1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" es6-map@^0.1.3: version "0.1.5" @@ -1881,7 +3131,11 @@ es6-set@~0.1.5: es6-symbol "3.1.1" event-emitter "~0.3.5" -es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: +es6-shim@^0.35.3: + version "0.35.3" + resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.3.tgz#9bfb7363feffff87a6cdb6cd93e405ec3c4b6f26" + +es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" dependencies: @@ -1906,15 +3160,15 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" escodegen@^1.6.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + version "1.9.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" + esprima "^3.1.3" + estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: - source-map "~0.2.0" + source-map "~0.5.6" escope@^3.6.0: version "3.6.0" @@ -1952,8 +3206,8 @@ eslint-scope@^3.7.1: estraverse "^4.1.1" eslint@^4.12.1: - version "4.12.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.12.1.tgz#5ec1973822b4a066b353770c3c6d69a2a188e880" + version "4.13.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.13.1.tgz#0055e0014464c7eb7878caf549ef2941992b444f" dependencies: ajv "^5.3.0" babel-code-frame "^6.22.0" @@ -2000,11 +3254,15 @@ espree@^3.5.2: acorn "^5.2.1" acorn-jsx "^3.0.0" -esprima@^2.7.1: +esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" -esprima@^4.0.0: +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esprima@^4.0.0, esprima@~4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" @@ -2015,31 +3273,23 @@ esquery@^1.0.0: estraverse "^4.0.0" esrecurse@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" + version "4.2.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" dependencies: - estraverse "~4.1.0" + estraverse "^4.1.0" object-assign "^4.0.1" -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - -estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" -estraverse@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" - -esutils@^2.0.0, esutils@^2.0.2: +esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -etag@~1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" event-emitter@~0.3.5: version "0.3.5" @@ -2048,33 +3298,23 @@ event-emitter@~0.3.5: d "1" es5-ext "~0.10.14" -events@^1.0.0: +events@^1.0.0, events@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" -evp_bytestokey@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53" +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" dependencies: - create-hash "^1.1.1" + md5.js "^1.3.4" + safe-buffer "^5.1.1" exec-sh@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + version "0.2.1" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" dependencies: merge "^1.1.3" -execa@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" - dependencies: - cross-spawn-async "^2.1.1" - is-stream "^1.1.0" - npm-run-path "^1.0.0" - object-assign "^4.0.1" - path-key "^1.0.0" - strip-eof "^1.0.0" - execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -2099,6 +3339,10 @@ execa@^0.8.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +exenv@^1.2.0, exenv@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" + exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" @@ -2126,50 +3370,52 @@ expect@^21.2.1: jest-message-util "^21.2.1" jest-regex-util "^21.2.0" -express@^4.15.2: - version "4.15.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" +express@^4.15.2, express@^4.16.2: + version "4.16.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" dependencies: - accepts "~1.3.3" + accepts "~1.3.4" array-flatten "1.1.1" + body-parser "1.18.2" content-disposition "0.5.2" - content-type "~1.0.2" + content-type "~1.0.4" cookie "0.3.1" cookie-signature "1.0.6" - debug "2.6.1" - depd "~1.1.0" + debug "2.6.9" + depd "~1.1.1" encodeurl "~1.0.1" escape-html "~1.0.3" - etag "~1.8.0" - finalhandler "~1.0.0" - fresh "0.5.0" + etag "~1.8.1" + finalhandler "1.1.0" + fresh "0.5.2" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" - parseurl "~1.3.1" + parseurl "~1.3.2" path-to-regexp "0.1.7" - proxy-addr "~1.1.3" - qs "6.4.0" + proxy-addr "~2.0.2" + qs "6.5.1" range-parser "~1.2.0" - send "0.15.1" - serve-static "1.12.1" - setprototypeof "1.0.3" + safe-buffer "5.1.1" + send "0.16.1" + serve-static "1.13.1" + setprototypeof "1.1.0" statuses "~1.3.1" - type-is "~1.6.14" - utils-merge "1.0.0" - vary "~1.1.0" + type-is "~1.6.15" + utils-merge "1.0.1" + vary "~1.1.2" -extend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" +extend@~3.0.0, extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" external-editor@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972" + version "2.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" dependencies: + chardet "^0.4.0" iconv-lite "^0.4.17" - jschardet "^1.4.2" - tmp "^0.0.31" + tmp "^0.0.33" extglob@^0.3.1: version "0.3.2" @@ -2177,13 +3423,13 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" -fast-deep-equal@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-0.1.0.tgz#5c6f4599aba6b333ee3342e2ed978672f1001f8d" +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" fast-deep-equal@^1.0.0: version "1.0.0" @@ -2194,8 +3440,16 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" fast-levenshtein@~2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz#bd33145744519ab1c36c3ee9f31f08e9079b67f2" + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fast-memoize@^2.2.7: + version "2.2.8" + resolved "https://registry.yarnpkg.com/fast-memoize/-/fast-memoize-2.2.8.tgz#d7f899f31d037b12d9db4281912f9018575720b1" + +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" fb-watchman@^2.0.0: version "2.0.0" @@ -2203,7 +3457,7 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -fbjs@^0.8.16, fbjs@^0.8.9: +fbjs@^0.8.12, fbjs@^0.8.16, fbjs@^0.8.5, fbjs@^0.8.9: version "0.8.16" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" dependencies: @@ -2236,15 +3490,15 @@ file-entry-cache@^2.0.0: object-assign "^4.0.1" file-loader@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa" + version "1.1.6" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.6.tgz#7b9a8f2c58f00a77fddf49e940f7ac978a3ea0e8" dependencies: loader-utils "^1.0.2" schema-utils "^0.3.0" filename-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" fileset@^2.0.2: version "2.0.3" @@ -2254,8 +3508,8 @@ fileset@^2.0.2: minimatch "^3.0.3" filesize@^3.5.9: - version "3.5.10" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.10.tgz#fc8fa23ddb4ef9e5e0ab6e1e64f679a24a56761f" + version "3.5.11" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee" fill-range@^2.1.0: version "2.2.3" @@ -2267,15 +3521,15 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -finalhandler@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" +finalhandler@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" dependencies: - debug "2.6.3" + debug "2.6.9" encodeurl "~1.0.1" escape-html "~1.0.3" on-finished "~2.3.0" - parseurl "~1.3.1" + parseurl "~1.3.2" statuses "~1.3.1" unpipe "~1.0.0" @@ -2287,6 +3541,10 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -2301,33 +3559,31 @@ find-up@^2.0.0, find-up@^2.1.0: locate-path "^2.0.0" flat-cache@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.1.tgz#6c837d6225a7de5659323740b36d5361f71691ff" + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" dependencies: - circular-json "^0.3.0" + circular-json "^0.3.1" del "^2.0.2" graceful-fs "^4.1.2" write "^0.2.1" -flow-bin@^0.60.1: - version "0.60.1" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.60.1.tgz#0f4fa7b49be2a916f18cd946fc4a51e32ffe4b48" +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" -for-each@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" - dependencies: - is-function "~1.0.0" +flow-bin@^0.61.0: + version "0.61.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.61.0.tgz#d0473a8c35dbbf4de573823f4932124397d32d35" -for-in@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" for-own@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" dependencies: - for-in "^0.1.5" + for-in "^1.0.1" foreach@^2.0.5: version "2.0.5" @@ -2338,44 +3594,53 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" form-data@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" mime-types "^2.1.12" -forwarded@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" +form-data@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" -fresh@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +fs-extra@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" fs-readdir-recursive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^1.0.0: - version "1.0.15" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.15.tgz#fa63f590f3c2ad91275e4972a6cea545fb0aae44" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.29" - -fsevents@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" +fsevents@^1.0.0, fsevents@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" dependencies: nan "^2.3.0" - node-pre-gyp "^0.6.36" + node-pre-gyp "^0.6.39" -fstream-ignore@^1.0.5, fstream-ignore@~1.0.5: +fstream-ignore@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" dependencies: @@ -2383,18 +3648,18 @@ fstream-ignore@^1.0.5, fstream-ignore@~1.0.5: inherits "2" minimatch "^3.0.0" -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.0, function-bind@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" +function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" function.prototype.name@^1.0.3: version "1.0.3" @@ -2408,19 +3673,9 @@ functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" -gauge@~2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.1.tgz#388473894fe8be5e13ffcdb8b93e4ed0616428c7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-color "^0.1.7" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" +fuse.js@^3.0.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.2.0.tgz#f0448e8069855bf2a3e683cdc1d320e7e2a07ef4" gauge@~2.7.3: version "2.7.4" @@ -2435,23 +3690,27 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" -get-own-enumerable-property-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-1.0.1.tgz#f1d4e3ad1402e039898e56d1e9b9aa924c26e484" +get-own-enumerable-property-symbols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" + +get-pkg-repo@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" + dependencies: + hosted-git-info "^2.1.4" + meow "^3.3.0" + normalize-package-data "^2.3.0" + parse-github-repo-url "^1.3.0" + through2 "^2.0.0" + +get-port@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" get-stdin@^4.0.1: version "4.0.1" @@ -2466,11 +3725,63 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" getpass@^0.1.1: - version "0.1.6" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" dependencies: assert-plus "^1.0.0" +git-raw-commits@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.0.tgz#0bc8596e90d5ffe736f7f5546bd2d12f73abaac6" + dependencies: + dargs "^4.0.1" + lodash.template "^4.0.2" + meow "^3.3.0" + split2 "^2.0.0" + through2 "^2.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.2.3.tgz#188b453882bf9d7a23afd31baba537dab7388d5d" + dependencies: + meow "^3.3.0" + semver "^5.0.1" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + dependencies: + ini "^1.3.2" + +glamor@^2.20.40: + version "2.20.40" + resolved "https://registry.yarnpkg.com/glamor/-/glamor-2.20.40.tgz#f606660357b7cf18dface731ad1a2cfa93817f05" + dependencies: + fbjs "^0.8.12" + inline-style-prefixer "^3.0.6" + object-assign "^4.1.1" + prop-types "^15.5.10" + through "^2.3.8" + +glamorous@^4.11.0: + version "4.11.2" + resolved "https://registry.yarnpkg.com/glamorous/-/glamorous-4.11.2.tgz#ce144c6a53e247ddf0896ad6faddebf78c49d864" + dependencies: + brcast "^3.0.0" + fast-memoize "^2.2.7" + html-tag-names "^1.1.1" + is-function "^1.0.1" + is-plain-object "^2.0.4" + react-html-attributes "^1.3.0" + svg-tag-names "^1.1.0" + glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -2484,7 +3795,14 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.2: +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -2495,9 +3813,15 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -global@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.1.tgz#5f757908c7cbabce54f386ae440e11e26b7916df" +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + dependencies: + ini "^1.3.4" + +global@^4.3.0, global@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" dependencies: min-document "^2.19.0" process "~0.5.1" @@ -2507,8 +3831,8 @@ globals@^10.0.0: resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7" globals@^11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.0.1.tgz#12a87bb010e5154396acc535e1e43fc753b0e5e8" + version "11.1.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4" globals@^9.18.0: version "9.18.0" @@ -2551,7 +3875,7 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -2565,9 +3889,9 @@ gzip-size@^3.0.0: dependencies: duplexer "^0.1.1" -handlebars@^4.0.3: - version "4.0.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" +handlebars@^4.0.2, handlebars@^4.0.3: + version "4.0.11" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" dependencies: async "^1.4.0" optimist "^0.6.1" @@ -2579,14 +3903,9 @@ har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" har-validator@~4.2.1: version "4.2.1" @@ -2595,16 +3914,19 @@ har-validator@~4.2.1: ajv "^4.9.1" har-schema "^1.0.5" +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" dependencies: ansi-regex "^2.0.0" -has-color@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" @@ -2613,23 +3935,41 @@ has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" -has@^1.0.1, has@~1.0.1: +has@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" dependencies: function-bind "^1.0.2" -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" +hash-base@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + dependencies: + inherits "^2.0.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" dependencies: inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" -hawk@~3.1.3: +hawk@3.1.3, hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: @@ -2638,6 +3978,15 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -2650,6 +3999,18 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hoek@4.x.x: + version "4.2.0" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + +hoist-non-react-statics@1.x.x, hoist-non-react-statics@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" + +hoist-non-react-statics@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -2657,16 +4018,32 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" -hosted-git-info@^2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" +hosted-git-info@^2.1.4, hosted-git-info@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +html-comment-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + +html-element-attributes@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/html-element-attributes/-/html-element-attributes-1.3.0.tgz#f06ebdfce22de979db82020265cac541fb17d4fc" html-encoding-sniffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" dependencies: whatwg-encoding "^1.0.1" +html-entities@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + +html-tag-names@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-tag-names/-/html-tag-names-1.1.2.tgz#f65168964c5a9c82675efda882875dcb2a875c22" + htmlparser2@^3.9.1: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" @@ -2678,11 +4055,11 @@ htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^2.0.2" -http-errors@~1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" +http-errors@1.6.2, http-errors@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" dependencies: - depd "1.1.0" + depd "1.1.1" inherits "2.0.3" setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" @@ -2695,29 +4072,51 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" -hyphenate-style-name@^1.0.2: +hyphenate-style-name@^1.0.1, hyphenate-style-name@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b" -iconv-lite@0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" +iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -iconv-lite@^0.4.17, iconv-lite@~0.4.13: - version "0.4.18" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + +icss-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + dependencies: + postcss "^6.0.1" ieee754@^1.1.4: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" +ifvisible.js@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/ifvisible.js/-/ifvisible.js-1.0.6.tgz#52eb151ce89c56f15316226462e892d1f8451261" + ignore@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" + version "3.3.7" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + +immutable@^3.8.1: + version "3.8.2" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" import-lazy@^2.1.0: version "2.1.0" @@ -2734,8 +4133,12 @@ indent-string@^2.1.0: repeating "^2.0.0" indent-string@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.1.0.tgz#08ff4334603388399b329e6b9538dc7a3cf5de7d" + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" indexof@0.0.1: version "0.0.1" @@ -2756,23 +4159,30 @@ inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" -ini@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" +ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +inline-style-prefixer@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-2.0.5.tgz#c153c7e88fd84fef5c602e95a8168b2770671fe7" + dependencies: + bowser "^1.0.0" + hyphenate-style-name "^1.0.1" -inline-style-prefixer@^3.0.8: +inline-style-prefixer@^3.0.1, inline-style-prefixer@^3.0.3, inline-style-prefixer@^3.0.6, inline-style-prefixer@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534" dependencies: bowser "^1.7.3" css-in-js-utils "^2.0.0" -inquirer@^3.0.6: - version "3.1.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.1.1.tgz#87621c4fba4072f48a8dd71c9f9df6f100b2d534" +inquirer@^3.0.6, inquirer@^3.2.2: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" dependencies: - ansi-escapes "^2.0.0" - chalk "^1.0.0" + ansi-escapes "^3.0.0" + chalk "^2.0.0" cli-cursor "^2.1.0" cli-width "^2.0.0" external-editor "^2.0.4" @@ -2782,13 +4192,13 @@ inquirer@^3.0.6: run-async "^2.2.0" rx-lite "^4.0.8" rx-lite-aggregates "^4.0.8" - string-width "^2.0.0" - strip-ansi "^3.0.0" + string-width "^2.1.0" + strip-ansi "^4.0.0" through "^2.3.6" interpret@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" + version "1.1.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" invariant@^2.2.0, invariant@^2.2.2: version "2.2.2" @@ -2800,9 +4210,13 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ipaddr.js@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec" +ipaddr.js@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" is-arrayish@^0.2.1: version "0.2.1" @@ -2814,9 +4228,9 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-buffer@^1.0.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" is-builtin-module@^1.0.0: version "1.0.0" @@ -2838,9 +4252,17 @@ is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + +is-dom@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/is-dom/-/is-dom-1.0.9.tgz#483832d52972073de12b9fe3f60320870da8370d" + is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" is-equal-shallow@^0.1.3: version "0.1.3" @@ -2856,7 +4278,7 @@ is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" -is-extglob@^2.1.1: +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -2876,7 +4298,7 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" -is-function@~1.0.0: +is-function@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" @@ -2886,31 +4308,45 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + is-glob@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" dependencies: is-extglob "^2.1.1" -is-my-json-valid@^2.12.4: - version "2.16.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" +is-in-browser@^1.0.2, is-in-browser@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" + global-dirs "^0.1.0" + is-path-inside "^1.0.0" is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" -is-number@^2.0.2, is-number@^2.1.0: +is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: kind-of "^3.0.2" +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -2926,14 +4362,24 @@ is-path-in-cwd@^1.0.0: is-path-inside "^1.0.0" is-path-inside@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" dependencies: path-is-inside "^1.0.1" +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-plain-object@^2.0.1, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + is-posix-bracket@^0.1.0: version "0.1.1" - resolved "http://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" is-primitive@^2.0.0: version "2.0.0" @@ -2943,27 +4389,23 @@ is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" -is-regex@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.3.tgz#0d55182bddf9f2fde278220aec3a75642c908637" +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" is-resolvable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" - dependencies: - tryit "^1.0.1" + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4" is-retry-allowed@^1.0.0: version "1.1.0" @@ -2977,10 +4419,22 @@ is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + dependencies: + html-comment-regex "^1.1.0" + is-symbol@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" +is-text-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + dependencies: + text-extensions "^1.0.0" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -2993,9 +4447,9 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" -isexe@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" isobject@^2.0.0: version "2.1.0" @@ -3003,6 +4457,10 @@ isobject@^2.0.0: dependencies: isarray "1.0.0" +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" @@ -3015,86 +4473,65 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul-api@^1.1.1: - version "1.1.9" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.9.tgz#2827920d380d4286d857d57a2968a841db8a7ec8" + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620" dependencies: async "^2.1.4" fileset "^2.0.2" istanbul-lib-coverage "^1.1.1" - istanbul-lib-hook "^1.0.7" - istanbul-lib-instrument "^1.7.2" - istanbul-lib-report "^1.1.1" - istanbul-lib-source-maps "^1.2.1" - istanbul-reports "^1.1.1" + istanbul-lib-hook "^1.1.0" + istanbul-lib-instrument "^1.9.1" + istanbul-lib-report "^1.1.2" + istanbul-lib-source-maps "^1.2.2" + istanbul-reports "^1.1.3" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha.0, istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1: +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" -istanbul-lib-hook@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc" +istanbul-lib-hook@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.5.0.tgz#0f844fd5d729f2bcb0eed5329273c581ca9a8c74" +istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" - babylon "^6.13.0" - istanbul-lib-coverage "^1.0.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.1.1" semver "^5.3.0" -istanbul-lib-instrument@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz#6014b03d3470fb77638d5802508c255c06312e56" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.13.0" - istanbul-lib-coverage "^1.1.1" - semver "^5.3.0" - -istanbul-lib-report@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9" +istanbul-lib-report@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425" dependencies: istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.1.0.tgz#9d429218f35b823560ea300a96ff0c3bbdab785f" - dependencies: - istanbul-lib-coverage "^1.0.0-alpha.0" - mkdirp "^0.5.1" - rimraf "^2.4.4" - source-map "^0.5.3" - -istanbul-lib-source-maps@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c" dependencies: - debug "^2.6.3" + debug "^3.1.0" istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.1.tgz#042be5c89e175bc3f86523caab29c014e77fee4e" +istanbul-reports@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10" dependencies: handlebars "^4.0.3" @@ -3210,13 +4647,6 @@ jest-jasmine2@^21.2.1: jest-snapshot "^21.2.1" p-cancelable "^0.3.0" -jest-matcher-utils@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612" - dependencies: - chalk "^1.1.3" - pretty-format "^20.0.3" - jest-matcher-utils@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz#72c826eaba41a093ac2b4565f865eb8475de0f64" @@ -3315,16 +4745,7 @@ jest-util@^21.2.1: jest-validate "^21.2.1" mkdirp "^0.5.1" -jest-validate@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab" - dependencies: - chalk "^1.1.3" - jest-matcher-utils "^20.0.3" - leven "^2.1.0" - pretty-format "^20.0.3" - -jest-validate@^21.2.1: +jest-validate@^21.1.0, jest-validate@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" dependencies: @@ -3339,30 +4760,31 @@ jest@^21.2.1: dependencies: jest-cli "^21.2.1" -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" +js-base64@^2.1.9: + version "2.4.0" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.0.tgz#9e566fee624751a1d720c966cd6226d29d4025aa" js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" +js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" dependencies: argparse "^1.0.7" esprima "^4.0.0" -jsbn@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" -jschardet@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.4.2.tgz#2aa107f142af4121d145659d44f50830961e699a" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" jsdom@^9.12.0: version "9.12.0" @@ -3392,13 +4814,17 @@ jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" -json-loader@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-loader@^0.5.4, json-loader@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" json-schema-traverse@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.0.tgz#0016c0b1ca1efe46d44d37541bcdfc19dcfae0db" + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" json-schema@0.2.3: version "0.2.3" @@ -3414,7 +4840,7 @@ json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -3422,33 +4848,123 @@ json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" -jsonpointer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5" +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" jsprim@^1.2.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" dependencies: - extsprintf "1.0.2" + assert-plus "1.0.0" + extsprintf "1.3.0" json-schema "0.2.3" - verror "1.3.6" + verror "1.10.0" + +jss-camel-case@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/jss-camel-case/-/jss-camel-case-6.0.0.tgz#7cf8453e395c31fed931d11efbc885edcd61132e" + +jss-compose@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/jss-compose/-/jss-compose-5.0.0.tgz#ce01b2e4521d65c37ea42cf49116e5f7ab596484" + dependencies: + warning "^3.0.0" + +jss-default-unit@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/jss-default-unit/-/jss-default-unit-8.0.2.tgz#cc1e889bae4c0b9419327b314ab1c8e2826890e6" + +jss-expand@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/jss-expand/-/jss-expand-5.1.0.tgz#b1ad74ec18631f34f65a2124fcfceb6400610e3d" + +jss-extend@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jss-extend/-/jss-extend-6.1.0.tgz#85f3d39944018e8f44b322c14fa316068aa7bb0b" + dependencies: + warning "^3.0.0" + +jss-global@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jss-global/-/jss-global-3.0.0.tgz#e19e5c91ab2b96353c227e30aa2cbd938cdaafa2" + +jss-nested@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jss-nested/-/jss-nested-6.0.1.tgz#ef992b79d6e8f63d939c4397b9d99b5cbbe824ca" + dependencies: + warning "^3.0.0" + +jss-preset-default@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jss-preset-default/-/jss-preset-default-4.0.1.tgz#822cecb87c27ff91633774422f4c221d61486b65" + dependencies: + jss-camel-case "^6.0.0" + jss-compose "^5.0.0" + jss-default-unit "^8.0.0" + jss-expand "^5.0.0" + jss-extend "^6.0.1" + jss-global "^3.0.0" + jss-nested "^6.0.1" + jss-props-sort "^6.0.0" + jss-template "^1.0.0" + jss-vendor-prefixer "^7.0.0" + +jss-props-sort@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/jss-props-sort/-/jss-props-sort-6.0.0.tgz#9105101a3b5071fab61e2d85ea74cc22e9b16323" + +jss-template@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jss-template/-/jss-template-1.0.0.tgz#4b874608706ddceecacdb5567e254aecb6ea69b3" + dependencies: + warning "^3.0.0" + +jss-vendor-prefixer@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz#0166729650015ef19d9f02437c73667231605c71" + dependencies: + css-vendor "^0.3.8" + +jss@^9.3.2: + version "9.4.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-9.4.0.tgz#fbfd1a63556c5afd5bfcffd98df3c50eb2614ed3" + dependencies: + is-in-browser "^1.1.3" + symbol-observable "^1.1.0" + warning "^3.0.0" jsx-ast-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.0.tgz#ec06a3d60cf307e5e119dac7bad81e89f096f0f8" + version "2.0.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" dependencies: array-includes "^3.0.3" +keycode@^2.1.8: + version "2.1.9" + resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa" + kind-of@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.0.4.tgz#7b8ecf18a4e17f8269d73b501c9f232c96887a74" + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" dependencies: - is-buffer "^1.0.2" + is-buffer "^1.1.5" latest-version@^3.0.0: version "3.1.0" @@ -3466,6 +4982,49 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +lerna@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-2.5.1.tgz#d07099bd3051ee799f98c753328bd69e96c6fab8" + dependencies: + async "^1.5.0" + chalk "^2.1.0" + cmd-shim "^2.0.2" + columnify "^1.5.4" + command-join "^2.0.0" + conventional-changelog-cli "^1.3.2" + conventional-recommended-bump "^1.0.1" + dedent "^0.7.0" + execa "^0.8.0" + find-up "^2.1.0" + fs-extra "^4.0.1" + get-port "^3.2.0" + glob "^7.1.2" + glob-parent "^3.1.0" + globby "^6.1.0" + graceful-fs "^4.1.11" + hosted-git-info "^2.5.0" + inquirer "^3.2.2" + is-ci "^1.0.10" + load-json-file "^3.0.0" + lodash "^4.17.4" + minimatch "^3.0.4" + npmlog "^4.1.2" + p-finally "^1.0.0" + package-json "^4.0.1" + path-exists "^3.0.0" + read-cmd-shim "^1.0.1" + read-pkg "^2.0.0" + rimraf "^2.6.1" + safe-buffer "^5.1.1" + semver "^5.4.1" + signal-exit "^3.0.2" + strong-log-transformer "^1.0.6" + temp-write "^3.3.0" + write-file-atomic "^2.3.0" + write-json-file "^2.2.0" + write-pkg "^3.1.0" + yargs "^8.0.2" + leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -3478,15 +5037,16 @@ levn@^0.3.0, levn@~0.3.0: type-check "~0.3.2" lint-staged@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-4.1.3.tgz#07c592e4b8dee914450a183c761187dc53d079e2" + version "4.3.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-4.3.0.tgz#ed0779ad9a42c0dc62bb3244e522870b41125879" dependencies: app-root-path "^2.0.0" chalk "^2.1.0" + commander "^2.11.0" cosmiconfig "^1.1.0" execa "^0.8.0" is-glob "^4.0.0" - jest-validate "^20.0.3" + jest-validate "^21.1.0" listr "^0.12.0" lodash "^4.17.4" log-symbols "^2.0.0" @@ -3514,8 +5074,8 @@ listr-update-renderer@^0.2.0: strip-ansi "^3.0.1" listr-verbose-renderer@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz#44dc01bb0c34a03c572154d4d08cde9b1dc5620f" + version "0.4.1" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" dependencies: chalk "^1.1.3" cli-cursor "^1.0.2" @@ -3562,6 +5122,15 @@ load-json-file@^2.0.0: pify "^2.0.0" strip-bom "^3.0.0" +load-json-file@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-3.0.0.tgz#7eb3735d983a7ed2262ade4ff769af5369c5c440" + dependencies: + graceful-fs "^4.1.2" + parse-json "^3.0.0" + pify "^2.0.0" + strip-bom "^3.0.0" + loader-runner@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" @@ -3581,10 +5150,50 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +lodash-es@^4.2.1: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._reinterpolate@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + +lodash.keys@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -3593,14 +5202,43 @@ lodash.merge@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" +lodash.pick@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + +lodash.some@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + +lodash.template@^4.0.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" + dependencies: + lodash._reinterpolate "~3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" + dependencies: + lodash._reinterpolate "~3.0.0" + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.6.1: +lodash@4.x.x, lodash@^4.0.0, lodash@^4.1.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.1, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +lodash@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -3608,8 +5246,8 @@ log-symbols@^1.0.2: chalk "^1.0.0" log-symbols@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.0.0.tgz#595e63be4d5c8cbf294a9e09e0d5629f5913fc0c" + version "2.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.1.0.tgz#f35fa60e278832b538dc4dddcbb478a45d3e3be6" dependencies: chalk "^2.0.1" @@ -3641,18 +5279,22 @@ lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" -lru-cache@^4.0.0, lru-cache@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" +lru-cache@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" + pseudomap "^1.0.2" + yallist "^2.1.2" + +macaddress@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" make-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978" + version "1.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" dependencies: - pify "^2.3.0" + pify "^3.0.0" makeerror@1.0.x: version "1.0.11" @@ -3664,6 +5306,21 @@ map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" +marky@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.0.tgz#9617ed647bbbea8f45d19526da33dec70606df42" + +math-expression-evaluator@^1.2.14: + version "1.2.17" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + +md5.js@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -3681,7 +5338,7 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.6.0: +meow@^3.3.0, meow@^3.6.0, meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" dependencies: @@ -3727,27 +5384,27 @@ micromatch@^2.1.5, micromatch@^2.3.11: regex-cache "^0.4.2" miller-rabin@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" dependencies: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@~1.25.0: - version "1.25.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" +mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" -mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: - version "2.1.13" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" +mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: - mime-db "~1.25.0" + mime-db "~1.30.0" -mime@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" -mime@^1.4.1: +mime@^1.4.1, mime@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -3775,27 +5432,35 @@ minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8, minimist@~0.0.1: +minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: +minimist@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" + +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" +modify-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.0.tgz#e2b6cdeb9ce19f99317a53722f3dbf5df5eaaab2" -ms@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" +moment@^2.6.0: + version "2.20.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" ms@2.0.0: version "2.0.0" @@ -3806,8 +5471,8 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" nan@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" + version "2.8.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" natural-compare@^1.4.0: version "1.4.0" @@ -3825,9 +5490,15 @@ negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" +node-dir@^0.1.10: + version "0.1.17" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" + dependencies: + minimatch "^3.0.2" + node-fetch@^1.0.1: - version "1.6.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" dependencies: encoding "^0.1.11" is-stream "^1.0.1" @@ -3837,28 +5508,28 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" node-libs-browser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" + version "2.1.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" dependencies: assert "^1.1.1" - browserify-zlib "^0.1.4" + browserify-zlib "^0.2.0" buffer "^4.3.0" console-browserify "^1.1.0" constants-browserify "^1.0.0" crypto-browserify "^3.11.0" domain-browser "^1.1.1" events "^1.0.0" - https-browserify "0.0.1" - os-browserify "^0.2.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" path-browserify "0.0.0" - process "^0.11.0" + process "^0.11.10" punycode "^1.2.4" querystring-es3 "^0.2.0" - readable-stream "^2.0.5" + readable-stream "^2.3.3" stream-browserify "^2.0.1" - stream-http "^2.3.1" - string_decoder "^0.10.25" - timers-browserify "^2.0.2" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" tty-browserify "0.0.0" url "^0.11.0" util "^0.10.3" @@ -3873,32 +5544,19 @@ node-notifier@^5.0.2: shellwords "^0.1.0" which "^1.2.12" -node-pre-gyp@^0.6.29: - version "0.6.31" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.31.tgz#d8a00ddaa301a940615dbcc8caad4024d58f6017" - dependencies: - mkdirp "~0.5.1" - nopt "~3.0.6" - npmlog "^4.0.0" - rc "~1.1.6" - request "^2.75.0" - rimraf "~2.5.4" - semver "~5.3.0" - tar "~2.2.1" - tar-pack "~3.3.0" - -node-pre-gyp@^0.6.36: - version "0.6.37" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.37.tgz#3c872b236b2e266e4140578fe1ee88f693323a05" +node-pre-gyp@^0.6.39: + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" mkdirp "^0.5.1" nopt "^4.0.1" npmlog "^4.0.2" rc "^1.1.7" - request "^2.81.0" + request "2.81.0" rimraf "^2.6.1" semver "^5.3.0" - tape "^4.6.3" tar "^2.2.1" tar-pack "^3.4.0" @@ -3916,9 +5574,9 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -nopt@~3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" dependencies: abbrev "1" @@ -3926,18 +5584,33 @@ normalize-css-color@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/normalize-css-color/-/normalize-css-color-1.0.2.tgz#02991e97cccec6623fe573afbbf0de6a1f3e9f8d" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" +normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" +normalize-path@^2.0.0, normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" npm-path@^2.0.2: version "2.0.3" @@ -3945,12 +5618,6 @@ npm-path@^2.0.2: dependencies: which "^1.2.10" -npm-run-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" - dependencies: - path-key "^1.0.0" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -3965,16 +5632,7 @@ npm-which@^3.0.1: npm-path "^2.0.2" which "^1.2.10" -npmlog@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.1.tgz#d14f503b4cd79710375553004ba96e6662fbc0b8" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.1" - set-blocking "~2.0.0" - -npmlog@^4.0.2: +npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: @@ -3989,15 +5647,19 @@ nth-check@~1.0.1: dependencies: boolbase "~1.0.0" +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" "nwmatcher@>= 1.3.9 < 2.0.0": - version "1.3.9" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" + version "1.4.3" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" -oauth-sign@~0.8.1: +oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -4005,25 +5667,22 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-inspect@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.3.0.tgz#5b1eb8e6742e2ee83342a637034d844928ba2f6d" - object-is@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" -object-keys@^1.0.10, object-keys@^1.0.8: +object-keys@^1.0.11, object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" object.assign@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" dependencies: define-properties "^1.1.2" - function-bind "^1.1.0" - object-keys "^1.0.10" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" object.entries@^1.0.4: version "1.0.4" @@ -4034,6 +5693,13 @@ object.entries@^1.0.4: function-bind "^1.1.0" has "^1.0.1" +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -4062,12 +5728,6 @@ once@^1.3.0, once@^1.3.3, once@^1.4.0: dependencies: wrappy "1" -once@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - dependencies: - wrappy "1" - onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" @@ -4109,9 +5769,9 @@ ora@^0.2.3: cli-spinners "^0.1.2" object-assign "^4.0.1" -os-browserify@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" @@ -4125,7 +5785,7 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -4163,10 +5823,10 @@ p-locate@^2.0.0: p-limit "^1.1.0" p-map@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" -package-json@^4.0.0: +package-json@^4.0.0, package-json@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" dependencies: @@ -4175,9 +5835,9 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" -pako@~0.2.0: - version "0.2.9" - resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" +pako@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" parse-asn1@^5.0.0: version "5.1.0" @@ -4189,6 +5849,10 @@ parse-asn1@^5.0.0: evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" +parse-github-repo-url@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -4204,24 +5868,34 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-json@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-3.0.0.tgz#fa6f47b18e23826ead32f263e744d0e1e847fb13" + dependencies: + error-ex "^1.3.1" + parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" parse5@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.2.tgz#05eff57f0ef4577fb144a79f8b9a967a6cc44510" + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" dependencies: - "@types/node" "^6.0.46" + "@types/node" "*" -parseurl@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -4240,10 +5914,6 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" -path-key@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" - path-key@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -4271,10 +5941,14 @@ path-type@^2.0.0: pify "^2.0.0" pbkdf2@^3.0.3: - version "3.0.9" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" + version "3.0.14" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" dependencies: - create-hmac "^1.1.2" + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" performance-now@^0.2.0: version "0.2.0" @@ -4284,7 +5958,7 @@ performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -4312,11 +5986,302 @@ pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" +podda@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/podda/-/podda-1.2.2.tgz#15b0edbd334ade145813343f5ecf9c10a71cf500" + dependencies: + babel-runtime "^6.11.6" + immutable "^3.8.1" + +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + dependencies: + postcss "^5.0.14" + +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + dependencies: + postcss "^5.0.4" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + dependencies: + postcss "^5.0.14" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + dependencies: + postcss "^5.0.16" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + dependencies: + postcss "^5.0.4" + uniqid "^4.0.0" + +postcss-flexbugs-fixes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.2.0.tgz#9b8b932c53f9cf13ba0f61875303e447c33dcc51" + dependencies: + postcss "^6.0.1" + +postcss-load-config@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + postcss-load-options "^1.2.0" + postcss-load-plugins "^2.3.0" + +postcss-load-options@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + +postcss-load-plugins@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" + dependencies: + cosmiconfig "^2.1.1" + object-assign "^4.1.0" + +postcss-loader@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.0.9.tgz#001fdf7bfeeb159405ee61d1bb8e59b528dbd309" + dependencies: + loader-utils "^1.1.0" + postcss "^6.0.0" + postcss-load-config "^1.2.0" + schema-utils "^0.3.0" + +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + dependencies: + postcss "^5.0.4" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-modules-extract-imports@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + dependencies: + postcss "^5.0.5" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + dependencies: + postcss "^5.0.4" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.14: + version "6.0.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.14.tgz#5534c72114739e75d0afcf017db853099f562885" + dependencies: + chalk "^2.3.0" + source-map "^0.6.1" + supports-color "^4.4.0" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" -prepend-http@^1.0.1: +prepend-http@^1.0.0, prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" @@ -4325,15 +6290,8 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" prettier@^1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.8.2.tgz#bff83e7fd573933c607875e5ba3abbdffb96aeb8" - -pretty-format@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" - dependencies: - ansi-regex "^2.1.1" - ansi-styles "^3.0.0" + version "1.9.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.9.2.tgz#96bc2132f7a32338e6078aeb29727178c6335827" pretty-format@^21.2.1: version "21.2.1" @@ -4342,17 +6300,17 @@ pretty-format@^21.2.1: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -private@^0.1.7, private@~0.1.5: - version "0.1.7" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" +private@^0.1.6, private@^0.1.7, private@~0.1.5: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" -process@^0.11.0: - version "0.11.9" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" process@~0.5.1: version "0.5.2" @@ -4362,13 +6320,21 @@ progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" +promise.prototype.finally@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.0.tgz#66f161b1643636e50e7cf201dc1b84a857f3864e" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.9.0" + function-bind "^1.1.1" + promise@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" dependencies: asap "~2.0.3" -prop-types@^15.5.10, prop-types@^15.6.0: +prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0: version "15.6.0" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" dependencies: @@ -4376,18 +6342,18 @@ prop-types@^15.5.10, prop-types@^15.6.0: loose-envify "^1.3.1" object-assign "^4.1.1" -proxy-addr@~1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3" +proxy-addr@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec" dependencies: - forwarded "~0.1.0" - ipaddr.js "1.3.0" + forwarded "~0.1.2" + ipaddr.js "1.5.2" -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" -pseudomap@^1.0.1: +pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -4409,22 +6375,42 @@ punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -qs@6.4.0, qs@~6.4.0: +q@^1.1.2, q@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + +qs@6.5.1, qs@^6.5.1, qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" -qs@~6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" -querystring@0.2.0: +querystring@0.2.0, querystring@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" +radium@^0.19.0, radium@^0.19.6: + version "0.19.6" + resolved "https://registry.yarnpkg.com/radium/-/radium-0.19.6.tgz#b86721d08dbd303b061a4ae2ebb06cc6e335ae72" + dependencies: + array-find "^1.0.0" + exenv "^1.2.1" + inline-style-prefixer "^2.0.5" + prop-types "^15.5.8" + raf@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" @@ -4443,32 +6429,41 @@ randexp@^0.4.2: ret "~0.1.10" randomatic@^1.1.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.5.tgz#5e9ef5f2d573c67bd2b8124ae90b5156e457840b" + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" + is-number "^3.0.0" + kind-of "^4.0.0" -randombytes@^2.0.0, randombytes@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" + dependencies: + safe-buffer "^5.1.0" -range-parser@~1.2.0: +randomfill@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62" + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.0.3, range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" -rc@^1.0.1, rc@^1.1.6, rc@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" +raw-body@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~1.0.4" + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" -rc@^1.1.7: - version "1.2.1" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" +rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: + version "1.2.2" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" dependencies: deep-extend "~0.4.0" ini "~1.3.0" @@ -4487,8 +6482,20 @@ react-art@^16.2.0: prop-types "^15.6.0" react-deep-force-update@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.0.1.tgz#f911b5be1d2a6fe387507dd6e9a767aa2924b4c7" + version "1.1.1" + resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.1.tgz#bcd31478027b64b3339f108921ab520b4313dc2c" + +react-docgen@^2.15.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-2.20.0.tgz#41a6da483a34a4aaed041a9909f5e61864d681cb" + dependencies: + async "^2.1.4" + babel-runtime "^6.9.2" + babylon "~5.8.3" + commander "^2.9.0" + doctrine "^2.0.0" + node-dir "^0.1.10" + recast "^0.12.6" react-dom@^16.2.0: version "16.2.0" @@ -4499,6 +6506,47 @@ react-dom@^16.2.0: object-assign "^4.1.1" prop-types "^15.6.0" +react-html-attributes@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/react-html-attributes/-/react-html-attributes-1.4.1.tgz#97b5ec710da68833598c8be6f89ac436216840a5" + dependencies: + html-element-attributes "^1.0.0" + +react-icon-base@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/react-icon-base/-/react-icon-base-2.1.0.tgz#a196e33fdf1e7aaa1fda3aefbb68bdad9e82a79d" + +react-icons@^2.2.7: + version "2.2.7" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-2.2.7.tgz#d7860826b258557510dac10680abea5ca23cf650" + dependencies: + react-icon-base "2.1.0" + +react-inspector@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-2.2.2.tgz#c04f5248fa92ab6c23e37960e725fb7f48c34d05" + dependencies: + babel-runtime "^6.26.0" + is-dom "^1.0.9" + +react-jss@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/react-jss/-/react-jss-8.2.0.tgz#8440f08aef27d408ba31f63df09167ed22a5b99b" + dependencies: + hoist-non-react-statics "^2.3.1" + jss "^9.3.2" + jss-preset-default "^4.0.1" + prop-types "^15.6.0" + theming "^1.3.0" + +react-modal@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.1.10.tgz#8898b5cc4ebba78adbb8dea4c55a69818aa682cc" + dependencies: + exenv "^1.2.0" + prop-types "^15.5.10" + warning "^3.0.0" + react-proxy@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a" @@ -4506,14 +6554,32 @@ react-proxy@^1.1.7: lodash "^4.6.1" react-deep-force-update "^1.0.0" -react-test-renderer@^16.0.0-0: - version "16.0.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.0.0.tgz#9fe7b8308f2f71f29fc356d4102086f131c9cb15" +react-reconciler@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.7.0.tgz#9614894103e5f138deeeb5eabaf3ee80eb1d026d" dependencies: fbjs "^0.8.16" + loose-envify "^1.1.0" object-assign "^4.1.1" + prop-types "^15.6.0" + +react-split-pane@^0.1.71: + version "0.1.74" + resolved "https://registry.yarnpkg.com/react-split-pane/-/react-split-pane-0.1.74.tgz#cf79fc98b51ab0763fdc778749b810a102b036ca" + dependencies: + "@types/inline-style-prefixer" "^3.0.0" + "@types/react" "^16.0.18" + inline-style-prefixer "^3.0.6" + prop-types "^15.5.10" + react-style-proptype "^3.0.0" -react-test-renderer@^16.2.0: +react-style-proptype@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/react-style-proptype/-/react-style-proptype-3.1.0.tgz#c8912fc13460f5b0c1ec1114c729d535b52b8073" + dependencies: + prop-types "^15.5.4" + +react-test-renderer@^16.0.0-0, react-test-renderer@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211" dependencies: @@ -4532,6 +6598,27 @@ react-transform-hmr@^1.0.4: global "^4.3.0" react-proxy "^1.1.7" +react-transition-group@^1.1.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6" + dependencies: + chain-function "^1.0.0" + dom-helpers "^3.2.0" + loose-envify "^1.3.1" + prop-types "^15.5.6" + warning "^3.0.0" + +react-treebeard@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/react-treebeard/-/react-treebeard-2.1.0.tgz#fbd5cf51089b6f09a9b18350ab3bddf736e57800" + dependencies: + babel-runtime "^6.23.0" + deep-equal "^1.0.1" + prop-types "^15.5.8" + radium "^0.19.0" + shallowequal "^0.2.2" + velocity-react "^1.3.1" + react@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" @@ -4541,6 +6628,27 @@ react@^16.2.0: object-assign "^4.1.1" prop-types "^15.6.0" +reactxp@^0.46.6: + version "0.46.6" + resolved "https://registry.yarnpkg.com/reactxp/-/reactxp-0.46.6.tgz#166a503a7147f3a1e29efc4469bda32603471a5f" + dependencies: + "@types/lodash" "^4.14.78" + "@types/react" "^16.0.0" + "@types/react-dom" "^16.0.0" + assert "^1.3.0" + ifvisible.js "^1.0.6" + lodash "^4.17.1" + prop-types "^15.5.9" + rebound "^0.0.13" + subscribableevent "^1.0.0" + synctasks "^0.3.0" + +read-cmd-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" + dependencies: + graceful-fs "^4.1.2" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -4555,7 +6663,7 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" -read-pkg@^1.0.0: +read-pkg@^1.0.0, read-pkg@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" dependencies: @@ -4571,28 +6679,16 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6: - version "2.2.9" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: - buffer-shims "~1.0.0" core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~1.0.0" - util-deprecate "~1.0.1" - -readable-stream@~2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" + inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~1.0.6" - string_decoder "~0.10.x" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" util-deprecate "~1.0.1" readdirp@^2.0.0: @@ -4604,6 +6700,26 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" +rebound@^0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/rebound/-/rebound-0.0.13.tgz#4a225254caf7da756797b19c5817bf7a7941fac1" + +recast@^0.12.6: + version "0.12.9" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.12.9.tgz#e8e52bdb9691af462ccbd7c15d5a5113647a15f1" + dependencies: + ast-types "0.10.1" + core-js "^2.4.1" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -4611,26 +6727,77 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + dependencies: + balanced-match "^0.4.2" + +redux@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.3" + +regenerate@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" regenerator-runtime@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" dependencies: is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" registry-auth-token@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" + version "3.3.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006" dependencies: rc "^1.1.6" + safe-buffer "^5.0.1" registry-url@^3.0.3: version "3.1.0" @@ -4638,6 +6805,20 @@ registry-url@^3.0.3: dependencies: rc "^1.0.1" +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" @@ -4652,18 +6833,18 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@^2.75.0, request@^2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" +request@2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" - caseless "~0.11.0" + caseless "~0.12.0" combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" form-data "~2.1.1" - har-validator "~2.0.6" + har-validator "~4.2.1" hawk "~3.1.3" http-signature "~1.1.0" is-typedarray "~1.0.0" @@ -4671,38 +6852,40 @@ request@^2.75.0, request@^2.79.0: json-stringify-safe "~5.0.1" mime-types "~2.1.7" oauth-sign "~0.8.1" - qs "~6.3.0" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" stringstream "~0.0.4" tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" + tunnel-agent "^0.6.0" uuid "^3.0.0" -request@^2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" +request@^2.79.0, request@^2.83.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" + aws-sign2 "~0.7.0" + aws4 "^1.6.0" caseless "~0.12.0" combined-stream "~1.0.5" - extend "~3.0.0" + extend "~3.0.1" forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" tunnel-agent "^0.6.0" - uuid "^3.0.0" + uuid "^3.1.0" require-directory@^2.1.1: version "2.1.1" @@ -4712,6 +6895,10 @@ require-from-string@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" +require-from-string@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -4731,9 +6918,9 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" +resolve@^1.1.6: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" dependencies: path-parse "^1.0.5" @@ -4751,12 +6938,6 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -resumer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" - dependencies: - through "~2.3.4" - ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -4767,21 +6948,18 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" -rimraf@^2.2.8, rimraf@^2.4.4, rimraf@~2.5.1, rimraf@~2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" dependencies: - glob "^7.0.5" - -ripemd160@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" + hash-base "^2.0.0" + inherits "^2.0.1" rst-selector-parser@^2.2.3: version "2.2.3" @@ -4807,22 +6985,18 @@ rx-lite@*, rx-lite@^4.0.8: resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" rxjs@^5.0.0-beta.11: - version "5.4.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.0.tgz#a7db14ab157f9d7aac6a56e655e7a3860d39bf26" + version "5.5.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.6.tgz#e31fb96d6fd2ff1fd84bcea8ae9c02d007179c02" dependencies: - symbol-observable "^1.0.1" - -safe-buffer@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" + symbol-observable "1.0.1" -safe-buffer@~5.1.0: +safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" sane@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.0.0.tgz#99cb79f21f4a53a69d4d0cd957c2db04024b8eb2" + version "2.2.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.2.0.tgz#d6d2e2fcab00e3d283c93b912b7c3a20846f1d56" dependencies: anymatch "^1.3.0" exec-sh "^0.2.0" @@ -4830,13 +7004,13 @@ sane@^2.0.0: minimatch "^3.0.2" minimist "^1.1.1" walker "~1.0.5" - watch "~0.10.0" + watch "~0.18.0" optionalDependencies: fsevents "^1.1.1" -sax@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" +sax@^1.2.1, sax@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" schema-utils@^0.3.0: version "0.3.0" @@ -4850,36 +7024,46 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" -send@0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" +send@0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" dependencies: - debug "2.6.1" - depd "~1.1.0" + debug "2.6.9" + depd "~1.1.1" destroy "~1.0.4" encodeurl "~1.0.1" escape-html "~1.0.3" - etag "~1.8.0" - fresh "0.5.0" - http-errors "~1.6.1" - mime "1.3.4" - ms "0.7.2" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" on-finished "~2.3.0" range-parser "~1.2.0" statuses "~1.3.1" -serve-static@1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" +serve-favicon@^2.4.5: + version "2.4.5" + resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.4.5.tgz#49d9a46863153a9240691c893d2b0e7d85d6d436" + dependencies: + etag "~1.8.1" + fresh "0.5.2" + ms "2.0.0" + parseurl "~1.3.2" + safe-buffer "5.1.1" + +serve-static@1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" dependencies: encodeurl "~1.0.1" escape-html "~1.0.3" - parseurl "~1.3.1" - send "0.15.1" + parseurl "~1.3.2" + send "0.16.1" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -4897,11 +7081,22 @@ setprototypeof@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" -sha.js@^2.3.6: - version "2.4.8" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.9" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d" dependencies: inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallowequal@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-0.2.2.tgz#1e32fd5bcab6ad688a4812cb0cc04efc75c7014e" + dependencies: + lodash.keys "^3.1.2" shebang-command@^1.2.0: version "1.2.0" @@ -4913,15 +7108,19 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" -shellwords@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" +shelljs@^0.7.8: + version "0.7.8" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" -signal-exit@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81" +shellwords@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" -signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -4933,9 +7132,11 @@ slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" -slide@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" sntp@1.x.x: version "1.0.9" @@ -4943,13 +7144,31 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + dependencies: + is-plain-obj "^1.0.0" + source-list-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" source-map-support@^0.4.15: - version "0.4.15" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" dependencies: source-map "^0.5.6" @@ -4959,15 +7178,13 @@ source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - dependencies: - amdefine ">=0.0.4" +source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" spdx-correct@~1.0.0: version "1.0.2" @@ -4983,13 +7200,25 @@ spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" +split2@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + dependencies: + through2 "^2.0.2" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + dependencies: + through "2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -4998,7 +7227,6 @@ sshpk@^1.7.0: optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" jsbn "~0.1.0" tweetnacl "~0.14.0" @@ -5006,7 +7234,11 @@ staged-git-files@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" -"statuses@>= 1.3.1 < 2", statuses@~1.3.1: +"statuses@>= 1.3.1 < 2": + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" @@ -5017,9 +7249,9 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" -stream-http@^2.3.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.0.tgz#cec1f4e3b494bc4a81b451808970f8b20b4ed5f6" +stream-http@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -5031,6 +7263,14 @@ stream-to-observable@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + +string-hash@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" @@ -5038,7 +7278,7 @@ string-length@^2.0.0: astral-regex "^1.0.0" strip-ansi "^4.0.0" -string-width@^1.0.1: +string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: @@ -5046,40 +7286,44 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: is-fullwidth-code-point "^2.0.0" - strip-ansi "^3.0.0" + strip-ansi "^4.0.0" -string.prototype.trim@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" +string.prototype.padend@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" dependencies: define-properties "^1.1.2" - es-abstract "^1.5.0" + es-abstract "^1.4.3" function-bind "^1.0.2" -string_decoder@^0.10.25, string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" +string.prototype.padstart@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz#5bcfad39f4649bb2d031292e19bcf0b510d4b242" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.4.3" + function-bind "^1.0.2" -string_decoder@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" +string_decoder@^1.0.0, string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" dependencies: - buffer-shims "~1.0.0" + safe-buffer "~5.1.0" stringify-object@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.0.tgz#94370a135e41bc048358813bf99481f1315c6aa6" + version "3.2.1" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.1.tgz#2720c2eff940854c819f6ee252aaeb581f30624d" dependencies: - get-own-enumerable-property-symbols "^1.0.1" + get-own-enumerable-property-symbols "^2.0.1" is-obj "^1.0.1" is-regexp "^1.0.0" -stringstream@~0.0.4: +stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -5119,74 +7363,137 @@ strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" -strip-json-comments@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" - strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" +strong-log-transformer@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-1.0.6.tgz#f7fb93758a69a571140181277eea0c2eb1301fa3" + dependencies: + byline "^5.0.0" + duplexer "^0.1.1" + minimist "^0.1.0" + moment "^2.6.0" + through "^2.3.4" + +style-loader@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.1.tgz#591ffc80bcefe268b77c5d9ebc0505d772619f85" + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.3.0" + +styled-components@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-2.4.0.tgz#086d0fd483d54638837fca3ea546a030b94adf75" + dependencies: + buffer "^5.0.3" + css-to-react-native "^2.0.3" + fbjs "^0.8.9" + hoist-non-react-statics "^1.2.0" + is-plain-object "^2.0.1" + prop-types "^15.5.4" + stylis "^3.4.0" + supports-color "^3.2.3" + +styletron-client@^3.0.0-rc.5: + version "3.0.0-rc.5" + resolved "https://registry.yarnpkg.com/styletron-client/-/styletron-client-3.0.0-rc.5.tgz#275ca0b5f971d244f0e42079ad570be9c31a2a70" + dependencies: + styletron-core "^3.0.0-rc.3" + +styletron-core@^3.0.0-rc.3: + version "3.0.0-rc.3" + resolved "https://registry.yarnpkg.com/styletron-core/-/styletron-core-3.0.0-rc.3.tgz#9468e275d9085d2e5d6d6468cc6d8733dbfa3cba" + +styletron-utils@^3.0.0-rc.3: + version "3.0.0-rc.3" + resolved "https://registry.yarnpkg.com/styletron-utils/-/styletron-utils-3.0.0-rc.3.tgz#21fef2099f1c368e6ff2b8f76bf7a64bb547b760" + dependencies: + inline-style-prefixer "^3.0.3" + +stylis-rule-sheet@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.5.tgz#ebae935cc1f6fb31b9b62dba47f2ea8b833dad9f" + +stylis@^3.3.2, stylis@^3.4.0: + version "3.4.5" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.5.tgz#d7b9595fc18e7b9c8775eca8270a9a1d3e59806e" + +subscribableevent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subscribableevent/-/subscribableevent-1.0.0.tgz#bde9500fa9009c7740c924109bac6119cd9898e6" + dependencies: + "@types/lodash" "^4.14.64" + lodash "^4.17.4" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" +supports-color@^3.1.2, supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: has-flag "^1.0.0" -supports-color@^4.0.0, supports-color@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.1.tgz#65a4bb2631e90e02420dba5554c375a4754bb836" +supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" dependencies: has-flag "^2.0.0" -symbol-observable@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" +svg-tag-names@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/svg-tag-names/-/svg-tag-names-1.1.1.tgz#9641b29ef71025ee094c7043f7cdde7d99fbd50a" + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + +symbol-observable@^1.0.3, symbol-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.1.0.tgz#5c68fd8d54115d9dfb72a84720549222e8db9b32" symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" +synctasks@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/synctasks/-/synctasks-0.3.1.tgz#1f9012b23792ad775ba2693e0cafcfcd65b80d97" + table@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435" + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" dependencies: - ajv "^4.7.0" - ajv-keywords "^1.0.0" - chalk "^1.1.1" - lodash "^4.0.0" - slice-ansi "0.0.4" - string-width "^2.0.0" + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" -tape@^4.6.3: - version "4.8.0" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.8.0.tgz#f6a9fec41cc50a1de50fa33603ab580991f6068e" - dependencies: - deep-equal "~1.0.1" - defined "~1.0.0" - for-each "~0.3.2" - function-bind "~1.1.0" - glob "~7.1.2" - has "~1.0.1" - inherits "~2.0.3" - minimist "~1.2.0" - object-inspect "~1.3.0" - resolve "~1.4.0" - resumer "~0.0.0" - string.prototype.trim "~1.1.2" - through "~2.3.8" - tar-pack@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" + version "3.4.1" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" dependencies: debug "^2.2.0" fstream "^1.0.10" @@ -5197,20 +7504,7 @@ tar-pack@^3.4.0: tar "^2.2.1" uid-number "^0.0.6" -tar-pack@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" - dependencies: - debug "~2.2.0" - fstream "~1.0.10" - fstream-ignore "~1.0.5" - once "~1.3.3" - readable-stream "~2.1.4" - rimraf "~2.5.1" - tar "~2.2.1" - uid-number "~0.0.6" - -tar@^2.2.1, tar@~2.2.1: +tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: @@ -5218,15 +7512,37 @@ tar@^2.2.1, tar@~2.2.1: fstream "^1.0.2" inherits "2" -term-size@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca" +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + +temp-write@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.3.0.tgz#c1a96de2b36061342eae81f44ff001aec8f615a9" + dependencies: + graceful-fs "^4.1.2" + is-stream "^1.1.0" + make-dir "^1.0.0" + pify "^2.2.0" + temp-dir "^1.0.0" + uuid "^3.0.1" + +tempfile@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" dependencies: - execa "^0.4.0" + os-tmpdir "^1.0.0" + uuid "^2.0.1" -test-exclude@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.0.1.tgz#a8ea2f51ed15c7c458c279bd61391ca0a09b0a24" +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + dependencies: + execa "^0.7.0" + +test-exclude@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" dependencies: arrify "^1.0.1" micromatch "^2.3.11" @@ -5234,33 +7550,57 @@ test-exclude@^4.0.0: read-pkg-up "^1.0.1" require-main-filename "^1.0.1" +text-extensions@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.7.0.tgz#faaaba2625ed746d568a23e4d0aacd9bf08a8b39" + text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" +theming@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/theming/-/theming-1.3.0.tgz#286d5bae80be890d0adc645e5ca0498723725bdc" + dependencies: + brcast "^3.0.1" + is-function "^1.0.1" + is-plain-object "^2.0.1" + prop-types "^15.5.8" + throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" -through@^2.3.6, through@~2.3.4, through@~2.3.8: +through2@^2.0.0, through2@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" +time-stamp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" + timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" -timers-browserify@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" +timers-browserify@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6" dependencies: setimmediate "^1.0.4" -tmp@^0.0.31: - version "0.0.31" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" dependencies: - os-tmpdir "~1.0.1" + os-tmpdir "~1.0.2" tmpl@1.0.x: version "1.0.4" @@ -5278,9 +7618,15 @@ to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" -tough-cookie@^2.3.2, tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" +touch@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-1.0.0.tgz#449cbe2dbae5a8c8038e30d71fa0ff464947c4de" + dependencies: + nopt "~1.0.10" + +tough-cookie@^2.3.2, tough-cookie@~2.3.0, tough-cookie@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: punycode "^1.4.1" @@ -5292,14 +7638,14 @@ trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" +trim-off-newlines@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" -tryit@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" - tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -5310,13 +7656,9 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d" + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" type-check@~0.3.2: version "0.3.2" @@ -5324,20 +7666,20 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-is@~1.6.14: - version "1.6.14" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" +type-is@~1.6.15: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" dependencies: media-typer "0.3.0" - mime-types "~2.1.13" + mime-types "~2.1.15" typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" ua-parser-js@^0.7.9: - version "0.7.12" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" + version "0.7.17" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" uglify-js@^2.6, uglify-js@^2.8.29: version "2.8.29" @@ -5360,25 +7702,43 @@ uglifyjs-webpack-plugin@^0.4.6: uglify-js "^2.8.29" webpack-sources "^1.0.1" -uid-number@^0.0.6, uid-number@~0.0.6: +uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" ultron@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864" + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" underscore@~1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +uniqid@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" + dependencies: + macaddress "^0.2.8" + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" dependencies: crypto-random-string "^1.0.0" -unpipe@~1.0.0: +universalify@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -5387,13 +7747,14 @@ unzip-response@^2.0.1: resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" update-notifier@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.2.0.tgz#1b5837cf90c0736d88627732b661c138f86de72f" + version "2.3.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" dependencies: - boxen "^1.0.0" - chalk "^1.0.0" + boxen "^1.2.1" + chalk "^2.0.1" configstore "^3.0.0" import-lazy "^2.1.0" + is-installed-globally "^0.1.0" is-npm "^1.0.0" latest-version "^3.0.0" semver-diff "^2.0.0" @@ -5424,7 +7785,7 @@ user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" -util-deprecate@~1.0.1: +util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -5434,11 +7795,15 @@ util@0.10.3, util@^0.10.3: dependencies: inherits "2.0.1" -utils-merge@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" -uuid@^3.0.0: +uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" @@ -5455,15 +7820,34 @@ validate-npm-package-license@^3.0.1: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" -vary@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +velocity-animate@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/velocity-animate/-/velocity-animate-1.5.0.tgz#fc8771d8dfe1136ff02a707e10fbb0957c4b030f" -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" +velocity-react@^1.3.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/velocity-react/-/velocity-react-1.3.3.tgz#d6d47276cfc8be2a75623879b20140ac58c1b82b" + dependencies: + lodash "^3.10.1" + prop-types "^15.5.8" + react-transition-group "^1.1.2" + velocity-animate "^1.4.0" + +vendors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" dependencies: - extsprintf "1.0.2" + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" vm-browserify@0.0.4: version "0.0.4" @@ -5477,9 +7861,18 @@ walker@~1.0.5: dependencies: makeerror "1.0.x" -watch@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" +warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + dependencies: + loose-envify "^1.0.0" + +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" watchpack@^1.4.0: version "1.4.0" @@ -5489,13 +7882,19 @@ watchpack@^1.4.0: chokidar "^1.7.0" graceful-fs "^4.1.2" +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + dependencies: + defaults "^1.0.3" + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" webidl-conversions@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" webpack-bundle-analyzer@^2.9.1: version "2.9.1" @@ -5513,16 +7912,35 @@ webpack-bundle-analyzer@^2.9.1: opener "^1.4.3" ws "^3.3.1" +webpack-dev-middleware@^1.12.2: + version "1.12.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" + dependencies: + memory-fs "~0.4.1" + mime "^1.5.0" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + time-stamp "^2.0.0" + +webpack-hot-middleware@^2.21.0: + version "2.21.0" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.21.0.tgz#7b3c113a7a4b301c91e0749573c7aab28b414b52" + dependencies: + ansi-html "0.0.7" + html-entities "^1.2.0" + querystring "^0.2.0" + strip-ansi "^3.0.0" + webpack-sources@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf" + version "1.1.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" dependencies: source-list-map "^2.0.0" - source-map "~0.5.3" + source-map "~0.6.1" -webpack@^3.9.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.9.1.tgz#9a60aa544ed5d4d454c069e3f521aa007e02643c" +webpack@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.10.0.tgz#5291b875078cf2abf42bdd23afe3f8f96c17d725" dependencies: acorn "^5.0.0" acorn-dynamic-import "^2.0.0" @@ -5548,80 +7966,107 @@ webpack@^3.9.1: yargs "^8.0.2" whatwg-encoding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" dependencies: - iconv-lite "0.4.13" + iconv-lite "0.4.19" whatwg-fetch@>=0.10.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.1.tgz#078b9461bbe91cea73cbce8bb122a05f9e92b772" + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" whatwg-url@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.6.0.tgz#ef98da442273be04cf9632e176f257d2395a1ae4" + version "4.8.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.2.10, which@^1.2.12, which@^1.2.8, which@^1.2.9: - version "1.2.12" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" +which@^1.2.10, which@^1.2.12, which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: - isexe "^1.1.1" + isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" dependencies: - string-width "^1.0.1" + string-width "^1.0.2" -widest-line@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" +widest-line@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" dependencies: - string-width "^1.0.1" + string-width "^2.1.1" window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" -wordwrap@0.0.2, wordwrap@~0.0.2: +wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" worker-farm@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" + version "1.5.2" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae" dependencies: - errno ">=0.1.1 <0.2.0-0" - xtend ">=4.0.0 <4.1.0-0" + errno "^0.1.4" + xtend "^4.0.1" wrap-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.0.0.tgz#7d30f8f873f9a5bbc3a64dabc8d177e071ae426f" + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" dependencies: string-width "^1.0.1" + strip-ansi "^3.0.1" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write-file-atomic@^2.0.0, write-file-atomic@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.1.0.tgz#1769f4b551eedce419f0505deae2e26763542d37" +write-file-atomic@^2.0.0, write-file-atomic@^2.1.0, write-file-atomic@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" - slide "^1.1.5" + signal-exit "^3.0.2" + +write-json-file@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + pify "^3.0.0" + sort-keys "^2.0.0" + write-file-atomic "^2.0.0" + +write-pkg@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.1.0.tgz#030a9994cc9993d25b4e75a9f1a1923607291ce9" + dependencies: + sort-keys "^2.0.0" + write-json-file "^2.2.0" write@^0.2.1: version "0.2.1" @@ -5630,8 +8075,8 @@ write@^0.2.1: mkdirp "^0.5.1" ws@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.2.tgz#96c1d08b3fefda1d5c1e33700d3bfaa9be2d5608" + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" dependencies: async-limiter "~1.0.0" safe-buffer "~5.1.0" @@ -5645,7 +8090,7 @@ xml-name-validator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -5653,7 +8098,7 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -yallist@^2.0.0: +yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -5682,8 +8127,8 @@ yargs@^8.0.2: yargs-parser "^7.0.0" yargs@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.0.tgz#efe5b1ad3f94bdc20423411b90628eeec0b25f3c" + version "9.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" dependencies: camelcase "^4.1.0" cliui "^3.2.0" From f52a8519722e77422fc0d89935b4f3d2fc889d17 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sun, 24 Dec 2017 12:50:44 +0000 Subject: [PATCH 043/153] Use an .eslintignore file --- .eslintignore | 3 +++ package.json | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 .eslintignore diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..3cfacf157 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +coverage +dist +packages/**/vendor/* diff --git a/package.json b/package.json index 65d328a15..b554dcde7 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,7 @@ "fmt:cmd": "prettier --print-width=100 --single-quote --write", "jest": "jest --config ./scripts/jest/config.js", "lint": "yarn lint:check --fix", - "lint:check": "yarn lint:cmd packages scripts website", - "lint:cmd": "eslint --ignore-path .gitignore --ignore-pattern 'packages/**/vendor/*'", + "lint:check": "eslint packages scripts website", "precommit": "lint-staged", "release": "yarn test && yarn build && node ./scripts/release/publish.js && yarn docs:release", "test": "yarn flow && yarn lint:check && yarn jest" From 1776891736477428b0872fe4afc34cf1e1f26b33 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Tue, 26 Dec 2017 09:01:00 +0000 Subject: [PATCH 044/153] Improve project introduction and guides Adopt the structure of the React README and improve the contribution guidelines to include Facebook's CoC. Fix various links following the move to a monorepo. --- .github/CONTRIBUTING.md | 8 +- README.md | 194 ++++++++++--------- packages/benchmarks/README.md | 2 +- packages/react-native-web/README.md | 127 +------------ website/guides/advanced.md | 6 +- website/guides/getting-started.md | 282 ++++++++++++++++------------ website/guides/known-issues.md | 31 --- website/guides/style.md | 45 +++-- 8 files changed, 295 insertions(+), 400 deletions(-) delete mode 100644 website/guides/known-issues.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 477d3dc6b..72b442b56 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -17,7 +17,7 @@ Fork, then clone the repo: git clone https://github.com/your-username/react-native-web.git ``` -Install dependencies (requires [yarn](https://yarnpkg.com/en/docs/install): +Install dependencies (requires [yarn](https://yarnpkg.com/en/docs/install)): ``` yarn @@ -113,13 +113,13 @@ that we won't want to accept. ## Pull requests -**Before submitting a pull request,** please make sure the following is done: +**Before submitting a pull request**, please make sure the following is done: 1. Fork the repository and create your branch from `master`. 2. If you've added code that should be tested, add tests! 3. If you've changed APIs, update the documentation. -4. Ensure the tests pass (`yarn test`). -5. Lint and format your code (`yarn fmt && yarn lint`). +4. Lint and format your code (`yarn precommit`). +5. Ensure the tests pass (`yarn test`). You can now submit a pull request, referencing any issues it addresses. diff --git a/README.md b/README.md index ca64689f5..facd37850 100644 --- a/README.md +++ b/README.md @@ -1,127 +1,137 @@ # React Native for Web -[![Build Status][travis-image]][travis-url] -[![npm version][npm-image]][npm-url] +[![npm version][package-badge]][package-url] [![Build Status][ci-badge]][ci-url] [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://reactjs.org/docs/how-to-contribute.html#your-first-pull-request) "React Native for Web" brings the platform-agnostic Components and APIs of [React Native][react-native-url] to the Web. -Browse the [interactive -documentation](https://necolas.github.io/react-native-web/storybook/) or [try -it out](https://glitch.com/edit/#!/react-native-web-playground) on Glitch. +* **High-quality user interfaces**: React Native for Web makes it easy to +create [fast](packages/benchmarks/README.md), adaptive web UIs in +JavaScript. It provides native-like interactions, optimized vendor-prefixed +styles, support for all interaction types (touch, mouse, keyboard), accessible +experiences, built-in support for RTL layout, and integrates with React Dev +Tools. -## Features +* **Write once, render anywhere**: React Native for Web interoperates with +existing React DOM components and is compatible with the majority of the +React Native API. You can develop new components for native and web without +rewriting existing code. React Native for Web can also render to HTML and +critical CSS on the server using Node.js. -* Interoperability with ReactDOM components. -* Native-like touch handling. -* Built-in integration with web accessibility APIs. -* Built-in support for LTR and RTL layouts. -* Built-in expressive and reliable subset of CSS. -* Optimized, vendor-prefixed CSS with [good runtime performance](benchmarks/README.md). -* Server-side rendering of HTML and critical CSS. -* Browser support: Chrome, Firefox, Safari >= 7, IE 10, Edge. +React Native for Web is used extensively in production by [Twitter +Lite](https://mobile.twitter.com). The library's performance was experimentally +validated at scale including in emerging markets, and an independent audit +found Twitter Lite to be Twitter's most accessible app. + +Browser support: Chrome, Firefox, Safari >= 7, IE 10, Edge. ## Quick start -Install in your existing app using `yarn` or `npm`: +The easiest way to get started with React Native for Web is to use this +[ready-to-go project on Glitch](https://glitch.com/edit/#!/react-native-web-playground). +You don’t need to install anything to try it out. + +If you are unfamiliar with setting up a React web project, please follow the +recommendations in the the official [React documentation](https://reactjs.org/). + +## Documentation + +You can find the React Native for Web API documentation [on the +website][website-url]. + +Please refer to the [React Native documentation][react-native-url] for details +about its design, the [Gesture Responder system](https://facebook.github.io/react-native/docs/gesture-responder-system.html), +and [animations](https://facebook.github.io/react-native/docs/animations.html). + +### Installation + +Install using `yarn` or `npm`: ``` yarn add react react-dom react-native-web yarn add --dev babel-plugin-react-native-web ``` -Add the `react-native-web` plugin to your Babel configuration. This will -alias `react-native` to `react-native-web` and exclude any modules not required -by the app. - -```json -{ - "presets": [ - "react-native" - ], - "plugins": [ - "react-native-web" - ] -} -``` +### Guides -(For React/ReactDOM 15.4 – 15.6 support, install `react-native-web@<0.1.0`) +* [Getting started](website/guides/getting-started.md) +* [Style](website/guides/style.md) +* [Accessibility](website/guides/accessibility.md) +* [Internationalization](website/guides/internationalization.md) +* [Direct manipulation](website/guides/direct-manipulation.md) +* [Advanced use](website/guides/advanced.md) -See the [Getting Started](docs/guides/getting-started.md) guide for more details. +## Examples -## Documentation +There are several examples [on the website][website-url] and in the [website's +source code](./website). Here is an example to get you started: -The [interactive -documentation](https://necolas.github.io/react-native-web/storybook/) shows all -the supported APIs and Components. +```js +import React from 'react'; +import { AppRegistry, StyleSheet, Text, View } from 'react-native'; + +class App extends React.Component { + render() { + return ( + + Hello, world! + + ); + } +} -Guides: +const styles = StyleSheet.create({ + box: { padding: 10 }, + text: { fontWeight: 'bold' } +}); -* [Getting started](docs/guides/getting-started.md) -* [Style](docs/guides/style.md) -* [Accessibility](docs/guides/accessibility.md) -* [Direct manipulation](docs/guides/direct-manipulation.md) -* [Internationalization](docs/guides/internationalization.md) -* [Advanced use](docs/guides/advanced.md) -* [Known issues](docs/guides/known-issues.md) +AppRegistry.registerComponent('App', () => App); +AppRegistry.runApplication('App', { rootTag: document.getElementById('react-root') }); +``` -## Example code +This example will render the `App` into a container on the page. -```js -import React from 'react' -import { AppRegistry, Image, StyleSheet, Text, View } from 'react-native' - -// Components -const Card = ({ children }) => {children} -const Title = ({ children }) => {children} -const Photo = ({ uri }) => -const App = () => ( - - App Card - - -) - -// Styles -const styles = StyleSheet.create({ - card: { - flexGrow: 1, - justifyContent: 'center' - }, - title: { - fontSize: '1.25rem', - fontWeight: 'bold' - }, - image: { - height: 40, - marginVertical: 10, - width: 40 - } -}) +You'll notice that there is no reference to `react-dom`; the `App` component is +defined using the platform-agnostic APIs and Components introduced by React +Native. This allows the app to be rendered to web and native platforms. -// App registration and rendering -AppRegistry.registerComponent('MyApp', () => App) -AppRegistry.runApplication('MyApp', { rootTag: document.getElementById('react-root') }) -``` +## Contributing + +The main purpose of this repository is to help evolve React web and native +development towards the platform-agnostic design of React Native, and in the +process make it faster and easier to build high-quality experiences for the web +with React. Development happens in the open on GitHub, and we are grateful for +contributing bugfixes and improvements. Read below to learn how you can take +part in improving React Native for Web. + +### Code of conduct + +Facebook has adopted a [Code of Conduct][code-of-conduct] that this project +expects all participants to adhere to. Please read the full text so that you +can understand what actions will and will not be tolerated. -## Starter kits +### Contributing guide -* [Glitch](https://glitch.com/edit/#!/react-native-web-playground) -* [create-react-app](https://github.com/facebookincubator/create-react-app) +Read the [contributing guide][contributing-url] to learn about the +development process, how to propose bugfixes and improvements, and how to build +and test your changes to React Native for Web. -## Related projects +### Good first issues -* [react-primitives](https://github.com/lelandrichardson/react-primitives/) -* [react-sketchapp](https://github.com/airbnb/react-sketchapp) -* [reactxp](https://github.com/microsoft/reactxp) -* [react-native-web-player](https://github.com/dabbott/react-native-web-player) +To help you get you familiar with the contribution process, there is a list of +[good first issues][good-first-issue-url] that contain bugs which have a +relatively limited scope. This is a great place to get started. ## License -React Native for Web is [BSD licensed](LICENSE). +React Native for Web is [BSD licensed](./LICENSE). -[npm-image]: https://badge.fury.io/js/react-native-web.svg -[npm-url]: https://yarnpkg.com/en/package/react-native-web +[package-badge]: https://img.shields.io/npm/v/react-native-web.svg?style=flat +[package-url]: https://yarnpkg.com/en/package/react-native-web +[ci-badge]: https://travis-ci.org/necolas/react-native-web.svg?branch=master +[ci-url]: https://travis-ci.org/necolas/react-native-web +[website-url]: https://necolas.github.io/react-native-web/storybook/ [react-native-url]: https://facebook.github.io/react-native/ -[travis-image]: https://travis-ci.org/necolas/react-native-web.svg?branch=master -[travis-url]: https://travis-ci.org/necolas/react-native-web +[contributing-url]: ./.github/CONTRIBUTING.md +[good-first-issue-url]: https://github.com/necolas/react-native-web/labels/good%20first%20issue +[code-of-conduct]: https://code.facebook.com/codeofconduct diff --git a/packages/benchmarks/README.md b/packages/benchmarks/README.md index 941b37cd8..149e0eb79 100644 --- a/packages/benchmarks/README.md +++ b/packages/benchmarks/README.md @@ -17,7 +17,7 @@ equivalent in functionality. For example, the "React Native for Web" benchmark i complete `View` implementation and the `StyleSheet` also converts React Native styles to DOM styles, has deterministic resolution, and supports RTL layout. -## Benchmark results +## Results Typical render timings*: mean ± two standard deviations. diff --git a/packages/react-native-web/README.md b/packages/react-native-web/README.md index ca64689f5..783ec6b89 100644 --- a/packages/react-native-web/README.md +++ b/packages/react-native-web/README.md @@ -1,127 +1,6 @@ -# React Native for Web - -[![Build Status][travis-image]][travis-url] -[![npm version][npm-image]][npm-url] +# react-native-web "React Native for Web" brings the platform-agnostic Components and APIs of -[React Native][react-native-url] to the Web. - -Browse the [interactive -documentation](https://necolas.github.io/react-native-web/storybook/) or [try -it out](https://glitch.com/edit/#!/react-native-web-playground) on Glitch. - -## Features - -* Interoperability with ReactDOM components. -* Native-like touch handling. -* Built-in integration with web accessibility APIs. -* Built-in support for LTR and RTL layouts. -* Built-in expressive and reliable subset of CSS. -* Optimized, vendor-prefixed CSS with [good runtime performance](benchmarks/README.md). -* Server-side rendering of HTML and critical CSS. -* Browser support: Chrome, Firefox, Safari >= 7, IE 10, Edge. - -## Quick start - -Install in your existing app using `yarn` or `npm`: - -``` -yarn add react react-dom react-native-web -yarn add --dev babel-plugin-react-native-web -``` - -Add the `react-native-web` plugin to your Babel configuration. This will -alias `react-native` to `react-native-web` and exclude any modules not required -by the app. - -```json -{ - "presets": [ - "react-native" - ], - "plugins": [ - "react-native-web" - ] -} -``` - -(For React/ReactDOM 15.4 – 15.6 support, install `react-native-web@<0.1.0`) - -See the [Getting Started](docs/guides/getting-started.md) guide for more details. - -## Documentation - -The [interactive -documentation](https://necolas.github.io/react-native-web/storybook/) shows all -the supported APIs and Components. - -Guides: - -* [Getting started](docs/guides/getting-started.md) -* [Style](docs/guides/style.md) -* [Accessibility](docs/guides/accessibility.md) -* [Direct manipulation](docs/guides/direct-manipulation.md) -* [Internationalization](docs/guides/internationalization.md) -* [Advanced use](docs/guides/advanced.md) -* [Known issues](docs/guides/known-issues.md) - -## Example code - -```js -import React from 'react' -import { AppRegistry, Image, StyleSheet, Text, View } from 'react-native' - -// Components -const Card = ({ children }) => {children} -const Title = ({ children }) => {children} -const Photo = ({ uri }) => -const App = () => ( - - App Card - - -) - -// Styles -const styles = StyleSheet.create({ - card: { - flexGrow: 1, - justifyContent: 'center' - }, - title: { - fontSize: '1.25rem', - fontWeight: 'bold' - }, - image: { - height: 40, - marginVertical: 10, - width: 40 - } -}) - -// App registration and rendering -AppRegistry.registerComponent('MyApp', () => App) -AppRegistry.runApplication('MyApp', { rootTag: document.getElementById('react-root') }) -``` - -## Starter kits - -* [Glitch](https://glitch.com/edit/#!/react-native-web-playground) -* [create-react-app](https://github.com/facebookincubator/create-react-app) - -## Related projects - -* [react-primitives](https://github.com/lelandrichardson/react-primitives/) -* [react-sketchapp](https://github.com/airbnb/react-sketchapp) -* [reactxp](https://github.com/microsoft/reactxp) -* [react-native-web-player](https://github.com/dabbott/react-native-web-player) - -## License - -React Native for Web is [BSD licensed](LICENSE). +React Native to the Web. It is used in production by Twitter Lite. -[npm-image]: https://badge.fury.io/js/react-native-web.svg -[npm-url]: https://yarnpkg.com/en/package/react-native-web -[react-native-url]: https://facebook.github.io/react-native/ -[travis-image]: https://travis-ci.org/necolas/react-native-web.svg?branch=master -[travis-url]: https://travis-ci.org/necolas/react-native-web +Read more: https://github.com/necolas/react-native-web diff --git a/website/guides/advanced.md b/website/guides/advanced.md index 840af7092..f75447504 100644 --- a/website/guides/advanced.md +++ b/website/guides/advanced.md @@ -101,9 +101,9 @@ const StyledView = styled(View, styles.container); ## Use with react-sketchapp Use with [react-sketchapp](http://airbnb.io/react-sketchapp/) requires that you -alias `react-native` to `react-sketchapp`. This will allow you to render your -existing React Native components in Sketch. Sketch-specific components like -`Artboard` should be imported from `react-sketchapp`. +alias `react-native` to `react-sketchapp`. This will allow you to render simple +React Native components in Sketch. Sketch-specific components like `Artboard` +should be imported from `react-sketchapp`. If you're using `skpm`, you can rely on an [undocumented feature](https://github.com/sketch-pm/skpm/blob/master/lib/utils/webpackConfig.js) diff --git a/website/guides/getting-started.md b/website/guides/getting-started.md index f2fa26e2a..e2048f2a7 100644 --- a/website/guides/getting-started.md +++ b/website/guides/getting-started.md @@ -1,134 +1,44 @@ # Getting started -This guide will help you to correctly configure build and test tools to work -with React Native for Web. (Alternatively, you can quickly setup a local -project using the starter kits listed in the README.) +This guide will help you to use and test React Native for Web once it has been installed. It is recommended that your application provide a `Promise` and `Array.from` polyfill. -## Web packager +## Adding to a new web app -[Webpack](https://webpack.js.org) is a popular build tool for web apps. Below is an -_example_ of how to configure a build that uses [Babel](https://babeljs.io/) to -compile your JavaScript for the web. Please refer to the webpack documentation -when setting up your project. +It's recommended to rely on Facebook's official React web starter kit – +[create-react-app](https://github.com/facebookincubator/create-react-app) – +which has built-in React Native for Web support (once you install +`react-native-web`). -Install webpack-related dependencies, for example: - -``` -yarn add --dev babel-loader url-loader webpack webpack-dev-server -``` - -Create a `web/webpack.config.js` file: - -```js -// web/webpack.config.js - -const path = require('path'); -const webpack = require('webpack'); - -const appDirectory = path.resolve(__dirname, '../'); - -// This is needed for webpack to compile JavaScript. -// Many OSS React Native packages are not compiled to ES5 before being -// published. If you depend on uncompiled packages they may cause webpack build -// errors. To fix this webpack can be configured to compile to the necessary -// `node_module`. -const babelLoaderConfiguration = { - test: /\.js$/, - // Add every directory that needs to be compiled by Babel during the build. - include: [ - path.resolve(appDirectory, 'index.web.js'), - path.resolve(appDirectory, 'src'), - path.resolve(appDirectory, 'node_modules/react-native-uncompiled') - ], - use: { - loader: 'babel-loader', - options: { - cacheDirectory: true, - // This aliases 'react-native' to 'react-native-web' and includes only - // the modules needed by the app. - plugins: ['react-native-web/babel', 'transform-runtime'], - // The 'react-native' preset is recommended (or use your own .babelrc). - presets: ['react-native'] - } - } -}; - -// This is needed for webpack to import static images in JavaScript files. -const imageLoaderConfiguration = { - test: /\.(gif|jpe?g|png|svg)$/, - use: { - loader: 'url-loader', - options: { - name: '[name].[ext]' - } - } -}; - -module.exports = { - // your web-specific entry file - entry: path.resolve(appDirectory, 'index.web.js'), - - // configures where the build ends up - output: { - filename: 'bundle.web.js', - path: path.resolve(appDirectory, 'dist') - }, +## Adding to an existing web app - // ...the rest of your config +Add the `react-native-web` plugin to your Babel configuration. This will +alias `react-native` to `react-native-web` and exclude any modules not required +by the app. - module: { - rules: [ - babelLoaderConfiguration, - imageLoaderConfiguration - ] - }, - - plugins: [ - // `process.env.NODE_ENV === 'production'` must be `true` for production - // builds to eliminate development checks and reduce build size. You may - // wish to include additional optimizations. - new webpack.DefinePlugin({ - 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'), - __DEV__: process.env.NODE_ENV === 'production' || true - }) +```json +{ + "presets": [ + "react-native" ], - - resolve: { - // If you're working on a multi-platform React Native app, web-specific - // module implementations should be written in files using the extension - // `.web.js`. - extensions: [ '.web.js', '.js' ] - } + "plugins": [ + "react-native-web" + ] } ``` -To run in development from the root of your application: - -``` -./node_modules/.bin/webpack-dev-server -d --config ./web/webpack.config.js --inline --hot --colors -``` - -To build for production: - -``` -./node_modules/.bin/webpack -p --config ./web/webpack.config.js -``` - -Please refer to the Webpack documentation for more information on configuration. - -### Client-side rendering +## Client-side rendering -Rendering using `AppRegistry`: +Render apps using `AppRegistry`: ```js // index.web.js import App from './src/App'; import React from 'react'; -import ReactNative, { AppRegistry } from 'react-native'; +import { AppRegistry } from 'react-native'; // register the app AppRegistry.registerComponent('App', () => App); @@ -139,29 +49,28 @@ AppRegistry.runApplication('App', { }); ``` -Rendering within existing web apps is also possible using `ReactNative`: +Render components within existing apps: ```js import AppHeader from './src/AppHeader'; import React from 'react'; -import ReactNative from 'react-native'; +import { render } from 'react-native'; -// use .hydrate if hydrating a SSR app -ReactNative.render(, document.getElementById('react-app-header')) +render(, document.getElementById('react-app-header')) ``` -And finally, `react-native-web` components will also be rendering within a tree -produced by calling `ReactDOM.render` (i.e., an existing web app), but +Components will also be rendered within a tree produced by calling +`ReactDOM.render` (i.e., an existing web app), but otherwise it is not recommended. -### Server-side rendering +## Server-side rendering -Server-side rendering is supported using the `AppRegistry`: +Server-side rendering is supported using `AppRegistry`: ```js import App from './src/App'; import ReactDOMServer from 'react-dom/server' -import ReactNative, { AppRegistry } from 'react-native' +import { AppRegistry } from 'react-native' // register the app AppRegistry.registerComponent('App', () => App) @@ -171,7 +80,7 @@ const { element, stylesheets } = AppRegistry.getApplication('App', { initialProp const initialHTML = ReactDOMServer.renderToString(element); const initialStyles = stylesheets.map((sheet) => ReactDOMServer.renderToStaticMarkup(sheet)).join('\n'); -// construct HTML document +// construct HTML document string const document = ` @@ -196,7 +105,7 @@ const styles = StyleSheet.create({ ``` More significant platform differences should use platform-specific files (see -the webpack configuration above for resolving `*.web.js` files): +the webpack configuration below for resolving `*.web.js` files): For example, with the following files in your project: @@ -227,7 +136,7 @@ of `react-native-web` components. ``` Jest also needs to map `react-native` to `react-native-web` (unless you are -using Babel with the `react-native-web/babel` plugin). +using the Babel plugin). ``` { @@ -238,3 +147,132 @@ using Babel with the `react-native-web/babel` plugin). ``` Please refer to the Jest documentation for more information. + +## Web packaging for existing React Native apps + +The web packaging landscape is diverse and fractured. Packaging web apps is +subtly different to packaging React Native apps and is also complicated by the +need to code-split non-trivial apps. + +What follows is merely an _example_ of one basic way to package a web app +using [Webpack](https://webpack.js.org) and [Babel](https://babeljs.io/). + +Install webpack-related dependencies, for example: + +``` +yarn add --dev babel-loader url-loader webpack webpack-dev-server +``` + +Create a `web/webpack.config.js` file: + +```js +// web/webpack.config.js + +const path = require('path'); +const webpack = require('webpack'); + +const appDirectory = path.resolve(__dirname, '../'); + +// This is needed for webpack to compile JavaScript. +// Many OSS React Native packages are not compiled to ES5 before being +// published. If you depend on uncompiled packages they may cause webpack build +// errors. To fix this webpack can be configured to compile to the necessary +// `node_module`. +const babelLoaderConfiguration = { + test: /\.js$/, + // Add every directory that needs to be compiled by Babel during the build. + include: [ + path.resolve(appDirectory, 'index.web.js'), + path.resolve(appDirectory, 'src'), + path.resolve(appDirectory, 'node_modules/react-native-uncompiled') + ], + use: { + loader: 'babel-loader', + options: { + cacheDirectory: true, + // This aliases 'react-native' to 'react-native-web' and includes only + // the modules needed by the app. + plugins: ['react-native-web', 'transform-runtime'], + // The 'react-native' preset is recommended (or use your own .babelrc). + presets: ['react-native'] + } + } +}; + +// This is needed for webpack to import static images in JavaScript files. +const imageLoaderConfiguration = { + test: /\.(gif|jpe?g|png|svg)$/, + use: { + loader: 'url-loader', + options: { + name: '[name].[ext]' + } + } +}; + +module.exports = { + // your web-specific entry file + entry: path.resolve(appDirectory, 'index.web.js'), + + // configures where the build ends up + output: { + filename: 'bundle.web.js', + path: path.resolve(appDirectory, 'dist') + }, + + // ...the rest of your config + + module: { + rules: [ + babelLoaderConfiguration, + imageLoaderConfiguration + ] + }, + + plugins: [ + // `process.env.NODE_ENV === 'production'` must be `true` for production + // builds to eliminate development checks and reduce build size. You may + // wish to include additional optimizations. + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'), + __DEV__: process.env.NODE_ENV === 'production' || true + }) + ], + + resolve: { + // If you're working on a multi-platform React Native app, web-specific + // module implementations should be written in files using the extension + // `.web.js`. + extensions: [ '.web.js', '.js' ] + } +} +``` + +To run in development from the root of your application: + +``` +./node_modules/.bin/webpack-dev-server -d --config ./web/webpack.config.js --inline --hot --colors +``` + +To build for production: + +``` +./node_modules/.bin/webpack -p --config ./web/webpack.config.js +``` + +Please refer to the Webpack documentation for more information on configuration. + +## Other notes + +### Safari flexbox performance + +Safari prior to version 10.1 can suffer from extremely [poor flexbox +performance](https://bugs.webkit.org/show_bug.cgi?id=150445). The recommended +way to work around this issue (as used on mobile.twitter.com) is to set +`display:block` on Views in your element hierarchy that you know don't need +flexbox layout. + +### Platform-specific component props + +There are properties that do not work across all platforms. All web-specific +props are annotated with `(web)` in the documentation. diff --git a/website/guides/known-issues.md b/website/guides/known-issues.md deleted file mode 100644 index 48bcb32fd..000000000 --- a/website/guides/known-issues.md +++ /dev/null @@ -1,31 +0,0 @@ -# Known issues - -## Safari flexbox performance - -Safari version prior to 10.1 can suffer from extremely [poor flexbox -performance](https://bugs.webkit.org/show_bug.cgi?id=150445). The recommended -way to work around this issue (as used on mobile.twitter.com) is to set -`display:block` on Views in your element hierarchy that you know don't need -flexbox layout. - -## Missing modules and components - -Not all of the views present on iOS/Android are currently available on Web. We -are very much interested in the community's feedback on the next set of modules -and views. - -Not all the modules or views for iOS/Android can be implemented on Web. In some -cases it will be necessary to use a Web counterpart or to guard the use of a -module with `Platform.OS` (e.g. `NativeModules`) - -## Missing component props - -There are properties that do not work across all platforms. All web-specific -props are annotated with `(web)` in the documentation. - -## Platform parity - -There are some known issues in React Native where APIs could be made more -consistent between platforms. For example, React Native for Web includes -`ActivityIndicator` and a horizontal `ProgressBar` for Web use, in anticipation -of the convergence between the iOS and Android components in React Native. diff --git a/website/guides/style.md b/website/guides/style.md index 397a78f91..7d54b941c 100644 --- a/website/guides/style.md +++ b/website/guides/style.md @@ -5,22 +5,22 @@ application. React Native for Web implements the React Native style API in a way that avoids *all* the [problems with CSS at scale](https://speakerdeck.com/vjeux/react-css-in-js): -1. No local variables -2. Implicit dependencies -3. No dead code elimination -4. No code minification -5. No sharing of constants -6. Non-deterministic resolution -7. No isolation +1. No local variables. +2. Implicit dependencies. +3. No dead code elimination. +4. No code minification. +5. No sharing of constants. +6. Non-deterministic resolution. +7. No isolation. At the same time, it has several benefits: -1. Simple API and expressive subset of CSS -2. Generates CSS; the minimum required -3. Good runtime performance -4. Support for static and dynamic styles -5. Support for RTL layouts -6. Easy pre-rendering of critical CSS +1. Simple API and expressive subset of CSS. +2. Generates CSS; the minimum required. +3. Good runtime performance. +4. Support for static and dynamic styles. +5. Support for RTL layouts. +6. Easy pre-rendering of critical CSS. ## Defining styles @@ -43,6 +43,8 @@ const styles = StyleSheet.create({ See the `style` documentation of individual components for supported properties. +NOTE: React Native does not yet support `rem` or `em` units. + ## Using styles All the React Native components accept a `style` property. The value can be a @@ -126,7 +128,7 @@ the CSS and takes precedence over the previous rules, resulting in a margin of
``` -But in React Native the most *specific* style property takes precedence, +But in React Native the most *precise* style property takes precedence, resulting in margins of `10, 0, 20, 0`. ```js @@ -192,7 +194,7 @@ inline styles. All this allows React Native for Web to support the rich functionality of React Native styles (including RTL layouts and `setNativeProps`) while providing one -of the [fastest](https://github.com/necolas/react-native-web/blob/master/benchmarks/README.md), +of the [fastest](https://github.com/necolas/react-native-web/blob/master/packages/benchmarks/README.md), safest, and most efficient styles-in-JavaScript solutions. ## FAQs @@ -204,14 +206,11 @@ it does not concern itself with _where_ or _when_ those styles are applied to elements. Media Queries may not be most appropriate for component-based designs. React -Native provides the `Dimensions` API and `onLayout` props. If you do need Media -Queries, using the `matchMedia` DOM API has the benefit of allowing you to swap -out entire components, not just styles. There are also many React libraries -wrapping JavaScript Media Query API's, e.g., -[react-media](https://github.com/reacttraining/react-media), -[react-media-queries](https://github.com/bloodyowl/react-media-queries), -[media-query-fascade](https://github.com/tanem/media-query-facade), or -[react-responsive](https://github.com/contra/react-responsive). +Native provides the `Dimensions` API and the component-scoped `onLayout` prop. + +If you do choose to use Media Queries, using them in JavaScript via the +`matchMedia` DOM API has the benefit of allowing you to swap out entire +components, not just styles. ### What about pseudo-classes and pseudo-elements? From f6d1caab9d352a76a1d7cf1563a72837a89ea153 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Tue, 26 Dec 2017 09:19:04 +0000 Subject: [PATCH 045/153] Document web-only Switch props --- website/storybook/1-components/Switch/SwitchScreen.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/website/storybook/1-components/Switch/SwitchScreen.js b/website/storybook/1-components/Switch/SwitchScreen.js index 05c9e1246..d0bd47873 100644 --- a/website/storybook/1-components/Switch/SwitchScreen.js +++ b/website/storybook/1-components/Switch/SwitchScreen.js @@ -41,6 +41,7 @@ const SwitchScreen = () => ( example={{ render: () => }} + label="web" name="activeThumbColor" typeInfo="?color = #009688" /> @@ -50,6 +51,7 @@ const SwitchScreen = () => ( example={{ render: () => }} + label="web" name="activeTrackColor" typeInfo="?color = #A3D3CF" /> @@ -77,6 +79,7 @@ const SwitchScreen = () => ( example={{ render: () => }} + label="web" name="thumbColor" typeInfo="?color = #FAFAFA" /> @@ -86,6 +89,7 @@ const SwitchScreen = () => ( example={{ render: () => }} + label="web" name="trackColor" typeInfo="?color = #939393" /> From 86263a2fa0cd591d3fec65b66668eca53a596cff Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Wed, 27 Dec 2017 19:31:15 +0000 Subject: [PATCH 046/153] Reorganize and add to benchmarks Rearrange the benchmark code so that each implementation is self-contained. Adds the SierpinskiTriangle case that 'emotion' introduced in their fork of the 'react-native-web' benchmarks. And make it possible to run benchmarks on a per-library basis. --- packages/benchmarks/README.md | 45 ++++--- packages/benchmarks/index.js | 63 ---------- packages/benchmarks/package.json | 2 + packages/benchmarks/src/aphrodite.js | 7 -- packages/benchmarks/{ => src}/benchmark.js | 31 ++--- .../index.js => cases/NestedTree.js} | 0 .../src/cases/SierpinskiTriangle.js | 84 +++++++++++++ .../{tests => src/cases}/renderDeepTree.js | 4 +- .../src/cases/renderSierpinskiTriangle.js | 112 ++++++++++++++++++ .../{tests => src/cases}/renderTweet.js | 5 +- .../{tests => src/cases}/renderWideTree.js | 4 +- .../{ => src}/createRenderBenchmark.js | 0 packages/benchmarks/src/css-modules.js | 9 -- packages/benchmarks/src/emotion.js | 7 -- packages/benchmarks/src/glamor.js | 7 -- .../aphrodite/Box.js} | 2 +- .../aphrodite/View.js} | 0 .../src/implementations/aphrodite/index.js | 7 ++ .../css-modules/Box.js} | 4 +- .../css-modules/View.js} | 2 +- .../css-modules/box-styles.css} | 0 .../src/implementations/css-modules/index.js | 7 ++ .../css-modules/view-styles.css} | 0 .../emotion/Box.js} | 2 +- .../src/implementations/emotion/Dot.js | 32 +++++ .../emotion/View.js} | 2 +- .../src/implementations/emotion/index.js | 9 ++ .../glamor/Box.js} | 2 +- .../src/implementations/glamor/Dot.js | 32 +++++ .../glamor/View.js} | 0 .../src/implementations/glamor/index.js | 9 ++ .../src/implementations/inline-styles/Box.js | 48 ++++++++ .../src/implementations/inline-styles/Dot.js | 34 ++++++ .../src/implementations/inline-styles/View.js | 36 ++++++ .../implementations/inline-styles/index.js | 9 ++ .../Box/jss.js => implementations/jss/Box.js} | 2 +- .../jss.js => implementations/jss/View.js} | 0 .../src/implementations/jss/index.js | 7 ++ .../radium/Box.js} | 2 +- .../src/implementations/radium/Dot.js | 35 ++++++ .../radium/View.js} | 0 .../src/implementations/radium/index.js | 9 ++ .../react-native-web/Box.js} | 0 .../implementations/react-native-web/Dot.js | 32 +++++ .../react-native-web/Tweet/AppText.js} | 2 +- .../react-native-web/Tweet/AspectRatio.js} | 4 +- .../react-native-web/Tweet/GridView.js} | 6 +- .../Tweet/IconDirectMessage.js} | 0 .../react-native-web/Tweet/IconHeart.js} | 0 .../react-native-web/Tweet/IconReply.js} | 0 .../react-native-web/Tweet/IconRetweet.js} | 0 .../react-native-web/Tweet/TweetAction.js} | 14 +-- .../Tweet/TweetActionsBar.js} | 6 +- .../react-native-web/Tweet/TweetText.js} | 4 +- .../react-native-web/Tweet/TweetTextPart.js} | 4 +- .../react-native-web/Tweet/UserAvatar.js} | 8 +- .../react-native-web/Tweet/UserNames.js} | 6 +- .../react-native-web}/Tweet/index.js | 14 +-- .../react-native-web/Tweet}/styles.js | 2 +- .../react-native-web/Tweet}/theme.js | 0 .../implementations/react-native-web/index.js | 11 ++ .../reactxp/Box.js} | 0 .../src/implementations/reactxp/Dot.js | 34 ++++++ .../reactxp/index.js} | 4 +- .../styled-components/Box.js} | 2 +- .../implementations/styled-components/Dot.js | 24 ++++ .../styled-components/View.js} | 0 .../styled-components/index.js | 9 ++ .../styletron/Box.js} | 2 +- .../src/implementations/styletron/Dot.js | 37 ++++++ .../styletron/View.js} | 0 .../src/implementations/styletron/index.js | 9 ++ packages/benchmarks/src/index.js | 99 ++++++++++++++++ packages/benchmarks/src/jss.js | 9 -- packages/benchmarks/src/radium.js | 9 -- packages/benchmarks/src/react-native.js | 9 -- packages/benchmarks/src/styled-components.js | 7 -- packages/benchmarks/src/styletron.js | 7 -- packages/benchmarks/webpack.config.js | 12 +- yarn.lock | 16 +++ 80 files changed, 847 insertions(+), 227 deletions(-) delete mode 100644 packages/benchmarks/index.js delete mode 100644 packages/benchmarks/src/aphrodite.js rename packages/benchmarks/{ => src}/benchmark.js (71%) rename packages/benchmarks/src/{components/NestedTree/index.js => cases/NestedTree.js} (100%) create mode 100644 packages/benchmarks/src/cases/SierpinskiTriangle.js rename packages/benchmarks/{tests => src/cases}/renderDeepTree.js (78%) create mode 100644 packages/benchmarks/src/cases/renderSierpinskiTriangle.js rename packages/benchmarks/{tests => src/cases}/renderTweet.js (95%) rename packages/benchmarks/{tests => src/cases}/renderWideTree.js (78%) rename packages/benchmarks/{ => src}/createRenderBenchmark.js (100%) delete mode 100644 packages/benchmarks/src/css-modules.js delete mode 100644 packages/benchmarks/src/emotion.js delete mode 100644 packages/benchmarks/src/glamor.js rename packages/benchmarks/src/{components/Box/aphrodite.js => implementations/aphrodite/Box.js} (95%) rename packages/benchmarks/src/{components/View/aphrodite.js => implementations/aphrodite/View.js} (100%) create mode 100644 packages/benchmarks/src/implementations/aphrodite/index.js rename packages/benchmarks/src/{components/Box/css-modules.js => implementations/css-modules/Box.js} (84%) rename packages/benchmarks/src/{components/View/css-modules.js => implementations/css-modules/View.js} (88%) rename packages/benchmarks/src/{components/Box/styles.css => implementations/css-modules/box-styles.css} (100%) create mode 100644 packages/benchmarks/src/implementations/css-modules/index.js rename packages/benchmarks/src/{components/View/styles.css => implementations/css-modules/view-styles.css} (100%) rename packages/benchmarks/src/{components/Box/glamor.js => implementations/emotion/Box.js} (95%) create mode 100644 packages/benchmarks/src/implementations/emotion/Dot.js rename packages/benchmarks/src/{components/View/emotion.js => implementations/emotion/View.js} (88%) create mode 100644 packages/benchmarks/src/implementations/emotion/index.js rename packages/benchmarks/src/{components/Box/emotion.js => implementations/glamor/Box.js} (95%) create mode 100644 packages/benchmarks/src/implementations/glamor/Dot.js rename packages/benchmarks/src/{components/View/glamor.js => implementations/glamor/View.js} (100%) create mode 100644 packages/benchmarks/src/implementations/glamor/index.js create mode 100644 packages/benchmarks/src/implementations/inline-styles/Box.js create mode 100644 packages/benchmarks/src/implementations/inline-styles/Dot.js create mode 100644 packages/benchmarks/src/implementations/inline-styles/View.js create mode 100644 packages/benchmarks/src/implementations/inline-styles/index.js rename packages/benchmarks/src/{components/Box/jss.js => implementations/jss/Box.js} (96%) rename packages/benchmarks/src/{components/View/jss.js => implementations/jss/View.js} (100%) create mode 100644 packages/benchmarks/src/implementations/jss/index.js rename packages/benchmarks/src/{components/Box/radium.js => implementations/radium/Box.js} (95%) create mode 100644 packages/benchmarks/src/implementations/radium/Dot.js rename packages/benchmarks/src/{components/View/radium.js => implementations/radium/View.js} (100%) create mode 100644 packages/benchmarks/src/implementations/radium/index.js rename packages/benchmarks/src/{components/Box/react-native.js => implementations/react-native-web/Box.js} (100%) create mode 100644 packages/benchmarks/src/implementations/react-native-web/Dot.js rename packages/benchmarks/src/{components/AppText/index.js => implementations/react-native-web/Tweet/AppText.js} (98%) rename packages/benchmarks/src/{components/AspectRatio/index.js => implementations/react-native-web/Tweet/AspectRatio.js} (89%) rename packages/benchmarks/src/{components/GridView/index.js => implementations/react-native-web/Tweet/GridView.js} (90%) rename packages/benchmarks/src/{components/Icons/DirectMessage.js => implementations/react-native-web/Tweet/IconDirectMessage.js} (100%) rename packages/benchmarks/src/{components/Icons/Heart.js => implementations/react-native-web/Tweet/IconHeart.js} (100%) rename packages/benchmarks/src/{components/Icons/Reply.js => implementations/react-native-web/Tweet/IconReply.js} (100%) rename packages/benchmarks/src/{components/Icons/Retweet.js => implementations/react-native-web/Tweet/IconRetweet.js} (100%) rename packages/benchmarks/src/{components/TweetAction/index.js => implementations/react-native-web/Tweet/TweetAction.js} (85%) rename packages/benchmarks/src/{components/TweetActionsBar/index.js => implementations/react-native-web/Tweet/TweetActionsBar.js} (89%) rename packages/benchmarks/src/{components/TweetText/index.js => implementations/react-native-web/Tweet/TweetText.js} (89%) rename packages/benchmarks/src/{components/TweetTextPart/index.js => implementations/react-native-web/Tweet/TweetTextPart.js} (97%) rename packages/benchmarks/src/{components/UserAvatar/index.js => implementations/react-native-web/Tweet/UserAvatar.js} (88%) rename packages/benchmarks/src/{components/UserNames/index.js => implementations/react-native-web/Tweet/UserNames.js} (90%) rename packages/benchmarks/src/{components => implementations/react-native-web}/Tweet/index.js (93%) rename packages/benchmarks/src/{components/Icons => implementations/react-native-web/Tweet}/styles.js (87%) rename packages/benchmarks/src/{components => implementations/react-native-web/Tweet}/theme.js (100%) create mode 100644 packages/benchmarks/src/implementations/react-native-web/index.js rename packages/benchmarks/src/{components/Box/reactxp.js => implementations/reactxp/Box.js} (100%) create mode 100644 packages/benchmarks/src/implementations/reactxp/Dot.js rename packages/benchmarks/src/{reactxp.js => implementations/reactxp/index.js} (54%) rename packages/benchmarks/src/{components/Box/styled-components.js => implementations/styled-components/Box.js} (93%) create mode 100644 packages/benchmarks/src/implementations/styled-components/Dot.js rename packages/benchmarks/src/{components/View/styled-components.js => implementations/styled-components/View.js} (100%) create mode 100644 packages/benchmarks/src/implementations/styled-components/index.js rename packages/benchmarks/src/{components/Box/styletron.js => implementations/styletron/Box.js} (95%) create mode 100644 packages/benchmarks/src/implementations/styletron/Dot.js rename packages/benchmarks/src/{components/View/styletron.js => implementations/styletron/View.js} (100%) create mode 100644 packages/benchmarks/src/implementations/styletron/index.js create mode 100644 packages/benchmarks/src/index.js delete mode 100644 packages/benchmarks/src/jss.js delete mode 100644 packages/benchmarks/src/radium.js delete mode 100644 packages/benchmarks/src/react-native.js delete mode 100644 packages/benchmarks/src/styled-components.js delete mode 100644 packages/benchmarks/src/styletron.js diff --git a/packages/benchmarks/README.md b/packages/benchmarks/README.md index 149e0eb79..d162e7e2c 100644 --- a/packages/benchmarks/README.md +++ b/packages/benchmarks/README.md @@ -6,41 +6,50 @@ To run these benchmarks: yarn benchmark ``` -Append `?fastest` to the URL to include the fastest "other libraries", and -`?all` to include all the "other libraries". +To run benchmarks for individual implementations append `?,` to the +URL, e.g., `?css-modules,react-native-web`. ## Notes +These benchmarks are crude approximations of extreme cases that libraries may +encounter. The deep and wide tree cases look at the performance of mounting and +rendering large trees of styled elements. The Triangle cases looks at the +performance of repeated style updates to a large mounted tree. Some libraries +must inject new styles for each "dynamic style", whereas others may not. +Libraries without support for dynamic styles (i.e., they rely on user-authored +inline styles) do not include the `SierpinskiTriangle` benchmark. + The components used in the render benchmarks are simple enough to be -implemented by multiple UI or style libraries. The implementations are not -equivalent in functionality. For example, the "React Native for Web" benchmark includes a -complete `View` implementation and the `StyleSheet` also converts React Native -styles to DOM styles, has deterministic resolution, and supports RTL layout. +implemented by multiple UI or style libraries. The benchmark implementations +and the features of the style libraries are _only approximately equivalent in +functionality_. ## Results Typical render timings*: mean ± two standard deviations. -| Implementation | Deep tree (ms) | Wide tree (ms) | Tweets (ms) | +| Implementation | Deep tree (ms) | Wide tree (ms) | Triangle (ms) | | :--- | ---: | ---: | ---: | -| `css-modules` | `80.47` `±25.13` | `144.87` `±32.70` | | -| `react-native-web@0.2.2` | `88.68` `±28.78` | `178.17` `±39.90` | `13.78` `±2.90ms` | +| `react-native-web@0.2.2` | `89.67` `±28.51` | `167.46` `±27.03` | `65.40` `±19.50` | +| `css-modules` | `77.42` `±45.50` | `141.44` `±33.96` | - | +| `inline-styles` | `236.25` `±95.57` | `477.01` `±88.30` | `40.95` `±23.53` | Other libraries -| Implementation | Deep tree (ms) | Wide tree (ms) | +| Implementation | Deep tree (ms) | Wide tree (ms) | Triangle (ms) | | :--- | ---: | ---: | -| `styletron@3.0.0-rc.5` | `79.41` `±27.49` | `152.95` `±29.46` | -| `aphrodite@1.2.5` | `85.13` `±25.39` | `162.87` `±25.91` | -| `glamor@2.20.40` | `109.92` `±29.88` | `193.01` `±32.03` | -| `react-jss@8.2.0` | `134.28` `±49.00` | `278.78` `±50.39` | -| `emotion@8.0.12` | `139.08` `±46.18` | `253.45` `±52.69` | -| `styled-components@2.3.2` | `194.43` `±46.28` | `404.86` `±56.59` | -| `reactxp@0.46.6` | `219.46` `±57.24` | `424.18` `±76.10` | -| `radium@0.19.6` | `359.32` `±90.27` | `795.91` `±88.93` | +| `styletron@3.0.0-rc.5` | `83.53` `±33.55` | `153.12` `±39.13` | `56.47` `±24.22` | +| `aphrodite@1.2.5` | `88.23` `±31.22` | `164.03` `±34.70` | - | +| `glamor@2.20.40` | `110.09` `±34.20` | `182.06` `±50.39` | ‡ | +| `emotion@8.0.12` | `103.44` `±32.12` | `204.45` `±41.00` | `110.28` `±26.94` | +| `react-jss@8.2.0` | `136.17` `±59.23` | `270.51` `±69.20` | - | +| `styled-components@2.3.2` | `217.57` `±51.90` | `437.57` `±65.74` | `76.99` `±41.79` | +| `reactxp@0.46.6` | `240.88` `±79.82` | `467.32` `±74.42` | `70.95` `±32.90`| +| `radium@0.19.6` | `400.19` `±94.58` | `816.59` `±91.10` | `71.13` `±27.22` | These results indicate that render times when using `react-native-web`, `css-modules`, `aphrodite`, and `styletron` are roughly equivalent and significantly faster than alternatives. *MacBook Pro (13-inch, Early 2011); 2.3 GHz Intel Core i5; 8 GB 1333 MHz DDR3. Google Chrome 62. +‡Glamor essentially crashes diff --git a/packages/benchmarks/index.js b/packages/benchmarks/index.js deleted file mode 100644 index 07a0783ae..000000000 --- a/packages/benchmarks/index.js +++ /dev/null @@ -1,63 +0,0 @@ -import aphrodite from './src/aphrodite'; -import cssModules from './src/css-modules'; -import emotion from './src/emotion'; -import glamor from './src/glamor'; -import jss from './src/jss'; -import radium from './src/radium'; -import reactNative from './src/react-native'; -import styledComponents from './src/styled-components'; -import styletron from './src/styletron'; -import xp from './src/reactxp'; - -import renderDeepTree from './tests/renderDeepTree'; -import renderTweet from './tests/renderTweet'; -import renderWideTree from './tests/renderWideTree'; - -const testAll = window.location.search === '?all'; -const testFastest = window.location.search === '?fastest'; - -const coreTests = [ - () => renderTweet('react-native-web', reactNative), - - () => renderDeepTree('css-modules', cssModules), - () => renderWideTree('css-modules', cssModules), - () => renderDeepTree('react-native-web', reactNative), - () => renderWideTree('react-native-web', reactNative) -]; - -const fastestTests = [ - () => renderDeepTree('styletron', styletron), - () => renderWideTree('styletron', styletron), - () => renderDeepTree('aphrodite', aphrodite), - () => renderWideTree('aphrodite', aphrodite) -]; - -/** - * Optionally run tests using other libraries - */ -const restTests = [ - () => renderDeepTree('glamor', glamor), - () => renderWideTree('glamor', glamor), - () => renderDeepTree('react-jss', jss), - () => renderWideTree('react-jss', jss), - () => renderDeepTree('emotion', emotion), - () => renderWideTree('emotion', emotion), - () => renderDeepTree('styled-components', styledComponents), - () => renderWideTree('styled-components', styledComponents), - () => renderDeepTree('reactxp', xp), - () => renderWideTree('reactxp', xp), - () => renderDeepTree('radium', radium), - () => renderWideTree('radium', radium) -]; - -const tests = [...coreTests]; -if (testFastest) { - tests.push(...fastestTests); -} -if (testAll) { - tests.push(...fastestTests); - tests.push(...restTests); -} - -// run benchmarks -tests.reduce((promise, test) => promise.then(test()), Promise.resolve()); diff --git a/packages/benchmarks/package.json b/packages/benchmarks/package.json index 52835828a..9c3e3df00 100644 --- a/packages/benchmarks/package.json +++ b/packages/benchmarks/package.json @@ -7,7 +7,9 @@ }, "dependencies": { "aphrodite": "^1.2.5", + "babel-polyfill": "^6.26.0", "classnames": "^2.2.5", + "d3-scale-chromatic": "^1.1.1", "emotion": "^8.0.12", "glamor": "^2.20.40", "marky": "^1.2.0", diff --git a/packages/benchmarks/src/aphrodite.js b/packages/benchmarks/src/aphrodite.js deleted file mode 100644 index e09522ee2..000000000 --- a/packages/benchmarks/src/aphrodite.js +++ /dev/null @@ -1,7 +0,0 @@ -import Box from './components/Box/aphrodite'; -import View from './components/View/aphrodite'; - -export default { - Box, - View -}; diff --git a/packages/benchmarks/benchmark.js b/packages/benchmarks/src/benchmark.js similarity index 71% rename from packages/benchmarks/benchmark.js rename to packages/benchmarks/src/benchmark.js index fc2e9368c..41316cbe7 100644 --- a/packages/benchmarks/benchmark.js +++ b/packages/benchmarks/src/benchmark.js @@ -38,30 +38,31 @@ const standardDeviation = values => { return Math.sqrt(meanSquareDiff); }; +export const log = (name, description, durations) => { + const stdDev = standardDeviation(durations); + const formattedMean = fmt(mean(durations)); + const formattedMedian = fmt(median(durations)); + const formattedStdDev = fmt(stdDev); + + console.groupCollapsed(`${name}\n${formattedMean} ±${fmt(2 * stdDev)}`); + description && console.log(description); + console.log(`Median: ${formattedMedian}`); + console.log(`Mean: ${formattedMean}`); + console.log(`Standard deviation: ${formattedStdDev}`); + console.log(durations); + console.groupEnd(); +}; + const benchmark = ({ name, description, setup, teardown, task, runs }) => { return new Promise(resolve => { const durations = []; let i = 0; setup(); - const first = measure('first', task); teardown(); const done = () => { - const stdDev = standardDeviation(durations); - const formattedFirst = fmt(first); - const formattedMean = fmt(mean(durations)); - const formattedMedian = fmt(median(durations)); - const formattedStdDev = fmt(stdDev); - - console.groupCollapsed(`${name}\n${formattedMean} ±${fmt(2 * stdDev)}`); - description && console.log(description); - console.log(`First: ${formattedFirst}`); - console.log(`Median: ${formattedMedian}`); - console.log(`Mean: ${formattedMean}`); - console.log(`Standard deviation: ${formattedStdDev}`); - console.log(durations); - console.groupEnd(); + log(name, description, durations); resolve(); }; diff --git a/packages/benchmarks/src/components/NestedTree/index.js b/packages/benchmarks/src/cases/NestedTree.js similarity index 100% rename from packages/benchmarks/src/components/NestedTree/index.js rename to packages/benchmarks/src/cases/NestedTree.js diff --git a/packages/benchmarks/src/cases/SierpinskiTriangle.js b/packages/benchmarks/src/cases/SierpinskiTriangle.js new file mode 100644 index 000000000..386e8545b --- /dev/null +++ b/packages/benchmarks/src/cases/SierpinskiTriangle.js @@ -0,0 +1,84 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import { interpolatePurples, interpolateBuPu, interpolateRdPu } from 'd3-scale-chromatic'; + +const targetSize = 25; + +class SierpinskiTriangle extends React.Component { + static propTypes = { + Dot: PropTypes.node, + depth: PropTypes.number, + renderCount: PropTypes.number, + s: PropTypes.number, + x: PropTypes.number, + y: PropTypes.number + }; + + static defaultProps = { + depth: 0, + renderCount: 0 + }; + + render() { + const { x, y, depth, renderCount, Dot } = this.props; + let { s } = this.props; + + if (s <= targetSize) { + let fn; + switch (depth) { + case 1: + fn = interpolatePurples; + break; + case 2: + fn = interpolateBuPu; + break; + case 3: + default: + fn = interpolateRdPu; + } + + return ( + + ); + } + + s /= 2; + + return [ + , + , + + ]; + } +} + +export default SierpinskiTriangle; diff --git a/packages/benchmarks/tests/renderDeepTree.js b/packages/benchmarks/src/cases/renderDeepTree.js similarity index 78% rename from packages/benchmarks/tests/renderDeepTree.js rename to packages/benchmarks/src/cases/renderDeepTree.js index 60fdc8d19..ca9e8b969 100644 --- a/packages/benchmarks/tests/renderDeepTree.js +++ b/packages/benchmarks/src/cases/renderDeepTree.js @@ -1,10 +1,10 @@ import createRenderBenchmark from '../createRenderBenchmark'; -import NestedTree from '../src/components/NestedTree'; +import NestedTree from './NestedTree'; import React from 'react'; const renderDeepTree = (label, components) => createRenderBenchmark({ - name: `Deep tree [${label}]`, + name: `[${label}] Deep tree`, runs: 20, getElement() { return ; diff --git a/packages/benchmarks/src/cases/renderSierpinskiTriangle.js b/packages/benchmarks/src/cases/renderSierpinskiTriangle.js new file mode 100644 index 000000000..15763f094 --- /dev/null +++ b/packages/benchmarks/src/cases/renderSierpinskiTriangle.js @@ -0,0 +1,112 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import PropTypes from 'prop-types'; +import SierpinskiTriangle from './SierpinskiTriangle'; +import { log } from '../benchmark'; + +const node = document.querySelector('.root'); + +let runs = 20; + +class Speedometer extends React.Component { + /* necessary for reactxp to work without errors */ + static childContextTypes = { + focusManager: PropTypes.object + }; + getChildContext() { + return { + focusManager: { + addFocusableComponent() {}, + removeFocusableComponent() {}, + restrictFocusWithin() {}, + removeFocusRestriction() {}, + limitFocusWithin() {}, + removeFocusLimitation() {} + } + }; + } + + static propTypes = { + Dot: PropTypes.node.isRequired, + description: PropTypes.string, + name: PropTypes.string.isRequired, + onComplete: PropTypes.node.isRequired + }; + + state = { renderCount: -1 }; + + async componentDidMount() { + const durations = []; + + while ((runs -= 1)) { + const prev = window.performance.now(); + await new Promise(resolve => { + this.raf = window.requestAnimationFrame(() => { + this.setState({ renderCount: this.state.renderCount + 1 }, () => { + const now = window.performance.now(); + durations.push(now - prev); + resolve(); + }); + }); + }); + } + + const { description, name } = this.props; + log(name, description, durations); + + runs = 20; + this.props.onComplete(); + } + + componentWillUnmount() { + window.cancelAnimationFrame(this.raf); + } + + render() { + return ( +
+ +
+ ); + } +} + +const styles = { + wrapper: { + position: 'absolute', + transformOrigin: '0 0', + left: '50%', + top: '50%', + width: '10px', + height: '10px', + backgroundColor: '#eee', + transform: 'scale(0.33)' + } +}; + +const renderSierpinskiTriangle = (name, { Dot }) => () => { + return new Promise(resolve => { + /* eslint-disable react/jsx-no-bind */ + ReactDOM.render( + { + ReactDOM.unmountComponentAtNode(node); + resolve(); + }} + />, + node + ); + /* eslint-enable react/jsx-no-bind */ + }); +}; + +export default renderSierpinskiTriangle; diff --git a/packages/benchmarks/tests/renderTweet.js b/packages/benchmarks/src/cases/renderTweet.js similarity index 95% rename from packages/benchmarks/tests/renderTweet.js rename to packages/benchmarks/src/cases/renderTweet.js index 3243430a8..2f2e4dff9 100644 --- a/packages/benchmarks/tests/renderTweet.js +++ b/packages/benchmarks/src/cases/renderTweet.js @@ -1,5 +1,4 @@ import createRenderBenchmark from '../createRenderBenchmark'; -import Tweet from '../src/components/Tweet'; import React from 'react'; const tweet1 = { @@ -96,9 +95,9 @@ const tweet2 = { } }; -const renderTweet = label => +const renderTweet = (label, { Tweet }) => createRenderBenchmark({ - name: `Tweet [${label}]`, + name: `[${label}] Tweet`, runs: 10, getElement() { return ( diff --git a/packages/benchmarks/tests/renderWideTree.js b/packages/benchmarks/src/cases/renderWideTree.js similarity index 78% rename from packages/benchmarks/tests/renderWideTree.js rename to packages/benchmarks/src/cases/renderWideTree.js index 948585ca6..15c1740f5 100644 --- a/packages/benchmarks/tests/renderWideTree.js +++ b/packages/benchmarks/src/cases/renderWideTree.js @@ -1,10 +1,10 @@ import createRenderBenchmark from '../createRenderBenchmark'; -import NestedTree from '../src/components/NestedTree'; +import NestedTree from './NestedTree'; import React from 'react'; const renderWideTree = (label, components) => createRenderBenchmark({ - name: `Wide tree [${label}]`, + name: `[${label}] Wide tree`, runs: 20, getElement() { return ; diff --git a/packages/benchmarks/createRenderBenchmark.js b/packages/benchmarks/src/createRenderBenchmark.js similarity index 100% rename from packages/benchmarks/createRenderBenchmark.js rename to packages/benchmarks/src/createRenderBenchmark.js diff --git a/packages/benchmarks/src/css-modules.js b/packages/benchmarks/src/css-modules.js deleted file mode 100644 index fc62f9ada..000000000 --- a/packages/benchmarks/src/css-modules.js +++ /dev/null @@ -1,9 +0,0 @@ -import Box from './components/Box/css-modules'; -import View from './components/View/css-modules'; - -const api = { - Box, - View -}; - -export default api; diff --git a/packages/benchmarks/src/emotion.js b/packages/benchmarks/src/emotion.js deleted file mode 100644 index 1b4a6a333..000000000 --- a/packages/benchmarks/src/emotion.js +++ /dev/null @@ -1,7 +0,0 @@ -import Box from './components/Box/emotion'; -import View from './components/View/emotion'; - -export default { - Box, - View -}; diff --git a/packages/benchmarks/src/glamor.js b/packages/benchmarks/src/glamor.js deleted file mode 100644 index bef27a117..000000000 --- a/packages/benchmarks/src/glamor.js +++ /dev/null @@ -1,7 +0,0 @@ -import Box from './components/Box/glamor'; -import View from './components/View/glamor'; - -export default { - Box, - View -}; diff --git a/packages/benchmarks/src/components/Box/aphrodite.js b/packages/benchmarks/src/implementations/aphrodite/Box.js similarity index 95% rename from packages/benchmarks/src/components/Box/aphrodite.js rename to packages/benchmarks/src/implementations/aphrodite/Box.js index 777ec0ea6..2759fd1bf 100644 --- a/packages/benchmarks/src/components/Box/aphrodite.js +++ b/packages/benchmarks/src/implementations/aphrodite/Box.js @@ -1,6 +1,6 @@ /* eslint-disable react/prop-types */ import React from 'react'; -import View from '../View/aphrodite'; +import View from './View'; import { StyleSheet } from 'aphrodite'; const Box = ({ color, fixed = false, layout = 'column', outer = false, ...other }) => ( diff --git a/packages/benchmarks/src/components/View/aphrodite.js b/packages/benchmarks/src/implementations/aphrodite/View.js similarity index 100% rename from packages/benchmarks/src/components/View/aphrodite.js rename to packages/benchmarks/src/implementations/aphrodite/View.js diff --git a/packages/benchmarks/src/implementations/aphrodite/index.js b/packages/benchmarks/src/implementations/aphrodite/index.js new file mode 100644 index 000000000..0ca161ab5 --- /dev/null +++ b/packages/benchmarks/src/implementations/aphrodite/index.js @@ -0,0 +1,7 @@ +import Box from './Box'; +import View from './View'; + +export default { + Box, + View +}; diff --git a/packages/benchmarks/src/components/Box/css-modules.js b/packages/benchmarks/src/implementations/css-modules/Box.js similarity index 84% rename from packages/benchmarks/src/components/Box/css-modules.js rename to packages/benchmarks/src/implementations/css-modules/Box.js index 04ad8a0b5..5671bfaf2 100644 --- a/packages/benchmarks/src/components/Box/css-modules.js +++ b/packages/benchmarks/src/implementations/css-modules/Box.js @@ -1,8 +1,8 @@ /* eslint-disable react/prop-types */ import classnames from 'classnames'; import React from 'react'; -import View from '../View/css-modules'; -import styles from './styles.css'; +import View from './View'; +import styles from './box-styles.css'; const Box = ({ color, fixed = false, layout = 'column', outer = false, ...other }) => ( ( ( +
+ {children} +
+); + +const styles = { + root: { + position: 'absolute', + cursor: 'pointer', + width: 0, + height: 0, + borderColor: 'transparent', + borderStyle: 'solid', + borderTopWidth: 0 + } +}; + +export default Dot; diff --git a/packages/benchmarks/src/components/View/emotion.js b/packages/benchmarks/src/implementations/emotion/View.js similarity index 88% rename from packages/benchmarks/src/components/View/emotion.js rename to packages/benchmarks/src/implementations/emotion/View.js index 8c103f2ab..798974636 100644 --- a/packages/benchmarks/src/components/View/emotion.js +++ b/packages/benchmarks/src/implementations/emotion/View.js @@ -5,7 +5,7 @@ import React from 'react'; class View extends React.Component { render() { const { style, ...other } = this.props; - return
; + return
; } } diff --git a/packages/benchmarks/src/implementations/emotion/index.js b/packages/benchmarks/src/implementations/emotion/index.js new file mode 100644 index 000000000..cdb1735ba --- /dev/null +++ b/packages/benchmarks/src/implementations/emotion/index.js @@ -0,0 +1,9 @@ +import Box from './Box'; +import Dot from './Dot'; +import View from './View'; + +export default { + Box, + Dot, + View +}; diff --git a/packages/benchmarks/src/components/Box/emotion.js b/packages/benchmarks/src/implementations/glamor/Box.js similarity index 95% rename from packages/benchmarks/src/components/Box/emotion.js rename to packages/benchmarks/src/implementations/glamor/Box.js index 3cfacd645..dd33fded7 100644 --- a/packages/benchmarks/src/components/Box/emotion.js +++ b/packages/benchmarks/src/implementations/glamor/Box.js @@ -1,6 +1,6 @@ /* eslint-disable react/prop-types */ import React from 'react'; -import View from '../View/emotion'; +import View from './View'; const Box = ({ color, fixed = false, layout = 'column', outer = false, ...other }) => ( ( +
+ {children} +
+); + +const styles = { + root: { + position: 'absolute', + cursor: 'pointer', + width: 0, + height: 0, + borderColor: 'transparent', + borderStyle: 'solid', + borderTopWidth: 0 + } +}; + +export default Dot; diff --git a/packages/benchmarks/src/components/View/glamor.js b/packages/benchmarks/src/implementations/glamor/View.js similarity index 100% rename from packages/benchmarks/src/components/View/glamor.js rename to packages/benchmarks/src/implementations/glamor/View.js diff --git a/packages/benchmarks/src/implementations/glamor/index.js b/packages/benchmarks/src/implementations/glamor/index.js new file mode 100644 index 000000000..cdb1735ba --- /dev/null +++ b/packages/benchmarks/src/implementations/glamor/index.js @@ -0,0 +1,9 @@ +import Box from './Box'; +import Dot from './Dot'; +import View from './View'; + +export default { + Box, + Dot, + View +}; diff --git a/packages/benchmarks/src/implementations/inline-styles/Box.js b/packages/benchmarks/src/implementations/inline-styles/Box.js new file mode 100644 index 000000000..99a1ef2c6 --- /dev/null +++ b/packages/benchmarks/src/implementations/inline-styles/Box.js @@ -0,0 +1,48 @@ +/* eslint-disable react/prop-types */ +import React from 'react'; +import View from './View'; + +const Box = ({ color, fixed = false, layout = 'column', outer = false, ...other }) => ( + +); + +const styles = { + outer: { + padding: 4 + }, + row: { + flexDirection: 'row' + }, + color0: { + backgroundColor: '#222' + }, + color1: { + backgroundColor: '#666' + }, + color2: { + backgroundColor: '#999' + }, + color3: { + backgroundColor: 'blue' + }, + color4: { + backgroundColor: 'orange' + }, + color5: { + backgroundColor: 'red' + }, + fixed: { + width: 20, + height: 20 + } +}; + +export default Box; diff --git a/packages/benchmarks/src/implementations/inline-styles/Dot.js b/packages/benchmarks/src/implementations/inline-styles/Dot.js new file mode 100644 index 000000000..be0dee353 --- /dev/null +++ b/packages/benchmarks/src/implementations/inline-styles/Dot.js @@ -0,0 +1,34 @@ +/* eslint-disable react/prop-types */ +import React from 'react'; + +const Dot = ({ size, x, y, children, color }) => ( +
+ {children} +
+); + +const styles = { + root: { + position: 'absolute', + cursor: 'pointer', + width: 0, + height: 0, + borderColor: 'transparent', + borderStyle: 'solid', + borderTopWidth: 0 + } +}; + +export default Dot; diff --git a/packages/benchmarks/src/implementations/inline-styles/View.js b/packages/benchmarks/src/implementations/inline-styles/View.js new file mode 100644 index 000000000..6bd469e04 --- /dev/null +++ b/packages/benchmarks/src/implementations/inline-styles/View.js @@ -0,0 +1,36 @@ +/* eslint-disable react/prop-types */ +import React from 'react'; + +const compose = (s1, s2) => { + if (s1 && s2) { + return { ...s1, ...s2 }; + } else { + return s1 || s2; + } +}; + +class View extends React.Component { + render() { + const { style, ...other } = this.props; + return
; + } +} + +const viewStyle = { + alignItems: 'stretch', + borderWidth: 0, + borderStyle: 'solid', + boxSizing: 'border-box', + display: 'flex', + flexBasis: 'auto', + flexDirection: 'column', + flexShrink: 0, + margin: 0, + padding: 0, + position: 'relative', + // fix flexbox bugs + minHeight: 0, + minWidth: 0 +}; + +export default View; diff --git a/packages/benchmarks/src/implementations/inline-styles/index.js b/packages/benchmarks/src/implementations/inline-styles/index.js new file mode 100644 index 000000000..cdb1735ba --- /dev/null +++ b/packages/benchmarks/src/implementations/inline-styles/index.js @@ -0,0 +1,9 @@ +import Box from './Box'; +import Dot from './Dot'; +import View from './View'; + +export default { + Box, + Dot, + View +}; diff --git a/packages/benchmarks/src/components/Box/jss.js b/packages/benchmarks/src/implementations/jss/Box.js similarity index 96% rename from packages/benchmarks/src/components/Box/jss.js rename to packages/benchmarks/src/implementations/jss/Box.js index f7f686004..251916723 100644 --- a/packages/benchmarks/src/components/Box/jss.js +++ b/packages/benchmarks/src/implementations/jss/Box.js @@ -2,7 +2,7 @@ import classnames from 'classnames'; import injectSheet from 'react-jss'; import React from 'react'; -import View from '../View/jss'; +import View from './View'; const Box = ({ classes, color, fixed = false, layout = 'column', outer = false, ...other }) => ( ( ( +
+ {children} +
+); + +const styles = { + root: { + position: 'absolute', + cursor: 'pointer', + width: 0, + height: 0, + borderColor: 'transparent', + borderStyle: 'solid', + borderTopWidth: 0 + } +}; + +export default Radium(Dot); diff --git a/packages/benchmarks/src/components/View/radium.js b/packages/benchmarks/src/implementations/radium/View.js similarity index 100% rename from packages/benchmarks/src/components/View/radium.js rename to packages/benchmarks/src/implementations/radium/View.js diff --git a/packages/benchmarks/src/implementations/radium/index.js b/packages/benchmarks/src/implementations/radium/index.js new file mode 100644 index 000000000..cdb1735ba --- /dev/null +++ b/packages/benchmarks/src/implementations/radium/index.js @@ -0,0 +1,9 @@ +import Box from './Box'; +import Dot from './Dot'; +import View from './View'; + +export default { + Box, + Dot, + View +}; diff --git a/packages/benchmarks/src/components/Box/react-native.js b/packages/benchmarks/src/implementations/react-native-web/Box.js similarity index 100% rename from packages/benchmarks/src/components/Box/react-native.js rename to packages/benchmarks/src/implementations/react-native-web/Box.js diff --git a/packages/benchmarks/src/implementations/react-native-web/Dot.js b/packages/benchmarks/src/implementations/react-native-web/Dot.js new file mode 100644 index 000000000..bfa47fef3 --- /dev/null +++ b/packages/benchmarks/src/implementations/react-native-web/Dot.js @@ -0,0 +1,32 @@ +/* eslint-disable react/prop-types */ +import { createElement, StyleSheet } from 'react-native'; + +const Dot = ({ size, x, y, children, color }) => + createElement('div', { + children, + style: [ + styles.root, + { + borderBottomColor: color, + borderRightWidth: size / 2, + borderBottomWidth: size / 2, + borderLeftWidth: size / 2, + left: x, + top: y + } + ] + }); + +const styles = StyleSheet.create({ + root: { + position: 'absolute', + cursor: 'pointer', + width: 0, + height: 0, + borderColor: 'transparent', + borderStyle: 'solid', + borderTopWidth: 0 + } +}); + +export default Dot; diff --git a/packages/benchmarks/src/components/AppText/index.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/AppText.js similarity index 98% rename from packages/benchmarks/src/components/AppText/index.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/AppText.js index 5d5e3c232..eb208872c 100644 --- a/packages/benchmarks/src/components/AppText/index.js +++ b/packages/benchmarks/src/implementations/react-native-web/Tweet/AppText.js @@ -1,5 +1,5 @@ import PropTypes from 'prop-types'; -import theme from '../theme'; +import theme from './theme'; import React, { PureComponent } from 'react'; import { StyleSheet, Text } from 'react-native'; diff --git a/packages/benchmarks/src/components/AspectRatio/index.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/AspectRatio.js similarity index 89% rename from packages/benchmarks/src/components/AspectRatio/index.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/AspectRatio.js index deb09be55..4a170b0ff 100644 --- a/packages/benchmarks/src/components/AspectRatio/index.js +++ b/packages/benchmarks/src/implementations/react-native-web/Tweet/AspectRatio.js @@ -1,6 +1,6 @@ import PropTypes from 'prop-types'; import React, { PureComponent } from 'react'; -import { StyleSheet, View } from 'react-native'; +import { StyleSheet, View, ViewPropTypes } from 'react-native'; class AspectRatio extends PureComponent { static displayName = 'AspectRatio'; @@ -8,7 +8,7 @@ class AspectRatio extends PureComponent { static propTypes = { children: PropTypes.any, ratio: PropTypes.number, - style: PropTypes.object + style: ViewPropTypes.style }; static defaultProps = { diff --git a/packages/benchmarks/src/components/GridView/index.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/GridView.js similarity index 90% rename from packages/benchmarks/src/components/GridView/index.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/GridView.js index 63900244f..6460c6099 100644 --- a/packages/benchmarks/src/components/GridView/index.js +++ b/packages/benchmarks/src/implementations/react-native-web/Tweet/GridView.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; -import { StyleSheet, View } from 'react-native'; +import { StyleSheet, View, ViewPropTypes } from 'react-native'; import React, { Component } from 'react'; -import theme from '../theme'; +import theme from './theme'; class GridView extends Component { static displayName = 'GridView'; @@ -9,7 +9,7 @@ class GridView extends Component { static propTypes = { children: PropTypes.node, hasGap: PropTypes.bool, - style: PropTypes.object + style: ViewPropTypes.style }; render() { diff --git a/packages/benchmarks/src/components/Icons/DirectMessage.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/IconDirectMessage.js similarity index 100% rename from packages/benchmarks/src/components/Icons/DirectMessage.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/IconDirectMessage.js diff --git a/packages/benchmarks/src/components/Icons/Heart.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/IconHeart.js similarity index 100% rename from packages/benchmarks/src/components/Icons/Heart.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/IconHeart.js diff --git a/packages/benchmarks/src/components/Icons/Reply.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/IconReply.js similarity index 100% rename from packages/benchmarks/src/components/Icons/Reply.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/IconReply.js diff --git a/packages/benchmarks/src/components/Icons/Retweet.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/IconRetweet.js similarity index 100% rename from packages/benchmarks/src/components/Icons/Retweet.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/IconRetweet.js diff --git a/packages/benchmarks/src/components/TweetAction/index.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/TweetAction.js similarity index 85% rename from packages/benchmarks/src/components/TweetAction/index.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/TweetAction.js index 8df762cac..4b7ab521e 100644 --- a/packages/benchmarks/src/components/TweetAction/index.js +++ b/packages/benchmarks/src/implementations/react-native-web/Tweet/TweetAction.js @@ -1,11 +1,11 @@ -import IconReply from '../Icons/Reply'; -import IconHeart from '../Icons/Heart'; -import IconRetweet from '../Icons/Retweet'; -import IconDirectMessage from '../Icons/DirectMessage'; +import IconReply from './IconReply'; +import IconHeart from './IconHeart'; +import IconRetweet from './IconRetweet'; +import IconDirectMessage from './IconDirectMessage'; import PropTypes from 'prop-types'; import React from 'react'; -import theme from '../theme'; -import { Text, View, StyleSheet } from 'react-native'; +import theme from './theme'; +import { Text, View, ViewPropTypes, StyleSheet } from 'react-native'; const getIcon = (icon, highlighted) => { switch (icon) { @@ -30,7 +30,7 @@ export default class TweetAction extends React.Component { displayMode: PropTypes.oneOf(['like', 'reply', 'retweet', 'directMessage']), highlighted: PropTypes.bool, onPress: PropTypes.func, - style: PropTypes.object + style: ViewPropTypes.style }; render() { diff --git a/packages/benchmarks/src/components/TweetActionsBar/index.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/TweetActionsBar.js similarity index 89% rename from packages/benchmarks/src/components/TweetActionsBar/index.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/TweetActionsBar.js index 19f8b2c91..b91caca49 100644 --- a/packages/benchmarks/src/components/TweetActionsBar/index.js +++ b/packages/benchmarks/src/implementations/react-native-web/Tweet/TweetActionsBar.js @@ -1,6 +1,6 @@ import PropTypes from 'prop-types'; -import TweetAction from '../TweetAction'; -import { View, StyleSheet } from 'react-native'; +import TweetAction from './TweetAction'; +import { View, ViewPropTypes, StyleSheet } from 'react-native'; import React, { PureComponent } from 'react'; const actionNames = ['reply', 'retweet', 'like', 'directMessage']; @@ -16,7 +16,7 @@ export default class TweetActionsBar extends PureComponent { onPress: PropTypes.func }) ), - style: PropTypes.object + style: ViewPropTypes.style }; render() { diff --git a/packages/benchmarks/src/components/TweetText/index.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/TweetText.js similarity index 89% rename from packages/benchmarks/src/components/TweetText/index.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/TweetText.js index df922546f..4282788bf 100644 --- a/packages/benchmarks/src/components/TweetText/index.js +++ b/packages/benchmarks/src/implementations/react-native-web/Tweet/TweetText.js @@ -1,6 +1,6 @@ -import AppText from '../AppText'; +import AppText from './AppText'; import React from 'react'; -import TweetTextPart from '../TweetTextPart'; +import TweetTextPart from './TweetTextPart'; import { array, number, string } from 'prop-types'; class TweetText extends React.Component { diff --git a/packages/benchmarks/src/components/TweetTextPart/index.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/TweetTextPart.js similarity index 97% rename from packages/benchmarks/src/components/TweetTextPart/index.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/TweetTextPart.js index 6b15109f9..d758cc4b5 100644 --- a/packages/benchmarks/src/components/TweetTextPart/index.js +++ b/packages/benchmarks/src/implementations/react-native-web/Tweet/TweetTextPart.js @@ -2,7 +2,7 @@ import { Image, StyleSheet, Text } from 'react-native'; import PropTypes from 'prop-types'; import React from 'react'; -import theme from '../theme'; +import theme from './theme'; const createTextEntity = ({ part }) => {`${part.prefix}${part.text}`}; @@ -106,7 +106,7 @@ const styles = StyleSheet.create({ width: '1.25em', paddingRight: '0.05em', paddingLeft: '0.1em', - verticalAlign: '-0.2em' + textAlignVertical: '-0.2em' } }); diff --git a/packages/benchmarks/src/components/UserAvatar/index.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/UserAvatar.js similarity index 88% rename from packages/benchmarks/src/components/UserAvatar/index.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/UserAvatar.js index 831bc0515..017f3f1ad 100644 --- a/packages/benchmarks/src/components/UserAvatar/index.js +++ b/packages/benchmarks/src/implementations/react-native-web/Tweet/UserAvatar.js @@ -1,8 +1,8 @@ -import AspectRatio from '../AspectRatio'; +import AspectRatio from './AspectRatio'; import PropTypes from 'prop-types'; -import { Image, StyleSheet } from 'react-native'; +import { Image, StyleSheet, ViewPropTypes } from 'react-native'; import React, { PureComponent } from 'react'; -import theme from '../theme'; +import theme from './theme'; class UserAvatar extends PureComponent { static displayName = 'UserAvatar'; @@ -10,7 +10,7 @@ class UserAvatar extends PureComponent { static propTypes = { accessibilityLabel: PropTypes.string, circle: PropTypes.bool, - style: PropTypes.object, + style: ViewPropTypes.style, uri: PropTypes.string }; diff --git a/packages/benchmarks/src/components/UserNames/index.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/UserNames.js similarity index 90% rename from packages/benchmarks/src/components/UserNames/index.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/UserNames.js index a29d6c143..34600f03d 100644 --- a/packages/benchmarks/src/components/UserNames/index.js +++ b/packages/benchmarks/src/implementations/react-native-web/Tweet/UserNames.js @@ -1,6 +1,6 @@ -import AppText from '../AppText'; +import AppText from './AppText'; import PropTypes from 'prop-types'; -import { StyleSheet } from 'react-native'; +import { StyleSheet, ViewPropTypes } from 'react-native'; import React, { PureComponent } from 'react'; class UserNames extends PureComponent { @@ -11,7 +11,7 @@ class UserNames extends PureComponent { layout: PropTypes.oneOf(['nowrap', 'stack']), onPress: PropTypes.func, screenName: PropTypes.string, - style: PropTypes.object + style: ViewPropTypes.style }; static defaultProps = { diff --git a/packages/benchmarks/src/components/Tweet/index.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/index.js similarity index 93% rename from packages/benchmarks/src/components/Tweet/index.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/index.js index 928d08fb3..49752eb4b 100644 --- a/packages/benchmarks/src/components/Tweet/index.js +++ b/packages/benchmarks/src/implementations/react-native-web/Tweet/index.js @@ -1,13 +1,13 @@ -import AspectRatio from '../AspectRatio'; -import GridView from '../GridView'; +import AspectRatio from './AspectRatio'; +import GridView from './GridView'; import PropTypes from 'prop-types'; -import TweetActionsBar from '../TweetActionsBar'; -import TweetText from '../TweetText'; -import UserAvatar from '../UserAvatar'; -import UserNames from '../UserNames'; +import TweetActionsBar from './TweetActionsBar'; +import TweetText from './TweetText'; +import UserAvatar from './UserAvatar'; +import UserNames from './UserNames'; import { Image, StyleSheet, Text, View } from 'react-native'; import React, { Component } from 'react'; -import theme from '../theme'; +import theme from './theme'; export class Tweet extends Component { static displayName = 'Tweet'; diff --git a/packages/benchmarks/src/components/Icons/styles.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/styles.js similarity index 87% rename from packages/benchmarks/src/components/Icons/styles.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/styles.js index 380d7594d..217e4a60b 100644 --- a/packages/benchmarks/src/components/Icons/styles.js +++ b/packages/benchmarks/src/implementations/react-native-web/Tweet/styles.js @@ -8,7 +8,7 @@ const styles = StyleSheet.create({ maxWidth: '100%', position: 'relative', userSelect: 'none', - verticalAlign: 'text-bottom' + textAlignVertical: 'text-bottom' } }); diff --git a/packages/benchmarks/src/components/theme.js b/packages/benchmarks/src/implementations/react-native-web/Tweet/theme.js similarity index 100% rename from packages/benchmarks/src/components/theme.js rename to packages/benchmarks/src/implementations/react-native-web/Tweet/theme.js diff --git a/packages/benchmarks/src/implementations/react-native-web/index.js b/packages/benchmarks/src/implementations/react-native-web/index.js new file mode 100644 index 000000000..b6484e015 --- /dev/null +++ b/packages/benchmarks/src/implementations/react-native-web/index.js @@ -0,0 +1,11 @@ +import Box from './Box'; +import Dot from './Dot'; +import Tweet from './Tweet'; +import { View } from 'react-native'; + +export default { + Box, + Dot, + Tweet, + View +}; diff --git a/packages/benchmarks/src/components/Box/reactxp.js b/packages/benchmarks/src/implementations/reactxp/Box.js similarity index 100% rename from packages/benchmarks/src/components/Box/reactxp.js rename to packages/benchmarks/src/implementations/reactxp/Box.js diff --git a/packages/benchmarks/src/implementations/reactxp/Dot.js b/packages/benchmarks/src/implementations/reactxp/Dot.js new file mode 100644 index 000000000..6c1c49fb9 --- /dev/null +++ b/packages/benchmarks/src/implementations/reactxp/Dot.js @@ -0,0 +1,34 @@ +/* eslint-disable react/prop-types */ +import React from 'react'; +import { Styles, View } from 'reactxp'; + +const Dot = ({ size, x, y, children, color }) => ( + +); + +const styles = { + root: Styles.createViewStyle({ + position: 'absolute', + cursor: 'pointer', + width: 0, + height: 0, + borderColor: 'transparent', + borderStyle: 'solid', + borderTopWidth: 0 + }) +}; + +export default Dot; diff --git a/packages/benchmarks/src/reactxp.js b/packages/benchmarks/src/implementations/reactxp/index.js similarity index 54% rename from packages/benchmarks/src/reactxp.js rename to packages/benchmarks/src/implementations/reactxp/index.js index 8e61561e1..e4c8da79b 100644 --- a/packages/benchmarks/src/reactxp.js +++ b/packages/benchmarks/src/implementations/reactxp/index.js @@ -1,7 +1,9 @@ -import Box from './components/Box/reactxp'; +import Box from './Box'; +import Dot from './Dot'; import { View } from 'reactxp'; export default { Box, + Dot, View }; diff --git a/packages/benchmarks/src/components/Box/styled-components.js b/packages/benchmarks/src/implementations/styled-components/Box.js similarity index 93% rename from packages/benchmarks/src/components/Box/styled-components.js rename to packages/benchmarks/src/implementations/styled-components/Box.js index b25e9e1ac..abba3ffa6 100644 --- a/packages/benchmarks/src/components/Box/styled-components.js +++ b/packages/benchmarks/src/implementations/styled-components/Box.js @@ -1,5 +1,5 @@ import styled from 'styled-components'; -import View from '../View/styled-components'; +import View from './View'; const getColor = color => { switch (color) { diff --git a/packages/benchmarks/src/implementations/styled-components/Dot.js b/packages/benchmarks/src/implementations/styled-components/Dot.js new file mode 100644 index 000000000..6cebbe238 --- /dev/null +++ b/packages/benchmarks/src/implementations/styled-components/Dot.js @@ -0,0 +1,24 @@ +/* eslint-disable react/prop-types */ +import styled from 'styled-components'; +import View from './View'; + +const Dot = styled(View).attrs({ + style: props => ({ + left: `${props.x}px`, + top: `${props.y}px`, + borderRightWidth: `${props.size / 2}px`, + borderBottomWidth: `${props.size / 2}px`, + borderLeftWidth: `${props.size / 2}px`, + borderBottomColor: `${props.color}` + }) +})` + position: absolute; + cursor: pointer; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-top-width: 0; +`; + +export default Dot; diff --git a/packages/benchmarks/src/components/View/styled-components.js b/packages/benchmarks/src/implementations/styled-components/View.js similarity index 100% rename from packages/benchmarks/src/components/View/styled-components.js rename to packages/benchmarks/src/implementations/styled-components/View.js diff --git a/packages/benchmarks/src/implementations/styled-components/index.js b/packages/benchmarks/src/implementations/styled-components/index.js new file mode 100644 index 000000000..cdb1735ba --- /dev/null +++ b/packages/benchmarks/src/implementations/styled-components/index.js @@ -0,0 +1,9 @@ +import Box from './Box'; +import Dot from './Dot'; +import View from './View'; + +export default { + Box, + Dot, + View +}; diff --git a/packages/benchmarks/src/components/Box/styletron.js b/packages/benchmarks/src/implementations/styletron/Box.js similarity index 95% rename from packages/benchmarks/src/components/Box/styletron.js rename to packages/benchmarks/src/implementations/styletron/Box.js index 33f97e4e0..b27fe669c 100644 --- a/packages/benchmarks/src/components/Box/styletron.js +++ b/packages/benchmarks/src/implementations/styletron/Box.js @@ -1,7 +1,7 @@ /* eslint-disable react/prop-types */ import { injectStylePrefixed } from 'styletron-utils'; import React from 'react'; -import View, { styletron } from '../View/styletron'; +import View, { styletron } from './View'; const Box = ({ color, fixed = false, layout = 'column', outer = false, ...other }) => ( ( +
+ {children} +
+); + +const styles = { + root: injectStylePrefixed(styletron, { + position: 'absolute', + cursor: 'pointer', + width: 0, + height: 0, + borderColor: 'transparent', + borderStyle: 'solid', + borderTopWidth: 0 + }) +}; + +export default Dot; diff --git a/packages/benchmarks/src/components/View/styletron.js b/packages/benchmarks/src/implementations/styletron/View.js similarity index 100% rename from packages/benchmarks/src/components/View/styletron.js rename to packages/benchmarks/src/implementations/styletron/View.js diff --git a/packages/benchmarks/src/implementations/styletron/index.js b/packages/benchmarks/src/implementations/styletron/index.js new file mode 100644 index 000000000..cdb1735ba --- /dev/null +++ b/packages/benchmarks/src/implementations/styletron/index.js @@ -0,0 +1,9 @@ +import Box from './Box'; +import Dot from './Dot'; +import View from './View'; + +export default { + Box, + Dot, + View +}; diff --git a/packages/benchmarks/src/index.js b/packages/benchmarks/src/index.js new file mode 100644 index 000000000..e829fd3bb --- /dev/null +++ b/packages/benchmarks/src/index.js @@ -0,0 +1,99 @@ +import aphrodite from './implementations/aphrodite'; +import cssModules from './implementations/css-modules'; +import emotion from './implementations/emotion'; +import jss from './implementations/jss'; +import glamor from './implementations/glamor'; +import inlineStyles from './implementations/inline-styles'; +import radium from './implementations/radium'; +import reactNativeWeb from './implementations/react-native-web'; +import reactxp from './implementations/reactxp'; +import styledComponents from './implementations/styled-components'; +import styletron from './implementations/styletron'; + +import renderDeepTree from './cases/renderDeepTree'; +import renderSierpinskiTriangle from './cases/renderSierpinskiTriangle'; +// import renderTweet from './cases/renderTweet'; +import renderWideTree from './cases/renderWideTree'; + +const testMatrix = { + 'inline-styles': [ + () => renderDeepTree('inline-styles', inlineStyles), + () => renderWideTree('inline-styles', inlineStyles), + () => renderSierpinskiTriangle('inline-styles', inlineStyles) + ], + 'css-modules': [ + () => renderDeepTree('css-modules', cssModules), + () => renderWideTree('css-modules', cssModules) + ], + 'react-native-web': [ + () => renderDeepTree('react-native-web', reactNativeWeb), + () => renderWideTree('react-native-web', reactNativeWeb), + () => renderSierpinskiTriangle('react-native-web', reactNativeWeb) + // () => renderTweet('react-native-web', reactNativeWeb) + ], + + aphrodite: [ + () => renderDeepTree('aphrodite', aphrodite), + () => renderWideTree('aphrodite', aphrodite) + ], + emotion: [ + () => renderDeepTree('emotion', emotion), + () => renderWideTree('emotion', emotion), + () => renderSierpinskiTriangle('emotion', emotion) + ], + glamor: [ + () => renderDeepTree('glamor', glamor), + () => renderWideTree('glamor', glamor) + // disabled: glamor starts to lock up the browser + // () => renderSierpinskiTriangle('glamor', glamor) + ], + jss: [() => renderDeepTree('jss', jss), () => renderWideTree('jss', jss)], + radium: [ + () => renderDeepTree('radium', radium), + () => renderWideTree('radium', radium), + () => renderSierpinskiTriangle('radium', radium) + ], + reactxp: [ + () => renderDeepTree('reactxp', reactxp), + () => renderWideTree('reactxp', reactxp), + () => renderSierpinskiTriangle('reactxp', reactxp) + ], + 'styled-components': [ + () => renderDeepTree('styled-components', styledComponents), + () => renderWideTree('styled-components', styledComponents), + () => renderSierpinskiTriangle('styled-components', styledComponents) + ], + styletron: [ + () => renderDeepTree('styletron', styletron), + () => renderWideTree('styletron', styletron), + () => renderSierpinskiTriangle('styletron', styletron) + ] +}; + +const allTests = Object.keys(testMatrix).reduce((acc, curr) => { + testMatrix[curr].forEach(test => { + acc.push(test); + }); + return acc; +}, []); + +const tests = []; + +if (window.location.search) { + window.location.search + .slice(1) + .split(',') + .forEach(implementation => { + if (Array.isArray(testMatrix[implementation])) { + tests.push(...testMatrix[implementation]); + } else { + throw new Error(`Benchmark for ${implementation} not found`); + } + }); +} else { + tests.push(...allTests); +} + +tests.push(() => () => Promise.resolve(console.log('Done'))); + +tests.reduce((promise, test) => promise.then(test()), Promise.resolve()); diff --git a/packages/benchmarks/src/jss.js b/packages/benchmarks/src/jss.js deleted file mode 100644 index 83867ad81..000000000 --- a/packages/benchmarks/src/jss.js +++ /dev/null @@ -1,9 +0,0 @@ -import Box from './components/Box/jss'; -import View from './components/View/jss'; - -const api = { - Box, - View -}; - -export default api; diff --git a/packages/benchmarks/src/radium.js b/packages/benchmarks/src/radium.js deleted file mode 100644 index ecfe03069..000000000 --- a/packages/benchmarks/src/radium.js +++ /dev/null @@ -1,9 +0,0 @@ -import Box from './components/Box/radium'; -import View from './components/View/radium'; - -const api = { - Box, - View -}; - -export default api; diff --git a/packages/benchmarks/src/react-native.js b/packages/benchmarks/src/react-native.js deleted file mode 100644 index 94d87aff3..000000000 --- a/packages/benchmarks/src/react-native.js +++ /dev/null @@ -1,9 +0,0 @@ -import Box from './components/Box/react-native'; -import Tweet from './components/Tweet'; -import { View } from 'react-native'; - -export default { - Box, - Tweet, - View -}; diff --git a/packages/benchmarks/src/styled-components.js b/packages/benchmarks/src/styled-components.js deleted file mode 100644 index 54272a8a1..000000000 --- a/packages/benchmarks/src/styled-components.js +++ /dev/null @@ -1,7 +0,0 @@ -import Box from './components/Box/styled-components'; -import View from './components/View/styled-components'; - -export default { - Box, - View -}; diff --git a/packages/benchmarks/src/styletron.js b/packages/benchmarks/src/styletron.js deleted file mode 100644 index 645380d57..000000000 --- a/packages/benchmarks/src/styletron.js +++ /dev/null @@ -1,7 +0,0 @@ -import Box from './components/Box/styletron'; -import View from './components/View/styletron'; - -export default { - Box, - View -}; diff --git a/packages/benchmarks/webpack.config.js b/packages/benchmarks/webpack.config.js index 9add3251f..ec1229c84 100644 --- a/packages/benchmarks/webpack.config.js +++ b/packages/benchmarks/webpack.config.js @@ -1,10 +1,10 @@ -const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; +// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const path = require('path'); const webpack = require('webpack'); module.exports = { context: __dirname, - entry: './index', + entry: ['babel-polyfill', './src/index'], output: { path: path.resolve(__dirname, 'dist'), filename: 'performance.bundle.js' @@ -34,10 +34,10 @@ module.exports = { ] }, plugins: [ - new BundleAnalyzerPlugin({ - analyzerMode: 'static', - openAnalyzer: false - }), + // new BundleAnalyzerPlugin({ + // analyzerMode: 'static', + // openAnalyzer: false + // }), new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production') }), diff --git a/yarn.lock b/yarn.lock index d763899aa..5a8c838dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2674,6 +2674,22 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" +d3-color@1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.3.tgz#bc7643fca8e53a8347e2fbdaffa236796b58509b" + +d3-interpolate@1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6" + dependencies: + d3-color "1" + +d3-scale-chromatic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-1.1.1.tgz#811406e8e09dab78a49dac4a32047d5d3edd0c44" + dependencies: + d3-interpolate "1" + d@1: version "1.0.0" resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" From 41d90e0238a808fca9536e1d123e0ce982fa9ca6 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 30 Dec 2017 14:01:58 -0800 Subject: [PATCH 047/153] [fix] ReactDOM hydration warnings in development Don't try to hydrate from SSR HTML during development. Fix #745 --- .../src/apis/AppRegistry/renderApplication.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/react-native-web/src/apis/AppRegistry/renderApplication.js b/packages/react-native-web/src/apis/AppRegistry/renderApplication.js index 6668420c5..f3ee075ee 100644 --- a/packages/react-native-web/src/apis/AppRegistry/renderApplication.js +++ b/packages/react-native-web/src/apis/AppRegistry/renderApplication.js @@ -9,12 +9,15 @@ * @flow */ +import AppContainer from './AppContainer'; import invariant from 'fbjs/lib/invariant'; import hydrate from '../../modules/hydrate'; -import AppContainer from './AppContainer'; +import render from '../../modules/render'; import StyleSheet from '../../apis/StyleSheet'; import React, { type ComponentType } from 'react'; +const renderFn = process.env.NODE_ENV !== 'production' ? render : hydrate; + export default function renderApplication( RootComponent: ComponentType, initialProps: Props, @@ -22,7 +25,7 @@ export default function renderApplication( ) { invariant(rootTag, 'Expect to have a valid rootTag, instead got ', rootTag); - hydrate( + renderFn( , From af47d5f414ed2155180acbda4dff30ccbc5ac103 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 30 Dec 2017 14:06:33 -0800 Subject: [PATCH 048/153] [fix] React warning when using hitSlop prop Make sure the hitSlop element has a 'key'. Fix #743 --- packages/react-native-web/src/components/View/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/react-native-web/src/components/View/index.js b/packages/react-native-web/src/components/View/index.js index 09d7e10d1..decc0ebe3 100644 --- a/packages/react-native-web/src/components/View/index.js +++ b/packages/react-native-web/src/components/View/index.js @@ -65,8 +65,7 @@ class View extends Component { if (hitSlop) { const hitSlopStyle = calculateHitSlopStyle(hitSlop); const hitSlopChild = createElement('span', { style: [styles.hitSlop, hitSlopStyle] }); - otherProps.children = React.Children.toArray(otherProps.children); - otherProps.children.unshift(hitSlopChild); + otherProps.children = React.Children.toArray([ hitSlopChild, otherProps.children ]); } return createElement('div', otherProps); From b85a7062be1d8e478525965362ddb983c2f4d869 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 30 Dec 2017 14:11:54 -0800 Subject: [PATCH 049/153] Fix formatting of benchmarks table --- packages/benchmarks/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/benchmarks/README.md b/packages/benchmarks/README.md index d162e7e2c..6f63781bf 100644 --- a/packages/benchmarks/README.md +++ b/packages/benchmarks/README.md @@ -37,7 +37,7 @@ Typical render timings*: mean ± two standard deviations. Other libraries | Implementation | Deep tree (ms) | Wide tree (ms) | Triangle (ms) | -| :--- | ---: | ---: | +| :--- | ---: | ---: | ---: | | `styletron@3.0.0-rc.5` | `83.53` `±33.55` | `153.12` `±39.13` | `56.47` `±24.22` | | `aphrodite@1.2.5` | `88.23` `±31.22` | `164.03` `±34.70` | - | | `glamor@2.20.40` | `110.09` `±34.20` | `182.06` `±50.39` | ‡ | From 85aaa39206aedd90b6c2a282132b0b73fa553022 Mon Sep 17 00:00:00 2001 From: Liron Yahdav Date: Sat, 30 Dec 2017 14:18:55 -0800 Subject: [PATCH 050/153] [fix] i18n of styles when using 'setNativeProps' Close #732 --- .../react-native-web/src/components/View/index.js | 2 +- .../src/modules/NativeMethodsMixin/index.js | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/react-native-web/src/components/View/index.js b/packages/react-native-web/src/components/View/index.js index decc0ebe3..657b0d0bf 100644 --- a/packages/react-native-web/src/components/View/index.js +++ b/packages/react-native-web/src/components/View/index.js @@ -65,7 +65,7 @@ class View extends Component { if (hitSlop) { const hitSlopStyle = calculateHitSlopStyle(hitSlop); const hitSlopChild = createElement('span', { style: [styles.hitSlop, hitSlopStyle] }); - otherProps.children = React.Children.toArray([ hitSlopChild, otherProps.children ]); + otherProps.children = React.Children.toArray([hitSlopChild, otherProps.children]); } return createElement('div', otherProps); diff --git a/packages/react-native-web/src/modules/NativeMethodsMixin/index.js b/packages/react-native-web/src/modules/NativeMethodsMixin/index.js index 243b21d9f..6b500e56a 100644 --- a/packages/react-native-web/src/modules/NativeMethodsMixin/index.js +++ b/packages/react-native-web/src/modules/NativeMethodsMixin/index.js @@ -102,6 +102,10 @@ const NativeMethodsMixin = { * the initial styles from the DOM node and merge them with incoming props. */ setNativeProps(nativeProps: Object) { + if (!nativeProps) { + return; + } + // Copy of existing DOM state const node = findNodeHandle(this); const nodeStyle = node.style; @@ -117,10 +121,14 @@ const NativeMethodsMixin = { style[toCamelCase(property)] = nodeStyle.getPropertyValue(property); } } - const domStyleProps = { classList, style }; + const domStyleProps = { classList, style }; + const props = { + ...nativeProps, + style: i18nStyle(nativeProps.style) + }; // Next DOM state - const domProps = createDOMProps(null, i18nStyle(nativeProps), style => + const domProps = createDOMProps(null, props, style => StyleRegistry.resolveStateful(style, domStyleProps, { i18n: false }) ); UIManager.updateView(node, domProps, this); From bff3f50ae0ee18e2051828bdb067197e4cff8a3e Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 30 Dec 2017 14:32:51 -0800 Subject: [PATCH 051/153] Fix release script --- .github/CONTRIBUTING.md | 15 ++++++++++++++ package.json | 9 ++++++-- scripts/release/publish.js | 42 ++++++++++++++++++++++++++++---------- website/package.json | 2 +- 4 files changed, 54 insertions(+), 14 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 72b442b56..a67d05020 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -130,3 +130,18 @@ After you have submitted your pull request, we'll try to get back to you as soon as possible. We may suggest some changes or improvements. Thank you for contributing! + +## Releases + +To commit, publish, and push a final version: + +``` +yarn release +``` + +Release candidates or versions that you'd like to publish to npm, but do not +want to produce a commit and push it to GitHub: + +``` +yarn release --skip-git +``` diff --git a/package.json b/package.json index b554dcde7..2f2f04151 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,9 @@ "lint": "yarn lint:check --fix", "lint:check": "eslint packages scripts website", "precommit": "lint-staged", - "release": "yarn test && yarn build && node ./scripts/release/publish.js && yarn docs:release", + "prerelease": "yarn test && yarn compile", + "release": "node ./scripts/release/publish.js", + "postrelease": "yarn docs:release", "test": "yarn flow && yarn lint:check && yarn jest" }, "devDependencies": { @@ -43,7 +45,10 @@ "react-dom": "^16.2.0", "react-test-renderer": "^16.2.0" }, - "workspaces": ["packages/*", "website"], + "workspaces": [ + "packages/*", + "website" + ], "lint-staged": { "**/*.js": [ "fmt:cmd", diff --git a/scripts/release/publish.js b/scripts/release/publish.js index 1ff45f8c6..202ce9905 100644 --- a/scripts/release/publish.js +++ b/scripts/release/publish.js @@ -4,16 +4,36 @@ const execSync = require('child_process').execSync; -const version = process.argv.slice(2)[0]; +const args = process.argv.slice(2); +const version = args[0]; +const skipGit = args[1] === '--skip-git'; + +const releaseCommands = [ + // use lerna to bump versions and dependencies + `./node_modules/.bin/lerna publish --skip-git --skip-npm --repo-version ${version} --yes` +]; + +if (!skipGit) { + releaseCommands.push( + ...[ + // add changes + 'git add .', + // commit + `git commit -m "${version}"`, + // tag + `git tag -m ${version} "${version}"` + ] + ); +} -console.log(`Publishing ${version}`); -// use lerna to bump versions and dependencies -execSync(`./node_modules/.bin/lerna publish --skip-git --skip-npm --repo-version ${version} --yes`); -// add changes -execSync('git add .'); -// commit and tag -execSync(`git commit -m "${version}" && git tag -m ${version} "${version}"`); // publish to npm -execSync('yarn publish'); -// push to github -execSync('git push --tags origin master'); +releaseCommands.push('cd packages/babel-plugin-react-native-web && npm publish'); +releaseCommands.push('cd ../react-native-web && npm publish'); + +if (!skipGit) { + // push to github + releaseCommands.push('git push --tags origin master'); +} + +console.log(`Publishing ${version}`); +execSync(releaseCommands.join(' && ')); diff --git a/website/package.json b/website/package.json index 3427ef6bc..95b2d97aa 100644 --- a/website/package.json +++ b/website/package.json @@ -3,7 +3,7 @@ "name": "website", "version": "0.2.2", "scripts": { - "build": "yarn && build-storybook -o ./dist -c ./storybook/.storybook", + "build": "build-storybook -o ./dist -c ./storybook/.storybook", "start": "start-storybook -p 9001 -c ./storybook/.storybook", "release": "yarn build && git checkout gh-pages && rm -rf ../storybook && mv dist ../storybook && git add -A && git commit -m \"Storybook deploy\" && git push origin gh-pages && git checkout -" }, From 0d0fdc15ac485f73718eef3cf47ff84c5f57456c Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 30 Dec 2017 18:00:33 -0800 Subject: [PATCH 052/153] Minor docs fixes --- packages/benchmarks/README.md | 5 +++-- .../storybook/1-components/ScrollView/ScrollViewScreen.js | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/benchmarks/README.md b/packages/benchmarks/README.md index 6f63781bf..9eaa82931 100644 --- a/packages/benchmarks/README.md +++ b/packages/benchmarks/README.md @@ -13,7 +13,7 @@ URL, e.g., `?css-modules,react-native-web`. These benchmarks are crude approximations of extreme cases that libraries may encounter. The deep and wide tree cases look at the performance of mounting and -rendering large trees of styled elements. The Triangle cases looks at the +rendering large trees of styled elements. The Triangle case looks at the performance of repeated style updates to a large mounted tree. Some libraries must inject new styles for each "dynamic style", whereas others may not. Libraries without support for dynamic styles (i.e., they rely on user-authored @@ -52,4 +52,5 @@ These results indicate that render times when using `react-native-web`, significantly faster than alternatives. *MacBook Pro (13-inch, Early 2011); 2.3 GHz Intel Core i5; 8 GB 1333 MHz DDR3. Google Chrome 62. -‡Glamor essentially crashes + +‡Glamor essentially crashes the browser tab. diff --git a/website/storybook/1-components/ScrollView/ScrollViewScreen.js b/website/storybook/1-components/ScrollView/ScrollViewScreen.js index fa82fa01b..b37dae1c3 100644 --- a/website/storybook/1-components/ScrollView/ScrollViewScreen.js +++ b/website/storybook/1-components/ScrollView/ScrollViewScreen.js @@ -151,7 +151,7 @@ const ScrollViewScreen = () => ( }} From 6f10f6be9c3896a2124c17e9ccd0f8eafb9b99f4 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 30 Dec 2017 19:06:03 -0800 Subject: [PATCH 053/153] [fix] AppRegistry.unmountApplicationComponentAtRootTag Fixes the bad import of a named export rather than the default export. --- packages/react-native-web/src/apis/AppRegistry/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native-web/src/apis/AppRegistry/index.js b/packages/react-native-web/src/apis/AppRegistry/index.js index 9a0061971..b060d84c5 100644 --- a/packages/react-native-web/src/apis/AppRegistry/index.js +++ b/packages/react-native-web/src/apis/AppRegistry/index.js @@ -11,7 +11,7 @@ */ import invariant from 'fbjs/lib/invariant'; -import { unmountComponentAtNode } from '../../modules/unmountComponentAtNode'; +import unmountComponentAtNode from '../../modules/unmountComponentAtNode'; import renderApplication, { getApplication } from './renderApplication'; import type { ComponentType } from 'react'; From 46e77d0b00f616d1a17160d98482df46adf5008d Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 30 Dec 2017 21:00:20 -0800 Subject: [PATCH 054/153] Change babel presets Tune the compiled output to reduce file size. --- .babelrc | 30 ++++++++++- package.json | 5 ++ packages/benchmarks/webpack.config.js | 8 ++- packages/react-native-web/package.json | 1 + packages/react-native-web/src/index.js | 4 +- packages/react-native-web/src/module.js | 72 ------------------------- website/guides/getting-started.md | 20 ++----- website/package.json | 1 + yarn.lock | 2 +- 9 files changed, 49 insertions(+), 94 deletions(-) diff --git a/.babelrc b/.babelrc index 2e2e0fb30..69f760fd1 100644 --- a/.babelrc +++ b/.babelrc @@ -1,8 +1,34 @@ { "presets": [ - "react-native" + [ + "babel-preset-env", + { + "loose": true, + "exclude": ["transform-es2015-typeof-symbol"], + "targets": { + "browsers": [ + "chrome 38", + "android 4", + "firefox 40", + "ios_saf 7", + "safari 7", + "ie 10", + "ie_mob 11", + "edge 12", + "opera 16", + "op_mini 12", + "and_uc 9", + "and_chr 38" + ] + } + } + ], + "babel-preset-react", + "babel-preset-flow" ], "plugins": [ - [ "transform-react-remove-prop-types", { "mode": "wrap" } ] + ["babel-plugin-transform-class-properties", { "loose": true }], + ["babel-plugin-transform-object-rest-spread", { "useBuiltIns": true }], + ["babel-plugin-transform-react-remove-prop-types", { "mode": "wrap" } ] ] } diff --git a/package.json b/package.json index 2f2f04151..28557062f 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,12 @@ "babel-core": "^6.26.0", "babel-eslint": "^8.0.3", "babel-loader": "^7.1.2", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.10", + "babel-preset-env": "^1.6.1", + "babel-preset-flow": "^6.23.0", + "babel-preset-react": "^6.24.1", "babel-preset-react-native": "^4.0.0", "caniuse-api": "^2.0.0", "del-cli": "^1.1.0", diff --git a/packages/benchmarks/webpack.config.js b/packages/benchmarks/webpack.config.js index ec1229c84..8404de708 100644 --- a/packages/benchmarks/webpack.config.js +++ b/packages/benchmarks/webpack.config.js @@ -2,11 +2,13 @@ const path = require('path'); const webpack = require('webpack'); +const appDirectory = path.resolve(__dirname); + module.exports = { context: __dirname, entry: ['babel-polyfill', './src/index'], output: { - path: path.resolve(__dirname, 'dist'), + path: path.resolve(appDirectory, 'dist'), filename: 'performance.bundle.js' }, module: { @@ -23,7 +25,9 @@ module.exports = { }, { test: /\.js$/, - exclude: /node_modules/, + include: [ + path.resolve(appDirectory, 'src'), + ], use: { loader: 'babel-loader', options: { diff --git a/packages/react-native-web/package.json b/packages/react-native-web/package.json index 0f85d3a4c..00cd58b99 100644 --- a/packages/react-native-web/package.json +++ b/packages/react-native-web/package.json @@ -3,6 +3,7 @@ "version": "0.2.2", "description": "React Native for Web", "main": "dist/index.js", + "module": "dist/module.js", "files": [ "dist", "jest", diff --git a/packages/react-native-web/src/index.js b/packages/react-native-web/src/index.js index d7dbe89b3..10d47cc95 100644 --- a/packages/react-native-web/src/index.js +++ b/packages/react-native-web/src/index.js @@ -1,2 +1,2 @@ -import ReactNative from './module'; -module.exports = ReactNative; +import * as ReactNative from './module'; +export default ReactNative; diff --git a/packages/react-native-web/src/module.js b/packages/react-native-web/src/module.js index f0ac07fac..fa585deb2 100644 --- a/packages/react-native-web/src/module.js +++ b/packages/react-native-web/src/module.js @@ -128,75 +128,3 @@ export { TextPropTypes, ViewPropTypes }; - -const ReactNative = { - // top-level API - findNodeHandle, - render, - unmountComponentAtNode, - - // modules - createElement, - NativeModules, - processColor, - - // APIs - Animated, - AppRegistry, - AppState, - AsyncStorage, - BackHandler, - Clipboard, - Dimensions, - Easing, - I18nManager, - InteractionManager, - Keyboard, - Linking, - NetInfo, - PanResponder, - PixelRatio, - Platform, - StyleSheet, - UIManager, - Vibration, - - // components - ActivityIndicator, - ART, - Button, - CheckBox, - FlatList, - Image, - ImageBackground, - KeyboardAvoidingView, - ListView, - Modal, - Picker, - ProgressBar, - RefreshControl, - SafeAreaView, - ScrollView, - SectionList, - Slider, - StatusBar, - Switch, - Text, - TextInput, - Touchable, - TouchableHighlight, - TouchableNativeFeedback, - TouchableOpacity, - TouchableWithoutFeedback, - View, - VirtualizedList, - - // propTypes - ColorPropType, - EdgeInsetsPropType, - PointPropType, - TextPropTypes, - ViewPropTypes -}; - -export default ReactNative; diff --git a/website/guides/getting-started.md b/website/guides/getting-started.md index e2048f2a7..f1d797488 100644 --- a/website/guides/getting-started.md +++ b/website/guides/getting-started.md @@ -14,20 +14,9 @@ which has built-in React Native for Web support (once you install ## Adding to an existing web app -Add the `react-native-web` plugin to your Babel configuration. This will -alias `react-native` to `react-native-web` and exclude any modules not required -by the app. - -```json -{ - "presets": [ - "react-native" - ], - "plugins": [ - "react-native-web" - ] -} -``` +Add [`babel-plugin-react-native-web`](https://www.npmjs.com/package/babel-plugin-react-native-web) +to your Babel configuration. This will alias `react-native` to +`react-native-web` and exclude any modules not required by the app. ## Client-side rendering @@ -190,10 +179,11 @@ const babelLoaderConfiguration = { loader: 'babel-loader', options: { cacheDirectory: true, + // Babel configuration (or use .babelrc) // This aliases 'react-native' to 'react-native-web' and includes only // the modules needed by the app. plugins: ['react-native-web', 'transform-runtime'], - // The 'react-native' preset is recommended (or use your own .babelrc). + // The 'react-native' preset is recommended to match React Native's packager presets: ['react-native'] } } diff --git a/website/package.json b/website/package.json index 95b2d97aa..8858f3f3c 100644 --- a/website/package.json +++ b/website/package.json @@ -15,6 +15,7 @@ "react-native-web": "^0.2.2" }, "devDependencies": { + "babel-plugin-react-native-web": "^0.2.2", "url-loader": "^0.6.2", "webpack": "^3.10.0" } diff --git a/yarn.lock b/yarn.lock index 5a8c838dc..0f528e7e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1336,7 +1336,7 @@ babel-plugin-transform-object-assign@^6.5.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-object-rest-spread@6.26.0, babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.5.0: +babel-plugin-transform-object-rest-spread@6.26.0, babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.26.0, babel-plugin-transform-object-rest-spread@^6.5.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" dependencies: From 209bd3aee1e6ed115b9c0c5b3afe2f7cefccba9f Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Mon, 1 Jan 2018 12:01:22 -0800 Subject: [PATCH 055/153] [fix] babel-plugin support for 'react-native-web' module name Now rewrites import/export/require statements from 'react-native-web'. Install the plugin in the 'benchmarks' package. --- .babelrc | 31 +-- package.json | 2 +- .../__snapshots__/index-test.js.snap | 164 +++++---------- .../src/__tests__/index-test.js | 79 ++++--- .../src/index.js | 38 ++-- packages/benchmarks/package.json | 1 + .../implementations/react-native-web/index.js | 2 - packages/benchmarks/src/index.js | 2 - packages/benchmarks/webpack.config.js | 19 +- packages/react-native-web/package.json | 2 - packages/react-native-web/src/index.js | 198 +++++++++++++++++- packages/react-native-web/src/module.js | 130 ------------ scripts/babel/preset.js | 34 +++ 13 files changed, 353 insertions(+), 349 deletions(-) delete mode 100644 packages/react-native-web/src/module.js create mode 100644 scripts/babel/preset.js diff --git a/.babelrc b/.babelrc index 69f760fd1..ebd1c7cad 100644 --- a/.babelrc +++ b/.babelrc @@ -1,34 +1,5 @@ { "presets": [ - [ - "babel-preset-env", - { - "loose": true, - "exclude": ["transform-es2015-typeof-symbol"], - "targets": { - "browsers": [ - "chrome 38", - "android 4", - "firefox 40", - "ios_saf 7", - "safari 7", - "ie 10", - "ie_mob 11", - "edge 12", - "opera 16", - "op_mini 12", - "and_uc 9", - "and_chr 38" - ] - } - } - ], - "babel-preset-react", - "babel-preset-flow" - ], - "plugins": [ - ["babel-plugin-transform-class-properties", { "loose": true }], - ["babel-plugin-transform-object-rest-spread", { "useBuiltIns": true }], - ["babel-plugin-transform-react-remove-prop-types", { "mode": "wrap" } ] + "./scripts/babel/preset" ] } diff --git a/package.json b/package.json index 28557062f..de6a36a21 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "scripts": { "benchmark": "cd packages/benchmarks && yarn benchmark", "clean": "del ./packages/*/dist", - "compile": "yarn clean && cd packages/react-native-web && babel src --optional runtime --out-dir dist --ignore \"__tests__\"", + "compile": "yarn clean && cd packages/react-native-web && babel src --out-dir dist --ignore \"**/__tests__\"", "docs:start": "cd website && yarn start", "docs:release": "cd website && yarn release", "flow": "flow", diff --git a/packages/babel-plugin-react-native-web/src/__tests__/__snapshots__/index-test.js.snap b/packages/babel-plugin-react-native-web/src/__tests__/__snapshots__/index-test.js.snap index d600ad838..308fbcc41 100644 --- a/packages/babel-plugin-react-native-web/src/__tests__/__snapshots__/index-test.js.snap +++ b/packages/babel-plugin-react-native-web/src/__tests__/__snapshots__/index-test.js.snap @@ -1,161 +1,91 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`1. Rewrite react-native paths for react-native-web 1`] = ` +exports[`export from "react-native" 1`] = ` " -import { View } from 'react-native'; +export { View } from 'react-native'; +export { ColorPropType, StyleSheet, Text, createElement } from 'react-native'; ↓ ↓ ↓ ↓ ↓ ↓ -import View from 'react-native-web/dist/components/View'; +export { default as View } from 'react-native-web/dist/components/View'; +export { default as ColorPropType } from 'react-native-web/dist/propTypes/ColorPropType'; +export { default as StyleSheet } from 'react-native-web/dist/apis/StyleSheet'; +export { default as Text } from 'react-native-web/dist/components/Text'; +export { default as createElement } from 'react-native-web/dist/modules/createElement'; " `; -exports[`2. Rewrite react-native paths for react-native-web 1`] = ` +exports[`export from "react-native-web" 1`] = ` " -import { Switch, Text, View as MyView, ViewPropTypes } from 'react-native'; +export { View } from 'react-native-web'; +export { ColorPropType, StyleSheet, Text, createElement } from 'react-native-web'; ↓ ↓ ↓ ↓ ↓ ↓ -import Switch from 'react-native-web/dist/components/Switch'; -import Text from 'react-native-web/dist/components/Text'; -import MyView from 'react-native-web/dist/components/View'; -import ViewPropTypes from 'react-native-web/dist/components/View/ViewPropTypes'; +export { default as View } from 'react-native-web/dist/components/View'; +export { default as ColorPropType } from 'react-native-web/dist/propTypes/ColorPropType'; +export { default as StyleSheet } from 'react-native-web/dist/apis/StyleSheet'; +export { default as Text } from 'react-native-web/dist/components/Text'; +export { default as createElement } from 'react-native-web/dist/modules/createElement'; " `; -exports[`3. Rewrite react-native paths for react-native-web 1`] = ` +exports[`import from "native-native" 1`] = ` " -import { createElement, Switch, StyleSheet } from 'react-native'; +import ReactNative from 'react-native'; +import { View } from 'react-native'; +import { Invalid, View as MyView, ViewPropTypes } from 'react-native'; +import * as ReactNativeModules from 'react-native'; ↓ ↓ ↓ ↓ ↓ ↓ -import createElement from 'react-native-web/dist/modules/createElement'; -import Switch from 'react-native-web/dist/components/Switch'; -import StyleSheet from 'react-native-web/dist/apis/StyleSheet'; +import ReactNative from 'react-native-web/dist/index'; +import View from 'react-native-web/dist/components/View'; +import { Invalid } from 'react-native-web/dist/index'; +import MyView from 'react-native-web/dist/components/View'; +import ViewPropTypes from 'react-native-web/dist/components/View/ViewPropTypes'; +import * as ReactNativeModules from 'react-native-web/dist/index'; " `; -exports[`4. Rewrite react-native paths for react-native-web 1`] = ` +exports[`import from "react-native-web" 1`] = ` " -import { InvalidThing, TouchableOpacity } from 'react-native'; +import { createElement } from 'react-native-web'; +import { ColorPropType, StyleSheet, View, TouchableOpacity, processColor } from 'react-native-web'; +import * as ReactNativeModules from 'react-native-web'; ↓ ↓ ↓ ↓ ↓ ↓ -import { InvalidThing } from 'react-native-web'; +import createElement from 'react-native-web/dist/modules/createElement'; +import ColorPropType from 'react-native-web/dist/propTypes/ColorPropType'; +import StyleSheet from 'react-native-web/dist/apis/StyleSheet'; +import View from 'react-native-web/dist/components/View'; import TouchableOpacity from 'react-native-web/dist/components/Touchable/TouchableOpacity'; +import processColor from 'react-native-web/dist/modules/processColor'; +import * as ReactNativeModules from 'react-native-web/dist/index'; " `; -exports[`5. Rewrite react-native paths for react-native-web 1`] = ` -" -import * as RNW from 'react-native'; - - ↓ ↓ ↓ ↓ ↓ ↓ - -import * as RNW from 'react-native-web'; -" -`; - -exports[`6. Rewrite react-native paths for react-native-web 1`] = ` -" -const { View } = require('react-native'); - - ↓ ↓ ↓ ↓ ↓ ↓ - -const View = require('react-native-web/dist/components/View'); -" -`; - -exports[`7. Rewrite react-native paths for react-native-web 1`] = ` -" -let { Switch, Text, View: MyView } = require('react-native'); - - ↓ ↓ ↓ ↓ ↓ ↓ - -let Switch = require('react-native-web/dist/components/Switch'); - -let Text = require('react-native-web/dist/components/Text'); - -let MyView = require('react-native-web/dist/components/View'); -" -`; - -exports[`8. Rewrite react-native paths for react-native-web 1`] = ` +exports[`require "react-native-web" 1`] = ` " -var { createElement, Switch, StyleSheet } = require('react-native'); +const ReactNative = require('react-native-web'); +const { createElement } = require('react-native-web'); +const { ColorPropType, StyleSheet, View, TouchableOpacity, processColor } = require('react-native-web'); ↓ ↓ ↓ ↓ ↓ ↓ -var createElement = require('react-native-web/dist/modules/createElement'); +const ReactNative = require('react-native-web'); -var Switch = require('react-native-web/dist/components/Switch'); +const createElement = require('react-native-web/dist/modules/createElement'); -var StyleSheet = require('react-native-web/dist/apis/StyleSheet'); -" -`; +const ColorPropType = require('react-native-web/dist/propTypes/ColorPropType'); -exports[`9. Rewrite react-native paths for react-native-web 1`] = ` -" -const { InvalidThing, TouchableOpacity } = require('react-native'); +const StyleSheet = require('react-native-web/dist/apis/StyleSheet'); - ↓ ↓ ↓ ↓ ↓ ↓ +const View = require('react-native-web/dist/components/View'); const TouchableOpacity = require('react-native-web/dist/components/Touchable/TouchableOpacity'); -" -`; - -exports[`10. Rewrite react-native paths for react-native-web 1`] = ` -" -export { View } from 'react-native'; - - ↓ ↓ ↓ ↓ ↓ ↓ - -export { default as View } from 'react-native-web/dist/components/View'; -" -`; - -exports[`11. Rewrite react-native paths for react-native-web 1`] = ` -" -export { Switch, Text, View as MyView, ViewPropTypes } from 'react-native'; - - ↓ ↓ ↓ ↓ ↓ ↓ - -export { default as Switch } from 'react-native-web/dist/components/Switch'; -export { default as Text } from 'react-native-web/dist/components/Text'; -export { default as MyView } from 'react-native-web/dist/components/View'; -export { default as ViewPropTypes } from 'react-native-web/dist/components/View/ViewPropTypes'; -" -`; - -exports[`12. Rewrite react-native paths for react-native-web 1`] = ` -" -export { createElement, Switch, StyleSheet } from 'react-native'; - - ↓ ↓ ↓ ↓ ↓ ↓ - -export { default as createElement } from 'react-native-web/dist/modules/createElement'; -export { default as Switch } from 'react-native-web/dist/components/Switch'; -export { default as StyleSheet } from 'react-native-web/dist/apis/StyleSheet'; -" -`; - -exports[`13. Rewrite react-native paths for react-native-web 1`] = ` -" -export { InvalidThing, TouchableOpacity } from 'react-native'; - - ↓ ↓ ↓ ↓ ↓ ↓ - -export { InvalidThing } from 'react-native-web'; -export { default as TouchableOpacity } from 'react-native-web/dist/components/Touchable/TouchableOpacity'; -" -`; - -exports[`14. Rewrite react-native paths for react-native-web 1`] = ` -" -export { default as RNW } from 'react-native'; - - ↓ ↓ ↓ ↓ ↓ ↓ -export { default as RNW } from 'react-native-web'; +const processColor = require('react-native-web/dist/modules/processColor'); " `; diff --git a/packages/babel-plugin-react-native-web/src/__tests__/index-test.js b/packages/babel-plugin-react-native-web/src/__tests__/index-test.js index 0d40a6e32..1b7623431 100644 --- a/packages/babel-plugin-react-native-web/src/__tests__/index-test.js +++ b/packages/babel-plugin-react-native-web/src/__tests__/index-test.js @@ -1,46 +1,45 @@ const plugin = require('..'); const pluginTester = require('babel-plugin-tester'); +const tests = [ + // import react-native + { + title: 'import from "native-native"', + code: `import ReactNative from 'react-native'; +import { View } from 'react-native'; +import { Invalid, View as MyView, ViewPropTypes } from 'react-native'; +import * as ReactNativeModules from 'react-native';`, + snapshot: true + }, + { + title: 'import from "react-native-web"', + code: `import { createElement } from 'react-native-web'; +import { ColorPropType, StyleSheet, View, TouchableOpacity, processColor } from 'react-native-web'; +import * as ReactNativeModules from 'react-native-web';`, + snapshot: true + }, + { + title: 'export from "react-native"', + code: `export { View } from 'react-native'; +export { ColorPropType, StyleSheet, Text, createElement } from 'react-native';`, + snapshot: true + }, + { + title: 'export from "react-native-web"', + code: `export { View } from 'react-native-web'; +export { ColorPropType, StyleSheet, Text, createElement } from 'react-native-web';`, + snapshot: true + }, + { + title: 'require "react-native-web"', + code: `const ReactNative = require('react-native-web'); +const { createElement } = require('react-native-web'); +const { ColorPropType, StyleSheet, View, TouchableOpacity, processColor } = require('react-native-web');`, + snapshot: true + } +]; + pluginTester({ plugin, - snapshot: true, - tests: [ - // import react-native - "import { View } from 'react-native';", - "import { Switch, Text, View as MyView, ViewPropTypes } from 'react-native';", - "import { createElement, Switch, StyleSheet } from 'react-native';", - "import { InvalidThing, TouchableOpacity } from 'react-native';", - "import * as RNW from 'react-native';", - - // import react-native-web - // "import { View } from 'react-native-web';", - // "import { Switch, Text, View as MyView } from 'react-native-web';", - // "import { createElement, Switch, StyleSheet } from 'react-native-web';", - // "import { InvalidThing, TouchableOpacity } from 'react-native-web';", - // "import * as RNW from 'react-native-web';", - - // require react-native - "const { View } = require('react-native');", - "let { Switch, Text, View: MyView } = require('react-native');", - "var { createElement, Switch, StyleSheet } = require('react-native');", - "const { InvalidThing, TouchableOpacity } = require('react-native');", - - // require react-native-web - // "const { View } = require('react-native-web');", - // "let { Switch, Text, View: MyView } = require('react-native-web');", - // "var { createElement, Switch, StyleSheet } = require('react-native-web');", - // "const { InvalidThing, TouchableOpacity } = require('react-native-web');", - - // export react-native - "export { View } from 'react-native';", - "export { Switch, Text, View as MyView, ViewPropTypes } from 'react-native';", - "export { createElement, Switch, StyleSheet } from 'react-native';", - "export { InvalidThing, TouchableOpacity } from 'react-native';", - "export { default as RNW } from 'react-native';", - { - code: "const RNW = require('react-native');", - output: "const RNW = require('react-native');", - snapshot: false - } - ] + tests }); diff --git a/packages/babel-plugin-react-native-web/src/index.js b/packages/babel-plugin-react-native-web/src/index.js index 0bb41c38f..4200a0e2b 100644 --- a/packages/babel-plugin-react-native-web/src/index.js +++ b/packages/babel-plugin-react-native-web/src/index.js @@ -97,17 +97,22 @@ const isReactNativeRequire = (t, node) => { t.isIdentifier(init.callee) && init.callee.name === 'require' && init.arguments.length === 1 && - init.arguments[0].value === 'react-native' + (init.arguments[0].value === 'react-native' || init.arguments[0].value === 'react-native-web') ); }; +const isReactNativeModule = ({ source, specifiers }) => + source && + (source.value === 'react-native' || source.value === 'react-native-web') && + specifiers.length; + module.exports = function({ types: t }) { return { - name: 'Rewrite react-native paths for react-native-web', + name: 'Rewrite react-native to react-native-web', visitor: { - ImportDeclaration(path) { - const { source, specifiers } = path.node; - if (source && source.value === 'react-native' && specifiers.length) { + ImportDeclaration(path, state) { + const { specifiers } = path.node; + if (isReactNativeModule(path.node)) { const imports = specifiers .map(specifier => { if (t.isImportSpecifier(specifier)) { @@ -121,16 +126,19 @@ module.exports = function({ types: t }) { ); } } - return t.importDeclaration([specifier], t.stringLiteral('react-native-web')); + return t.importDeclaration( + [specifier], + t.stringLiteral('react-native-web/dist/index') + ); }) .filter(Boolean); path.replaceWithMultiple(imports); } }, - ExportNamedDeclaration(path) { - const { source, specifiers } = path.node; - if (source && source.value === 'react-native' && specifiers.length) { + ExportNamedDeclaration(path, state) { + const { specifiers } = path.node; + if (isReactNativeModule(path.node)) { const exports = specifiers .map(specifier => { if (t.isExportSpecifier(specifier)) { @@ -145,19 +153,19 @@ module.exports = function({ types: t }) { t.stringLiteral(distLocation) ); } - return t.exportNamedDeclaration( - null, - [specifier], - t.stringLiteral('react-native-web') - ); } + return t.exportNamedDeclaration( + null, + [specifier], + t.stringLiteral('react-native-web/dist/index') + ); }) .filter(Boolean); path.replaceWithMultiple(exports); } }, - VariableDeclaration(path) { + VariableDeclaration(path, state) { if (isReactNativeRequire(t, path.node)) { const { id } = path.node.declarations[0]; const imports = id.properties diff --git a/packages/benchmarks/package.json b/packages/benchmarks/package.json index 9c3e3df00..fd01e7045 100644 --- a/packages/benchmarks/package.json +++ b/packages/benchmarks/package.json @@ -24,6 +24,7 @@ "styletron-utils": "^3.0.0-rc.3" }, "devDependencies": { + "babel-plugin-react-native-web": "^0.2.2", "css-loader": "^0.28.7", "style-loader": "^0.19.1", "webpack": "^3.10.0", diff --git a/packages/benchmarks/src/implementations/react-native-web/index.js b/packages/benchmarks/src/implementations/react-native-web/index.js index b6484e015..3d8101c20 100644 --- a/packages/benchmarks/src/implementations/react-native-web/index.js +++ b/packages/benchmarks/src/implementations/react-native-web/index.js @@ -1,11 +1,9 @@ import Box from './Box'; import Dot from './Dot'; -import Tweet from './Tweet'; import { View } from 'react-native'; export default { Box, Dot, - Tweet, View }; diff --git a/packages/benchmarks/src/index.js b/packages/benchmarks/src/index.js index e829fd3bb..a969d8452 100644 --- a/packages/benchmarks/src/index.js +++ b/packages/benchmarks/src/index.js @@ -12,7 +12,6 @@ import styletron from './implementations/styletron'; import renderDeepTree from './cases/renderDeepTree'; import renderSierpinskiTriangle from './cases/renderSierpinskiTriangle'; -// import renderTweet from './cases/renderTweet'; import renderWideTree from './cases/renderWideTree'; const testMatrix = { @@ -29,7 +28,6 @@ const testMatrix = { () => renderDeepTree('react-native-web', reactNativeWeb), () => renderWideTree('react-native-web', reactNativeWeb), () => renderSierpinskiTriangle('react-native-web', reactNativeWeb) - // () => renderTweet('react-native-web', reactNativeWeb) ], aphrodite: [ diff --git a/packages/benchmarks/webpack.config.js b/packages/benchmarks/webpack.config.js index 8404de708..4c56bdf1f 100644 --- a/packages/benchmarks/webpack.config.js +++ b/packages/benchmarks/webpack.config.js @@ -1,4 +1,5 @@ -// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; +const babelPreset = require('../../scripts/babel/preset'); +const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const path = require('path'); const webpack = require('webpack'); @@ -25,23 +26,23 @@ module.exports = { }, { test: /\.js$/, - include: [ - path.resolve(appDirectory, 'src'), - ], + include: [path.resolve(appDirectory, 'src')], use: { loader: 'babel-loader', options: { - cacheDirectory: true + cacheDirectory: true, + presets: babelPreset, + plugins: ['react-native-web'] } } } ] }, plugins: [ - // new BundleAnalyzerPlugin({ - // analyzerMode: 'static', - // openAnalyzer: false - // }), + new BundleAnalyzerPlugin({ + analyzerMode: 'static', + openAnalyzer: false + }), new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production') }), diff --git a/packages/react-native-web/package.json b/packages/react-native-web/package.json index 00cd58b99..91a5c6fdb 100644 --- a/packages/react-native-web/package.json +++ b/packages/react-native-web/package.json @@ -3,7 +3,6 @@ "version": "0.2.2", "description": "React Native for Web", "main": "dist/index.js", - "module": "dist/module.js", "files": [ "dist", "jest", @@ -12,7 +11,6 @@ ], "dependencies": { "array-find-index": "^1.0.2", - "babel-runtime": "^6.26.0", "create-react-class": "^15.6.2", "debounce": "^1.1.0", "deep-assign": "^2.0.0", diff --git a/packages/react-native-web/src/index.js b/packages/react-native-web/src/index.js index 10d47cc95..0306dd636 100644 --- a/packages/react-native-web/src/index.js +++ b/packages/react-native-web/src/index.js @@ -1,2 +1,198 @@ -import * as ReactNative from './module'; +import createElement from './modules/createElement'; +import findNodeHandle from './modules/findNodeHandle'; +import NativeModules from './modules/NativeModules'; +import processColor from './modules/processColor'; +import render from './modules/render'; +import unmountComponentAtNode from './modules/unmountComponentAtNode'; + +// APIs +import Animated from './apis/Animated'; +import AppRegistry from './apis/AppRegistry'; +import AppState from './apis/AppState'; +import AsyncStorage from './apis/AsyncStorage'; +import BackHandler from './apis/BackHandler'; +import Clipboard from './apis/Clipboard'; +import Dimensions from './apis/Dimensions'; +import Easing from './apis/Easing'; +import I18nManager from './apis/I18nManager'; +import Keyboard from './apis/Keyboard'; +import InteractionManager from './apis/InteractionManager'; +import Linking from './apis/Linking'; +import NetInfo from './apis/NetInfo'; +import PanResponder from './apis/PanResponder'; +import PixelRatio from './apis/PixelRatio'; +import Platform from './apis/Platform'; +import StyleSheet from './apis/StyleSheet'; +import UIManager from './apis/UIManager'; +import Vibration from './apis/Vibration'; + +// components +import ActivityIndicator from './components/ActivityIndicator'; +import ART from './components/ART'; +import Button from './components/Button'; +import CheckBox from './components/CheckBox'; +import FlatList from './components/FlatList'; +import Image from './components/Image'; +import ImageBackground from './components/Image/ImageBackground'; +import KeyboardAvoidingView from './components/KeyboardAvoidingView'; +import ListView from './components/ListView'; +import Modal from './components/Modal'; +import Picker from './components/Picker'; +import ProgressBar from './components/ProgressBar'; +import RefreshControl from './components/RefreshControl'; +import SafeAreaView from './components/SafeAreaView'; +import ScrollView from './components/ScrollView'; +import SectionList from './components/SectionList'; +import Slider from './components/Slider'; +import StatusBar from './components/StatusBar'; +import Switch from './components/Switch'; +import Text from './components/Text'; +import TextInput from './components/TextInput'; +import Touchable from './components/Touchable/Touchable'; +import TouchableHighlight from './components/Touchable/TouchableHighlight'; +import TouchableNativeFeedback from './components/Touchable/TouchableNativeFeedback'; +import TouchableOpacity from './components/Touchable/TouchableOpacity'; +import TouchableWithoutFeedback from './components/Touchable/TouchableWithoutFeedback'; +import View from './components/View'; +import VirtualizedList from './components/VirtualizedList'; + +// propTypes +import ColorPropType from './propTypes/ColorPropType'; +import EdgeInsetsPropType from './propTypes/EdgeInsetsPropType'; +import PointPropType from './propTypes/PointPropType'; +import TextPropTypes from './components/Text/TextPropTypes'; +import ViewPropTypes from './components/View/ViewPropTypes'; + +export { + // top-level API + findNodeHandle, + render, + unmountComponentAtNode, + // modules + createElement, + NativeModules, + processColor, + // APIs + Animated, + AppRegistry, + AppState, + AsyncStorage, + BackHandler, + Clipboard, + Dimensions, + Easing, + I18nManager, + InteractionManager, + Keyboard, + Linking, + NetInfo, + PanResponder, + PixelRatio, + Platform, + StyleSheet, + UIManager, + Vibration, + // components + ActivityIndicator, + ART, + Button, + CheckBox, + FlatList, + Image, + ImageBackground, + KeyboardAvoidingView, + ListView, + Modal, + Picker, + ProgressBar, + RefreshControl, + SafeAreaView, + ScrollView, + SectionList, + Slider, + StatusBar, + Switch, + Text, + TextInput, + Touchable, + TouchableHighlight, + TouchableNativeFeedback, + TouchableOpacity, + TouchableWithoutFeedback, + View, + VirtualizedList, + // propTypes + ColorPropType, + EdgeInsetsPropType, + PointPropType, + TextPropTypes, + ViewPropTypes +}; + +const ReactNative = { + // top-level API + findNodeHandle, + render, + unmountComponentAtNode, + // modules + createElement, + NativeModules, + processColor, + // APIs + Animated, + AppRegistry, + AppState, + AsyncStorage, + BackHandler, + Clipboard, + Dimensions, + Easing, + I18nManager, + InteractionManager, + Keyboard, + Linking, + NetInfo, + PanResponder, + PixelRatio, + Platform, + StyleSheet, + UIManager, + Vibration, + // components + ActivityIndicator, + ART, + Button, + CheckBox, + FlatList, + Image, + ImageBackground, + KeyboardAvoidingView, + ListView, + Modal, + Picker, + ProgressBar, + RefreshControl, + SafeAreaView, + ScrollView, + SectionList, + Slider, + StatusBar, + Switch, + Text, + TextInput, + Touchable, + TouchableHighlight, + TouchableNativeFeedback, + TouchableOpacity, + TouchableWithoutFeedback, + View, + VirtualizedList, + // propTypes + ColorPropType, + EdgeInsetsPropType, + PointPropType, + TextPropTypes, + ViewPropTypes +}; + export default ReactNative; diff --git a/packages/react-native-web/src/module.js b/packages/react-native-web/src/module.js deleted file mode 100644 index fa585deb2..000000000 --- a/packages/react-native-web/src/module.js +++ /dev/null @@ -1,130 +0,0 @@ -import createElement from './modules/createElement'; -import findNodeHandle from './modules/findNodeHandle'; -import NativeModules from './modules/NativeModules'; -import processColor from './modules/processColor'; -import render from './modules/render'; -import unmountComponentAtNode from './modules/unmountComponentAtNode'; - -// APIs -import Animated from './apis/Animated'; -import AppRegistry from './apis/AppRegistry'; -import AppState from './apis/AppState'; -import AsyncStorage from './apis/AsyncStorage'; -import BackHandler from './apis/BackHandler'; -import Clipboard from './apis/Clipboard'; -import Dimensions from './apis/Dimensions'; -import Easing from './apis/Easing'; -import I18nManager from './apis/I18nManager'; -import Keyboard from './apis/Keyboard'; -import InteractionManager from './apis/InteractionManager'; -import Linking from './apis/Linking'; -import NetInfo from './apis/NetInfo'; -import PanResponder from './apis/PanResponder'; -import PixelRatio from './apis/PixelRatio'; -import Platform from './apis/Platform'; -import StyleSheet from './apis/StyleSheet'; -import UIManager from './apis/UIManager'; -import Vibration from './apis/Vibration'; - -// components -import ActivityIndicator from './components/ActivityIndicator'; -import ART from './components/ART'; -import Button from './components/Button'; -import CheckBox from './components/CheckBox'; -import FlatList from './components/FlatList'; -import Image from './components/Image'; -import ImageBackground from './components/Image/ImageBackground'; -import KeyboardAvoidingView from './components/KeyboardAvoidingView'; -import ListView from './components/ListView'; -import Modal from './components/Modal'; -import Picker from './components/Picker'; -import ProgressBar from './components/ProgressBar'; -import RefreshControl from './components/RefreshControl'; -import SafeAreaView from './components/SafeAreaView'; -import ScrollView from './components/ScrollView'; -import SectionList from './components/SectionList'; -import Slider from './components/Slider'; -import StatusBar from './components/StatusBar'; -import Switch from './components/Switch'; -import Text from './components/Text'; -import TextInput from './components/TextInput'; -import Touchable from './components/Touchable/Touchable'; -import TouchableHighlight from './components/Touchable/TouchableHighlight'; -import TouchableNativeFeedback from './components/Touchable/TouchableNativeFeedback'; -import TouchableOpacity from './components/Touchable/TouchableOpacity'; -import TouchableWithoutFeedback from './components/Touchable/TouchableWithoutFeedback'; -import View from './components/View'; -import VirtualizedList from './components/VirtualizedList'; - -// propTypes -import ColorPropType from './propTypes/ColorPropType'; -import EdgeInsetsPropType from './propTypes/EdgeInsetsPropType'; -import PointPropType from './propTypes/PointPropType'; -import TextPropTypes from './components/Text/TextPropTypes'; -import ViewPropTypes from './components/View/ViewPropTypes'; - -export { - // top-level API - findNodeHandle, - render, - unmountComponentAtNode, - // modules - createElement, - NativeModules, - processColor, - // APIs - Animated, - AppRegistry, - AppState, - AsyncStorage, - BackHandler, - Clipboard, - Dimensions, - Easing, - I18nManager, - InteractionManager, - Keyboard, - Linking, - NetInfo, - PanResponder, - PixelRatio, - Platform, - StyleSheet, - UIManager, - Vibration, - // components - ActivityIndicator, - ART, - Button, - CheckBox, - FlatList, - Image, - ImageBackground, - KeyboardAvoidingView, - ListView, - Modal, - Picker, - ProgressBar, - RefreshControl, - SafeAreaView, - ScrollView, - SectionList, - Slider, - StatusBar, - Switch, - Text, - TextInput, - Touchable, - TouchableHighlight, - TouchableNativeFeedback, - TouchableOpacity, - TouchableWithoutFeedback, - View, - VirtualizedList, - // propTypes - ColorPropType, - EdgeInsetsPropType, - PointPropType, - TextPropTypes, - ViewPropTypes -}; diff --git a/scripts/babel/preset.js b/scripts/babel/preset.js new file mode 100644 index 000000000..4caedff0d --- /dev/null +++ b/scripts/babel/preset.js @@ -0,0 +1,34 @@ +module.exports = { + presets: [ + [ + 'babel-preset-env', + { + loose: true, + exclude: ['transform-es2015-typeof-symbol'], + targets: { + browsers: [ + 'chrome 38', + 'android 4', + 'firefox 40', + 'ios_saf 7', + 'safari 7', + 'ie 10', + 'ie_mob 11', + 'edge 12', + 'opera 16', + 'op_mini 12', + 'and_uc 9', + 'and_chr 38' + ] + } + } + ], + 'babel-preset-react', + 'babel-preset-flow' + ], + plugins: [ + ['babel-plugin-transform-class-properties', { loose: true }], + ['babel-plugin-transform-object-rest-spread', { useBuiltIns: true }], + ['babel-plugin-transform-react-remove-prop-types', { mode: 'wrap' }] + ] +}; From 87fdd6c73bf7365fd8f22acb619b71373a6deea7 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Mon, 1 Jan 2018 14:12:30 -0800 Subject: [PATCH 056/153] [change] 'react-native-web' module organization and exports The patch reorganizes the top-level module division of the 'react-native-web' project. Previously, the package's exported modules were found in: apis/*/index.js components/*/index.js components/*/*.js modules/*/index.js propTypes/*.js Now, each part of the exported API is found in: exports/*/index.js And anything not directly part of the exported API is found in: modules/*/index.js vendor/*/index.js Close #748 --- .../__snapshots__/index-test.js.snap | 52 +++---- .../src/index.js | 88 +----------- .../src/components/FlatList/index.js | 2 - .../src/components/Modal/index.js | 2 - .../src/components/SectionList/index.js | 2 - .../src/components/Slider/index.js | 2 - .../Touchable/__tests__/index-test.js | 5 - .../src/components/VirtualizedList/index.js | 2 - .../src/{components => exports}/ART/index.js | 0 .../__snapshots__/index-test.js.snap | 0 .../ActivityIndicator/__tests__/index-test.js | 0 .../ActivityIndicator/index.js | 4 +- .../src/{apis => exports}/Animated/index.js | 8 +- .../AppRegistry/AppContainer.js | 2 +- .../renderApplication-test.js.snap | 0 .../__tests__/renderApplication-test.js | 0 .../{apis => exports}/AppRegistry/index.js | 2 +- .../AppRegistry/renderApplication.js | 4 +- .../AppState/__tests__/index-test.js | 0 .../src/{apis => exports}/AppState/index.js | 0 .../__snapshots__/index-test.js.snap | 0 .../AsyncStorage/__tests__/index-test.js | 0 .../{apis => exports}/AsyncStorage/index.js | 0 .../{apis => exports}/BackHandler/index.js | 0 .../Button/__tests__/index-test.js | 0 .../{components => exports}/Button/index.js | 6 +- .../CheckBox/__tests__/index-test.js | 0 .../{components => exports}/CheckBox/index.js | 10 +- .../src/{apis => exports}/Clipboard/index.js | 0 .../ColorPropType/index.js} | 0 .../__snapshots__/index-test.js.snap | 0 .../Dimensions/__tests__/index-test.js | 0 .../src/{apis => exports}/Dimensions/index.js | 0 .../src/{apis => exports}/Easing/index.js | 0 .../EdgeInsetsPropType/index.js} | 2 +- .../src/exports/FlatList/index.js | 2 + .../I18nManager/__tests__/index-test.js | 0 .../{apis => exports}/I18nManager/index.js | 0 .../Image/ImageResizeMode.js | 0 .../Image/ImageStylePropTypes.js | 10 +- .../Image/ImageUriCache.js | 0 .../__snapshots__/index-test.js.snap | 0 .../Image/__tests__/index-test.js | 0 .../{components => exports}/Image/index.js | 8 +- .../ImageBackground/__tests__/index.js} | 4 +- .../ImageBackground/index.js} | 8 +- .../InteractionManager/index.js | 0 .../src/{apis => exports}/Keyboard/index.js | 0 .../KeyboardAvoidingView/index.js | 2 +- .../src/{apis => exports}/Linking/index.js | 0 .../ListView/ListViewDataSource.js | 0 .../ListView/ListViewPropTypes.js | 0 .../ListView/__tests__/index-test.js | 0 .../{components => exports}/ListView/index.js | 2 +- .../src/exports/Modal/index.js | 2 + .../NativeModules/index.js | 0 .../NetInfo/__tests__/index-test.js | 0 .../src/{apis => exports}/NetInfo/index.js | 0 .../{apis => exports}/PanResponder/index.js | 0 .../src/exports/Picker/PickerItem.js | 25 ++++ .../Picker/PickerItemPropType.js | 0 .../Picker/PickerStylePropTypes.js | 2 +- .../__snapshots__/index-test.js.snap | 0 .../Picker/__tests__/index-test.js | 0 .../{components => exports}/Picker/index.js | 34 +---- .../PixelRatio/__tests__/index-test.js | 0 .../src/{apis => exports}/PixelRatio/index.js | 0 .../src/{apis => exports}/Platform/index.js | 0 .../PointPropType/index.js} | 2 +- .../ProgressBar/__tests__/index-test.js | 0 .../ProgressBar/index.js | 6 +- .../RefreshControl/index.js | 4 +- .../SafeAreaView/index.js | 0 .../ScrollView/ScrollViewBase.js | 4 +- .../ScrollView/__tests__/index-test.js | 0 .../ScrollView/index.js | 12 +- .../src/exports/SectionList/index.js | 2 + .../src/exports/Slider/index.js | 2 + .../StatusBar/index.js | 0 .../StyleSheet/StyleManager.js | 0 .../StyleSheet/StyleRegistry.js | 0 .../StyleSheet/StyleSheetValidation.js | 8 +- .../StyleSheet/__tests__/StyleManager-test.js | 0 .../__tests__/StyleRegistry-test.js | 0 .../__snapshots__/StyleManager-test.js.snap | 0 .../__snapshots__/StyleRegistry-test.js.snap | 0 .../createReactDOMStyle-test.js.snap | 0 .../__snapshots__/flattenStyle-test.js.snap | 0 .../__snapshots__/generateCss-test.js.snap | 0 .../__snapshots__/i18nStyle-test.js.snap | 0 .../__snapshots__/index-test.js.snap | 0 .../__tests__/createReactDOMStyle-test.js | 0 .../StyleSheet/__tests__/flattenStyle-test.js | 0 .../StyleSheet/__tests__/generateCss-test.js | 0 .../StyleSheet/__tests__/i18nStyle-test.js | 0 .../StyleSheet/__tests__/index-test.js | 0 .../__tests__/normalizeValue-test.js | 0 .../StyleSheet/createReactDOMStyle.js | 2 +- .../StyleSheet/flattenStyle.js | 0 .../StyleSheet/generateCss.js | 0 .../StyleSheet/getHairlineWidth.js | 0 .../{apis => exports}/StyleSheet/i18nStyle.js | 0 .../src/{apis => exports}/StyleSheet/index.js | 0 .../StyleSheet/normalizeValue.js | 0 .../{apis => exports}/StyleSheet/registry.js | 0 .../{apis => exports}/StyleSheet/staticCss.js | 0 .../Switch/__tests__/index-test.js | 0 .../{components => exports}/Switch/index.js | 10 +- .../Text/TextPropTypes.js | 15 +- .../Text/TextStylePropTypes.js | 2 +- .../__snapshots__/index-test.js.snap | 0 .../Text/__tests__/index-test.js | 0 .../src/{components => exports}/Text/index.js | 4 +- .../TextInput/TextInputStylePropTypes.js | 0 .../TextInput/__tests__/index-test.js | 0 .../TextInput/index.js | 14 +- .../src/exports/TextPropTypes/index.js | 2 + .../Touchable/BoundingDimensions.js | 0 .../Touchable/Position.js | 0 .../Touchable/ensurePositiveDelayProps.js | 0 .../Touchable/index.js} | 6 +- .../TouchableHighlight/index.js} | 14 +- .../TouchableNativeFeedback/index.js} | 2 +- .../TouchableOpacity/index.js} | 8 +- .../TouchableWithoutFeedback/index.js} | 16 +-- .../UIManager/__tests__/index-test.js | 0 .../src/{apis => exports}/UIManager/index.js | 0 .../src/{apis => exports}/Vibration/index.js | 0 .../View/ViewPropTypes.js | 18 ++- .../View/ViewStylePropTypes.js | 12 +- .../__snapshots__/index-test.js.snap | 0 .../View/__tests__/index-test.js | 0 .../src/{components => exports}/View/index.js | 9 +- .../src/exports/ViewPropTypes/index.js | 7 + .../src/exports/VirtualizedList/index.js | 2 + .../__snapshots__/index-test.js.snap | 0 .../createElement/__tests__/index-test.js | 0 .../createElement/index.js | 8 +- .../findNodeHandle/index.js | 0 .../processColor/__tests__/index-test.js | 0 .../processColor/index.js | 0 .../src/{modules => exports}/render/index.js | 0 .../unmountComponentAtNode/index.js | 0 packages/react-native-web/src/index.js | 136 +++++++++--------- .../AnimationPropTypes/index.js} | 0 .../BorderPropTypes/index.js} | 2 +- .../LayoutPropTypes/index.js} | 0 .../src/modules/NativeMethodsMixin/index.js | 8 +- .../src/modules/ScrollResponder/index.js | 10 +- .../ShadowPropTypes/index.js} | 2 +- .../StaticContainer/__tests__/index-test.js | 0 .../StaticContainer/index.js | 0 .../StaticRenderer/__tests__/index-test.js | 0 .../StaticRenderer/index.js | 0 .../StyleSheetPropType/index.js} | 4 +- .../TextInputState/index.js} | 2 +- .../TransformPropTypes/index.js} | 0 .../UnimplementedView/index.js | 2 +- .../src/modules/createDOMProps/index.js | 4 +- .../createStrictShapeTypeChecker/index.js} | 0 .../src/modules/dismissKeyboard/index.js | 2 +- .../ensureComponentIsNative/index.js} | 0 .../src/propTypes/BaseComponentPropTypes.js | 26 ---- .../src/vendor/Animated/AnimatedEvent.js | 2 +- .../vendor/Animated/NativeAnimatedHelper.js | 2 +- .../Animated/createAnimatedComponent.js | 2 +- .../vendor/Animated/nodes/AnimatedProps.js | 2 +- .../vendor/Animated/nodes/AnimatedStyle.js | 3 +- .../vendor/Animated/nodes/AnimatedValue.js | 2 +- .../src/vendor/PanResponder/index.js | 2 +- 170 files changed, 303 insertions(+), 393 deletions(-) delete mode 100644 packages/react-native-web/src/components/FlatList/index.js delete mode 100644 packages/react-native-web/src/components/Modal/index.js delete mode 100644 packages/react-native-web/src/components/SectionList/index.js delete mode 100644 packages/react-native-web/src/components/Slider/index.js delete mode 100644 packages/react-native-web/src/components/Touchable/__tests__/index-test.js delete mode 100644 packages/react-native-web/src/components/VirtualizedList/index.js rename packages/react-native-web/src/{components => exports}/ART/index.js (100%) rename packages/react-native-web/src/{components => exports}/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap (100%) rename packages/react-native-web/src/{components => exports}/ActivityIndicator/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => exports}/ActivityIndicator/index.js (96%) rename packages/react-native-web/src/{apis => exports}/Animated/index.js (81%) rename packages/react-native-web/src/{apis => exports}/AppRegistry/AppContainer.js (96%) rename packages/react-native-web/src/{apis => exports}/AppRegistry/__tests__/__snapshots__/renderApplication-test.js.snap (100%) rename packages/react-native-web/src/{apis => exports}/AppRegistry/__tests__/renderApplication-test.js (100%) rename packages/react-native-web/src/{apis => exports}/AppRegistry/index.js (97%) rename packages/react-native-web/src/{apis => exports}/AppRegistry/renderApplication.js (93%) rename packages/react-native-web/src/{apis => exports}/AppState/__tests__/index-test.js (100%) rename packages/react-native-web/src/{apis => exports}/AppState/index.js (100%) rename packages/react-native-web/src/{apis => exports}/AsyncStorage/__tests__/__snapshots__/index-test.js.snap (100%) rename packages/react-native-web/src/{apis => exports}/AsyncStorage/__tests__/index-test.js (100%) rename packages/react-native-web/src/{apis => exports}/AsyncStorage/index.js (100%) rename packages/react-native-web/src/{apis => exports}/BackHandler/index.js (100%) rename packages/react-native-web/src/{components => exports}/Button/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => exports}/Button/index.js (90%) rename packages/react-native-web/src/{components => exports}/CheckBox/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => exports}/CheckBox/index.js (93%) rename packages/react-native-web/src/{apis => exports}/Clipboard/index.js (100%) rename packages/react-native-web/src/{propTypes/ColorPropType.js => exports/ColorPropType/index.js} (100%) rename packages/react-native-web/src/{apis => exports}/Dimensions/__tests__/__snapshots__/index-test.js.snap (100%) rename packages/react-native-web/src/{apis => exports}/Dimensions/__tests__/index-test.js (100%) rename packages/react-native-web/src/{apis => exports}/Dimensions/index.js (100%) rename packages/react-native-web/src/{apis => exports}/Easing/index.js (100%) rename packages/react-native-web/src/{propTypes/EdgeInsetsPropType.js => exports/EdgeInsetsPropType/index.js} (88%) create mode 100644 packages/react-native-web/src/exports/FlatList/index.js rename packages/react-native-web/src/{apis => exports}/I18nManager/__tests__/index-test.js (100%) rename packages/react-native-web/src/{apis => exports}/I18nManager/index.js (100%) rename packages/react-native-web/src/{components => exports}/Image/ImageResizeMode.js (100%) rename packages/react-native-web/src/{components => exports}/Image/ImageStylePropTypes.js (62%) rename packages/react-native-web/src/{components => exports}/Image/ImageUriCache.js (100%) rename packages/react-native-web/src/{components => exports}/Image/__tests__/__snapshots__/index-test.js.snap (100%) rename packages/react-native-web/src/{components => exports}/Image/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => exports}/Image/index.js (97%) rename packages/react-native-web/src/{components/Image/__tests__/ImageBackground-test.js => exports/ImageBackground/__tests__/index.js} (93%) rename packages/react-native-web/src/{components/Image/ImageBackground.js => exports/ImageBackground/index.js} (91%) rename packages/react-native-web/src/{apis => exports}/InteractionManager/index.js (100%) rename packages/react-native-web/src/{apis => exports}/Keyboard/index.js (100%) rename packages/react-native-web/src/{components => exports}/KeyboardAvoidingView/index.js (98%) rename packages/react-native-web/src/{apis => exports}/Linking/index.js (100%) rename packages/react-native-web/src/{components => exports}/ListView/ListViewDataSource.js (100%) rename packages/react-native-web/src/{components => exports}/ListView/ListViewPropTypes.js (100%) rename packages/react-native-web/src/{components => exports}/ListView/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => exports}/ListView/index.js (99%) create mode 100644 packages/react-native-web/src/exports/Modal/index.js rename packages/react-native-web/src/{modules => exports}/NativeModules/index.js (100%) rename packages/react-native-web/src/{apis => exports}/NetInfo/__tests__/index-test.js (100%) rename packages/react-native-web/src/{apis => exports}/NetInfo/index.js (100%) rename packages/react-native-web/src/{apis => exports}/PanResponder/index.js (100%) create mode 100644 packages/react-native-web/src/exports/Picker/PickerItem.js rename packages/react-native-web/src/{components => exports}/Picker/PickerItemPropType.js (100%) rename packages/react-native-web/src/{components => exports}/Picker/PickerStylePropTypes.js (88%) rename packages/react-native-web/src/{components => exports}/Picker/__tests__/__snapshots__/index-test.js.snap (100%) rename packages/react-native-web/src/{components => exports}/Picker/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => exports}/Picker/index.js (70%) rename packages/react-native-web/src/{apis => exports}/PixelRatio/__tests__/index-test.js (100%) rename packages/react-native-web/src/{apis => exports}/PixelRatio/index.js (100%) rename packages/react-native-web/src/{apis => exports}/Platform/index.js (100%) rename packages/react-native-web/src/{propTypes/PointPropType.js => exports/PointPropType/index.js} (85%) rename packages/react-native-web/src/{components => exports}/ProgressBar/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => exports}/ProgressBar/index.js (93%) rename packages/react-native-web/src/{components => exports}/RefreshControl/index.js (91%) rename packages/react-native-web/src/{components => exports}/SafeAreaView/index.js (100%) rename packages/react-native-web/src/{components => exports}/ScrollView/ScrollViewBase.js (98%) rename packages/react-native-web/src/{components => exports}/ScrollView/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => exports}/ScrollView/index.js (95%) create mode 100644 packages/react-native-web/src/exports/SectionList/index.js create mode 100644 packages/react-native-web/src/exports/Slider/index.js rename packages/react-native-web/src/{components => exports}/StatusBar/index.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/StyleManager.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/StyleRegistry.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/StyleSheetValidation.js (90%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/StyleManager-test.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/StyleRegistry-test.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/__snapshots__/StyleManager-test.js.snap (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/__snapshots__/StyleRegistry-test.js.snap (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/__snapshots__/flattenStyle-test.js.snap (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/__snapshots__/generateCss-test.js.snap (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/__snapshots__/i18nStyle-test.js.snap (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/__snapshots__/index-test.js.snap (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/createReactDOMStyle-test.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/flattenStyle-test.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/generateCss-test.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/i18nStyle-test.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/index-test.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/__tests__/normalizeValue-test.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/createReactDOMStyle.js (99%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/flattenStyle.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/generateCss.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/getHairlineWidth.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/i18nStyle.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/index.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/normalizeValue.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/registry.js (100%) rename packages/react-native-web/src/{apis => exports}/StyleSheet/staticCss.js (100%) rename packages/react-native-web/src/{components => exports}/Switch/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => exports}/Switch/index.js (95%) rename packages/react-native-web/src/{components => exports}/Text/TextPropTypes.js (54%) rename packages/react-native-web/src/{components => exports}/Text/TextStylePropTypes.js (96%) rename packages/react-native-web/src/{components => exports}/Text/__tests__/__snapshots__/index-test.js.snap (100%) rename packages/react-native-web/src/{components => exports}/Text/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => exports}/Text/index.js (96%) rename packages/react-native-web/src/{components => exports}/TextInput/TextInputStylePropTypes.js (100%) rename packages/react-native-web/src/{components => exports}/TextInput/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => exports}/TextInput/index.js (96%) create mode 100644 packages/react-native-web/src/exports/TextPropTypes/index.js rename packages/react-native-web/src/{components => exports}/Touchable/BoundingDimensions.js (100%) rename packages/react-native-web/src/{components => exports}/Touchable/Position.js (100%) rename packages/react-native-web/src/{components => exports}/Touchable/ensurePositiveDelayProps.js (100%) rename packages/react-native-web/src/{components/Touchable/Touchable.js => exports/Touchable/index.js} (99%) rename packages/react-native-web/src/{components/Touchable/TouchableHighlight.js => exports/TouchableHighlight/index.js} (95%) rename packages/react-native-web/src/{components/Touchable/TouchableNativeFeedback.js => exports/TouchableNativeFeedback/index.js} (79%) rename packages/react-native-web/src/{components/Touchable/TouchableOpacity.js => exports/TouchableOpacity/index.js} (96%) rename packages/react-native-web/src/{components/Touchable/TouchableWithoutFeedback.js => exports/TouchableWithoutFeedback/index.js} (92%) rename packages/react-native-web/src/{apis => exports}/UIManager/__tests__/index-test.js (100%) rename packages/react-native-web/src/{apis => exports}/UIManager/index.js (100%) rename packages/react-native-web/src/{apis => exports}/Vibration/index.js (100%) rename packages/react-native-web/src/{components => exports}/View/ViewPropTypes.js (82%) rename packages/react-native-web/src/{components => exports}/View/ViewStylePropTypes.js (78%) rename packages/react-native-web/src/{components => exports}/View/__tests__/__snapshots__/index-test.js.snap (100%) rename packages/react-native-web/src/{components => exports}/View/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => exports}/View/index.js (91%) create mode 100644 packages/react-native-web/src/exports/ViewPropTypes/index.js create mode 100644 packages/react-native-web/src/exports/VirtualizedList/index.js rename packages/react-native-web/src/{modules => exports}/createElement/__tests__/__snapshots__/index-test.js.snap (100%) rename packages/react-native-web/src/{modules => exports}/createElement/__tests__/index-test.js (100%) rename packages/react-native-web/src/{modules => exports}/createElement/index.js (91%) rename packages/react-native-web/src/{modules => exports}/findNodeHandle/index.js (100%) rename packages/react-native-web/src/{modules => exports}/processColor/__tests__/index-test.js (100%) rename packages/react-native-web/src/{modules => exports}/processColor/index.js (100%) rename packages/react-native-web/src/{modules => exports}/render/index.js (100%) rename packages/react-native-web/src/{modules => exports}/unmountComponentAtNode/index.js (100%) rename packages/react-native-web/src/{propTypes/AnimationPropTypes.js => modules/AnimationPropTypes/index.js} (100%) rename packages/react-native-web/src/{propTypes/BorderPropTypes.js => modules/BorderPropTypes/index.js} (94%) rename packages/react-native-web/src/{propTypes/LayoutPropTypes.js => modules/LayoutPropTypes/index.js} (100%) rename packages/react-native-web/src/{propTypes/ShadowPropTypes.js => modules/ShadowPropTypes/index.js} (91%) rename packages/react-native-web/src/{components => modules}/StaticContainer/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => modules}/StaticContainer/index.js (100%) rename packages/react-native-web/src/{components => modules}/StaticRenderer/__tests__/index-test.js (100%) rename packages/react-native-web/src/{components => modules}/StaticRenderer/index.js (100%) rename packages/react-native-web/src/{propTypes/StyleSheetPropType.js => modules/StyleSheetPropType/index.js} (87%) rename packages/react-native-web/src/{components/TextInput/TextInputState.js => modules/TextInputState/index.js} (97%) rename packages/react-native-web/src/{propTypes/TransformPropTypes.js => modules/TransformPropTypes/index.js} (100%) rename packages/react-native-web/src/{components => modules}/UnimplementedView/index.js (96%) rename packages/react-native-web/src/{propTypes/createStrictShapeTypeChecker.js => modules/createStrictShapeTypeChecker/index.js} (100%) rename packages/react-native-web/src/{components/Touchable/ensureComponentIsNative.js => modules/ensureComponentIsNative/index.js} (100%) delete mode 100644 packages/react-native-web/src/propTypes/BaseComponentPropTypes.js diff --git a/packages/babel-plugin-react-native-web/src/__tests__/__snapshots__/index-test.js.snap b/packages/babel-plugin-react-native-web/src/__tests__/__snapshots__/index-test.js.snap index 308fbcc41..c498d9d54 100644 --- a/packages/babel-plugin-react-native-web/src/__tests__/__snapshots__/index-test.js.snap +++ b/packages/babel-plugin-react-native-web/src/__tests__/__snapshots__/index-test.js.snap @@ -7,11 +7,11 @@ export { ColorPropType, StyleSheet, Text, createElement } from 'react-native'; ↓ ↓ ↓ ↓ ↓ ↓ -export { default as View } from 'react-native-web/dist/components/View'; -export { default as ColorPropType } from 'react-native-web/dist/propTypes/ColorPropType'; -export { default as StyleSheet } from 'react-native-web/dist/apis/StyleSheet'; -export { default as Text } from 'react-native-web/dist/components/Text'; -export { default as createElement } from 'react-native-web/dist/modules/createElement'; +export { default as View } from 'react-native-web/dist/exports/View'; +export { default as ColorPropType } from 'react-native-web/dist/exports/ColorPropType'; +export { default as StyleSheet } from 'react-native-web/dist/exports/StyleSheet'; +export { default as Text } from 'react-native-web/dist/exports/Text'; +export { default as createElement } from 'react-native-web/dist/exports/createElement'; " `; @@ -22,11 +22,11 @@ export { ColorPropType, StyleSheet, Text, createElement } from 'react-native-web ↓ ↓ ↓ ↓ ↓ ↓ -export { default as View } from 'react-native-web/dist/components/View'; -export { default as ColorPropType } from 'react-native-web/dist/propTypes/ColorPropType'; -export { default as StyleSheet } from 'react-native-web/dist/apis/StyleSheet'; -export { default as Text } from 'react-native-web/dist/components/Text'; -export { default as createElement } from 'react-native-web/dist/modules/createElement'; +export { default as View } from 'react-native-web/dist/exports/View'; +export { default as ColorPropType } from 'react-native-web/dist/exports/ColorPropType'; +export { default as StyleSheet } from 'react-native-web/dist/exports/StyleSheet'; +export { default as Text } from 'react-native-web/dist/exports/Text'; +export { default as createElement } from 'react-native-web/dist/exports/createElement'; " `; @@ -40,10 +40,10 @@ import * as ReactNativeModules from 'react-native'; ↓ ↓ ↓ ↓ ↓ ↓ import ReactNative from 'react-native-web/dist/index'; -import View from 'react-native-web/dist/components/View'; -import { Invalid } from 'react-native-web/dist/index'; -import MyView from 'react-native-web/dist/components/View'; -import ViewPropTypes from 'react-native-web/dist/components/View/ViewPropTypes'; +import View from 'react-native-web/dist/exports/View'; +import Invalid from 'react-native-web/dist/exports/Invalid'; +import MyView from 'react-native-web/dist/exports/View'; +import ViewPropTypes from 'react-native-web/dist/exports/ViewPropTypes'; import * as ReactNativeModules from 'react-native-web/dist/index'; " `; @@ -56,12 +56,12 @@ import * as ReactNativeModules from 'react-native-web'; ↓ ↓ ↓ ↓ ↓ ↓ -import createElement from 'react-native-web/dist/modules/createElement'; -import ColorPropType from 'react-native-web/dist/propTypes/ColorPropType'; -import StyleSheet from 'react-native-web/dist/apis/StyleSheet'; -import View from 'react-native-web/dist/components/View'; -import TouchableOpacity from 'react-native-web/dist/components/Touchable/TouchableOpacity'; -import processColor from 'react-native-web/dist/modules/processColor'; +import createElement from 'react-native-web/dist/exports/createElement'; +import ColorPropType from 'react-native-web/dist/exports/ColorPropType'; +import StyleSheet from 'react-native-web/dist/exports/StyleSheet'; +import View from 'react-native-web/dist/exports/View'; +import TouchableOpacity from 'react-native-web/dist/exports/TouchableOpacity'; +import processColor from 'react-native-web/dist/exports/processColor'; import * as ReactNativeModules from 'react-native-web/dist/index'; " `; @@ -76,16 +76,16 @@ const { ColorPropType, StyleSheet, View, TouchableOpacity, processColor } = requ const ReactNative = require('react-native-web'); -const createElement = require('react-native-web/dist/modules/createElement'); +const createElement = require('react-native-web/dist/exports/createElement'); -const ColorPropType = require('react-native-web/dist/propTypes/ColorPropType'); +const ColorPropType = require('react-native-web/dist/exports/ColorPropType'); -const StyleSheet = require('react-native-web/dist/apis/StyleSheet'); +const StyleSheet = require('react-native-web/dist/exports/StyleSheet'); -const View = require('react-native-web/dist/components/View'); +const View = require('react-native-web/dist/exports/View'); -const TouchableOpacity = require('react-native-web/dist/components/Touchable/TouchableOpacity'); +const TouchableOpacity = require('react-native-web/dist/exports/TouchableOpacity'); -const processColor = require('react-native-web/dist/modules/processColor'); +const processColor = require('react-native-web/dist/exports/processColor'); " `; diff --git a/packages/babel-plugin-react-native-web/src/index.js b/packages/babel-plugin-react-native-web/src/index.js index 4200a0e2b..dca143593 100644 --- a/packages/babel-plugin-react-native-web/src/index.js +++ b/packages/babel-plugin-react-native-web/src/index.js @@ -1,89 +1,5 @@ -const getDistLocation = importName => { - const root = 'react-native-web/dist'; - - switch (importName) { - // apis - case 'Animated': - case 'AppRegistry': - case 'AppState': - case 'AsyncStorage': - case 'BackHandler': - case 'Clipboard': - case 'Dimensions': - case 'Easing': - case 'I18nManager': - case 'InteractionManager': - case 'Keyboard': - case 'Linking': - case 'NetInfo': - case 'PanResponder': - case 'PixelRatio': - case 'Platform': - case 'StyleSheet': - case 'UIManager': - case 'Vibration': { - return `${root}/apis/${importName}`; - } - - // components - case 'ActivityIndicator': - case 'ART': - case 'Button': - case 'FlatList': - case 'Image': - case 'KeyboardAvoidingView': - case 'ListView': - case 'Modal': - case 'Picker': - case 'ProgressBar': - case 'RefreshControl': - case 'ScrollView': - case 'SectionList': - case 'Slider': - case 'StatusBar': - case 'Switch': - case 'Text': - case 'TextInput': - case 'View': - case 'VirtualizedList': { - return `${root}/components/${importName}`; - } - - case 'Touchable': - case 'TouchableHighlight': - case 'TouchableNativeFeedback': - case 'TouchableOpacity': - case 'TouchableWithoutFeedback': { - return `${root}/components/Touchable/${importName}`; - } - - // modules - case 'createElement': - case 'findNodeHandle': - case 'NativeModules': - case 'processColor': - case 'render': - case 'unmountComponentAtNode': { - return `${root}/modules/${importName}`; - } - - // propTypes - case 'ColorPropType': - case 'EdgeInsetsPropType': - case 'PointPropType': { - return `${root}/propTypes/${importName}`; - } - case 'TextPropTypes': { - return `${root}/components/Text/${importName}`; - } - case 'ViewPropTypes': { - return `${root}/components/View/${importName}`; - } - - default: - return; - } -}; +const getDistLocation = importName => + importName ? `react-native-web/dist/exports/${importName}` : undefined; const isReactNativeRequire = (t, node) => { const { declarations } = node; diff --git a/packages/react-native-web/src/components/FlatList/index.js b/packages/react-native-web/src/components/FlatList/index.js deleted file mode 100644 index 0a818b1ab..000000000 --- a/packages/react-native-web/src/components/FlatList/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import UnimplementedView from '../UnimplementedView'; -export default UnimplementedView; diff --git a/packages/react-native-web/src/components/Modal/index.js b/packages/react-native-web/src/components/Modal/index.js deleted file mode 100644 index 0a818b1ab..000000000 --- a/packages/react-native-web/src/components/Modal/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import UnimplementedView from '../UnimplementedView'; -export default UnimplementedView; diff --git a/packages/react-native-web/src/components/SectionList/index.js b/packages/react-native-web/src/components/SectionList/index.js deleted file mode 100644 index 0a818b1ab..000000000 --- a/packages/react-native-web/src/components/SectionList/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import UnimplementedView from '../UnimplementedView'; -export default UnimplementedView; diff --git a/packages/react-native-web/src/components/Slider/index.js b/packages/react-native-web/src/components/Slider/index.js deleted file mode 100644 index 0a818b1ab..000000000 --- a/packages/react-native-web/src/components/Slider/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import UnimplementedView from '../UnimplementedView'; -export default UnimplementedView; diff --git a/packages/react-native-web/src/components/Touchable/__tests__/index-test.js b/packages/react-native-web/src/components/Touchable/__tests__/index-test.js deleted file mode 100644 index 86f9185f2..000000000 --- a/packages/react-native-web/src/components/Touchable/__tests__/index-test.js +++ /dev/null @@ -1,5 +0,0 @@ -/* eslint-env jasmine, jest */ - -describe('components/Touchable', () => { - test.skip('NO TEST COVERAGE', () => {}); -}); diff --git a/packages/react-native-web/src/components/VirtualizedList/index.js b/packages/react-native-web/src/components/VirtualizedList/index.js deleted file mode 100644 index 0a818b1ab..000000000 --- a/packages/react-native-web/src/components/VirtualizedList/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import UnimplementedView from '../UnimplementedView'; -export default UnimplementedView; diff --git a/packages/react-native-web/src/components/ART/index.js b/packages/react-native-web/src/exports/ART/index.js similarity index 100% rename from packages/react-native-web/src/components/ART/index.js rename to packages/react-native-web/src/exports/ART/index.js diff --git a/packages/react-native-web/src/components/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from packages/react-native-web/src/components/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/exports/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap diff --git a/packages/react-native-web/src/components/ActivityIndicator/__tests__/index-test.js b/packages/react-native-web/src/exports/ActivityIndicator/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/ActivityIndicator/__tests__/index-test.js rename to packages/react-native-web/src/exports/ActivityIndicator/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/ActivityIndicator/index.js b/packages/react-native-web/src/exports/ActivityIndicator/index.js similarity index 96% rename from packages/react-native-web/src/components/ActivityIndicator/index.js rename to packages/react-native-web/src/exports/ActivityIndicator/index.js index 135ac292a..d94884c4e 100644 --- a/packages/react-native-web/src/components/ActivityIndicator/index.js +++ b/packages/react-native-web/src/exports/ActivityIndicator/index.js @@ -11,9 +11,9 @@ */ import applyNativeMethods from '../../modules/applyNativeMethods'; -import StyleSheet from '../../apis/StyleSheet'; +import StyleSheet from '../StyleSheet'; import View from '../View'; -import ViewPropTypes from '../View/ViewPropTypes'; +import ViewPropTypes from '../ViewPropTypes'; import { bool, number, oneOf, oneOfType, string } from 'prop-types'; import React, { Component } from 'react'; diff --git a/packages/react-native-web/src/apis/Animated/index.js b/packages/react-native-web/src/exports/Animated/index.js similarity index 81% rename from packages/react-native-web/src/apis/Animated/index.js rename to packages/react-native-web/src/exports/Animated/index.js index 496b3cbee..06e7eb842 100644 --- a/packages/react-native-web/src/apis/Animated/index.js +++ b/packages/react-native-web/src/exports/Animated/index.js @@ -11,10 +11,10 @@ */ import AnimatedImplementation from '../../vendor/Animated/AnimatedImplementation'; -import Image from '../../components/Image'; -import ScrollView from '../../components/ScrollView'; -import Text from '../../components/Text'; -import View from '../../components/View'; +import Image from '../Image'; +import ScrollView from '../ScrollView'; +import Text from '../Text'; +import View from '../View'; const Animated = { ...AnimatedImplementation, diff --git a/packages/react-native-web/src/apis/AppRegistry/AppContainer.js b/packages/react-native-web/src/exports/AppRegistry/AppContainer.js similarity index 96% rename from packages/react-native-web/src/apis/AppRegistry/AppContainer.js rename to packages/react-native-web/src/exports/AppRegistry/AppContainer.js index 10d8bfc04..fe44e1de3 100644 --- a/packages/react-native-web/src/apis/AppRegistry/AppContainer.js +++ b/packages/react-native-web/src/exports/AppRegistry/AppContainer.js @@ -10,7 +10,7 @@ */ import StyleSheet from '../StyleSheet'; -import View from '../../components/View'; +import View from '../View'; import { any, node } from 'prop-types'; import React, { Component } from 'react'; diff --git a/packages/react-native-web/src/apis/AppRegistry/__tests__/__snapshots__/renderApplication-test.js.snap b/packages/react-native-web/src/exports/AppRegistry/__tests__/__snapshots__/renderApplication-test.js.snap similarity index 100% rename from packages/react-native-web/src/apis/AppRegistry/__tests__/__snapshots__/renderApplication-test.js.snap rename to packages/react-native-web/src/exports/AppRegistry/__tests__/__snapshots__/renderApplication-test.js.snap diff --git a/packages/react-native-web/src/apis/AppRegistry/__tests__/renderApplication-test.js b/packages/react-native-web/src/exports/AppRegistry/__tests__/renderApplication-test.js similarity index 100% rename from packages/react-native-web/src/apis/AppRegistry/__tests__/renderApplication-test.js rename to packages/react-native-web/src/exports/AppRegistry/__tests__/renderApplication-test.js diff --git a/packages/react-native-web/src/apis/AppRegistry/index.js b/packages/react-native-web/src/exports/AppRegistry/index.js similarity index 97% rename from packages/react-native-web/src/apis/AppRegistry/index.js rename to packages/react-native-web/src/exports/AppRegistry/index.js index b060d84c5..a90eb3014 100644 --- a/packages/react-native-web/src/apis/AppRegistry/index.js +++ b/packages/react-native-web/src/exports/AppRegistry/index.js @@ -11,7 +11,7 @@ */ import invariant from 'fbjs/lib/invariant'; -import unmountComponentAtNode from '../../modules/unmountComponentAtNode'; +import unmountComponentAtNode from '../unmountComponentAtNode'; import renderApplication, { getApplication } from './renderApplication'; import type { ComponentType } from 'react'; diff --git a/packages/react-native-web/src/apis/AppRegistry/renderApplication.js b/packages/react-native-web/src/exports/AppRegistry/renderApplication.js similarity index 93% rename from packages/react-native-web/src/apis/AppRegistry/renderApplication.js rename to packages/react-native-web/src/exports/AppRegistry/renderApplication.js index f3ee075ee..b0e5b5ac9 100644 --- a/packages/react-native-web/src/apis/AppRegistry/renderApplication.js +++ b/packages/react-native-web/src/exports/AppRegistry/renderApplication.js @@ -12,8 +12,8 @@ import AppContainer from './AppContainer'; import invariant from 'fbjs/lib/invariant'; import hydrate from '../../modules/hydrate'; -import render from '../../modules/render'; -import StyleSheet from '../../apis/StyleSheet'; +import render from '../render'; +import StyleSheet from '../StyleSheet'; import React, { type ComponentType } from 'react'; const renderFn = process.env.NODE_ENV !== 'production' ? render : hydrate; diff --git a/packages/react-native-web/src/apis/AppState/__tests__/index-test.js b/packages/react-native-web/src/exports/AppState/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/apis/AppState/__tests__/index-test.js rename to packages/react-native-web/src/exports/AppState/__tests__/index-test.js diff --git a/packages/react-native-web/src/apis/AppState/index.js b/packages/react-native-web/src/exports/AppState/index.js similarity index 100% rename from packages/react-native-web/src/apis/AppState/index.js rename to packages/react-native-web/src/exports/AppState/index.js diff --git a/packages/react-native-web/src/apis/AsyncStorage/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/AsyncStorage/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from packages/react-native-web/src/apis/AsyncStorage/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/exports/AsyncStorage/__tests__/__snapshots__/index-test.js.snap diff --git a/packages/react-native-web/src/apis/AsyncStorage/__tests__/index-test.js b/packages/react-native-web/src/exports/AsyncStorage/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/apis/AsyncStorage/__tests__/index-test.js rename to packages/react-native-web/src/exports/AsyncStorage/__tests__/index-test.js diff --git a/packages/react-native-web/src/apis/AsyncStorage/index.js b/packages/react-native-web/src/exports/AsyncStorage/index.js similarity index 100% rename from packages/react-native-web/src/apis/AsyncStorage/index.js rename to packages/react-native-web/src/exports/AsyncStorage/index.js diff --git a/packages/react-native-web/src/apis/BackHandler/index.js b/packages/react-native-web/src/exports/BackHandler/index.js similarity index 100% rename from packages/react-native-web/src/apis/BackHandler/index.js rename to packages/react-native-web/src/exports/BackHandler/index.js diff --git a/packages/react-native-web/src/components/Button/__tests__/index-test.js b/packages/react-native-web/src/exports/Button/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/Button/__tests__/index-test.js rename to packages/react-native-web/src/exports/Button/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/Button/index.js b/packages/react-native-web/src/exports/Button/index.js similarity index 90% rename from packages/react-native-web/src/components/Button/index.js rename to packages/react-native-web/src/exports/Button/index.js index 967b02ad9..0af6cd52a 100644 --- a/packages/react-native-web/src/components/Button/index.js +++ b/packages/react-native-web/src/exports/Button/index.js @@ -10,9 +10,9 @@ * @flow */ -import ColorPropType from '../../propTypes/ColorPropType'; -import StyleSheet from '../../apis/StyleSheet'; -import TouchableOpacity from '../Touchable/TouchableOpacity'; +import ColorPropType from '../ColorPropType'; +import StyleSheet from '../StyleSheet'; +import TouchableOpacity from '../TouchableOpacity'; import Text from '../Text'; import { bool, func, string } from 'prop-types'; import React, { Component } from 'react'; diff --git a/packages/react-native-web/src/components/CheckBox/__tests__/index-test.js b/packages/react-native-web/src/exports/CheckBox/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/CheckBox/__tests__/index-test.js rename to packages/react-native-web/src/exports/CheckBox/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/CheckBox/index.js b/packages/react-native-web/src/exports/CheckBox/index.js similarity index 93% rename from packages/react-native-web/src/components/CheckBox/index.js rename to packages/react-native-web/src/exports/CheckBox/index.js index 81aed8263..ffd6f5d28 100644 --- a/packages/react-native-web/src/components/CheckBox/index.js +++ b/packages/react-native-web/src/exports/CheckBox/index.js @@ -11,12 +11,12 @@ */ import applyNativeMethods from '../../modules/applyNativeMethods'; -import ColorPropType from '../../propTypes/ColorPropType'; -import createElement from '../../modules/createElement'; -import StyleSheet from '../../apis/StyleSheet'; -import UIManager from '../../apis/UIManager'; +import ColorPropType from '../ColorPropType'; +import createElement from '../createElement'; +import StyleSheet from '../StyleSheet'; +import UIManager from '../UIManager'; import View from '../View'; -import ViewPropTypes, { type ViewProps } from '../View/ViewPropTypes'; +import ViewPropTypes, { type ViewProps } from '../ViewPropTypes'; import React, { Component } from 'react'; import { bool, func } from 'prop-types'; diff --git a/packages/react-native-web/src/apis/Clipboard/index.js b/packages/react-native-web/src/exports/Clipboard/index.js similarity index 100% rename from packages/react-native-web/src/apis/Clipboard/index.js rename to packages/react-native-web/src/exports/Clipboard/index.js diff --git a/packages/react-native-web/src/propTypes/ColorPropType.js b/packages/react-native-web/src/exports/ColorPropType/index.js similarity index 100% rename from packages/react-native-web/src/propTypes/ColorPropType.js rename to packages/react-native-web/src/exports/ColorPropType/index.js diff --git a/packages/react-native-web/src/apis/Dimensions/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/Dimensions/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from packages/react-native-web/src/apis/Dimensions/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/exports/Dimensions/__tests__/__snapshots__/index-test.js.snap diff --git a/packages/react-native-web/src/apis/Dimensions/__tests__/index-test.js b/packages/react-native-web/src/exports/Dimensions/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/apis/Dimensions/__tests__/index-test.js rename to packages/react-native-web/src/exports/Dimensions/__tests__/index-test.js diff --git a/packages/react-native-web/src/apis/Dimensions/index.js b/packages/react-native-web/src/exports/Dimensions/index.js similarity index 100% rename from packages/react-native-web/src/apis/Dimensions/index.js rename to packages/react-native-web/src/exports/Dimensions/index.js diff --git a/packages/react-native-web/src/apis/Easing/index.js b/packages/react-native-web/src/exports/Easing/index.js similarity index 100% rename from packages/react-native-web/src/apis/Easing/index.js rename to packages/react-native-web/src/exports/Easing/index.js diff --git a/packages/react-native-web/src/propTypes/EdgeInsetsPropType.js b/packages/react-native-web/src/exports/EdgeInsetsPropType/index.js similarity index 88% rename from packages/react-native-web/src/propTypes/EdgeInsetsPropType.js rename to packages/react-native-web/src/exports/EdgeInsetsPropType/index.js index 3598e473a..f0ef65e4c 100644 --- a/packages/react-native-web/src/propTypes/EdgeInsetsPropType.js +++ b/packages/react-native-web/src/exports/EdgeInsetsPropType/index.js @@ -10,7 +10,7 @@ * @flow */ -import createStrictShapeTypeChecker from './createStrictShapeTypeChecker'; +import createStrictShapeTypeChecker from '../../modules/createStrictShapeTypeChecker'; import { number } from 'prop-types'; export type EdgeInsetsProp = { diff --git a/packages/react-native-web/src/exports/FlatList/index.js b/packages/react-native-web/src/exports/FlatList/index.js new file mode 100644 index 000000000..9cd4039d7 --- /dev/null +++ b/packages/react-native-web/src/exports/FlatList/index.js @@ -0,0 +1,2 @@ +import UnimplementedView from '../../modules/UnimplementedView'; +export default UnimplementedView; diff --git a/packages/react-native-web/src/apis/I18nManager/__tests__/index-test.js b/packages/react-native-web/src/exports/I18nManager/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/apis/I18nManager/__tests__/index-test.js rename to packages/react-native-web/src/exports/I18nManager/__tests__/index-test.js diff --git a/packages/react-native-web/src/apis/I18nManager/index.js b/packages/react-native-web/src/exports/I18nManager/index.js similarity index 100% rename from packages/react-native-web/src/apis/I18nManager/index.js rename to packages/react-native-web/src/exports/I18nManager/index.js diff --git a/packages/react-native-web/src/components/Image/ImageResizeMode.js b/packages/react-native-web/src/exports/Image/ImageResizeMode.js similarity index 100% rename from packages/react-native-web/src/components/Image/ImageResizeMode.js rename to packages/react-native-web/src/exports/Image/ImageResizeMode.js diff --git a/packages/react-native-web/src/components/Image/ImageStylePropTypes.js b/packages/react-native-web/src/exports/Image/ImageStylePropTypes.js similarity index 62% rename from packages/react-native-web/src/components/Image/ImageStylePropTypes.js rename to packages/react-native-web/src/exports/Image/ImageStylePropTypes.js index 5af1bd40c..877b7f6d1 100644 --- a/packages/react-native-web/src/components/Image/ImageStylePropTypes.js +++ b/packages/react-native-web/src/exports/Image/ImageStylePropTypes.js @@ -2,12 +2,12 @@ * @flow */ -import BorderPropTypes from '../../propTypes/BorderPropTypes'; -import ColorPropType from '../../propTypes/ColorPropType'; +import BorderPropTypes from '../../modules/BorderPropTypes'; +import ColorPropType from '../ColorPropType'; import ImageResizeMode from './ImageResizeMode'; -import LayoutPropTypes from '../../propTypes/LayoutPropTypes'; -import ShadowPropTypes from '../../propTypes/ShadowPropTypes'; -import TransformPropTypes from '../../propTypes/TransformPropTypes'; +import LayoutPropTypes from '../../modules/LayoutPropTypes'; +import ShadowPropTypes from '../../modules/ShadowPropTypes'; +import TransformPropTypes from '../../modules/TransformPropTypes'; import { number, oneOf, string } from 'prop-types'; const ImageStylePropTypes = { diff --git a/packages/react-native-web/src/components/Image/ImageUriCache.js b/packages/react-native-web/src/exports/Image/ImageUriCache.js similarity index 100% rename from packages/react-native-web/src/components/Image/ImageUriCache.js rename to packages/react-native-web/src/exports/Image/ImageUriCache.js diff --git a/packages/react-native-web/src/components/Image/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/Image/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from packages/react-native-web/src/components/Image/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/exports/Image/__tests__/__snapshots__/index-test.js.snap diff --git a/packages/react-native-web/src/components/Image/__tests__/index-test.js b/packages/react-native-web/src/exports/Image/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/Image/__tests__/index-test.js rename to packages/react-native-web/src/exports/Image/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/Image/index.js b/packages/react-native-web/src/exports/Image/index.js similarity index 97% rename from packages/react-native-web/src/components/Image/index.js rename to packages/react-native-web/src/exports/Image/index.js index 465f9ea4b..3a1981067 100644 --- a/packages/react-native-web/src/components/Image/index.js +++ b/packages/react-native-web/src/exports/Image/index.js @@ -11,17 +11,17 @@ */ import applyNativeMethods from '../../modules/applyNativeMethods'; -import createElement from '../../modules/createElement'; +import createElement from '../createElement'; import { getAssetByID } from '../../modules/AssetRegistry'; import ImageLoader from '../../modules/ImageLoader'; import ImageResizeMode from './ImageResizeMode'; import ImageStylePropTypes from './ImageStylePropTypes'; import ImageUriCache from './ImageUriCache'; import requestIdleCallback, { cancelIdleCallback } from '../../modules/requestIdleCallback'; -import StyleSheet from '../../apis/StyleSheet'; -import StyleSheetPropType from '../../propTypes/StyleSheetPropType'; +import StyleSheet from '../StyleSheet'; +import StyleSheetPropType from '../../modules/StyleSheetPropType'; import View from '../View'; -import ViewPropTypes from '../View/ViewPropTypes'; +import ViewPropTypes from '../ViewPropTypes'; import { bool, func, number, oneOf, oneOfType, shape, string } from 'prop-types'; import React, { Component } from 'react'; diff --git a/packages/react-native-web/src/components/Image/__tests__/ImageBackground-test.js b/packages/react-native-web/src/exports/ImageBackground/__tests__/index.js similarity index 93% rename from packages/react-native-web/src/components/Image/__tests__/ImageBackground-test.js rename to packages/react-native-web/src/exports/ImageBackground/__tests__/index.js index 71550b30a..30a61b4a6 100644 --- a/packages/react-native-web/src/components/Image/__tests__/ImageBackground-test.js +++ b/packages/react-native-web/src/exports/ImageBackground/__tests__/index.js @@ -1,7 +1,7 @@ /* eslint-env jasmine, jest */ -import Image from '..'; -import ImageBackground from '../ImageBackground'; +import Image from '../../Image'; +import ImageBackground from '..'; import React from 'react'; import { shallow } from 'enzyme'; import Text from '../../Text'; diff --git a/packages/react-native-web/src/components/Image/ImageBackground.js b/packages/react-native-web/src/exports/ImageBackground/index.js similarity index 91% rename from packages/react-native-web/src/components/Image/ImageBackground.js rename to packages/react-native-web/src/exports/ImageBackground/index.js index 23ebd8b2a..63d6d0150 100644 --- a/packages/react-native-web/src/components/Image/ImageBackground.js +++ b/packages/react-native-web/src/exports/ImageBackground/index.js @@ -8,11 +8,11 @@ * * @flow */ -import ensureComponentIsNative from '../Touchable/ensureComponentIsNative'; -import Image from './'; -import StyleSheet from '../../apis/StyleSheet'; +import ensureComponentIsNative from '../../modules/ensureComponentIsNative'; +import Image from '../Image'; +import StyleSheet from '../StyleSheet'; import View from '../View'; -import ViewPropTypes from '../View/ViewPropTypes'; +import ViewPropTypes from '../ViewPropTypes'; import React, { Component } from 'react'; const emptyObject = {}; diff --git a/packages/react-native-web/src/apis/InteractionManager/index.js b/packages/react-native-web/src/exports/InteractionManager/index.js similarity index 100% rename from packages/react-native-web/src/apis/InteractionManager/index.js rename to packages/react-native-web/src/exports/InteractionManager/index.js diff --git a/packages/react-native-web/src/apis/Keyboard/index.js b/packages/react-native-web/src/exports/Keyboard/index.js similarity index 100% rename from packages/react-native-web/src/apis/Keyboard/index.js rename to packages/react-native-web/src/exports/Keyboard/index.js diff --git a/packages/react-native-web/src/components/KeyboardAvoidingView/index.js b/packages/react-native-web/src/exports/KeyboardAvoidingView/index.js similarity index 98% rename from packages/react-native-web/src/components/KeyboardAvoidingView/index.js rename to packages/react-native-web/src/exports/KeyboardAvoidingView/index.js index bef1a6fea..f45464ebf 100644 --- a/packages/react-native-web/src/components/KeyboardAvoidingView/index.js +++ b/packages/react-native-web/src/exports/KeyboardAvoidingView/index.js @@ -13,7 +13,7 @@ import View from '../View'; import { number, oneOf } from 'prop-types'; import React, { Component } from 'react'; -import ViewPropTypes, { type ViewLayout, type ViewLayoutEvent } from '../View/ViewPropTypes'; +import ViewPropTypes, { type ViewLayout, type ViewLayoutEvent } from '../ViewPropTypes'; class KeyboardAvoidingView extends Component<*> { static propTypes = { diff --git a/packages/react-native-web/src/apis/Linking/index.js b/packages/react-native-web/src/exports/Linking/index.js similarity index 100% rename from packages/react-native-web/src/apis/Linking/index.js rename to packages/react-native-web/src/exports/Linking/index.js diff --git a/packages/react-native-web/src/components/ListView/ListViewDataSource.js b/packages/react-native-web/src/exports/ListView/ListViewDataSource.js similarity index 100% rename from packages/react-native-web/src/components/ListView/ListViewDataSource.js rename to packages/react-native-web/src/exports/ListView/ListViewDataSource.js diff --git a/packages/react-native-web/src/components/ListView/ListViewPropTypes.js b/packages/react-native-web/src/exports/ListView/ListViewPropTypes.js similarity index 100% rename from packages/react-native-web/src/components/ListView/ListViewPropTypes.js rename to packages/react-native-web/src/exports/ListView/ListViewPropTypes.js diff --git a/packages/react-native-web/src/components/ListView/__tests__/index-test.js b/packages/react-native-web/src/exports/ListView/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/ListView/__tests__/index-test.js rename to packages/react-native-web/src/exports/ListView/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/ListView/index.js b/packages/react-native-web/src/exports/ListView/index.js similarity index 99% rename from packages/react-native-web/src/components/ListView/index.js rename to packages/react-native-web/src/exports/ListView/index.js index 40845665b..3ab42eede 100644 --- a/packages/react-native-web/src/components/ListView/index.js +++ b/packages/react-native-web/src/exports/ListView/index.js @@ -2,7 +2,7 @@ import applyNativeMethods from '../../modules/applyNativeMethods'; import ListViewDataSource from './ListViewDataSource'; import ListViewPropTypes from './ListViewPropTypes'; import ScrollView from '../ScrollView'; -import StaticRenderer from '../StaticRenderer'; +import StaticRenderer from '../../modules/StaticRenderer'; import React, { Component } from 'react'; import isEmpty from 'fbjs/lib/isEmpty'; import requestAnimationFrame from 'fbjs/lib/requestAnimationFrame'; diff --git a/packages/react-native-web/src/exports/Modal/index.js b/packages/react-native-web/src/exports/Modal/index.js new file mode 100644 index 000000000..9cd4039d7 --- /dev/null +++ b/packages/react-native-web/src/exports/Modal/index.js @@ -0,0 +1,2 @@ +import UnimplementedView from '../../modules/UnimplementedView'; +export default UnimplementedView; diff --git a/packages/react-native-web/src/modules/NativeModules/index.js b/packages/react-native-web/src/exports/NativeModules/index.js similarity index 100% rename from packages/react-native-web/src/modules/NativeModules/index.js rename to packages/react-native-web/src/exports/NativeModules/index.js diff --git a/packages/react-native-web/src/apis/NetInfo/__tests__/index-test.js b/packages/react-native-web/src/exports/NetInfo/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/apis/NetInfo/__tests__/index-test.js rename to packages/react-native-web/src/exports/NetInfo/__tests__/index-test.js diff --git a/packages/react-native-web/src/apis/NetInfo/index.js b/packages/react-native-web/src/exports/NetInfo/index.js similarity index 100% rename from packages/react-native-web/src/apis/NetInfo/index.js rename to packages/react-native-web/src/exports/NetInfo/index.js diff --git a/packages/react-native-web/src/apis/PanResponder/index.js b/packages/react-native-web/src/exports/PanResponder/index.js similarity index 100% rename from packages/react-native-web/src/apis/PanResponder/index.js rename to packages/react-native-web/src/exports/PanResponder/index.js diff --git a/packages/react-native-web/src/exports/Picker/PickerItem.js b/packages/react-native-web/src/exports/Picker/PickerItem.js new file mode 100644 index 000000000..5a0fc1ef8 --- /dev/null +++ b/packages/react-native-web/src/exports/Picker/PickerItem.js @@ -0,0 +1,25 @@ +import ColorPropType from '../ColorPropType'; +import { Component } from 'react'; +import createElement from '../createElement'; +import { number, oneOfType, string } from 'prop-types'; + +type Props = { + color?: ColorPropType, + label: string, + testID?: string, + value?: number | string +}; + +export default class PickerItem extends Component { + static propTypes = { + color: ColorPropType, + label: string.isRequired, + testID: string, + value: oneOfType([number, string]) + }; + + render() { + const { label, testID, value } = this.props; + return createElement('option', { label, testID, value }); + } +} diff --git a/packages/react-native-web/src/components/Picker/PickerItemPropType.js b/packages/react-native-web/src/exports/Picker/PickerItemPropType.js similarity index 100% rename from packages/react-native-web/src/components/Picker/PickerItemPropType.js rename to packages/react-native-web/src/exports/Picker/PickerItemPropType.js diff --git a/packages/react-native-web/src/components/Picker/PickerStylePropTypes.js b/packages/react-native-web/src/exports/Picker/PickerStylePropTypes.js similarity index 88% rename from packages/react-native-web/src/components/Picker/PickerStylePropTypes.js rename to packages/react-native-web/src/exports/Picker/PickerStylePropTypes.js index 85f35f645..deb8c45db 100644 --- a/packages/react-native-web/src/components/Picker/PickerStylePropTypes.js +++ b/packages/react-native-web/src/exports/Picker/PickerStylePropTypes.js @@ -9,7 +9,7 @@ * @flow */ -import ColorPropType from '../../propTypes/ColorPropType'; +import ColorPropType from '../ColorPropType'; import ViewStylePropTypes from '../View/ViewStylePropTypes'; const PickerStylePropTypes = { diff --git a/packages/react-native-web/src/components/Picker/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/Picker/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from packages/react-native-web/src/components/Picker/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/exports/Picker/__tests__/__snapshots__/index-test.js.snap diff --git a/packages/react-native-web/src/components/Picker/__tests__/index-test.js b/packages/react-native-web/src/exports/Picker/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/Picker/__tests__/index-test.js rename to packages/react-native-web/src/exports/Picker/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/Picker/index.js b/packages/react-native-web/src/exports/Picker/index.js similarity index 70% rename from packages/react-native-web/src/components/Picker/index.js rename to packages/react-native-web/src/exports/Picker/index.js index f6c51d452..0b6730986 100644 --- a/packages/react-native-web/src/components/Picker/index.js +++ b/packages/react-native-web/src/exports/Picker/index.js @@ -12,38 +12,16 @@ import applyNativeMethods from '../../modules/applyNativeMethods'; import { Component } from 'react'; -import ColorPropType from '../../propTypes/ColorPropType'; -import createElement from '../../modules/createElement'; +import createElement from '../createElement'; +import PickerItem from './PickerItem'; import PickerItemPropType from './PickerItemPropType'; import PickerStylePropTypes from './PickerStylePropTypes'; -import StyleSheetPropType from '../../propTypes/StyleSheetPropType'; -import StyleSheet from '../../apis/StyleSheet'; -import TextStylePropTypes from '../Text/TextStylePropTypes'; +import StyleSheetPropType from '../../modules/StyleSheetPropType'; +import StyleSheet from '../StyleSheet'; +import TextPropTypes from '../Text/TextPropTypes'; import { arrayOf, bool, func, number, oneOfType, string } from 'prop-types'; const pickerStyleType = StyleSheetPropType(PickerStylePropTypes); -const itemStylePropType = StyleSheetPropType(TextStylePropTypes); - -type ItemProps = { - color?: ColorPropType, - label: string, - testID?: string, - value?: number | string -}; - -class PickerItem extends Component { - static propTypes = { - color: ColorPropType, - label: string.isRequired, - testID: string, - value: oneOfType([number, string]) - }; - - render() { - const { label, testID, value } = this.props; - return createElement('option', { label, testID, value }); - } -} type Props = { children?: Array, @@ -53,7 +31,7 @@ type Props = { style?: pickerStyleType, testID?: string, /* compat */ - itemStyle?: itemStylePropType, + itemStyle?: TextPropTypes.style, mode?: string, prompt?: string }; diff --git a/packages/react-native-web/src/apis/PixelRatio/__tests__/index-test.js b/packages/react-native-web/src/exports/PixelRatio/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/apis/PixelRatio/__tests__/index-test.js rename to packages/react-native-web/src/exports/PixelRatio/__tests__/index-test.js diff --git a/packages/react-native-web/src/apis/PixelRatio/index.js b/packages/react-native-web/src/exports/PixelRatio/index.js similarity index 100% rename from packages/react-native-web/src/apis/PixelRatio/index.js rename to packages/react-native-web/src/exports/PixelRatio/index.js diff --git a/packages/react-native-web/src/apis/Platform/index.js b/packages/react-native-web/src/exports/Platform/index.js similarity index 100% rename from packages/react-native-web/src/apis/Platform/index.js rename to packages/react-native-web/src/exports/Platform/index.js diff --git a/packages/react-native-web/src/propTypes/PointPropType.js b/packages/react-native-web/src/exports/PointPropType/index.js similarity index 85% rename from packages/react-native-web/src/propTypes/PointPropType.js rename to packages/react-native-web/src/exports/PointPropType/index.js index ae1814f3d..9e4ac0932 100644 --- a/packages/react-native-web/src/propTypes/PointPropType.js +++ b/packages/react-native-web/src/exports/PointPropType/index.js @@ -10,7 +10,7 @@ * @flow */ -import createStrictShapeTypeChecker from './createStrictShapeTypeChecker'; +import createStrictShapeTypeChecker from '../../modules/createStrictShapeTypeChecker'; import { number } from 'prop-types'; const PointPropType = createStrictShapeTypeChecker({ diff --git a/packages/react-native-web/src/components/ProgressBar/__tests__/index-test.js b/packages/react-native-web/src/exports/ProgressBar/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/ProgressBar/__tests__/index-test.js rename to packages/react-native-web/src/exports/ProgressBar/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/ProgressBar/index.js b/packages/react-native-web/src/exports/ProgressBar/index.js similarity index 93% rename from packages/react-native-web/src/components/ProgressBar/index.js rename to packages/react-native-web/src/exports/ProgressBar/index.js index f14bb463d..1529c4dc8 100644 --- a/packages/react-native-web/src/components/ProgressBar/index.js +++ b/packages/react-native-web/src/exports/ProgressBar/index.js @@ -10,10 +10,10 @@ */ import applyNativeMethods from '../../modules/applyNativeMethods'; -import ColorPropType from '../../propTypes/ColorPropType'; -import StyleSheet from '../../apis/StyleSheet'; +import ColorPropType from '../ColorPropType'; +import StyleSheet from '../StyleSheet'; import View from '../View'; -import ViewPropTypes from '../View/ViewPropTypes'; +import ViewPropTypes from '../ViewPropTypes'; import React, { Component } from 'react'; import { bool, number } from 'prop-types'; diff --git a/packages/react-native-web/src/components/RefreshControl/index.js b/packages/react-native-web/src/exports/RefreshControl/index.js similarity index 91% rename from packages/react-native-web/src/components/RefreshControl/index.js rename to packages/react-native-web/src/exports/RefreshControl/index.js index bd0f00b96..871b960b9 100644 --- a/packages/react-native-web/src/components/RefreshControl/index.js +++ b/packages/react-native-web/src/exports/RefreshControl/index.js @@ -10,9 +10,9 @@ * @flow */ -import ColorPropType from '../../propTypes/ColorPropType'; +import ColorPropType from '../ColorPropType'; import View from '../View'; -import ViewPropTypes from '../View/ViewPropTypes'; +import ViewPropTypes from '../ViewPropTypes'; import { arrayOf, bool, func, number, oneOf, string } from 'prop-types'; import React, { Component } from 'react'; diff --git a/packages/react-native-web/src/components/SafeAreaView/index.js b/packages/react-native-web/src/exports/SafeAreaView/index.js similarity index 100% rename from packages/react-native-web/src/components/SafeAreaView/index.js rename to packages/react-native-web/src/exports/SafeAreaView/index.js diff --git a/packages/react-native-web/src/components/ScrollView/ScrollViewBase.js b/packages/react-native-web/src/exports/ScrollView/ScrollViewBase.js similarity index 98% rename from packages/react-native-web/src/components/ScrollView/ScrollViewBase.js rename to packages/react-native-web/src/exports/ScrollView/ScrollViewBase.js index 5ff0a723b..b53ebcf54 100644 --- a/packages/react-native-web/src/components/ScrollView/ScrollViewBase.js +++ b/packages/react-native-web/src/exports/ScrollView/ScrollViewBase.js @@ -9,9 +9,9 @@ */ import debounce from 'debounce'; -import StyleSheet from '../../apis/StyleSheet'; +import StyleSheet from '../StyleSheet'; import View from '../View'; -import ViewPropTypes from '../View/ViewPropTypes'; +import ViewPropTypes from '../ViewPropTypes'; import React, { Component } from 'react'; import { bool, func, number } from 'prop-types'; diff --git a/packages/react-native-web/src/components/ScrollView/__tests__/index-test.js b/packages/react-native-web/src/exports/ScrollView/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/ScrollView/__tests__/index-test.js rename to packages/react-native-web/src/exports/ScrollView/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/ScrollView/index.js b/packages/react-native-web/src/exports/ScrollView/index.js similarity index 95% rename from packages/react-native-web/src/components/ScrollView/index.js rename to packages/react-native-web/src/exports/ScrollView/index.js index ea3d55345..a29c775e6 100644 --- a/packages/react-native-web/src/components/ScrollView/index.js +++ b/packages/react-native-web/src/exports/ScrollView/index.js @@ -12,15 +12,13 @@ import createReactClass from 'create-react-class'; import dismissKeyboard from '../../modules/dismissKeyboard'; -import findNodeHandle from '../../modules/findNodeHandle'; +import findNodeHandle from '../findNodeHandle'; import invariant from 'fbjs/lib/invariant'; import ScrollResponder from '../../modules/ScrollResponder'; import ScrollViewBase from './ScrollViewBase'; -import StyleSheet from '../../apis/StyleSheet'; -import StyleSheetPropType from '../../propTypes/StyleSheetPropType'; +import StyleSheet from '../StyleSheet'; import View from '../View'; -import ViewPropTypes from '../View/ViewPropTypes'; -import ViewStylePropTypes from '../View/ViewStylePropTypes'; +import ViewPropTypes from '../ViewPropTypes'; import React from 'react'; import { bool, element, func, number, oneOf } from 'prop-types'; @@ -30,7 +28,7 @@ const emptyObject = {}; const ScrollView = createReactClass({ propTypes: { ...ViewPropTypes, - contentContainerStyle: StyleSheetPropType(ViewStylePropTypes), + contentContainerStyle: ViewPropTypes.style, horizontal: bool, keyboardDismissMode: oneOf(['none', 'interactive', 'on-drag']), onContentSizeChange: func, @@ -39,7 +37,7 @@ const ScrollView = createReactClass({ refreshControl: element, scrollEnabled: bool, scrollEventThrottle: number, - style: StyleSheetPropType(ViewStylePropTypes) + style: ViewPropTypes.style }, mixins: [ScrollResponder.Mixin], diff --git a/packages/react-native-web/src/exports/SectionList/index.js b/packages/react-native-web/src/exports/SectionList/index.js new file mode 100644 index 000000000..9cd4039d7 --- /dev/null +++ b/packages/react-native-web/src/exports/SectionList/index.js @@ -0,0 +1,2 @@ +import UnimplementedView from '../../modules/UnimplementedView'; +export default UnimplementedView; diff --git a/packages/react-native-web/src/exports/Slider/index.js b/packages/react-native-web/src/exports/Slider/index.js new file mode 100644 index 000000000..9cd4039d7 --- /dev/null +++ b/packages/react-native-web/src/exports/Slider/index.js @@ -0,0 +1,2 @@ +import UnimplementedView from '../../modules/UnimplementedView'; +export default UnimplementedView; diff --git a/packages/react-native-web/src/components/StatusBar/index.js b/packages/react-native-web/src/exports/StatusBar/index.js similarity index 100% rename from packages/react-native-web/src/components/StatusBar/index.js rename to packages/react-native-web/src/exports/StatusBar/index.js diff --git a/packages/react-native-web/src/apis/StyleSheet/StyleManager.js b/packages/react-native-web/src/exports/StyleSheet/StyleManager.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/StyleManager.js rename to packages/react-native-web/src/exports/StyleSheet/StyleManager.js diff --git a/packages/react-native-web/src/apis/StyleSheet/StyleRegistry.js b/packages/react-native-web/src/exports/StyleSheet/StyleRegistry.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/StyleRegistry.js rename to packages/react-native-web/src/exports/StyleSheet/StyleRegistry.js diff --git a/packages/react-native-web/src/apis/StyleSheet/StyleSheetValidation.js b/packages/react-native-web/src/exports/StyleSheet/StyleSheetValidation.js similarity index 90% rename from packages/react-native-web/src/apis/StyleSheet/StyleSheetValidation.js rename to packages/react-native-web/src/exports/StyleSheet/StyleSheetValidation.js index cbaa5cf45..56fed3fc8 100644 --- a/packages/react-native-web/src/apis/StyleSheet/StyleSheetValidation.js +++ b/packages/react-native-web/src/exports/StyleSheet/StyleSheetValidation.js @@ -10,10 +10,10 @@ * @flow */ -import ImageStylePropTypes from '../../components/Image/ImageStylePropTypes'; -import TextInputStylePropTypes from '../../components/TextInput/TextInputStylePropTypes'; -import TextStylePropTypes from '../../components/Text/TextStylePropTypes'; -import ViewStylePropTypes from '../../components/View/ViewStylePropTypes'; +import ImageStylePropTypes from '../Image/ImageStylePropTypes'; +import TextInputStylePropTypes from '../TextInput/TextInputStylePropTypes'; +import TextStylePropTypes from '../Text/TextStylePropTypes'; +import ViewStylePropTypes from '../View/ViewStylePropTypes'; import warning from 'fbjs/lib/warning'; import { number, oneOf, string } from 'prop-types'; diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/StyleManager-test.js b/packages/react-native-web/src/exports/StyleSheet/__tests__/StyleManager-test.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/StyleManager-test.js rename to packages/react-native-web/src/exports/StyleSheet/__tests__/StyleManager-test.js diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/StyleRegistry-test.js b/packages/react-native-web/src/exports/StyleSheet/__tests__/StyleRegistry-test.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/StyleRegistry-test.js rename to packages/react-native-web/src/exports/StyleSheet/__tests__/StyleRegistry-test.js diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/StyleManager-test.js.snap b/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/StyleManager-test.js.snap similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/StyleManager-test.js.snap rename to packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/StyleManager-test.js.snap diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/StyleRegistry-test.js.snap b/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/StyleRegistry-test.js.snap similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/StyleRegistry-test.js.snap rename to packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/StyleRegistry-test.js.snap diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap b/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap rename to packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/flattenStyle-test.js.snap b/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/flattenStyle-test.js.snap similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/flattenStyle-test.js.snap rename to packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/flattenStyle-test.js.snap diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/generateCss-test.js.snap b/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/generateCss-test.js.snap similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/generateCss-test.js.snap rename to packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/generateCss-test.js.snap diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/i18nStyle-test.js.snap b/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/i18nStyle-test.js.snap similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/i18nStyle-test.js.snap rename to packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/i18nStyle-test.js.snap diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/index-test.js.snap diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/createReactDOMStyle-test.js b/packages/react-native-web/src/exports/StyleSheet/__tests__/createReactDOMStyle-test.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/createReactDOMStyle-test.js rename to packages/react-native-web/src/exports/StyleSheet/__tests__/createReactDOMStyle-test.js diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/flattenStyle-test.js b/packages/react-native-web/src/exports/StyleSheet/__tests__/flattenStyle-test.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/flattenStyle-test.js rename to packages/react-native-web/src/exports/StyleSheet/__tests__/flattenStyle-test.js diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/generateCss-test.js b/packages/react-native-web/src/exports/StyleSheet/__tests__/generateCss-test.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/generateCss-test.js rename to packages/react-native-web/src/exports/StyleSheet/__tests__/generateCss-test.js diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/i18nStyle-test.js b/packages/react-native-web/src/exports/StyleSheet/__tests__/i18nStyle-test.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/i18nStyle-test.js rename to packages/react-native-web/src/exports/StyleSheet/__tests__/i18nStyle-test.js diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/index-test.js b/packages/react-native-web/src/exports/StyleSheet/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/index-test.js rename to packages/react-native-web/src/exports/StyleSheet/__tests__/index-test.js diff --git a/packages/react-native-web/src/apis/StyleSheet/__tests__/normalizeValue-test.js b/packages/react-native-web/src/exports/StyleSheet/__tests__/normalizeValue-test.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/__tests__/normalizeValue-test.js rename to packages/react-native-web/src/exports/StyleSheet/__tests__/normalizeValue-test.js diff --git a/packages/react-native-web/src/apis/StyleSheet/createReactDOMStyle.js b/packages/react-native-web/src/exports/StyleSheet/createReactDOMStyle.js similarity index 99% rename from packages/react-native-web/src/apis/StyleSheet/createReactDOMStyle.js rename to packages/react-native-web/src/exports/StyleSheet/createReactDOMStyle.js index 8f5954bae..014931531 100644 --- a/packages/react-native-web/src/apis/StyleSheet/createReactDOMStyle.js +++ b/packages/react-native-web/src/exports/StyleSheet/createReactDOMStyle.js @@ -18,7 +18,7 @@ */ import normalizeValue from './normalizeValue'; -import processColor from '../../modules/processColor'; +import processColor from '../processColor'; const emptyObject = {}; const styleShortFormProperties = { diff --git a/packages/react-native-web/src/apis/StyleSheet/flattenStyle.js b/packages/react-native-web/src/exports/StyleSheet/flattenStyle.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/flattenStyle.js rename to packages/react-native-web/src/exports/StyleSheet/flattenStyle.js diff --git a/packages/react-native-web/src/apis/StyleSheet/generateCss.js b/packages/react-native-web/src/exports/StyleSheet/generateCss.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/generateCss.js rename to packages/react-native-web/src/exports/StyleSheet/generateCss.js diff --git a/packages/react-native-web/src/apis/StyleSheet/getHairlineWidth.js b/packages/react-native-web/src/exports/StyleSheet/getHairlineWidth.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/getHairlineWidth.js rename to packages/react-native-web/src/exports/StyleSheet/getHairlineWidth.js diff --git a/packages/react-native-web/src/apis/StyleSheet/i18nStyle.js b/packages/react-native-web/src/exports/StyleSheet/i18nStyle.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/i18nStyle.js rename to packages/react-native-web/src/exports/StyleSheet/i18nStyle.js diff --git a/packages/react-native-web/src/apis/StyleSheet/index.js b/packages/react-native-web/src/exports/StyleSheet/index.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/index.js rename to packages/react-native-web/src/exports/StyleSheet/index.js diff --git a/packages/react-native-web/src/apis/StyleSheet/normalizeValue.js b/packages/react-native-web/src/exports/StyleSheet/normalizeValue.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/normalizeValue.js rename to packages/react-native-web/src/exports/StyleSheet/normalizeValue.js diff --git a/packages/react-native-web/src/apis/StyleSheet/registry.js b/packages/react-native-web/src/exports/StyleSheet/registry.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/registry.js rename to packages/react-native-web/src/exports/StyleSheet/registry.js diff --git a/packages/react-native-web/src/apis/StyleSheet/staticCss.js b/packages/react-native-web/src/exports/StyleSheet/staticCss.js similarity index 100% rename from packages/react-native-web/src/apis/StyleSheet/staticCss.js rename to packages/react-native-web/src/exports/StyleSheet/staticCss.js diff --git a/packages/react-native-web/src/components/Switch/__tests__/index-test.js b/packages/react-native-web/src/exports/Switch/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/Switch/__tests__/index-test.js rename to packages/react-native-web/src/exports/Switch/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/Switch/index.js b/packages/react-native-web/src/exports/Switch/index.js similarity index 95% rename from packages/react-native-web/src/components/Switch/index.js rename to packages/react-native-web/src/exports/Switch/index.js index 5f304b555..8d7c060d8 100644 --- a/packages/react-native-web/src/components/Switch/index.js +++ b/packages/react-native-web/src/exports/Switch/index.js @@ -10,13 +10,13 @@ */ import applyNativeMethods from '../../modules/applyNativeMethods'; -import ColorPropType from '../../propTypes/ColorPropType'; -import createElement from '../../modules/createElement'; +import ColorPropType from '../ColorPropType'; +import createElement from '../createElement'; import multiplyStyleLengthValue from '../../modules/multiplyStyleLengthValue'; -import StyleSheet from '../../apis/StyleSheet'; -import UIManager from '../../apis/UIManager'; +import StyleSheet from '../StyleSheet'; +import UIManager from '../UIManager'; import View from '../View'; -import ViewPropTypes from '../View/ViewPropTypes'; +import ViewPropTypes from '../ViewPropTypes'; import React, { Component } from 'react'; import { bool, func } from 'prop-types'; diff --git a/packages/react-native-web/src/components/Text/TextPropTypes.js b/packages/react-native-web/src/exports/Text/TextPropTypes.js similarity index 54% rename from packages/react-native-web/src/components/Text/TextPropTypes.js rename to packages/react-native-web/src/exports/Text/TextPropTypes.js index bfc70a1fb..83f5fdd35 100644 --- a/packages/react-native-web/src/components/Text/TextPropTypes.js +++ b/packages/react-native-web/src/exports/Text/TextPropTypes.js @@ -10,20 +10,25 @@ * @flow */ -import BaseComponentPropTypes from '../../propTypes/BaseComponentPropTypes'; -import StyleSheetPropType from '../../propTypes/StyleSheetPropType'; +import StyleSheetPropType from '../../modules/StyleSheetPropType'; import TextStylePropTypes from './TextStylePropTypes'; -import { any, bool, func, number, oneOf } from 'prop-types'; +import { any, array, bool, func, number, oneOf, oneOfType, string } from 'prop-types'; const TextPropTypes = { - ...BaseComponentPropTypes, + accessibilityComponentType: string, + accessibilityLabel: string, + accessibilityLiveRegion: oneOf(['assertive', 'none', 'polite']), accessibilityRole: oneOf(['button', 'heading', 'label', 'link', 'listitem']), + accessibilityTraits: oneOfType([array, string]), + accessible: bool, children: any, + importantForAccessibility: oneOf(['auto', 'no', 'no-hide-descendants', 'yes']), numberOfLines: number, onLayout: func, onPress: func, selectable: bool, - style: StyleSheetPropType(TextStylePropTypes) + style: StyleSheetPropType(TextStylePropTypes), + testID: string }; export default TextPropTypes; diff --git a/packages/react-native-web/src/components/Text/TextStylePropTypes.js b/packages/react-native-web/src/exports/Text/TextStylePropTypes.js similarity index 96% rename from packages/react-native-web/src/components/Text/TextStylePropTypes.js rename to packages/react-native-web/src/exports/Text/TextStylePropTypes.js index db1221804..5caa4ef8e 100644 --- a/packages/react-native-web/src/components/Text/TextStylePropTypes.js +++ b/packages/react-native-web/src/exports/Text/TextStylePropTypes.js @@ -9,7 +9,7 @@ * @flow */ -import ColorPropType from '../../propTypes/ColorPropType'; +import ColorPropType from '../ColorPropType'; import ViewStylePropTypes from '../View/ViewStylePropTypes'; import { number, oneOf, oneOfType, shape, string } from 'prop-types'; diff --git a/packages/react-native-web/src/components/Text/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/Text/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from packages/react-native-web/src/components/Text/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/exports/Text/__tests__/__snapshots__/index-test.js.snap diff --git a/packages/react-native-web/src/components/Text/__tests__/index-test.js b/packages/react-native-web/src/exports/Text/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/Text/__tests__/index-test.js rename to packages/react-native-web/src/exports/Text/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/Text/index.js b/packages/react-native-web/src/exports/Text/index.js similarity index 96% rename from packages/react-native-web/src/components/Text/index.js rename to packages/react-native-web/src/exports/Text/index.js index b12d9e368..e86acf78c 100644 --- a/packages/react-native-web/src/components/Text/index.js +++ b/packages/react-native-web/src/exports/Text/index.js @@ -14,8 +14,8 @@ import applyLayout from '../../modules/applyLayout'; import applyNativeMethods from '../../modules/applyNativeMethods'; import { bool } from 'prop-types'; import { Component } from 'react'; -import createElement from '../../modules/createElement'; -import StyleSheet from '../../apis/StyleSheet'; +import createElement from '../createElement'; +import StyleSheet from '../StyleSheet'; import TextPropTypes from './TextPropTypes'; class Text extends Component<*> { diff --git a/packages/react-native-web/src/components/TextInput/TextInputStylePropTypes.js b/packages/react-native-web/src/exports/TextInput/TextInputStylePropTypes.js similarity index 100% rename from packages/react-native-web/src/components/TextInput/TextInputStylePropTypes.js rename to packages/react-native-web/src/exports/TextInput/TextInputStylePropTypes.js diff --git a/packages/react-native-web/src/components/TextInput/__tests__/index-test.js b/packages/react-native-web/src/exports/TextInput/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/TextInput/__tests__/index-test.js rename to packages/react-native-web/src/exports/TextInput/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/TextInput/index.js b/packages/react-native-web/src/exports/TextInput/index.js similarity index 96% rename from packages/react-native-web/src/components/TextInput/index.js rename to packages/react-native-web/src/exports/TextInput/index.js index 4a6316f0a..a31e6bccc 100644 --- a/packages/react-native-web/src/components/TextInput/index.js +++ b/packages/react-native-web/src/exports/TextInput/index.js @@ -14,14 +14,14 @@ import applyLayout from '../../modules/applyLayout'; import applyNativeMethods from '../../modules/applyNativeMethods'; import { canUseDOM } from 'fbjs/lib/ExecutionEnvironment'; import { Component } from 'react'; -import ColorPropType from '../../propTypes/ColorPropType'; -import createElement from '../../modules/createElement'; -import findNodeHandle from '../../modules/findNodeHandle'; -import StyleSheet from '../../apis/StyleSheet'; -import StyleSheetPropType from '../../propTypes/StyleSheetPropType'; +import ColorPropType from '../ColorPropType'; +import createElement from '../createElement'; +import findNodeHandle from '../findNodeHandle'; +import StyleSheet from '../StyleSheet'; +import StyleSheetPropType from '../../modules/StyleSheetPropType'; import TextInputStylePropTypes from './TextInputStylePropTypes'; -import TextInputState from './TextInputState'; -import ViewPropTypes from '../View/ViewPropTypes'; +import TextInputState from '../../modules/TextInputState'; +import ViewPropTypes from '../ViewPropTypes'; import { any, bool, func, number, oneOf, shape, string } from 'prop-types'; const isAndroid = canUseDOM && /Android/i.test(navigator && navigator.userAgent); diff --git a/packages/react-native-web/src/exports/TextPropTypes/index.js b/packages/react-native-web/src/exports/TextPropTypes/index.js new file mode 100644 index 000000000..8ec811dbb --- /dev/null +++ b/packages/react-native-web/src/exports/TextPropTypes/index.js @@ -0,0 +1,2 @@ +import TextPropTypes from '../Text/TextPropTypes'; +export default TextPropTypes; diff --git a/packages/react-native-web/src/components/Touchable/BoundingDimensions.js b/packages/react-native-web/src/exports/Touchable/BoundingDimensions.js similarity index 100% rename from packages/react-native-web/src/components/Touchable/BoundingDimensions.js rename to packages/react-native-web/src/exports/Touchable/BoundingDimensions.js diff --git a/packages/react-native-web/src/components/Touchable/Position.js b/packages/react-native-web/src/exports/Touchable/Position.js similarity index 100% rename from packages/react-native-web/src/components/Touchable/Position.js rename to packages/react-native-web/src/exports/Touchable/Position.js diff --git a/packages/react-native-web/src/components/Touchable/ensurePositiveDelayProps.js b/packages/react-native-web/src/exports/Touchable/ensurePositiveDelayProps.js similarity index 100% rename from packages/react-native-web/src/components/Touchable/ensurePositiveDelayProps.js rename to packages/react-native-web/src/exports/Touchable/ensurePositiveDelayProps.js diff --git a/packages/react-native-web/src/components/Touchable/Touchable.js b/packages/react-native-web/src/exports/Touchable/index.js similarity index 99% rename from packages/react-native-web/src/components/Touchable/Touchable.js rename to packages/react-native-web/src/exports/Touchable/index.js index 717627269..13ba5873a 100644 --- a/packages/react-native-web/src/components/Touchable/Touchable.js +++ b/packages/react-native-web/src/exports/Touchable/index.js @@ -14,13 +14,13 @@ import AccessibilityUtil from '../../modules/AccessibilityUtil'; import BoundingDimensions from './BoundingDimensions'; -import findNodeHandle from '../../modules/findNodeHandle'; +import findNodeHandle from '../findNodeHandle'; import normalizeColor from 'normalize-css-color'; import Position from './Position'; import React from 'react'; import TouchEventUtils from 'fbjs/lib/TouchEventUtils'; -import UIManager from '../../apis/UIManager'; -import View from '../../components/View'; +import UIManager from '../UIManager'; +import View from '../View'; type Event = Object; diff --git a/packages/react-native-web/src/components/Touchable/TouchableHighlight.js b/packages/react-native-web/src/exports/TouchableHighlight/index.js similarity index 95% rename from packages/react-native-web/src/components/Touchable/TouchableHighlight.js rename to packages/react-native-web/src/exports/TouchableHighlight/index.js index 948e96466..5a9dea6f6 100644 --- a/packages/react-native-web/src/components/Touchable/TouchableHighlight.js +++ b/packages/react-native-web/src/exports/TouchableHighlight/index.js @@ -11,17 +11,17 @@ */ import applyNativeMethods from '../../modules/applyNativeMethods'; -import ColorPropType from '../../propTypes/ColorPropType'; +import ColorPropType from '../ColorPropType'; import createReactClass from 'create-react-class'; -import ensureComponentIsNative from './ensureComponentIsNative'; -import ensurePositiveDelayProps from './ensurePositiveDelayProps'; +import ensureComponentIsNative from '../../modules/ensureComponentIsNative'; +import ensurePositiveDelayProps from '../Touchable/ensurePositiveDelayProps'; import React from 'react'; -import StyleSheet from '../../apis/StyleSheet'; +import StyleSheet from '../StyleSheet'; import TimerMixin from 'react-timer-mixin'; -import Touchable from './Touchable'; -import TouchableWithoutFeedback from './TouchableWithoutFeedback'; +import Touchable from '../Touchable'; +import TouchableWithoutFeedback from '../TouchableWithoutFeedback'; import View from '../View'; -import ViewPropTypes from '../View/ViewPropTypes'; +import ViewPropTypes from '../ViewPropTypes'; import { func, number } from 'prop-types'; type Event = Object; diff --git a/packages/react-native-web/src/components/Touchable/TouchableNativeFeedback.js b/packages/react-native-web/src/exports/TouchableNativeFeedback/index.js similarity index 79% rename from packages/react-native-web/src/components/Touchable/TouchableNativeFeedback.js rename to packages/react-native-web/src/exports/TouchableNativeFeedback/index.js index ff1004e2b..8c1d99f91 100644 --- a/packages/react-native-web/src/components/Touchable/TouchableNativeFeedback.js +++ b/packages/react-native-web/src/exports/TouchableNativeFeedback/index.js @@ -8,5 +8,5 @@ * @flow */ -import UnimplementedView from '../UnimplementedView'; +import UnimplementedView from '../../modules/UnimplementedView'; export default UnimplementedView; diff --git a/packages/react-native-web/src/components/Touchable/TouchableOpacity.js b/packages/react-native-web/src/exports/TouchableOpacity/index.js similarity index 96% rename from packages/react-native-web/src/components/Touchable/TouchableOpacity.js rename to packages/react-native-web/src/exports/TouchableOpacity/index.js index 99a7a6ce0..940ca76fe 100644 --- a/packages/react-native-web/src/components/Touchable/TouchableOpacity.js +++ b/packages/react-native-web/src/exports/TouchableOpacity/index.js @@ -12,12 +12,12 @@ import applyNativeMethods from '../../modules/applyNativeMethods'; import createReactClass from 'create-react-class'; -import ensurePositiveDelayProps from './ensurePositiveDelayProps'; +import ensurePositiveDelayProps from '../Touchable/ensurePositiveDelayProps'; import { number } from 'prop-types'; import React from 'react'; -import StyleSheet from '../../apis/StyleSheet'; -import Touchable from './Touchable'; -import TouchableWithoutFeedback from './TouchableWithoutFeedback'; +import StyleSheet from '../StyleSheet'; +import Touchable from '../Touchable'; +import TouchableWithoutFeedback from '../TouchableWithoutFeedback'; import View from '../View'; const flattenStyle = StyleSheet.flatten; diff --git a/packages/react-native-web/src/components/Touchable/TouchableWithoutFeedback.js b/packages/react-native-web/src/exports/TouchableWithoutFeedback/index.js similarity index 92% rename from packages/react-native-web/src/components/Touchable/TouchableWithoutFeedback.js rename to packages/react-native-web/src/exports/TouchableWithoutFeedback/index.js index 45efd4f99..2d3d00726 100644 --- a/packages/react-native-web/src/components/Touchable/TouchableWithoutFeedback.js +++ b/packages/react-native-web/src/exports/TouchableWithoutFeedback/index.js @@ -10,14 +10,14 @@ * @flow */ -import BaseComponentPropTypes from '../../propTypes/BaseComponentPropTypes'; import createReactClass from 'create-react-class'; -import EdgeInsetsPropType from '../../propTypes/EdgeInsetsPropType'; -import ensurePositiveDelayProps from './ensurePositiveDelayProps'; +import EdgeInsetsPropType from '../EdgeInsetsPropType'; +import ensurePositiveDelayProps from '../Touchable/ensurePositiveDelayProps'; import React, { type Element } from 'react'; -import StyleSheet from '../../apis/StyleSheet'; +import StyleSheet from '../StyleSheet'; import TimerMixin from 'react-timer-mixin'; -import Touchable from './Touchable'; +import Touchable from '../Touchable'; +import ViewPropTypes from '../ViewPropTypes'; import warning from 'fbjs/lib/warning'; import { any, bool, func, number, string } from 'prop-types'; @@ -39,10 +39,10 @@ const TouchableWithoutFeedback = createReactClass({ mixins: [TimerMixin, Touchable.Mixin], propTypes: { - accessibilityComponentType: BaseComponentPropTypes.accessibilityComponentType, + accessibilityComponentType: ViewPropTypes.accessibilityComponentType, accessibilityLabel: string, - accessibilityRole: BaseComponentPropTypes.accessibilityRole, - accessibilityTraits: BaseComponentPropTypes.accessibilityTraits, + accessibilityRole: ViewPropTypes.accessibilityRole, + accessibilityTraits: ViewPropTypes.accessibilityTraits, accessible: bool, children: any, /** diff --git a/packages/react-native-web/src/apis/UIManager/__tests__/index-test.js b/packages/react-native-web/src/exports/UIManager/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/apis/UIManager/__tests__/index-test.js rename to packages/react-native-web/src/exports/UIManager/__tests__/index-test.js diff --git a/packages/react-native-web/src/apis/UIManager/index.js b/packages/react-native-web/src/exports/UIManager/index.js similarity index 100% rename from packages/react-native-web/src/apis/UIManager/index.js rename to packages/react-native-web/src/exports/UIManager/index.js diff --git a/packages/react-native-web/src/apis/Vibration/index.js b/packages/react-native-web/src/exports/Vibration/index.js similarity index 100% rename from packages/react-native-web/src/apis/Vibration/index.js rename to packages/react-native-web/src/exports/Vibration/index.js diff --git a/packages/react-native-web/src/components/View/ViewPropTypes.js b/packages/react-native-web/src/exports/View/ViewPropTypes.js similarity index 82% rename from packages/react-native-web/src/components/View/ViewPropTypes.js rename to packages/react-native-web/src/exports/View/ViewPropTypes.js index 923e145da..34ea7900f 100644 --- a/packages/react-native-web/src/components/View/ViewPropTypes.js +++ b/packages/react-native-web/src/exports/View/ViewPropTypes.js @@ -10,11 +10,10 @@ * @flow */ -import BaseComponentPropTypes from '../../propTypes/BaseComponentPropTypes'; -import EdgeInsetsPropType, { type EdgeInsetsProp } from '../../propTypes/EdgeInsetsPropType'; -import StyleSheetPropType from '../../propTypes/StyleSheetPropType'; +import EdgeInsetsPropType, { type EdgeInsetsProp } from '../EdgeInsetsPropType'; +import StyleSheetPropType from '../../modules/StyleSheetPropType'; import ViewStylePropTypes from './ViewStylePropTypes'; -import { any, bool, func, oneOf } from 'prop-types'; +import { any, array, bool, func, oneOf, oneOfType, string } from 'prop-types'; const stylePropType = StyleSheetPropType(ViewStylePropTypes); @@ -72,10 +71,16 @@ export type ViewProps = { }; const ViewPropTypes = { - ...BaseComponentPropTypes, + accessibilityComponentType: string, + accessibilityLabel: string, + accessibilityLiveRegion: oneOf(['assertive', 'none', 'polite']), + accessibilityRole: string, + accessibilityTraits: oneOfType([array, string]), + accessible: bool, children: any, collapsable: bool, hitSlop: EdgeInsetsPropType, + importantForAccessibility: oneOf(['auto', 'no', 'no-hide-descendants', 'yes']), onClick: func, onClickCapture: func, onLayout: func, @@ -98,7 +103,8 @@ const ViewPropTypes = { onTouchStart: func, onTouchStartCapture: func, pointerEvents: oneOf(['auto', 'box-none', 'box-only', 'none']), - style: stylePropType + style: stylePropType, + testID: string }; export default ViewPropTypes; diff --git a/packages/react-native-web/src/components/View/ViewStylePropTypes.js b/packages/react-native-web/src/exports/View/ViewStylePropTypes.js similarity index 78% rename from packages/react-native-web/src/components/View/ViewStylePropTypes.js rename to packages/react-native-web/src/exports/View/ViewStylePropTypes.js index 438632f5d..cc4aa371d 100644 --- a/packages/react-native-web/src/components/View/ViewStylePropTypes.js +++ b/packages/react-native-web/src/exports/View/ViewStylePropTypes.js @@ -9,12 +9,12 @@ * @flow */ -import AnimationPropTypes from '../../propTypes/AnimationPropTypes'; -import BorderPropTypes from '../../propTypes/BorderPropTypes'; -import ColorPropType from '../../propTypes/ColorPropType'; -import LayoutPropTypes from '../../propTypes/LayoutPropTypes'; -import ShadowPropTypes from '../../propTypes/ShadowPropTypes'; -import TransformPropTypes from '../../propTypes/TransformPropTypes'; +import AnimationPropTypes from '../../modules/AnimationPropTypes'; +import BorderPropTypes from '../../modules/BorderPropTypes'; +import ColorPropType from '../ColorPropType'; +import LayoutPropTypes from '../../modules/LayoutPropTypes'; +import ShadowPropTypes from '../../modules/ShadowPropTypes'; +import TransformPropTypes from '../../modules/TransformPropTypes'; import { number, oneOf, oneOfType, string } from 'prop-types'; const ViewStylePropTypes = { diff --git a/packages/react-native-web/src/components/View/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/View/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from packages/react-native-web/src/components/View/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/exports/View/__tests__/__snapshots__/index-test.js.snap diff --git a/packages/react-native-web/src/components/View/__tests__/index-test.js b/packages/react-native-web/src/exports/View/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/View/__tests__/index-test.js rename to packages/react-native-web/src/exports/View/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/View/index.js b/packages/react-native-web/src/exports/View/index.js similarity index 91% rename from packages/react-native-web/src/components/View/index.js rename to packages/react-native-web/src/exports/View/index.js index 657b0d0bf..2b37b441e 100644 --- a/packages/react-native-web/src/components/View/index.js +++ b/packages/react-native-web/src/exports/View/index.js @@ -10,9 +10,9 @@ import applyLayout from '../../modules/applyLayout'; import applyNativeMethods from '../../modules/applyNativeMethods'; import { bool } from 'prop-types'; -import createElement from '../../modules/createElement'; +import createElement from '../createElement'; import invariant from 'fbjs/lib/invariant'; -import StyleSheet from '../../apis/StyleSheet'; +import StyleSheet from '../StyleSheet'; import ViewPropTypes, { type ViewProps } from './ViewPropTypes'; import React, { Component } from 'react'; @@ -60,7 +60,10 @@ class View extends Component { const { isInAParentText } = this.context; - otherProps.style = [styles.initial, isInAParentText && styles.inline, this.props.style]; + otherProps.style = StyleSheet.compose( + styles.initial, + StyleSheet.compose(isInAParentText && styles.inline, this.props.style) + ); if (hitSlop) { const hitSlopStyle = calculateHitSlopStyle(hitSlop); diff --git a/packages/react-native-web/src/exports/ViewPropTypes/index.js b/packages/react-native-web/src/exports/ViewPropTypes/index.js new file mode 100644 index 000000000..b33cb5853 --- /dev/null +++ b/packages/react-native-web/src/exports/ViewPropTypes/index.js @@ -0,0 +1,7 @@ +import ViewPropTypes, { + type ViewProps, + type ViewLayout, + type ViewLayoutEvent +} from '../View/ViewPropTypes'; +export type { ViewProps, ViewLayout, ViewLayoutEvent }; +export default ViewPropTypes; diff --git a/packages/react-native-web/src/exports/VirtualizedList/index.js b/packages/react-native-web/src/exports/VirtualizedList/index.js new file mode 100644 index 000000000..9cd4039d7 --- /dev/null +++ b/packages/react-native-web/src/exports/VirtualizedList/index.js @@ -0,0 +1,2 @@ +import UnimplementedView from '../../modules/UnimplementedView'; +export default UnimplementedView; diff --git a/packages/react-native-web/src/modules/createElement/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/createElement/__tests__/__snapshots__/index-test.js.snap similarity index 100% rename from packages/react-native-web/src/modules/createElement/__tests__/__snapshots__/index-test.js.snap rename to packages/react-native-web/src/exports/createElement/__tests__/__snapshots__/index-test.js.snap diff --git a/packages/react-native-web/src/modules/createElement/__tests__/index-test.js b/packages/react-native-web/src/exports/createElement/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/modules/createElement/__tests__/index-test.js rename to packages/react-native-web/src/exports/createElement/__tests__/index-test.js diff --git a/packages/react-native-web/src/modules/createElement/index.js b/packages/react-native-web/src/exports/createElement/index.js similarity index 91% rename from packages/react-native-web/src/modules/createElement/index.js rename to packages/react-native-web/src/exports/createElement/index.js index 44332c7c4..72868a19b 100644 --- a/packages/react-native-web/src/modules/createElement/index.js +++ b/packages/react-native-web/src/exports/createElement/index.js @@ -8,11 +8,11 @@ * @noflow */ -import '../injectResponderEventPlugin'; +import '../../modules/injectResponderEventPlugin'; -import AccessibilityUtil from '../AccessibilityUtil'; -import createDOMProps from '../createDOMProps'; -import normalizeNativeEvent from '../normalizeNativeEvent'; +import AccessibilityUtil from '../../modules/AccessibilityUtil'; +import createDOMProps from '../../modules/createDOMProps'; +import normalizeNativeEvent from '../../modules/normalizeNativeEvent'; import React from 'react'; /** diff --git a/packages/react-native-web/src/modules/findNodeHandle/index.js b/packages/react-native-web/src/exports/findNodeHandle/index.js similarity index 100% rename from packages/react-native-web/src/modules/findNodeHandle/index.js rename to packages/react-native-web/src/exports/findNodeHandle/index.js diff --git a/packages/react-native-web/src/modules/processColor/__tests__/index-test.js b/packages/react-native-web/src/exports/processColor/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/modules/processColor/__tests__/index-test.js rename to packages/react-native-web/src/exports/processColor/__tests__/index-test.js diff --git a/packages/react-native-web/src/modules/processColor/index.js b/packages/react-native-web/src/exports/processColor/index.js similarity index 100% rename from packages/react-native-web/src/modules/processColor/index.js rename to packages/react-native-web/src/exports/processColor/index.js diff --git a/packages/react-native-web/src/modules/render/index.js b/packages/react-native-web/src/exports/render/index.js similarity index 100% rename from packages/react-native-web/src/modules/render/index.js rename to packages/react-native-web/src/exports/render/index.js diff --git a/packages/react-native-web/src/modules/unmountComponentAtNode/index.js b/packages/react-native-web/src/exports/unmountComponentAtNode/index.js similarity index 100% rename from packages/react-native-web/src/modules/unmountComponentAtNode/index.js rename to packages/react-native-web/src/exports/unmountComponentAtNode/index.js diff --git a/packages/react-native-web/src/index.js b/packages/react-native-web/src/index.js index 0306dd636..e3e06ce92 100644 --- a/packages/react-native-web/src/index.js +++ b/packages/react-native-web/src/index.js @@ -1,77 +1,79 @@ -import createElement from './modules/createElement'; -import findNodeHandle from './modules/findNodeHandle'; -import NativeModules from './modules/NativeModules'; -import processColor from './modules/processColor'; -import render from './modules/render'; -import unmountComponentAtNode from './modules/unmountComponentAtNode'; +import createElement from './exports/createElement'; +import findNodeHandle from './exports/findNodeHandle'; +import processColor from './exports/processColor'; +import render from './exports/render'; +import unmountComponentAtNode from './exports/unmountComponentAtNode'; +import NativeModules from './exports/NativeModules'; +import TextPropTypes from './exports/TextPropTypes'; +import ViewPropTypes from './exports/ViewPropTypes'; // APIs -import Animated from './apis/Animated'; -import AppRegistry from './apis/AppRegistry'; -import AppState from './apis/AppState'; -import AsyncStorage from './apis/AsyncStorage'; -import BackHandler from './apis/BackHandler'; -import Clipboard from './apis/Clipboard'; -import Dimensions from './apis/Dimensions'; -import Easing from './apis/Easing'; -import I18nManager from './apis/I18nManager'; -import Keyboard from './apis/Keyboard'; -import InteractionManager from './apis/InteractionManager'; -import Linking from './apis/Linking'; -import NetInfo from './apis/NetInfo'; -import PanResponder from './apis/PanResponder'; -import PixelRatio from './apis/PixelRatio'; -import Platform from './apis/Platform'; -import StyleSheet from './apis/StyleSheet'; -import UIManager from './apis/UIManager'; -import Vibration from './apis/Vibration'; +import Animated from './exports/Animated'; +import AppRegistry from './exports/AppRegistry'; +import AppState from './exports/AppState'; +import AsyncStorage from './exports/AsyncStorage'; +import BackHandler from './exports/BackHandler'; +import Clipboard from './exports/Clipboard'; +import Dimensions from './exports/Dimensions'; +import Easing from './exports/Easing'; +import I18nManager from './exports/I18nManager'; +import Keyboard from './exports/Keyboard'; +import InteractionManager from './exports/InteractionManager'; +import Linking from './exports/Linking'; +import NetInfo from './exports/NetInfo'; +import PanResponder from './exports/PanResponder'; +import PixelRatio from './exports/PixelRatio'; +import Platform from './exports/Platform'; +import StyleSheet from './exports/StyleSheet'; +import UIManager from './exports/UIManager'; +import Vibration from './exports/Vibration'; // components -import ActivityIndicator from './components/ActivityIndicator'; -import ART from './components/ART'; -import Button from './components/Button'; -import CheckBox from './components/CheckBox'; -import FlatList from './components/FlatList'; -import Image from './components/Image'; -import ImageBackground from './components/Image/ImageBackground'; -import KeyboardAvoidingView from './components/KeyboardAvoidingView'; -import ListView from './components/ListView'; -import Modal from './components/Modal'; -import Picker from './components/Picker'; -import ProgressBar from './components/ProgressBar'; -import RefreshControl from './components/RefreshControl'; -import SafeAreaView from './components/SafeAreaView'; -import ScrollView from './components/ScrollView'; -import SectionList from './components/SectionList'; -import Slider from './components/Slider'; -import StatusBar from './components/StatusBar'; -import Switch from './components/Switch'; -import Text from './components/Text'; -import TextInput from './components/TextInput'; -import Touchable from './components/Touchable/Touchable'; -import TouchableHighlight from './components/Touchable/TouchableHighlight'; -import TouchableNativeFeedback from './components/Touchable/TouchableNativeFeedback'; -import TouchableOpacity from './components/Touchable/TouchableOpacity'; -import TouchableWithoutFeedback from './components/Touchable/TouchableWithoutFeedback'; -import View from './components/View'; -import VirtualizedList from './components/VirtualizedList'; +import ActivityIndicator from './exports/ActivityIndicator'; +import ART from './exports/ART'; +import Button from './exports/Button'; +import CheckBox from './exports/CheckBox'; +import FlatList from './exports/FlatList'; +import Image from './exports/Image'; +import ImageBackground from './exports/ImageBackground'; +import KeyboardAvoidingView from './exports/KeyboardAvoidingView'; +import ListView from './exports/ListView'; +import Modal from './exports/Modal'; +import Picker from './exports/Picker'; +import ProgressBar from './exports/ProgressBar'; +import RefreshControl from './exports/RefreshControl'; +import SafeAreaView from './exports/SafeAreaView'; +import ScrollView from './exports/ScrollView'; +import SectionList from './exports/SectionList'; +import Slider from './exports/Slider'; +import StatusBar from './exports/StatusBar'; +import Switch from './exports/Switch'; +import Text from './exports/Text'; +import TextInput from './exports/TextInput'; +import Touchable from './exports/Touchable'; +import TouchableHighlight from './exports/TouchableHighlight'; +import TouchableNativeFeedback from './exports/TouchableNativeFeedback'; +import TouchableOpacity from './exports/TouchableOpacity'; +import TouchableWithoutFeedback from './exports/TouchableWithoutFeedback'; +import View from './exports/View'; +import VirtualizedList from './exports/VirtualizedList'; // propTypes -import ColorPropType from './propTypes/ColorPropType'; -import EdgeInsetsPropType from './propTypes/EdgeInsetsPropType'; -import PointPropType from './propTypes/PointPropType'; -import TextPropTypes from './components/Text/TextPropTypes'; -import ViewPropTypes from './components/View/ViewPropTypes'; +import ColorPropType from './exports/ColorPropType'; +import EdgeInsetsPropType from './exports/EdgeInsetsPropType'; +import PointPropType from './exports/PointPropType'; export { // top-level API + createElement, findNodeHandle, render, unmountComponentAtNode, // modules - createElement, - NativeModules, processColor, + NativeModules, + TextPropTypes, + ViewPropTypes, // APIs Animated, AppRegistry, @@ -124,20 +126,20 @@ export { // propTypes ColorPropType, EdgeInsetsPropType, - PointPropType, - TextPropTypes, - ViewPropTypes + PointPropType }; const ReactNative = { // top-level API + createElement, findNodeHandle, render, unmountComponentAtNode, // modules - createElement, - NativeModules, processColor, + NativeModules, + TextPropTypes, + ViewPropTypes, // APIs Animated, AppRegistry, @@ -190,9 +192,7 @@ const ReactNative = { // propTypes ColorPropType, EdgeInsetsPropType, - PointPropType, - TextPropTypes, - ViewPropTypes + PointPropType }; export default ReactNative; diff --git a/packages/react-native-web/src/propTypes/AnimationPropTypes.js b/packages/react-native-web/src/modules/AnimationPropTypes/index.js similarity index 100% rename from packages/react-native-web/src/propTypes/AnimationPropTypes.js rename to packages/react-native-web/src/modules/AnimationPropTypes/index.js diff --git a/packages/react-native-web/src/propTypes/BorderPropTypes.js b/packages/react-native-web/src/modules/BorderPropTypes/index.js similarity index 94% rename from packages/react-native-web/src/propTypes/BorderPropTypes.js rename to packages/react-native-web/src/modules/BorderPropTypes/index.js index a7d7c247a..1cab89d64 100644 --- a/packages/react-native-web/src/propTypes/BorderPropTypes.js +++ b/packages/react-native-web/src/modules/BorderPropTypes/index.js @@ -8,7 +8,7 @@ * @flow */ -import ColorPropType from './ColorPropType'; +import ColorPropType from '../../exports/ColorPropType'; import { number, oneOf, oneOfType, string } from 'prop-types'; const numberOrString = oneOfType([number, string]); diff --git a/packages/react-native-web/src/propTypes/LayoutPropTypes.js b/packages/react-native-web/src/modules/LayoutPropTypes/index.js similarity index 100% rename from packages/react-native-web/src/propTypes/LayoutPropTypes.js rename to packages/react-native-web/src/modules/LayoutPropTypes/index.js diff --git a/packages/react-native-web/src/modules/NativeMethodsMixin/index.js b/packages/react-native-web/src/modules/NativeMethodsMixin/index.js index 6b500e56a..624ba9916 100644 --- a/packages/react-native-web/src/modules/NativeMethodsMixin/index.js +++ b/packages/react-native-web/src/modules/NativeMethodsMixin/index.js @@ -11,10 +11,10 @@ */ import createDOMProps from '../createDOMProps'; -import findNodeHandle from '../findNodeHandle'; -import i18nStyle from '../../apis/StyleSheet/i18nStyle'; -import StyleRegistry from '../../apis/StyleSheet/registry'; -import UIManager from '../../apis/UIManager'; +import findNodeHandle from '../../exports/findNodeHandle'; +import i18nStyle from '../../exports/StyleSheet/i18nStyle'; +import StyleRegistry from '../../exports/StyleSheet/registry'; +import UIManager from '../../exports/UIManager'; const hyphenPattern = /-([a-z])/g; const toCamelCase = str => str.replace(hyphenPattern, m => m[1].toUpperCase()); diff --git a/packages/react-native-web/src/modules/ScrollResponder/index.js b/packages/react-native-web/src/modules/ScrollResponder/index.js index 72f02c442..46a319dce 100644 --- a/packages/react-native-web/src/modules/ScrollResponder/index.js +++ b/packages/react-native-web/src/modules/ScrollResponder/index.js @@ -10,12 +10,12 @@ * @flow */ -import Dimensions from '../../apis/Dimensions'; -import findNodeHandle from '../findNodeHandle'; +import Dimensions from '../../exports/Dimensions'; +import findNodeHandle from '../../exports/findNodeHandle'; import invariant from 'fbjs/lib/invariant'; -import Platform from '../../apis/Platform'; -import TextInputState from '../../components/TextInput/TextInputState'; -import UIManager from '../../apis/UIManager'; +import Platform from '../../exports/Platform'; +import TextInputState from '../TextInputState'; +import UIManager from '../../exports/UIManager'; import warning from 'fbjs/lib/warning'; /** diff --git a/packages/react-native-web/src/propTypes/ShadowPropTypes.js b/packages/react-native-web/src/modules/ShadowPropTypes/index.js similarity index 91% rename from packages/react-native-web/src/propTypes/ShadowPropTypes.js rename to packages/react-native-web/src/modules/ShadowPropTypes/index.js index 39070f5c3..66e0f364f 100644 --- a/packages/react-native-web/src/propTypes/ShadowPropTypes.js +++ b/packages/react-native-web/src/modules/ShadowPropTypes/index.js @@ -8,7 +8,7 @@ * @flow */ -import ColorPropType from './ColorPropType'; +import ColorPropType from '../../exports/ColorPropType'; import { number, oneOfType, shape, string } from 'prop-types'; const numberOrString = oneOfType([number, string]); diff --git a/packages/react-native-web/src/components/StaticContainer/__tests__/index-test.js b/packages/react-native-web/src/modules/StaticContainer/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/StaticContainer/__tests__/index-test.js rename to packages/react-native-web/src/modules/StaticContainer/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/StaticContainer/index.js b/packages/react-native-web/src/modules/StaticContainer/index.js similarity index 100% rename from packages/react-native-web/src/components/StaticContainer/index.js rename to packages/react-native-web/src/modules/StaticContainer/index.js diff --git a/packages/react-native-web/src/components/StaticRenderer/__tests__/index-test.js b/packages/react-native-web/src/modules/StaticRenderer/__tests__/index-test.js similarity index 100% rename from packages/react-native-web/src/components/StaticRenderer/__tests__/index-test.js rename to packages/react-native-web/src/modules/StaticRenderer/__tests__/index-test.js diff --git a/packages/react-native-web/src/components/StaticRenderer/index.js b/packages/react-native-web/src/modules/StaticRenderer/index.js similarity index 100% rename from packages/react-native-web/src/components/StaticRenderer/index.js rename to packages/react-native-web/src/modules/StaticRenderer/index.js diff --git a/packages/react-native-web/src/propTypes/StyleSheetPropType.js b/packages/react-native-web/src/modules/StyleSheetPropType/index.js similarity index 87% rename from packages/react-native-web/src/propTypes/StyleSheetPropType.js rename to packages/react-native-web/src/modules/StyleSheetPropType/index.js index 0e1b661e7..4582e5683 100644 --- a/packages/react-native-web/src/propTypes/StyleSheetPropType.js +++ b/packages/react-native-web/src/modules/StyleSheetPropType/index.js @@ -10,8 +10,8 @@ */ function StyleSheetPropType(shape: { [key: string]: ReactPropsCheckType }): ReactPropsCheckType { - const createStrictShapeTypeChecker = require('./createStrictShapeTypeChecker').default; - const StyleSheet = require('../apis/StyleSheet').default; + const createStrictShapeTypeChecker = require('../createStrictShapeTypeChecker').default; + const StyleSheet = require('../../exports/StyleSheet').default; const shapePropType = createStrictShapeTypeChecker(shape); return function(props, propName, componentName, location?, ...rest) { diff --git a/packages/react-native-web/src/components/TextInput/TextInputState.js b/packages/react-native-web/src/modules/TextInputState/index.js similarity index 97% rename from packages/react-native-web/src/components/TextInput/TextInputState.js rename to packages/react-native-web/src/modules/TextInputState/index.js index e0505fcaa..2f2b160de 100644 --- a/packages/react-native-web/src/components/TextInput/TextInputState.js +++ b/packages/react-native-web/src/modules/TextInputState/index.js @@ -10,7 +10,7 @@ * @flow */ -import UIManager from '../../apis/UIManager'; +import UIManager from '../../exports/UIManager'; /** * This class is responsible for coordinating the "focused" diff --git a/packages/react-native-web/src/propTypes/TransformPropTypes.js b/packages/react-native-web/src/modules/TransformPropTypes/index.js similarity index 100% rename from packages/react-native-web/src/propTypes/TransformPropTypes.js rename to packages/react-native-web/src/modules/TransformPropTypes/index.js diff --git a/packages/react-native-web/src/components/UnimplementedView/index.js b/packages/react-native-web/src/modules/UnimplementedView/index.js similarity index 96% rename from packages/react-native-web/src/components/UnimplementedView/index.js rename to packages/react-native-web/src/modules/UnimplementedView/index.js index bf5bd47c8..2b44f8e9f 100644 --- a/packages/react-native-web/src/components/UnimplementedView/index.js +++ b/packages/react-native-web/src/modules/UnimplementedView/index.js @@ -10,7 +10,7 @@ * @flow */ -import View from '../View'; +import View from '../../exports/View'; import React, { Component } from 'react'; /** diff --git a/packages/react-native-web/src/modules/createDOMProps/index.js b/packages/react-native-web/src/modules/createDOMProps/index.js index 4cfe53b20..de9da5711 100644 --- a/packages/react-native-web/src/modules/createDOMProps/index.js +++ b/packages/react-native-web/src/modules/createDOMProps/index.js @@ -9,8 +9,8 @@ */ import AccessibilityUtil from '../AccessibilityUtil'; -import StyleSheet from '../../apis/StyleSheet'; -import StyleRegistry from '../../apis/StyleSheet/registry'; +import StyleSheet from '../../exports/StyleSheet'; +import StyleRegistry from '../../exports/StyleSheet/registry'; const emptyObject = {}; diff --git a/packages/react-native-web/src/propTypes/createStrictShapeTypeChecker.js b/packages/react-native-web/src/modules/createStrictShapeTypeChecker/index.js similarity index 100% rename from packages/react-native-web/src/propTypes/createStrictShapeTypeChecker.js rename to packages/react-native-web/src/modules/createStrictShapeTypeChecker/index.js diff --git a/packages/react-native-web/src/modules/dismissKeyboard/index.js b/packages/react-native-web/src/modules/dismissKeyboard/index.js index 0faed4d20..c527f5032 100644 --- a/packages/react-native-web/src/modules/dismissKeyboard/index.js +++ b/packages/react-native-web/src/modules/dismissKeyboard/index.js @@ -9,7 +9,7 @@ * @flow */ -import TextInputState from '../../components/TextInput/TextInputState'; +import TextInputState from '../TextInputState'; const dismissKeyboard = () => { TextInputState.blurTextInput(TextInputState.currentlyFocusedField()); diff --git a/packages/react-native-web/src/components/Touchable/ensureComponentIsNative.js b/packages/react-native-web/src/modules/ensureComponentIsNative/index.js similarity index 100% rename from packages/react-native-web/src/components/Touchable/ensureComponentIsNative.js rename to packages/react-native-web/src/modules/ensureComponentIsNative/index.js diff --git a/packages/react-native-web/src/propTypes/BaseComponentPropTypes.js b/packages/react-native-web/src/propTypes/BaseComponentPropTypes.js deleted file mode 100644 index 9b0ab3a97..000000000 --- a/packages/react-native-web/src/propTypes/BaseComponentPropTypes.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2015-present, Nicolas Gallagher. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -import { array, bool, number, object, oneOf, oneOfType, string } from 'prop-types'; - -const BaseComponentPropTypes = { - accessibilityLabel: string, - accessibilityLiveRegion: oneOf(['assertive', 'none', 'polite']), - accessibilityRole: string, - accessible: bool, - importantForAccessibility: oneOf(['auto', 'no', 'no-hide-descendants', 'yes']), - style: oneOfType([array, number, object]), - testID: string, - // compatibility with React Native - accessibilityComponentType: string, - accessibilityTraits: oneOfType([array, string]) -}; - -export default BaseComponentPropTypes; diff --git a/packages/react-native-web/src/vendor/Animated/AnimatedEvent.js b/packages/react-native-web/src/vendor/Animated/AnimatedEvent.js index 2521ee3c9..126edf8d3 100644 --- a/packages/react-native-web/src/vendor/Animated/AnimatedEvent.js +++ b/packages/react-native-web/src/vendor/Animated/AnimatedEvent.js @@ -14,7 +14,7 @@ const AnimatedValue = require('./nodes/AnimatedValue'); const NativeAnimatedHelper = require('./NativeAnimatedHelper'); -const findNodeHandle = require('../../modules/findNodeHandle').default; +const findNodeHandle = require('../../exports/findNodeHandle').default; const invariant = require('fbjs/lib/invariant'); const {shouldUseNativeDriver} = require('./NativeAnimatedHelper'); diff --git a/packages/react-native-web/src/vendor/Animated/NativeAnimatedHelper.js b/packages/react-native-web/src/vendor/Animated/NativeAnimatedHelper.js index 9ba6ab545..3e90cd3a7 100644 --- a/packages/react-native-web/src/vendor/Animated/NativeAnimatedHelper.js +++ b/packages/react-native-web/src/vendor/Animated/NativeAnimatedHelper.js @@ -13,7 +13,7 @@ 'use strict'; const invariant = require('fbjs/lib/invariant'); -const NativeModules = require('../../modules/NativeModules'); +const NativeModules = require('../../exports/NativeModules'); const NativeEventEmitter = require('../../modules/NativeEventEmitter'); import type {AnimationConfig} from './animations/Animation'; diff --git a/packages/react-native-web/src/vendor/Animated/createAnimatedComponent.js b/packages/react-native-web/src/vendor/Animated/createAnimatedComponent.js index 6a424f2a6..435b14b58 100644 --- a/packages/react-native-web/src/vendor/Animated/createAnimatedComponent.js +++ b/packages/react-native-web/src/vendor/Animated/createAnimatedComponent.js @@ -15,7 +15,7 @@ const {AnimatedEvent} = require('./AnimatedEvent'); const AnimatedProps = require('./nodes/AnimatedProps'); const React = require('react'); -const ViewStylePropTypes = require('../../components/View/ViewStylePropTypes').default; +const ViewStylePropTypes = require('../../exports/View/ViewStylePropTypes').default; function createAnimatedComponent(Component: any): any { class AnimatedComponent extends React.Component { diff --git a/packages/react-native-web/src/vendor/Animated/nodes/AnimatedProps.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedProps.js index 6396d3a1a..5d9c2b960 100644 --- a/packages/react-native-web/src/vendor/Animated/nodes/AnimatedProps.js +++ b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedProps.js @@ -16,7 +16,7 @@ const {AnimatedEvent} = require('../AnimatedEvent'); const AnimatedNode = require('./AnimatedNode'); const AnimatedStyle = require('./AnimatedStyle'); const NativeAnimatedHelper = require('../NativeAnimatedHelper'); -const findNodeHandle = require('../../../modules/findNodeHandle').default; +const findNodeHandle = require('../../../exports/findNodeHandle').default; const invariant = require('fbjs/lib/invariant'); diff --git a/packages/react-native-web/src/vendor/Animated/nodes/AnimatedStyle.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedStyle.js index 5e0fc3548..a3c38cca2 100644 --- a/packages/react-native-web/src/vendor/Animated/nodes/AnimatedStyle.js +++ b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedStyle.js @@ -16,8 +16,9 @@ const AnimatedNode = require('./AnimatedNode'); const AnimatedTransform = require('./AnimatedTransform'); const AnimatedWithChildren = require('./AnimatedWithChildren'); const NativeAnimatedHelper = require('../NativeAnimatedHelper'); +const StyleSheet = require('../../../exports/StyleSheet').default; -const flattenStyle = require('../../../apis/StyleSheet/flattenStyle').default; +const flattenStyle = StyleSheet.flatten; class AnimatedStyle extends AnimatedWithChildren { _style: Object; diff --git a/packages/react-native-web/src/vendor/Animated/nodes/AnimatedValue.js b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedValue.js index b0e9e0c57..afe92adfe 100644 --- a/packages/react-native-web/src/vendor/Animated/nodes/AnimatedValue.js +++ b/packages/react-native-web/src/vendor/Animated/nodes/AnimatedValue.js @@ -15,7 +15,7 @@ const AnimatedInterpolation = require('./AnimatedInterpolation'); const AnimatedNode = require('./AnimatedNode'); const AnimatedWithChildren = require('./AnimatedWithChildren'); -const InteractionManager = require('../../../apis/InteractionManager').default; +const InteractionManager = require('../../../exports/InteractionManager').default; const NativeAnimatedHelper = require('../NativeAnimatedHelper'); import type Animation, {EndCallback} from '../animations/Animation'; diff --git a/packages/react-native-web/src/vendor/PanResponder/index.js b/packages/react-native-web/src/vendor/PanResponder/index.js index 9fcf730fb..3c6aad7ae 100644 --- a/packages/react-native-web/src/vendor/PanResponder/index.js +++ b/packages/react-native-web/src/vendor/PanResponder/index.js @@ -11,7 +11,7 @@ 'use strict'; -const InteractionManager = require('../../apis/InteractionManager').default; +const InteractionManager = require('../../exports/InteractionManager').default; const TouchHistoryMath = require('../TouchHistoryMath'); const currentCentroidXOfTouchesChangedAfter = TouchHistoryMath.currentCentroidXOfTouchesChangedAfter; From 6d9154196e510219d5b39e5d2bebca7021d50b89 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Thu, 4 Jan 2018 13:41:49 -0800 Subject: [PATCH 057/153] [fix] StyleSheet.hairlineWidth guard against missing document.body --- .../src/exports/StyleSheet/getHairlineWidth.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/react-native-web/src/exports/StyleSheet/getHairlineWidth.js b/packages/react-native-web/src/exports/StyleSheet/getHairlineWidth.js index 6862a72fc..e2d47ff59 100644 --- a/packages/react-native-web/src/exports/StyleSheet/getHairlineWidth.js +++ b/packages/react-native-web/src/exports/StyleSheet/getHairlineWidth.js @@ -8,13 +8,16 @@ import { canUseDOM } from 'fbjs/lib/ExecutionEnvironment'; const getHairlineWidth = () => { let hairlineWidth = 1; if (canUseDOM && window.devicePixelRatio && window.devicePixelRatio >= 2) { - const node = document.createElement('div'); - node.style.border = '.5px solid transparent'; - document.body.appendChild(node); - if (node.offsetHeight === 1) { - hairlineWidth = 0.5; + const body = document.body; + if (body) { + const node = document.createElement('div'); + node.style.border = '.5px solid transparent'; + body.appendChild(node); + if (node.offsetHeight === 1) { + hairlineWidth = 0.5; + } + body.removeChild(node); } - document.body.removeChild(node); } return hairlineWidth; }; From 69e0396fb1f74c8fbe65ef81bfd0a2d1218a5f96 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Thu, 4 Jan 2018 14:19:48 -0800 Subject: [PATCH 058/153] Minor README edit --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index facd37850..d9ace51fa 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,10 @@ [React Native][react-native-url] to the Web. * **High-quality user interfaces**: React Native for Web makes it easy to -create [fast](packages/benchmarks/README.md), adaptive web UIs in -JavaScript. It provides native-like interactions, optimized vendor-prefixed -styles, support for all interaction types (touch, mouse, keyboard), accessible -experiences, built-in support for RTL layout, and integrates with React Dev -Tools. +create [fast](packages/benchmarks/README.md), adaptive web UIs in JavaScript. +It provides native-like interactions, support for multiple input modes (touch, +mouse, keyboard), optimized vendor-prefixed styles, built-in support for RTL +layout, built-in accessibility, and integrates with React Dev Tools. * **Write once, render anywhere**: React Native for Web interoperates with existing React DOM components and is compatible with the majority of the @@ -18,10 +17,10 @@ React Native API. You can develop new components for native and web without rewriting existing code. React Native for Web can also render to HTML and critical CSS on the server using Node.js. -React Native for Web is used extensively in production by [Twitter -Lite](https://mobile.twitter.com). The library's performance was experimentally -validated at scale including in emerging markets, and an independent audit -found Twitter Lite to be Twitter's most accessible app. +Who is using React Native for Web? [Twitter](https://mobile.twitter.com), +[Major League Soccer](https://matchcenter.mlssoccer.com), [The +Times](https://github.com/newsuk/times-components), [React Native's +documentation](http://facebook.github.io/react-native/). Browser support: Chrome, Firefox, Safari >= 7, IE 10, Edge. @@ -32,15 +31,16 @@ The easiest way to get started with React Native for Web is to use this You don’t need to install anything to try it out. If you are unfamiliar with setting up a React web project, please follow the -recommendations in the the official [React documentation](https://reactjs.org/). +recommendations in the [React documentation](https://reactjs.org/). ## Documentation You can find the React Native for Web API documentation [on the website][website-url]. -Please refer to the [React Native documentation][react-native-url] for details -about its design, the [Gesture Responder system](https://facebook.github.io/react-native/docs/gesture-responder-system.html), +Please refer to the [React Native documentation][react-native-url] for more +design details, and for information about the [Gesture Responder +system](https://facebook.github.io/react-native/docs/gesture-responder-system.html) and [animations](https://facebook.github.io/react-native/docs/animations.html). ### Installation From b78206d2f4f0727ccf1dd9490450e17bbda46424 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Mon, 8 Jan 2018 11:49:28 -0800 Subject: [PATCH 059/153] Remove 'transform-runtime' from webpack example --- website/guides/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/guides/getting-started.md b/website/guides/getting-started.md index f1d797488..36d165633 100644 --- a/website/guides/getting-started.md +++ b/website/guides/getting-started.md @@ -182,7 +182,7 @@ const babelLoaderConfiguration = { // Babel configuration (or use .babelrc) // This aliases 'react-native' to 'react-native-web' and includes only // the modules needed by the app. - plugins: ['react-native-web', 'transform-runtime'], + plugins: ['react-native-web'], // The 'react-native' preset is recommended to match React Native's packager presets: ['react-native'] } From c26ef0eb3bf9ac7f21fb0faeb3118526ede7fa0a Mon Sep 17 00:00:00 2001 From: Maxime Thirouin Date: Mon, 8 Jan 2018 16:48:24 +0100 Subject: [PATCH 060/153] Run precommit hook automatically Help to ensure that code is formatted and linted before commits and PRs. Fix #755 Close #756 Close #754 --- .github/CONTRIBUTING.md | 17 +---------------- package.json | 3 ++- yarn.lock | 12 ++++++++++++ 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index a67d05020..8ad9faa27 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -91,20 +91,6 @@ To run the performance benchmarks in a browser (opening `./packages/benchmarks/i yarn benchmark ``` -### Pre-commit - -To format and lint code before commit: - -``` -yarn precommit -``` - -To format and lint the entire project: - -``` -yarn fmt -``` - ### New Features Please open an issue with a proposal for a new feature or refactoring before @@ -118,8 +104,7 @@ that we won't want to accept. 1. Fork the repository and create your branch from `master`. 2. If you've added code that should be tested, add tests! 3. If you've changed APIs, update the documentation. -4. Lint and format your code (`yarn precommit`). -5. Ensure the tests pass (`yarn test`). +4. Ensure the tests pass (`yarn test`). You can now submit a pull request, referencing any issues it addresses. diff --git a/package.json b/package.json index de6a36a21..1877d1674 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "eslint-plugin-promise": "^3.6.0", "eslint-plugin-react": "^7.5.1", "flow-bin": "^0.61.0", + "husky": "^0.14.3", "jest": "^21.2.1", "lerna": "^2.5.1", "lint-staged": "^4.1.3", @@ -58,7 +59,7 @@ "**/*.js": [ "fmt:cmd", "git update-index --again", - "lint:cmd" + "eslint" ] }, "author": "Nicolas Gallagher", diff --git a/yarn.lock b/yarn.lock index 0f528e7e6..f6b80a933 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4100,6 +4100,14 @@ https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" +husky@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" + dependencies: + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" + hyphenate-style-name@^1.0.1, hyphenate-style-name@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b" @@ -5609,6 +5617,10 @@ normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + normalize-path@^2.0.0, normalize-path@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" From 17614e348bf738872e2fa2cd33816c4e4b04f562 Mon Sep 17 00:00:00 2001 From: Maxime Thirouin Date: Mon, 8 Jan 2018 16:56:29 +0100 Subject: [PATCH 061/153] Use prettier config instead of CLI args This allows IDE plugins that rely on prettier config (introduced in [1.6.0](https://github.com/prettier/prettier/pull/2434)) to detect prettier and run it automatically with the correct config. Close #757 --- package.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 1877d1674..2fd090320 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "docs:release": "cd website && yarn release", "flow": "flow", "fmt": "find packages scripts types website -name '*.js' | grep -v -E '(node_modules|dist|vendor)' | xargs yarn fmt:cmd", - "fmt:cmd": "prettier --print-width=100 --single-quote --write", + "fmt:cmd": "prettier --write", "jest": "jest --config ./scripts/jest/config.js", "lint": "yarn lint:check --fix", "lint:check": "eslint packages scripts website", @@ -62,6 +62,10 @@ "eslint" ] }, + "prettier": { + "printWidth": 100, + "singleQuote": true + }, "author": "Nicolas Gallagher", "license": "BSD-3-Clause" } From fd6ccbcfb3d785c9c3aff5421d2b9da4f4cde4d6 Mon Sep 17 00:00:00 2001 From: Maxime Thirouin Date: Mon, 8 Jan 2018 16:22:06 +0100 Subject: [PATCH 062/153] [fix] ignore more native-only View/Text props Fix #735 Close #753 --- .../src/exports/Text/index.js | 4 +++ .../src/exports/View/ViewPropTypes.js | 27 ++++++++++++++----- .../src/exports/View/index.js | 4 +++ 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/packages/react-native-web/src/exports/Text/index.js b/packages/react-native-web/src/exports/Text/index.js index e86acf78c..fdd68a888 100644 --- a/packages/react-native-web/src/exports/Text/index.js +++ b/packages/react-native-web/src/exports/Text/index.js @@ -49,7 +49,11 @@ class Text extends Component<*> { lineBreakMode, minimumFontScale, onLayout, + onLongPress, + pressRetentionOffset, + selectionColor, suppressHighlighting, + textBreakStrategy, /* eslint-enable */ ...otherProps } = this.props; diff --git a/packages/react-native-web/src/exports/View/ViewPropTypes.js b/packages/react-native-web/src/exports/View/ViewPropTypes.js index 34ea7900f..fe290c60f 100644 --- a/packages/react-native-web/src/exports/View/ViewPropTypes.js +++ b/packages/react-native-web/src/exports/View/ViewPropTypes.js @@ -38,14 +38,11 @@ export type ViewProps = { accessibilityTraits?: string | Array, accessible?: boolean, children?: any, - collapsable?: boolean, hitSlop?: EdgeInsetsProp, importantForAccessibility?: 'auto' | 'yes' | 'no' | 'no-hide-descendants', - onAccessibilityTap?: Function, onClick?: Function, onClickCapture?: Function, onLayout?: (event: ViewLayoutEvent) => void, - onMagicTap?: Function, onResponderGrant?: Function, onResponderMove?: Function, onResponderReject?: Function, @@ -65,9 +62,17 @@ export type ViewProps = { onTouchStart?: Function, onTouchStartCapture?: Function, pointerEvents?: 'box-none' | 'none' | 'box-only' | 'auto', - removeClippedSubviews?: boolean, style?: stylePropType, - testID?: string + testID?: string, + // compatibility with React Native + accessibilityViewIsModal?: boolean, + collapsable?: boolean, + needsOffscreenAlphaCompositing?: boolean, + onAccessibilityTap?: Function, + onMagicTap?: Function, + removeClippedSubviews?: boolean, + renderToHardwareTextureAndroid?: boolean, + shouldRasterizeIOS?: boolean }; const ViewPropTypes = { @@ -78,7 +83,6 @@ const ViewPropTypes = { accessibilityTraits: oneOfType([array, string]), accessible: bool, children: any, - collapsable: bool, hitSlop: EdgeInsetsPropType, importantForAccessibility: oneOf(['auto', 'no', 'no-hide-descendants', 'yes']), onClick: func, @@ -104,7 +108,16 @@ const ViewPropTypes = { onTouchStartCapture: func, pointerEvents: oneOf(['auto', 'box-none', 'box-only', 'none']), style: stylePropType, - testID: string + testID: string, + // compatibility with React Native + accessibilityViewIsModal: bool, + collapsable: bool, + needsOffscreenAlphaCompositing: bool, + onAccessibilityTap: func, + onMagicTap: func, + removeClippedSubviews: bool, + renderToHardwareTextureAndroid: bool, + shouldRasterizeIOS: bool }; export default ViewPropTypes; diff --git a/packages/react-native-web/src/exports/View/index.js b/packages/react-native-web/src/exports/View/index.js index 2b37b441e..b52fd9f04 100644 --- a/packages/react-native-web/src/exports/View/index.js +++ b/packages/react-native-web/src/exports/View/index.js @@ -40,11 +40,15 @@ class View extends Component { const { hitSlop, /* eslint-disable */ + accessibilityViewIsModal, collapsable, + needsOffscreenAlphaCompositing, onAccessibilityTap, onLayout, onMagicTap, removeClippedSubviews, + renderToHardwareTextureAndroid, + shouldRasterizeIOS, /* eslint-enable */ ...otherProps } = this.props; From b6ef1d3a362c4ea6547c1670e771941a243e8c16 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Mon, 8 Jan 2018 12:19:24 -0800 Subject: [PATCH 063/153] [fix] handle "monospace" font-family on web This hack corrects the inheritance and scaling of font size when the font-family is "monospace". --- .../__snapshots__/createReactDOMStyle-test.js.snap | 8 +++++++- .../StyleSheet/__tests__/createReactDOMStyle-test.js | 6 +++++- .../src/exports/StyleSheet/createReactDOMStyle.js | 10 ++++++++-- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap b/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap index 35b38692c..a820b14df 100644 --- a/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap +++ b/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap @@ -6,9 +6,15 @@ Object { } `; +exports[`apis/StyleSheet/createReactDOMStyle fontFamily fontFamily: "monospace" 1`] = ` +Object { + "fontFamily": "monospace, monospace", +} +`; + exports[`apis/StyleSheet/createReactDOMStyle fontFamily general case 1`] = ` Object { - "fontFamily": "Georgia, Times", + "fontFamily": "Georgia, Times, serif", } `; diff --git a/packages/react-native-web/src/exports/StyleSheet/__tests__/createReactDOMStyle-test.js b/packages/react-native-web/src/exports/StyleSheet/__tests__/createReactDOMStyle-test.js index 2abc4633a..76921fdc8 100644 --- a/packages/react-native-web/src/exports/StyleSheet/__tests__/createReactDOMStyle-test.js +++ b/packages/react-native-web/src/exports/StyleSheet/__tests__/createReactDOMStyle-test.js @@ -122,7 +122,11 @@ describe('apis/StyleSheet/createReactDOMStyle', () => { describe('fontFamily', () => { test('general case', () => { - expect(createReactDOMStyle({ fontFamily: 'Georgia, Times' })).toMatchSnapshot(); + expect(createReactDOMStyle({ fontFamily: 'Georgia, Times, serif' })).toMatchSnapshot(); + }); + + test('fontFamily: "monospace"', () => { + expect(createReactDOMStyle({ fontFamily: 'monospace' })).toMatchSnapshot(); }); test('fontFamily: "System"', () => { diff --git a/packages/react-native-web/src/exports/StyleSheet/createReactDOMStyle.js b/packages/react-native-web/src/exports/StyleSheet/createReactDOMStyle.js index 014931531..dcba9b815 100644 --- a/packages/react-native-web/src/exports/StyleSheet/createReactDOMStyle.js +++ b/packages/react-native-web/src/exports/StyleSheet/createReactDOMStyle.js @@ -60,6 +60,7 @@ const borderWidthProps = { borderLeftWidth: true }; +const monospaceFontStack = 'monospace, monospace'; const systemFontStack = '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", sans-serif'; @@ -234,8 +235,13 @@ const createReducer = (style, styleProps) => { } case 'fontFamily': { - const isSystem = value === 'System'; - resolvedStyle.fontFamily = isSystem ? systemFontStack : value; + if (value === 'System') { + resolvedStyle.fontFamily = systemFontStack; + } else if (value === 'monospace') { + resolvedStyle.fontFamily = monospaceFontStack; + } else { + resolvedStyle.fontFamily = value; + } break; } From 7f45c52ce78b21087f45bf8e5ac0a25b2eea5794 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Mon, 8 Jan 2018 12:36:13 -0800 Subject: [PATCH 064/153] Update to inline-style-prefixer@4.0.0 --- .eslintignore | 1 + packages/react-native-web/package.json | 2 +- scripts/inline-style-prefixer/create.js | 2 +- yarn.lock | 7 +++++++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.eslintignore b/.eslintignore index 3cfacf157..66f736ade 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,4 @@ coverage dist +node_modules packages/**/vendor/* diff --git a/packages/react-native-web/package.json b/packages/react-native-web/package.json index 91a5c6fdb..56244d0c0 100644 --- a/packages/react-native-web/package.json +++ b/packages/react-native-web/package.json @@ -16,7 +16,7 @@ "deep-assign": "^2.0.0", "fbjs": "^0.8.16", "hyphenate-style-name": "^1.0.2", - "inline-style-prefixer": "^3.0.8", + "inline-style-prefixer": "^4.0.0", "normalize-css-color": "^1.0.2", "prop-types": "^15.6.0", "react-art": "^16.2.0", diff --git a/scripts/inline-style-prefixer/create.js b/scripts/inline-style-prefixer/create.js index 18ed2f14c..2e7f1415e 100644 --- a/scripts/inline-style-prefixer/create.js +++ b/scripts/inline-style-prefixer/create.js @@ -21,6 +21,6 @@ const browserList = { generator(browserList, { staticPath: path.join( __dirname, - '../packages/react-native-web/src/modules/prefixStyles/static.js' + '../../packages/react-native-web/src/modules/prefixStyles/static.js' ) }); diff --git a/yarn.lock b/yarn.lock index f6b80a933..e40a68159 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4201,6 +4201,13 @@ inline-style-prefixer@^3.0.1, inline-style-prefixer@^3.0.3, inline-style-prefixe bowser "^1.7.3" css-in-js-utils "^2.0.0" +inline-style-prefixer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-4.0.0.tgz#30a03df1b346ba6b1fb8a812bc3c9dabef48022d" + dependencies: + bowser "^1.7.3" + css-in-js-utils "^2.0.0" + inquirer@^3.0.6, inquirer@^3.2.2: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" From 91472bc3d650ae3b4c22ef7f0914d145bcef9aed Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Mon, 8 Jan 2018 18:42:16 -0800 Subject: [PATCH 065/153] 0.3.0 --- lerna.json | 2 +- packages/babel-plugin-react-native-web/package.json | 2 +- packages/benchmarks/package.json | 6 +++--- packages/react-native-web/package.json | 2 +- website/package.json | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lerna.json b/lerna.json index c8f6bdc89..1fcf34004 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.5.1", - "version": "0.2.2", + "version": "0.3.0", "npmClient": "yarn", "useWorkspaces": true, "packages": [ diff --git a/packages/babel-plugin-react-native-web/package.json b/packages/babel-plugin-react-native-web/package.json index 68a71652a..d5dd2c3bb 100644 --- a/packages/babel-plugin-react-native-web/package.json +++ b/packages/babel-plugin-react-native-web/package.json @@ -1,6 +1,6 @@ { "name": "babel-plugin-react-native-web", - "version": "0.2.2", + "version": "0.3.0", "description": "Babel plugin for React Native for Web", "main": "index.js", "devDependencies": { diff --git a/packages/benchmarks/package.json b/packages/benchmarks/package.json index fd01e7045..9eed7a332 100644 --- a/packages/benchmarks/package.json +++ b/packages/benchmarks/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "benchmarks", - "version": "0.2.2", + "version": "0.3.0", "scripts": { "benchmark": "webpack --config ./webpack.config.js && open index.html" }, @@ -17,14 +17,14 @@ "react": "^16.2.0", "react-dom": "^16.2.0", "react-jss": "^8.2.0", - "react-native-web": "^0.2.2", + "react-native-web": "^0.3.0", "reactxp": "^0.46.6", "styled-components": "^2.3.2", "styletron-client": "^3.0.0-rc.5", "styletron-utils": "^3.0.0-rc.3" }, "devDependencies": { - "babel-plugin-react-native-web": "^0.2.2", + "babel-plugin-react-native-web": "^0.3.0", "css-loader": "^0.28.7", "style-loader": "^0.19.1", "webpack": "^3.10.0", diff --git a/packages/react-native-web/package.json b/packages/react-native-web/package.json index 56244d0c0..d8ada9e2b 100644 --- a/packages/react-native-web/package.json +++ b/packages/react-native-web/package.json @@ -1,6 +1,6 @@ { "name": "react-native-web", - "version": "0.2.2", + "version": "0.3.0", "description": "React Native for Web", "main": "dist/index.js", "files": [ diff --git a/website/package.json b/website/package.json index 8858f3f3c..f35ba78a8 100644 --- a/website/package.json +++ b/website/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "website", - "version": "0.2.2", + "version": "0.3.0", "scripts": { "build": "build-storybook -o ./dist -c ./storybook/.storybook", "start": "start-storybook -p 9001 -c ./storybook/.storybook", @@ -12,10 +12,10 @@ "@storybook/react": "^3.2.18", "react": "^16.2.0", "react-dom": "^16.2.0", - "react-native-web": "^0.2.2" + "react-native-web": "^0.3.0" }, "devDependencies": { - "babel-plugin-react-native-web": "^0.2.2", + "babel-plugin-react-native-web": "^0.3.0", "url-loader": "^0.6.2", "webpack": "^3.10.0" } From 02b124eceb21d1fc8aaf57440ac0846b6ed36486 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Mon, 8 Jan 2018 18:53:05 -0800 Subject: [PATCH 066/153] Update yarn.lock --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index e40a68159..2aee248e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4194,7 +4194,7 @@ inline-style-prefixer@^2.0.5: bowser "^1.0.0" hyphenate-style-name "^1.0.1" -inline-style-prefixer@^3.0.1, inline-style-prefixer@^3.0.3, inline-style-prefixer@^3.0.6, inline-style-prefixer@^3.0.8: +inline-style-prefixer@^3.0.1, inline-style-prefixer@^3.0.3, inline-style-prefixer@^3.0.6: version "3.0.8" resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534" dependencies: From a3e44a5c603e877350c054afdb18750ec4f2befb Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Tue, 9 Jan 2018 17:27:38 -0800 Subject: [PATCH 067/153] Update to enzyme@3.3.0 --- package.json | 2 +- yarn.lock | 31 ++++++++++++++++++++++++++----- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 2fd090320..ab26e2896 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "babel-preset-react-native": "^4.0.0", "caniuse-api": "^2.0.0", "del-cli": "^1.1.0", - "enzyme": "^3.2.0", + "enzyme": "^3.3.0", "enzyme-adapter-react-16": "^1.1.0", "enzyme-to-json": "^3.2.2", "eslint": "^4.12.1", diff --git a/yarn.lock b/yarn.lock index 2aee248e8..48e99bfdb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3061,17 +3061,22 @@ enzyme-to-json@^3.2.2: dependencies: lodash "^4.17.4" -enzyme@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.2.0.tgz#998bdcda0fc71b8764a0017f7cc692c943f54a7a" +enzyme@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.3.0.tgz#0971abd167f2d4bf3f5bd508229e1c4b6dc50479" dependencies: cheerio "^1.0.0-rc.2" function.prototype.name "^1.0.3" has "^1.0.1" + is-boolean-object "^1.0.0" + is-callable "^1.1.3" + is-number-object "^1.0.3" + is-string "^1.0.4" is-subset "^0.1.1" lodash "^4.17.4" + object-inspect "^1.5.0" object-is "^1.0.1" - object.assign "^4.0.4" + object.assign "^4.1.0" object.entries "^1.0.4" object.values "^1.0.4" raf "^3.4.0" @@ -4259,6 +4264,10 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-boolean-object@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -4366,6 +4375,10 @@ is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" +is-number-object@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" + is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -4446,6 +4459,10 @@ is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-string@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" + is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" @@ -5702,6 +5719,10 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-inspect@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.5.0.tgz#9d876c11e40f485c79215670281b767488f9bfe3" + object-is@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" @@ -5710,7 +5731,7 @@ object-keys@^1.0.11, object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" -object.assign@^4.0.4: +object.assign@^4.0.4, object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" dependencies: From 03598d869bac47ffb1e8637453749617acf038f2 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Tue, 9 Jan 2018 17:31:52 -0800 Subject: [PATCH 068/153] Update to babel-plugin-tester@5.0.0 --- packages/babel-plugin-react-native-web/package.json | 2 +- yarn.lock | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/babel-plugin-react-native-web/package.json b/packages/babel-plugin-react-native-web/package.json index d5dd2c3bb..2283c9b73 100644 --- a/packages/babel-plugin-react-native-web/package.json +++ b/packages/babel-plugin-react-native-web/package.json @@ -4,7 +4,7 @@ "description": "Babel plugin for React Native for Web", "main": "index.js", "devDependencies": { - "babel-plugin-tester": "^4.0.0" + "babel-plugin-tester": "^5.0.0" }, "author": "Nicolas Gallagher", "license": "MIT", diff --git a/yarn.lock b/yarn.lock index 48e99bfdb..6d10c48c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1067,6 +1067,16 @@ babel-plugin-tester@^4.0.0: path-exists "^3.0.0" strip-indent "^2.0.0" +babel-plugin-tester@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-tester/-/babel-plugin-tester-5.0.0.tgz#d3387860311cbd8353746d3a8aaba7ad2446e470" + dependencies: + common-tags "^1.4.0" + invariant "^2.2.2" + lodash.merge "^4.6.0" + path-exists "^3.0.0" + strip-indent "^2.0.0" + babel-plugin-transform-async-generator-functions@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" From 44d795437e7a00897a9d8b0bc15e93acff567164 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Tue, 9 Jan 2018 17:34:28 -0800 Subject: [PATCH 069/153] Update to storybook@3.3.6 --- website/package.json | 4 +- yarn.lock | 668 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 627 insertions(+), 45 deletions(-) diff --git a/website/package.json b/website/package.json index f35ba78a8..a3f210159 100644 --- a/website/package.json +++ b/website/package.json @@ -8,8 +8,8 @@ "release": "yarn build && git checkout gh-pages && rm -rf ../storybook && mv dist ../storybook && git add -A && git commit -m \"Storybook deploy\" && git push origin gh-pages && git checkout -" }, "dependencies": { - "@storybook/addon-options": "^3.1.6", - "@storybook/react": "^3.2.18", + "@storybook/addon-options": "^3.3.6", + "@storybook/react": "^3.3.6", "react": "^16.2.0", "react-dom": "^16.2.0", "react-native-web": "^0.3.0" diff --git a/yarn.lock b/yarn.lock index 6d10c48c3..eae50899a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -85,22 +85,49 @@ react-inspector "^2.2.2" uuid "^3.1.0" +"@storybook/addon-actions@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.3.6.tgz#1f85eaf603d26bd14e97c14665f5716a5cb32272" + dependencies: + deep-equal "^1.0.1" + global "^4.3.2" + make-error "^1.3.2" + prop-types "^15.6.0" + react-inspector "^2.2.2" + uuid "^3.1.0" + "@storybook/addon-links@^3.2.18": version "3.2.18" resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.2.18.tgz#a1fd96dd91d56204da92632baa36a2263d2aeebb" dependencies: "@storybook/addons" "^3.2.18" +"@storybook/addon-links@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.3.6.tgz#f66efea8e4b1b7c6c41d1554623de5e74c891e53" + dependencies: + "@storybook/components" "^3.3.6" + global "^4.3.2" + prop-types "^15.5.10" + "@storybook/addon-options@^3.1.6": version "3.2.18" resolved "https://registry.yarnpkg.com/@storybook/addon-options/-/addon-options-3.2.18.tgz#d87dbe3ead00537c4ad851a3555be39910f05b31" dependencies: "@storybook/addons" "^3.2.18" +"@storybook/addon-options@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@storybook/addon-options/-/addon-options-3.3.6.tgz#9ea845467eb01b18f8ad819be68e7f4ca3fc2d48" + "@storybook/addons@^3.2.18": version "3.2.18" resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.2.18.tgz#2c1d42a0b661db2e429d1c406e79765ae5c71458" +"@storybook/addons@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.3.6.tgz#05422ecaf720e5c95e34792ba82b2cad8792776a" + "@storybook/channel-postmessage@^3.2.18": version "3.2.18" resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.2.18.tgz#8193e2fbae4f46a20a58fb6cdfd722c1743a3dd0" @@ -109,10 +136,26 @@ global "^4.3.2" json-stringify-safe "^5.0.1" +"@storybook/channel-postmessage@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.3.6.tgz#2d786d79ac3536f68ff5af93c1a3a3445b8e8b35" + dependencies: + "@storybook/channels" "^3.3.6" + global "^4.3.2" + json-stringify-safe "^5.0.1" + "@storybook/channels@^3.2.18": version "3.2.18" resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.2.18.tgz#c5d8c4ac780c6ebb4b1c360d8faf9207fd4fbafd" +"@storybook/channels@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.3.6.tgz#1e775598ec14d95afc0624f76563a7cbd84410df" + +"@storybook/client-logger@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-3.3.6.tgz#567c52b5828beb63eff7e6c11efda8afe64662ce" + "@storybook/components@^3.2.18": version "3.2.18" resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.2.18.tgz#142dd10414a717c24734f063af6b2b7b9bd06b4a" @@ -121,7 +164,15 @@ glamorous "^4.11.0" prop-types "^15.6.0" -"@storybook/mantra-core@^1.7.0": +"@storybook/components@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.3.6.tgz#e8bbb2003eee6dad67132e6d46bd54063f86e77c" + dependencies: + glamor "^2.20.40" + glamorous "^4.11.2" + prop-types "^15.6.0" + +"@storybook/mantra-core@^1.7.0", "@storybook/mantra-core@^1.7.2": version "1.7.2" resolved "https://registry.yarnpkg.com/@storybook/mantra-core/-/mantra-core-1.7.2.tgz#e10c7faca29769e97131e0e0308ef7cfb655b70c" dependencies: @@ -129,6 +180,13 @@ "@storybook/react-simple-di" "^1.2.1" babel-runtime "6.x.x" +"@storybook/node-logger@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-3.3.6.tgz#3f7e87102be542cfd20d686a8353a3016d833223" + dependencies: + chalk "^2.3.0" + npmlog "^4.1.2" + "@storybook/react-fuzzy@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@storybook/react-fuzzy/-/react-fuzzy-0.4.3.tgz#36f7536ba97bf08b03cb57f47c58ae2cca330aec" @@ -138,7 +196,7 @@ fuse.js "^3.0.1" prop-types "^15.5.9" -"@storybook/react-komposer@^2.0.0", "@storybook/react-komposer@^2.0.1": +"@storybook/react-komposer@^2.0.0", "@storybook/react-komposer@^2.0.1", "@storybook/react-komposer@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@storybook/react-komposer/-/react-komposer-2.0.3.tgz#f9e12a9586b2ce95c24c137eabb8b71527ddb369" dependencies: @@ -219,6 +277,68 @@ webpack-dev-middleware "^1.12.2" webpack-hot-middleware "^2.21.0" +"@storybook/react@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-3.3.6.tgz#11603eb2d45a6be18ffcc29dd39d1c207596c792" + dependencies: + "@storybook/addon-actions" "^3.3.6" + "@storybook/addon-links" "^3.3.6" + "@storybook/addons" "^3.3.6" + "@storybook/channel-postmessage" "^3.3.6" + "@storybook/client-logger" "^3.3.6" + "@storybook/node-logger" "^3.3.6" + "@storybook/ui" "^3.3.6" + airbnb-js-shims "^1.4.0" + autoprefixer "^7.2.3" + babel-loader "^7.1.2" + babel-plugin-react-docgen "^1.8.0" + babel-plugin-transform-regenerator "^6.26.0" + babel-plugin-transform-runtime "^6.23.0" + babel-preset-env "^1.6.1" + babel-preset-minify "^0.2.0" + babel-preset-react "^6.24.1" + babel-preset-react-app "^3.1.0" + babel-preset-stage-0 "^6.24.1" + babel-runtime "^6.26.0" + case-sensitive-paths-webpack-plugin "^2.1.1" + chalk "^2.3.0" + commander "^2.12.2" + common-tags "^1.6.0" + configstore "^3.1.1" + core-js "^2.5.3" + css-loader "^0.28.8" + dotenv-webpack "^1.5.4" + express "^4.16.2" + file-loader "^1.1.6" + find-cache-dir "^1.0.0" + glamor "^2.20.40" + glamorous "^4.11.2" + global "^4.3.2" + html-loader "^0.5.4" + html-webpack-plugin "^2.30.1" + json-loader "^0.5.7" + json-stringify-safe "^5.0.1" + json5 "^0.5.1" + lodash.flattendeep "^4.4.0" + markdown-loader "^2.0.1" + npmlog "^4.1.2" + postcss-flexbugs-fixes "^3.2.0" + postcss-loader "^2.0.9" + prop-types "^15.6.0" + qs "^6.5.1" + redux "^3.7.2" + request "^2.83.0" + serve-favicon "^2.4.5" + shelljs "^0.7.8" + style-loader "^0.19.1" + uglifyjs-webpack-plugin "^1.1.6" + url-loader "^0.6.2" + util-deprecate "^1.0.2" + uuid "^3.1.0" + webpack "^3.10.0" + webpack-dev-middleware "^1.12.2" + webpack-hot-middleware "^2.21.0" + "@storybook/ui@^3.2.18": version "3.2.18" resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.2.18.tgz#4d19f8daff7ec37cebe4d2b5d20e81e3676d8938" @@ -247,6 +367,34 @@ react-treebeard "^2.0.3" redux "^3.7.2" +"@storybook/ui@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.3.6.tgz#97d04c513e4a22838c68e6dc915183b2e7a7bce5" + dependencies: + "@storybook/components" "^3.3.6" + "@storybook/mantra-core" "^1.7.2" + "@storybook/react-komposer" "^2.0.3" + babel-runtime "^6.26.0" + deep-equal "^1.0.1" + events "^1.1.1" + fuse.js "^3.2.0" + global "^4.3.2" + json-stringify-safe "^5.0.1" + keycode "^2.1.9" + lodash.debounce "^4.0.8" + lodash.pick "^4.4.0" + lodash.sortby "^4.7.0" + podda "^1.2.2" + prop-types "^15.6.0" + qs "^6.5.1" + react-fuzzy "^0.5.1" + react-icons "^2.2.7" + react-inspector "^2.2.2" + react-modal "^3.1.10" + react-split-pane "^0.1.74" + react-treebeard "^2.1.0" + redux "^3.7.2" + "@types/inline-style-prefixer@^3.0.0": version "3.0.1" resolved "https://registry.yarnpkg.com/@types/inline-style-prefixer/-/inline-style-prefixer-3.0.1.tgz#8541e636b029124b747952e9a28848286d2b5bf6" @@ -440,7 +588,7 @@ append-transform@^0.4.0: dependencies: default-require-extensions "^1.0.0" -aproba@^1.0.3: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -566,6 +714,10 @@ ast-types@0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" +ast-types@0.9.6: + version "0.9.6" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -655,7 +807,7 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.0.0, babel-core@^6.25.0, babel-core@^6.26.0: +babel-core@^6.0.0, babel-core@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" dependencies: @@ -1056,17 +1208,6 @@ babel-plugin-syntax-trailing-function-commas@^6.22.0, babel-plugin-syntax-traili version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" -babel-plugin-tester@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-tester/-/babel-plugin-tester-4.0.0.tgz#5c05af9a175e2a1c7b3d6a195e710f1ae948a2bc" - dependencies: - babel-core "^6.25.0" - common-tags "^1.4.0" - invariant "^2.2.2" - lodash.merge "^4.6.0" - path-exists "^3.0.0" - strip-indent "^2.0.0" - babel-plugin-tester@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-tester/-/babel-plugin-tester-5.0.0.tgz#d3387860311cbd8353746d3a8aaba7ad2446e470" @@ -1721,6 +1862,10 @@ block-stream@*: dependencies: inherits "~2.0.0" +bluebird@^3.4.7, bluebird@^3.5.0: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" @@ -1914,6 +2059,24 @@ bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" +cacache@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.2.tgz#105a93a162bbedf3a25da42e1939ed99ffb145f8" + dependencies: + bluebird "^3.5.0" + chownr "^1.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.1" + mississippi "^1.3.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.1" + ssri "^5.0.0" + unique-filename "^1.1.0" + y18n "^3.2.1" + caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" @@ -1928,6 +2091,13 @@ callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -2044,6 +2214,10 @@ chokidar@^1.6.1, chokidar@^1.7.0: optionalDependencies: fsevents "^1.0.0" +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + ci-info@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" @@ -2069,6 +2243,12 @@ classnames@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" +clean-css@4.1.x: + version "4.1.9" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301" + dependencies: + source-map "0.5.x" + cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" @@ -2198,7 +2378,7 @@ command-join@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/command-join/-/command-join-2.0.0.tgz#52e8b984f4872d952ff1bdc8b98397d27c7144cf" -commander@^2.11.0, commander@^2.12.2, commander@^2.9.0: +commander@2.12.x, commander@^2.11.0, commander@^2.12.2, commander@^2.9.0, commander@~2.12.1: version "2.12.2" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" @@ -2208,6 +2388,12 @@ common-tags@^1.4.0, common-tags@^1.5.1: dependencies: babel-runtime "^6.26.0" +common-tags@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.7.0.tgz#2457c9d6c64f22b250c84c11c9b3f98b428f3083" + dependencies: + babel-runtime "^6.26.0" + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -2223,7 +2409,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.4.10, concat-stream@^1.6.0: +concat-stream@^1.4.10, concat-stream@^1.5.0, concat-stream@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -2425,6 +2611,17 @@ cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" @@ -2585,7 +2782,26 @@ css-loader@^0.28.7: postcss-value-parser "^3.3.0" source-list-map "^2.0.0" -css-select@~1.2.0: +css-loader@^0.28.8: + version "0.28.8" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.8.tgz#ff36381464dea18fe60f2601a060ba6445886bd5" + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + cssnano "^3.10.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + object-assign "^4.1.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.1.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-select@^1.1.0, css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" dependencies: @@ -2624,7 +2840,7 @@ cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" -"cssnano@>=2.6.1 <4": +"cssnano@>=2.6.1 <4", cssnano@^3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" dependencies: @@ -2684,6 +2900,10 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + d3-color@1: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.3.tgz#bc7643fca8e53a8347e2fbdaffa236796b58509b" @@ -2888,6 +3108,12 @@ doctrine@^2.0.0, doctrine@^2.0.2: dependencies: esutils "^2.0.2" +dom-converter@~0.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" + dependencies: + utila "~0.3" + dom-helpers@^3.2.0: version "3.3.1" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" @@ -2915,12 +3141,24 @@ domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" +domhandler@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + dependencies: + domelementtype "1" + domhandler@^2.3.0: version "2.4.1" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" dependencies: domelementtype "1" +domutils@1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" + dependencies: + domelementtype "1" + domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -2965,6 +3203,15 @@ duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" +duplexify@^3.1.2, duplexify@^3.4.2: + version "3.5.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd" + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -3032,6 +3279,12 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" + dependencies: + once "^1.4.0" + enhanced-resolve@^3.4.0: version "3.4.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" @@ -3173,6 +3426,13 @@ es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: d "1" es5-ext "~0.10.14" +es6-templates@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4" + dependencies: + recast "~0.11.12" + through "~2.3.6" + es6-weak-map@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" @@ -3289,7 +3549,7 @@ esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" -esprima@^3.1.3: +esprima@^3.1.3, esprima@~3.1.0: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -3520,7 +3780,7 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@^1.1.5: +file-loader@^1.1.5, file-loader@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.6.tgz#7b9a8f2c58f00a77fddf49e940f7ac978a3ea0e8" dependencies: @@ -3606,6 +3866,13 @@ flow-bin@^0.61.0: version "0.61.0" resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.61.0.tgz#d0473a8c35dbbf4de573823f4932124397d32d35" +flush-write-stream@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.2.tgz#c81b90d8746766f1a609a46809946c45dd8ae417" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.4" + for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -3648,6 +3915,13 @@ fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + fs-extra@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -3660,6 +3934,15 @@ fs-readdir-recursive@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -3704,7 +3987,7 @@ functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" -fuse.js@^3.0.1: +fuse.js@^3.0.1, fuse.js@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.2.0.tgz#f0448e8069855bf2a3e683cdc1d320e7e2a07ef4" @@ -3801,7 +4084,7 @@ glamor@^2.20.40: prop-types "^15.5.10" through "^2.3.8" -glamorous@^4.11.0: +glamorous@^4.11.0, glamorous@^4.11.2: version "4.11.2" resolved "https://registry.yarnpkg.com/glamorous/-/glamorous-4.11.2.tgz#ce144c6a53e247ddf0896ad6faddebf78c49d864" dependencies: @@ -4018,6 +4301,10 @@ hawk@~6.0.2: hoek "4.x.x" sntp "2.x.x" +he@1.1.x: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -4071,10 +4358,44 @@ html-entities@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" +html-loader@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.5.4.tgz#70f36e30a923cc52536fdc812cec6f556aeb47a4" + dependencies: + es6-templates "^0.2.3" + fastparse "^1.1.1" + html-minifier "^3.5.8" + loader-utils "^1.1.0" + object-assign "^4.1.1" + +html-minifier@^3.2.3, html-minifier@^3.5.8: + version "3.5.8" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.8.tgz#5ccdb1f73a0d654e6090147511f6e6b2ee312700" + dependencies: + camel-case "3.0.x" + clean-css "4.1.x" + commander "2.12.x" + he "1.1.x" + ncname "1.0.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.3.x" + html-tag-names@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/html-tag-names/-/html-tag-names-1.1.2.tgz#f65168964c5a9c82675efda882875dcb2a875c22" +html-webpack-plugin@^2.30.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz#7f9c421b7ea91ec460f56527d78df484ee7537d5" + dependencies: + bluebird "^3.4.7" + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + toposort "^1.0.0" + htmlparser2@^3.9.1: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" @@ -4086,6 +4407,15 @@ htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^2.0.2" +htmlparser2@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" + dependencies: + domelementtype "1" + domhandler "2.1" + domutils "1.1" + readable-stream "1.0" + http-errors@1.6.2, http-errors@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" @@ -4145,6 +4475,10 @@ ieee754@^1.1.4: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + ifvisible.js@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/ifvisible.js/-/ifvisible.js-1.0.6.tgz#52eb151ce89c56f15316226462e892d1f8451261" @@ -4501,6 +4835,10 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -5008,7 +5346,7 @@ jsx-ast-utils@^2.0.0: dependencies: array-includes "^3.0.3" -keycode@^2.1.8: +keycode@^2.1.8, keycode@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa" @@ -5193,6 +5531,15 @@ loader-runner@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" +loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" @@ -5289,7 +5636,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@4.x.x, lodash@^4.0.0, lodash@^4.1.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.1, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1: +lodash@4.x.x, lodash@^4.0.0, lodash@^4.1.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.1, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -5333,11 +5680,15 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" -lru-cache@^4.0.1: +lru-cache@^4.0.1, lru-cache@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" dependencies: @@ -5354,6 +5705,10 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" +make-error@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.2.tgz#8762ffad2444dd8ff1f7c819629fa28e24fea1c4" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -5364,6 +5719,17 @@ map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" +markdown-loader@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/markdown-loader/-/markdown-loader-2.0.2.tgz#1cdcf11307658cd611046d7db34c2fe80542af7c" + dependencies: + loader-utils "^1.1.0" + marked "^0.3.9" + +marked@^0.3.9: + version "0.3.12" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.12.tgz#7cf25ff2252632f3fe2406bde258e94eee927519" + marky@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.0.tgz#9617ed647bbbea8f45d19526da33dec70606df42" @@ -5506,6 +5872,21 @@ minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" +mississippi@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-1.3.0.tgz#d201583eb12327e3c5c1642a404a9cacf94e34f5" + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^1.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -5520,6 +5901,17 @@ moment@^2.6.0: version "2.20.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -5536,6 +5928,12 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +ncname@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c" + dependencies: + xml-char-classes "^1.0.0" + nearley@^2.7.10: version "2.11.0" resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.11.0.tgz#5e626c79a6cd2f6ab9e7e5d5805e7668967757ae" @@ -5548,6 +5946,12 @@ negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + dependencies: + lower-case "^1.1.1" + node-dir@^0.1.10: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" @@ -5788,7 +6192,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.3.3, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -5905,6 +6309,20 @@ pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + dependencies: + no-case "^2.2.0" + parse-asn1@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" @@ -6219,27 +6637,27 @@ postcss-minify-selectors@^2.0.4: postcss "^5.0.14" postcss-selector-parser "^2.0.0" -postcss-modules-extract-imports@^1.0.0: +postcss-modules-extract-imports@^1.0.0, postcss-modules-extract-imports@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" dependencies: postcss "^6.0.1" -postcss-modules-local-by-default@^1.0.1: +postcss-modules-local-by-default@^1.0.1, postcss-modules-local-by-default@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-scope@^1.0.0: +postcss-modules-scope@^1.0.0, postcss-modules-scope@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-values@^1.1.0: +postcss-modules-values@^1.1.0, postcss-modules-values@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" dependencies: @@ -6359,6 +6777,13 @@ prettier@^1.8.2: version "1.9.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.9.2.tgz#96bc2132f7a32338e6078aeb29727178c6335827" +pretty-error@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + dependencies: + renderkid "^2.0.1" + utila "~0.4" + pretty-format@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" @@ -6386,6 +6811,10 @@ progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + promise.prototype.finally@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.0.tgz#66f161b1643636e50e7cf201dc1b84a857f3864e" @@ -6433,6 +6862,21 @@ public-encrypt@^4.0.0: parse-asn1 "^5.0.0" randombytes "^2.0.1" +pump@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.3.5" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b" + dependencies: + duplexify "^3.1.2" + inherits "^2.0.1" + pump "^1.0.0" + punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -6572,6 +7016,15 @@ react-dom@^16.2.0: object-assign "^4.1.1" prop-types "^15.6.0" +react-fuzzy@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/react-fuzzy/-/react-fuzzy-0.5.1.tgz#295c2a4079ad39402e05605d9d7accd2db8527b6" + dependencies: + babel-runtime "^6.23.0" + classnames "^2.2.5" + fuse.js "^3.0.1" + prop-types "^15.5.9" + react-html-attributes@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/react-html-attributes/-/react-html-attributes-1.4.1.tgz#97b5ec710da68833598c8be6f89ac436216840a5" @@ -6605,7 +7058,7 @@ react-jss@^8.2.0: prop-types "^15.6.0" theming "^1.3.0" -react-modal@^3.1.8: +react-modal@^3.1.10, react-modal@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.1.10.tgz#8898b5cc4ebba78adbb8dea4c55a69818aa682cc" dependencies: @@ -6629,7 +7082,7 @@ react-reconciler@^0.7.0: object-assign "^4.1.1" prop-types "^15.6.0" -react-split-pane@^0.1.71: +react-split-pane@^0.1.71, react-split-pane@^0.1.74: version "0.1.74" resolved "https://registry.yarnpkg.com/react-split-pane/-/react-split-pane-0.1.74.tgz#cf79fc98b51ab0763fdc778749b810a102b036ca" dependencies: @@ -6674,7 +7127,7 @@ react-transition-group@^1.1.2: prop-types "^15.5.6" warning "^3.0.0" -react-treebeard@^2.0.3: +react-treebeard@^2.0.3, react-treebeard@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/react-treebeard/-/react-treebeard-2.1.0.tgz#fbd5cf51089b6f09a9b18350ab3bddf736e57800" dependencies: @@ -6745,7 +7198,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.3.3: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: @@ -6757,6 +7210,15 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.0.3" util-deprecate "~1.0.1" +readable-stream@1.0: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" @@ -6780,6 +7242,15 @@ recast@^0.12.6: private "~0.1.5" source-map "~0.6.1" +recast@~0.11.12: + version "0.11.23" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" + dependencies: + ast-types "0.9.6" + esprima "~3.1.0" + private "~0.1.5" + source-map "~0.5.0" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -6881,10 +7352,24 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" +renderkid@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" + dependencies: + css-select "^1.1.0" + dom-converter "~0.1" + htmlparser2 "~3.3.0" + strip-ansi "^3.0.0" + utila "~0.3" + repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" @@ -7014,7 +7499,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -7040,6 +7525,12 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + dependencies: + aproba "^1.1.1" + rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" @@ -7084,6 +7575,13 @@ schema-utils@^0.3.0: dependencies: ajv "^5.0.0" +schema-utils@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.3.tgz#e2a594d3395834d5e15da22b48be13517859458e" + dependencies: + ajv "^5.0.0" + ajv-keywords "^2.1.0" + semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" @@ -7112,6 +7610,10 @@ send@0.16.1: range-parser "~1.2.0" statuses "~1.3.1" +serialize-javascript@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" + serve-favicon@^2.4.5: version "2.4.5" resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.4.5.tgz#49d9a46863153a9240691c893d2b0e7d85d6d436" @@ -7238,16 +7740,16 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" +source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: amdefine ">=0.0.4" -source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -7296,6 +7798,12 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +ssri@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.0.0.tgz#13c19390b606c821f2a10d02b351c1729b94d8cf" + dependencies: + safe-buffer "^5.1.0" + staged-git-files@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" @@ -7315,6 +7823,13 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" +stream-each@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + stream-http@^2.7.2: version "2.7.2" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" @@ -7325,6 +7840,10 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + stream-to-observable@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" @@ -7381,6 +7900,10 @@ string_decoder@^1.0.0, string_decoder@~1.0.3: dependencies: safe-buffer "~5.1.0" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + stringify-object@^3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.1.tgz#2720c2eff940854c819f6ee252aaeb581f30624d" @@ -7644,7 +8167,7 @@ through2@^2.0.0, through2@^2.0.2: readable-stream "^2.1.5" xtend "~4.0.1" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -7684,6 +8207,10 @@ to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" +toposort@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec" + touch@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/touch/-/touch-1.0.0.tgz#449cbe2dbae5a8c8038e30d71fa0ff464947c4de" @@ -7747,6 +8274,20 @@ ua-parser-js@^0.7.9: version "0.7.17" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" +uglify-es@^3.3.4: + version "3.3.5" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.5.tgz#cf7e695da81999f85196b15e2978862f13212f88" + dependencies: + commander "~2.12.1" + source-map "~0.6.1" + +uglify-js@3.3.x: + version "3.3.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.5.tgz#4c4143dfe08e8825746675cc49a6874a933b543e" + dependencies: + commander "~2.12.1" + source-map "~0.6.1" + uglify-js@^2.6, uglify-js@^2.8.29: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" @@ -7768,6 +8309,19 @@ uglifyjs-webpack-plugin@^0.4.6: uglify-js "^2.8.29" webpack-sources "^1.0.1" +uglifyjs-webpack-plugin@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.6.tgz#f4ba8449edcf17835c18ba6ae99b9d610857fb19" + dependencies: + cacache "^10.0.1" + find-cache-dir "^1.0.0" + schema-utils "^0.4.2" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + uglify-es "^3.3.4" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -7794,6 +8348,18 @@ uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" +unique-filename@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + dependencies: + imurmurhash "^0.1.4" + unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" @@ -7826,6 +8392,10 @@ update-notifier@^2.1.0: semver-diff "^2.0.0" xdg-basedir "^3.0.0" +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + url-loader@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" @@ -7861,6 +8431,14 @@ util@0.10.3, util@^0.10.3: dependencies: inherits "2.0.1" +utila@~0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -7997,7 +8575,7 @@ webpack-hot-middleware@^2.21.0: querystring "^0.2.0" strip-ansi "^3.0.0" -webpack-sources@^1.0.1: +webpack-sources@^1.0.1, webpack-sources@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" dependencies: @@ -8090,7 +8668,7 @@ wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" -worker-farm@^1.3.1: +worker-farm@^1.3.1, worker-farm@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae" dependencies: @@ -8152,6 +8730,10 @@ xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" +xml-char-classes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" + xml-name-validator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" From fde29326f1d12638fee32d3850a99ae540a7ead7 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Tue, 9 Jan 2018 17:35:53 -0800 Subject: [PATCH 070/153] Update to lerna@2.6.0 --- package.json | 2 +- yarn.lock | 169 ++++----------------------------------------------- 2 files changed, 14 insertions(+), 157 deletions(-) diff --git a/package.json b/package.json index ab26e2896..a8491c18d 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "flow-bin": "^0.61.0", "husky": "^0.14.3", "jest": "^21.2.1", - "lerna": "^2.5.1", + "lerna": "^2.6.0", "lint-staged": "^4.1.3", "prettier": "^1.8.2", "raf": "^3.4.0", diff --git a/yarn.lock b/yarn.lock index eae50899a..fb5ad8ef1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -70,21 +70,6 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" -"@hypnosphi/fuse.js@^3.0.9": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@hypnosphi/fuse.js/-/fuse.js-3.0.9.tgz#ea99f6121b4a8f065b4c71f85595db2714498807" - -"@storybook/addon-actions@^3.2.18": - version "3.2.18" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.2.18.tgz#46d97b0add955698d66becb5d51e68a4d387b822" - dependencies: - "@storybook/addons" "^3.2.18" - deep-equal "^1.0.1" - json-stringify-safe "^5.0.1" - prop-types "^15.6.0" - react-inspector "^2.2.2" - uuid "^3.1.0" - "@storybook/addon-actions@^3.3.6": version "3.3.6" resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.3.6.tgz#1f85eaf603d26bd14e97c14665f5716a5cb32272" @@ -96,12 +81,6 @@ react-inspector "^2.2.2" uuid "^3.1.0" -"@storybook/addon-links@^3.2.18": - version "3.2.18" - resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.2.18.tgz#a1fd96dd91d56204da92632baa36a2263d2aeebb" - dependencies: - "@storybook/addons" "^3.2.18" - "@storybook/addon-links@^3.3.6": version "3.3.6" resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.3.6.tgz#f66efea8e4b1b7c6c41d1554623de5e74c891e53" @@ -110,32 +89,14 @@ global "^4.3.2" prop-types "^15.5.10" -"@storybook/addon-options@^3.1.6": - version "3.2.18" - resolved "https://registry.yarnpkg.com/@storybook/addon-options/-/addon-options-3.2.18.tgz#d87dbe3ead00537c4ad851a3555be39910f05b31" - dependencies: - "@storybook/addons" "^3.2.18" - "@storybook/addon-options@^3.3.6": version "3.3.6" resolved "https://registry.yarnpkg.com/@storybook/addon-options/-/addon-options-3.3.6.tgz#9ea845467eb01b18f8ad819be68e7f4ca3fc2d48" -"@storybook/addons@^3.2.18": - version "3.2.18" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.2.18.tgz#2c1d42a0b661db2e429d1c406e79765ae5c71458" - "@storybook/addons@^3.3.6": version "3.3.6" resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.3.6.tgz#05422ecaf720e5c95e34792ba82b2cad8792776a" -"@storybook/channel-postmessage@^3.2.18": - version "3.2.18" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.2.18.tgz#8193e2fbae4f46a20a58fb6cdfd722c1743a3dd0" - dependencies: - "@storybook/channels" "^3.2.18" - global "^4.3.2" - json-stringify-safe "^5.0.1" - "@storybook/channel-postmessage@^3.3.6": version "3.3.6" resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.3.6.tgz#2d786d79ac3536f68ff5af93c1a3a3445b8e8b35" @@ -144,10 +105,6 @@ global "^4.3.2" json-stringify-safe "^5.0.1" -"@storybook/channels@^3.2.18": - version "3.2.18" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.2.18.tgz#c5d8c4ac780c6ebb4b1c360d8faf9207fd4fbafd" - "@storybook/channels@^3.3.6": version "3.3.6" resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.3.6.tgz#1e775598ec14d95afc0624f76563a7cbd84410df" @@ -156,14 +113,6 @@ version "3.3.6" resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-3.3.6.tgz#567c52b5828beb63eff7e6c11efda8afe64662ce" -"@storybook/components@^3.2.18": - version "3.2.18" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.2.18.tgz#142dd10414a717c24734f063af6b2b7b9bd06b4a" - dependencies: - glamor "^2.20.40" - glamorous "^4.11.0" - prop-types "^15.6.0" - "@storybook/components@^3.3.6": version "3.3.6" resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.3.6.tgz#e8bbb2003eee6dad67132e6d46bd54063f86e77c" @@ -172,7 +121,7 @@ glamorous "^4.11.2" prop-types "^15.6.0" -"@storybook/mantra-core@^1.7.0", "@storybook/mantra-core@^1.7.2": +"@storybook/mantra-core@^1.7.2": version "1.7.2" resolved "https://registry.yarnpkg.com/@storybook/mantra-core/-/mantra-core-1.7.2.tgz#e10c7faca29769e97131e0e0308ef7cfb655b70c" dependencies: @@ -187,16 +136,7 @@ chalk "^2.3.0" npmlog "^4.1.2" -"@storybook/react-fuzzy@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@storybook/react-fuzzy/-/react-fuzzy-0.4.3.tgz#36f7536ba97bf08b03cb57f47c58ae2cca330aec" - dependencies: - babel-runtime "^6.23.0" - classnames "^2.2.5" - fuse.js "^3.0.1" - prop-types "^15.5.9" - -"@storybook/react-komposer@^2.0.0", "@storybook/react-komposer@^2.0.1", "@storybook/react-komposer@^2.0.3": +"@storybook/react-komposer@^2.0.1", "@storybook/react-komposer@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@storybook/react-komposer/-/react-komposer-2.0.3.tgz#f9e12a9586b2ce95c24c137eabb8b71527ddb369" dependencies: @@ -221,62 +161,6 @@ dependencies: babel-runtime "^6.5.0" -"@storybook/react@^3.2.18": - version "3.2.18" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-3.2.18.tgz#bb0a86cf808c3c90fedc11e489f10660f650c781" - dependencies: - "@storybook/addon-actions" "^3.2.18" - "@storybook/addon-links" "^3.2.18" - "@storybook/addons" "^3.2.18" - "@storybook/channel-postmessage" "^3.2.18" - "@storybook/ui" "^3.2.18" - airbnb-js-shims "^1.4.0" - autoprefixer "^7.2.3" - babel-core "^6.26.0" - babel-loader "^7.1.2" - babel-plugin-react-docgen "^1.8.0" - babel-plugin-transform-regenerator "^6.26.0" - babel-plugin-transform-runtime "^6.23.0" - babel-preset-env "^1.6.1" - babel-preset-minify "^0.2.0" - babel-preset-react "^6.24.1" - babel-preset-react-app "^3.1.0" - babel-preset-stage-0 "^6.24.1" - babel-runtime "^6.26.0" - case-sensitive-paths-webpack-plugin "^2.1.1" - chalk "^2.3.0" - commander "^2.12.2" - common-tags "^1.5.1" - configstore "^3.1.1" - core-js "^2.5.3" - css-loader "^0.28.7" - dotenv-webpack "^1.5.4" - express "^4.16.2" - file-loader "^1.1.5" - find-cache-dir "^1.0.0" - glamor "^2.20.40" - glamorous "^4.11.0" - global "^4.3.2" - json-loader "^0.5.7" - json-stringify-safe "^5.0.1" - json5 "^0.5.1" - lodash.flattendeep "^4.4.0" - postcss-flexbugs-fixes "^3.2.0" - postcss-loader "^2.0.9" - prop-types "^15.6.0" - qs "^6.5.1" - redux "^3.7.2" - request "^2.83.0" - serve-favicon "^2.4.5" - shelljs "^0.7.8" - style-loader "^0.19.1" - url-loader "^0.6.2" - util-deprecate "^1.0.2" - uuid "^3.1.0" - webpack "^3.10.0" - webpack-dev-middleware "^1.12.2" - webpack-hot-middleware "^2.21.0" - "@storybook/react@^3.3.6": version "3.3.6" resolved "https://registry.yarnpkg.com/@storybook/react/-/react-3.3.6.tgz#11603eb2d45a6be18ffcc29dd39d1c207596c792" @@ -339,34 +223,6 @@ webpack-dev-middleware "^1.12.2" webpack-hot-middleware "^2.21.0" -"@storybook/ui@^3.2.18": - version "3.2.18" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.2.18.tgz#4d19f8daff7ec37cebe4d2b5d20e81e3676d8938" - dependencies: - "@hypnosphi/fuse.js" "^3.0.9" - "@storybook/components" "^3.2.18" - "@storybook/mantra-core" "^1.7.0" - "@storybook/react-fuzzy" "^0.4.3" - "@storybook/react-komposer" "^2.0.0" - babel-runtime "^6.26.0" - deep-equal "^1.0.1" - events "^1.1.1" - global "^4.3.2" - json-stringify-safe "^5.0.1" - keycode "^2.1.8" - lodash.debounce "^4.0.8" - lodash.pick "^4.4.0" - lodash.sortby "^4.7.0" - podda "^1.2.2" - prop-types "^15.6.0" - qs "^6.5.1" - react-icons "^2.2.7" - react-inspector "^2.2.2" - react-modal "^3.1.8" - react-split-pane "^0.1.71" - react-treebeard "^2.0.3" - redux "^3.7.2" - "@storybook/ui@^3.3.6": version "3.3.6" resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.3.6.tgz#97d04c513e4a22838c68e6dc915183b2e7a7bce5" @@ -2382,7 +2238,7 @@ commander@2.12.x, commander@^2.11.0, commander@^2.12.2, commander@^2.9.0, comman version "2.12.2" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" -common-tags@^1.4.0, common-tags@^1.5.1: +common-tags@^1.4.0: version "1.6.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.6.0.tgz#788e4bcc582f16993e5b2c92f76b1ccb80731537" dependencies: @@ -3780,7 +3636,7 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@^1.1.5, file-loader@^1.1.6: +file-loader@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.6.tgz#7b9a8f2c58f00a77fddf49e940f7ac978a3ea0e8" dependencies: @@ -4084,7 +3940,7 @@ glamor@^2.20.40: prop-types "^15.5.10" through "^2.3.8" -glamorous@^4.11.0, glamorous@^4.11.2: +glamorous@^4.11.2: version "4.11.2" resolved "https://registry.yarnpkg.com/glamorous/-/glamorous-4.11.2.tgz#ce144c6a53e247ddf0896ad6faddebf78c49d864" dependencies: @@ -5346,7 +5202,7 @@ jsx-ast-utils@^2.0.0: dependencies: array-includes "^3.0.3" -keycode@^2.1.8, keycode@^2.1.9: +keycode@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa" @@ -5378,9 +5234,9 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -lerna@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-2.5.1.tgz#d07099bd3051ee799f98c753328bd69e96c6fab8" +lerna@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-2.6.0.tgz#865377717ca9e0daa5a2fbb00e364968d533650a" dependencies: async "^1.5.0" chalk "^2.1.0" @@ -5414,6 +5270,7 @@ lerna@^2.5.1: safe-buffer "^5.1.1" semver "^5.4.1" signal-exit "^3.0.2" + slash "^1.0.0" strong-log-transformer "^1.0.6" temp-write "^3.3.0" write-file-atomic "^2.3.0" @@ -7058,7 +6915,7 @@ react-jss@^8.2.0: prop-types "^15.6.0" theming "^1.3.0" -react-modal@^3.1.10, react-modal@^3.1.8: +react-modal@^3.1.10: version "3.1.10" resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.1.10.tgz#8898b5cc4ebba78adbb8dea4c55a69818aa682cc" dependencies: @@ -7082,7 +6939,7 @@ react-reconciler@^0.7.0: object-assign "^4.1.1" prop-types "^15.6.0" -react-split-pane@^0.1.71, react-split-pane@^0.1.74: +react-split-pane@^0.1.74: version "0.1.74" resolved "https://registry.yarnpkg.com/react-split-pane/-/react-split-pane-0.1.74.tgz#cf79fc98b51ab0763fdc778749b810a102b036ca" dependencies: @@ -7127,7 +6984,7 @@ react-transition-group@^1.1.2: prop-types "^15.5.6" warning "^3.0.0" -react-treebeard@^2.0.3, react-treebeard@^2.1.0: +react-treebeard@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/react-treebeard/-/react-treebeard-2.1.0.tgz#fbd5cf51089b6f09a9b18350ab3bddf736e57800" dependencies: From 60c2cd65dfecd1f95cc8bfbe58d6fec05c058999 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Tue, 9 Jan 2018 17:36:19 -0800 Subject: [PATCH 071/153] Update to lint-staged@6.0.0 --- package.json | 2 +- yarn.lock | 77 ++++++++++++++++++++++++++++++---------------------- 2 files changed, 46 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index a8491c18d..acedfeec6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "husky": "^0.14.3", "jest": "^21.2.1", "lerna": "^2.6.0", - "lint-staged": "^4.1.3", + "lint-staged": "^6.0.0", "prettier": "^1.8.2", "raf": "^3.4.0", "react": "^16.2.0", diff --git a/yarn.lock b/yarn.lock index fb5ad8ef1..7f10fa7a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -419,6 +419,10 @@ ansi-styles@^3.1.0, ansi-styles@^3.2.0: dependencies: color-convert "^1.9.0" +any-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" + anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" @@ -2490,7 +2494,7 @@ core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -cosmiconfig@3.1.0: +cosmiconfig@3.1.0, cosmiconfig@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397" dependencies: @@ -2499,19 +2503,6 @@ cosmiconfig@3.1.0: parse-json "^3.0.0" require-from-string "^2.0.1" -cosmiconfig@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-1.1.0.tgz#0dea0f9804efdfb929fbb1b188e25553ea053d37" - dependencies: - graceful-fs "^4.1.2" - js-yaml "^3.4.3" - minimist "^1.2.0" - object-assign "^4.0.1" - os-homedir "^1.0.1" - parse-json "^2.2.0" - pinkie-promise "^2.0.0" - require-from-string "^1.1.0" - cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: version "2.2.2" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" @@ -3688,6 +3679,10 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" +find-parent-dir@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" @@ -4595,6 +4590,12 @@ is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" +is-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2" + dependencies: + symbol-observable "^0.2.2" + is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -5289,23 +5290,28 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lint-staged@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-4.3.0.tgz#ed0779ad9a42c0dc62bb3244e522870b41125879" +lint-staged@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-6.0.0.tgz#7ab7d345f2fe302ff196f1de6a005594ace03210" dependencies: app-root-path "^2.0.0" chalk "^2.1.0" commander "^2.11.0" - cosmiconfig "^1.1.0" + cosmiconfig "^3.1.0" + debug "^3.1.0" + dedent "^0.7.0" execa "^0.8.0" + find-parent-dir "^0.3.0" is-glob "^4.0.0" jest-validate "^21.1.0" - listr "^0.12.0" + listr "^0.13.0" lodash "^4.17.4" log-symbols "^2.0.0" minimatch "^3.0.0" npm-which "^3.0.1" p-map "^1.1.1" + path-is-inside "^1.0.2" + pify "^3.0.0" staged-git-files "0.0.4" stringify-object "^3.2.0" @@ -5313,9 +5319,9 @@ listr-silent-renderer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" -listr-update-renderer@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" +listr-update-renderer@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" dependencies: chalk "^1.1.3" cli-truncate "^0.2.1" @@ -5335,25 +5341,26 @@ listr-verbose-renderer@^0.4.0: date-fns "^1.27.2" figures "^1.7.0" -listr@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" +listr@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d" dependencies: chalk "^1.1.3" cli-truncate "^0.2.1" figures "^1.7.0" indent-string "^2.1.0" + is-observable "^0.2.0" is-promise "^2.1.0" is-stream "^1.1.0" listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.2.0" + listr-update-renderer "^0.4.0" listr-verbose-renderer "^0.4.0" log-symbols "^1.0.2" log-update "^1.0.2" ora "^0.2.3" p-map "^1.1.1" - rxjs "^5.0.0-beta.11" - stream-to-observable "^0.1.0" + rxjs "^5.4.2" + stream-to-observable "^0.2.0" strip-ansi "^3.0.1" load-json-file@^1.0.0: @@ -7398,7 +7405,7 @@ rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" -rxjs@^5.0.0-beta.11: +rxjs@^5.4.2: version "5.5.6" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.6.tgz#e31fb96d6fd2ff1fd84bcea8ae9c02d007179c02" dependencies: @@ -7701,9 +7708,11 @@ stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" -stream-to-observable@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" +stream-to-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10" + dependencies: + any-observable "^0.2.0" strict-uri-encode@^1.0.0: version "1.1.0" @@ -7910,6 +7919,10 @@ symbol-observable@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" +symbol-observable@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" + symbol-observable@^1.0.3, symbol-observable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.1.0.tgz#5c68fd8d54115d9dfb72a84720549222e8db9b32" From 902ba22877a372a4ae8949a902ea7c37863babf4 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Tue, 9 Jan 2018 17:49:52 -0800 Subject: [PATCH 072/153] Update to flow-bin@0.63.1 --- .flowconfig | 4 ++-- package.json | 2 +- .../src/modules/requestIdleCallback/index.js | 3 ++- yarn.lock | 6 +++--- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.flowconfig b/.flowconfig index afa0a0bfe..cf05611e0 100644 --- a/.flowconfig +++ b/.flowconfig @@ -1,5 +1,5 @@ [version] -^0.61.0 +^0.63.0 [ignore] /.*/__tests__/.* @@ -14,4 +14,4 @@ /types [options] -unsafe.enable_getters_and_setters=true + diff --git a/package.json b/package.json index acedfeec6..04a14c3d7 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "eslint-config-prettier": "^2.9.0", "eslint-plugin-promise": "^3.6.0", "eslint-plugin-react": "^7.5.1", - "flow-bin": "^0.61.0", + "flow-bin": "^0.63.1", "husky": "^0.14.3", "jest": "^21.2.1", "lerna": "^2.6.0", diff --git a/packages/react-native-web/src/modules/requestIdleCallback/index.js b/packages/react-native-web/src/modules/requestIdleCallback/index.js index 168b89e74..f561e3540 100644 --- a/packages/react-native-web/src/modules/requestIdleCallback/index.js +++ b/packages/react-native-web/src/modules/requestIdleCallback/index.js @@ -22,7 +22,8 @@ const _requestIdleCallback = function(cb: Function) { }, 1); }; -const _cancelIdleCallback = function(id: number) { +// $FlowFixMe (TimeoutID type is not recognized by eslint) +const _cancelIdleCallback = function(id) { clearTimeout(id); }; diff --git a/yarn.lock b/yarn.lock index 7f10fa7a3..78c3dd96c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3713,9 +3713,9 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" -flow-bin@^0.61.0: - version "0.61.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.61.0.tgz#d0473a8c35dbbf4de573823f4932124397d32d35" +flow-bin@^0.63.1: + version "0.63.1" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.63.1.tgz#ab00067c197169a5fb5b4996c8f6927b06694828" flush-write-stream@^1.0.0: version "1.0.2" From 2117e44e9d5ba827f6a6f44014bdcd30593d7480 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Wed, 10 Jan 2018 16:31:13 -0800 Subject: [PATCH 073/153] [fix] limit Image loader deferral to 1000ms This patch introduces a limit on how long image loading is deferred, and mitigates an issue with lengthy delays to 'requestIdleCallback' in the Chrome browser. Fix #759 --- .../react-native-web/src/exports/Image/index.js | 17 ++++++++++++----- .../src/modules/requestIdleCallback/index.js | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/react-native-web/src/exports/Image/index.js b/packages/react-native-web/src/exports/Image/index.js index 3a1981067..42d786b29 100644 --- a/packages/react-native-web/src/exports/Image/index.js +++ b/packages/react-native-web/src/exports/Image/index.js @@ -87,6 +87,9 @@ type State = { shouldDisplaySource: boolean }; +const getAssetTimeout = source => + typeof source === 'object' && source.timeout ? source.timeout : 1000; + class Image extends Component<*, State> { static displayName = 'Image'; @@ -246,12 +249,16 @@ class Image extends Component<*, State> { } _createImageLoader() { + const { source } = this.props; this._destroyImageLoader(); - this._loadRequest = requestIdleCallback(() => { - const uri = resolveAssetSource(this.props.source); - this._imageRequestId = ImageLoader.load(uri, this._onLoad, this._onError); - this._onLoadStart(); - }); + this._loadRequest = requestIdleCallback( + () => { + const uri = resolveAssetSource(source); + this._imageRequestId = ImageLoader.load(uri, this._onLoad, this._onError); + this._onLoadStart(); + }, + { timeout: getAssetTimeout(source) } + ); } _destroyImageLoader() { diff --git a/packages/react-native-web/src/modules/requestIdleCallback/index.js b/packages/react-native-web/src/modules/requestIdleCallback/index.js index f561e3540..f1c170f7c 100644 --- a/packages/react-native-web/src/modules/requestIdleCallback/index.js +++ b/packages/react-native-web/src/modules/requestIdleCallback/index.js @@ -10,7 +10,7 @@ import { canUseDOM } from 'fbjs/lib/ExecutionEnvironment'; -const _requestIdleCallback = function(cb: Function) { +const _requestIdleCallback = function(cb: Function, options: Object) { return setTimeout(() => { const start = Date.now(); cb({ From 067e3f346fe59953c209f33d466967f3307f339e Mon Sep 17 00:00:00 2001 From: Johannes Date: Wed, 10 Jan 2018 14:25:45 +0100 Subject: [PATCH 074/153] [fix] KeyboardAvoidingView missing 'this' binding Close #762 --- .../react-native-web/src/exports/KeyboardAvoidingView/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-native-web/src/exports/KeyboardAvoidingView/index.js b/packages/react-native-web/src/exports/KeyboardAvoidingView/index.js index f45464ebf..afa5dbef9 100644 --- a/packages/react-native-web/src/exports/KeyboardAvoidingView/index.js +++ b/packages/react-native-web/src/exports/KeyboardAvoidingView/index.js @@ -40,7 +40,7 @@ class KeyboardAvoidingView extends Component<*> { onKeyboardChange(event: Object) {} - onLayout(event: ViewLayoutEvent) { + onLayout = (event: ViewLayoutEvent) => { this.frame = event.nativeEvent.layout; } From 19cf0711bc163b9ad56bd77f76f2c6a538ae301b Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Thu, 11 Jan 2018 12:41:34 -0800 Subject: [PATCH 075/153] [add] StyleSheet support for 'overscrollBehavior' An experimental CSS property to control the behavior when the scroll position of a scroll container reaches the edge of the scrollport. This allows web apps to get closer to native scrolling behaviour and performance. https://wicg.github.io/overscroll-behavior/ https://developers.google.com/web/updates/2017/11/overscroll-behavior Fix #765 --- .../createReactDOMStyle-test.js.snap | 4 ++++ .../__tests__/createReactDOMStyle-test.js | 4 +++- .../src/exports/StyleSheet/createReactDOMStyle.js | 1 + .../src/exports/View/ViewStylePropTypes.js | 5 +++++ website/storybook/1-components/View/ViewScreen.js | 15 +++++++++++++++ 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap b/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap index a820b14df..be7a9bd47 100644 --- a/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap +++ b/packages/react-native-web/src/exports/StyleSheet/__tests__/__snapshots__/createReactDOMStyle-test.js.snap @@ -34,5 +34,9 @@ Object { "marginLeft": "10px", "marginRight": "10px", "marginTop": "50px", + "overflowX": "hidden", + "overflowY": "hidden", + "overscrollBehaviorX": "contain", + "overscrollBehaviorY": "contain", } `; diff --git a/packages/react-native-web/src/exports/StyleSheet/__tests__/createReactDOMStyle-test.js b/packages/react-native-web/src/exports/StyleSheet/__tests__/createReactDOMStyle-test.js index 76921fdc8..26d6f82dc 100644 --- a/packages/react-native-web/src/exports/StyleSheet/__tests__/createReactDOMStyle-test.js +++ b/packages/react-native-web/src/exports/StyleSheet/__tests__/createReactDOMStyle-test.js @@ -143,7 +143,9 @@ describe('apis/StyleSheet/createReactDOMStyle', () => { borderWidth: 0, marginTop: 50, marginVertical: 25, - margin: 10 + margin: 10, + overflow: 'hidden', + overscrollBehavior: 'contain' }; expect(createReactDOMStyle(style)).toMatchSnapshot(); diff --git a/packages/react-native-web/src/exports/StyleSheet/createReactDOMStyle.js b/packages/react-native-web/src/exports/StyleSheet/createReactDOMStyle.js index dcba9b815..306356112 100644 --- a/packages/react-native-web/src/exports/StyleSheet/createReactDOMStyle.js +++ b/packages/react-native-web/src/exports/StyleSheet/createReactDOMStyle.js @@ -35,6 +35,7 @@ const styleShortFormProperties = { marginHorizontal: ['marginRight', 'marginLeft'], marginVertical: ['marginTop', 'marginBottom'], overflow: ['overflowX', 'overflowY'], + overscrollBehavior: ['overscrollBehaviorX', 'overscrollBehaviorY'], padding: ['paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'], paddingHorizontal: ['paddingRight', 'paddingLeft'], paddingVertical: ['paddingTop', 'paddingBottom'], diff --git a/packages/react-native-web/src/exports/View/ViewStylePropTypes.js b/packages/react-native-web/src/exports/View/ViewStylePropTypes.js index cc4aa371d..59d2ca8e2 100644 --- a/packages/react-native-web/src/exports/View/ViewStylePropTypes.js +++ b/packages/react-native-web/src/exports/View/ViewStylePropTypes.js @@ -17,6 +17,8 @@ import ShadowPropTypes from '../../modules/ShadowPropTypes'; import TransformPropTypes from '../../modules/TransformPropTypes'; import { number, oneOf, oneOfType, string } from 'prop-types'; +const overscrollBehaviorType = oneOf(['auto', 'contain', 'none']); + const ViewStylePropTypes = { ...AnimationPropTypes, ...BorderPropTypes, @@ -46,6 +48,9 @@ const ViewStylePropTypes = { filter: string, outline: string, outlineColor: ColorPropType, + overscrollBehavior: overscrollBehaviorType, + overscrollBehaviorX: overscrollBehaviorType, + overscrollBehaviorY: overscrollBehaviorType, perspective: oneOfType([number, string]), perspectiveOrigin: string, touchAction: string, diff --git a/website/storybook/1-components/View/ViewScreen.js b/website/storybook/1-components/View/ViewScreen.js index 5b384300b..6cdcafae1 100644 --- a/website/storybook/1-components/View/ViewScreen.js +++ b/website/storybook/1-components/View/ViewScreen.js @@ -688,6 +688,21 @@ const stylePropTypes = [ name: 'overflowY', typeInfo: 'string' }, + { + label: 'web', + name: 'overscrollBehavior', + typeInfo: '"auto" | "contain" | "none"' + }, + { + label: 'web', + name: 'overscrollBehaviorX', + typeInfo: '"auto" | "contain" | "none"' + }, + { + label: 'web', + name: 'overscrollBehaviorY', + typeInfo: '"auto" | "contain" | "none"' + }, { name: 'padding', typeInfo: 'number | string' From e234568a345a9843a9ecce473c5a7093ad010376 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Thu, 11 Jan 2018 12:59:44 -0800 Subject: [PATCH 076/153] Fix source links in documentation --- website/storybook/ui-explorer/UIExplorer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/storybook/ui-explorer/UIExplorer.js b/website/storybook/ui-explorer/UIExplorer.js index 4f267b53a..8d1009831 100644 --- a/website/storybook/ui-explorer/UIExplorer.js +++ b/website/storybook/ui-explorer/UIExplorer.js @@ -22,7 +22,7 @@ const Divider = () => ; const SourceLink = ({ uri }) => ( View source code on GitHub From d5e8d85ce9f8258aee1baeb3b4361b828ec70b80 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Tue, 16 Jan 2018 11:11:50 -0800 Subject: [PATCH 077/153] Fix example in babel plugin README --- packages/babel-plugin-react-native-web/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/babel-plugin-react-native-web/README.md b/packages/babel-plugin-react-native-web/README.md index 5571712d4..38bfc5a0c 100644 --- a/packages/babel-plugin-react-native-web/README.md +++ b/packages/babel-plugin-react-native-web/README.md @@ -34,6 +34,6 @@ import { StyleSheet, View } from 'react-native'; **After** ```js -import StyleSheet from 'react-native-web/dist/apis/StyleSheet'; -import View from 'react-native-web/dist/components/View'; +import StyleSheet from 'react-native-web/dist/exports/StyleSheet'; +import View from 'react-native-web/dist/exports/View'; ``` From 5cd533e6cc2ee2e83e3f7fdb7a97cbe3f48be1ad Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Tue, 16 Jan 2018 11:15:45 -0800 Subject: [PATCH 078/153] 0.3.1 --- lerna.json | 2 +- packages/babel-plugin-react-native-web/package.json | 2 +- packages/benchmarks/package.json | 6 +++--- packages/react-native-web/package.json | 2 +- website/package.json | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lerna.json b/lerna.json index 1fcf34004..0b0c23531 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.5.1", - "version": "0.3.0", + "version": "0.3.1", "npmClient": "yarn", "useWorkspaces": true, "packages": [ diff --git a/packages/babel-plugin-react-native-web/package.json b/packages/babel-plugin-react-native-web/package.json index 2283c9b73..779c2973c 100644 --- a/packages/babel-plugin-react-native-web/package.json +++ b/packages/babel-plugin-react-native-web/package.json @@ -1,6 +1,6 @@ { "name": "babel-plugin-react-native-web", - "version": "0.3.0", + "version": "0.3.1", "description": "Babel plugin for React Native for Web", "main": "index.js", "devDependencies": { diff --git a/packages/benchmarks/package.json b/packages/benchmarks/package.json index 9eed7a332..a77ae85a1 100644 --- a/packages/benchmarks/package.json +++ b/packages/benchmarks/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "benchmarks", - "version": "0.3.0", + "version": "0.3.1", "scripts": { "benchmark": "webpack --config ./webpack.config.js && open index.html" }, @@ -17,14 +17,14 @@ "react": "^16.2.0", "react-dom": "^16.2.0", "react-jss": "^8.2.0", - "react-native-web": "^0.3.0", + "react-native-web": "^0.3.1", "reactxp": "^0.46.6", "styled-components": "^2.3.2", "styletron-client": "^3.0.0-rc.5", "styletron-utils": "^3.0.0-rc.3" }, "devDependencies": { - "babel-plugin-react-native-web": "^0.3.0", + "babel-plugin-react-native-web": "^0.3.1", "css-loader": "^0.28.7", "style-loader": "^0.19.1", "webpack": "^3.10.0", diff --git a/packages/react-native-web/package.json b/packages/react-native-web/package.json index d8ada9e2b..3b0f2ae9f 100644 --- a/packages/react-native-web/package.json +++ b/packages/react-native-web/package.json @@ -1,6 +1,6 @@ { "name": "react-native-web", - "version": "0.3.0", + "version": "0.3.1", "description": "React Native for Web", "main": "dist/index.js", "files": [ diff --git a/website/package.json b/website/package.json index a3f210159..9dc33300b 100644 --- a/website/package.json +++ b/website/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "website", - "version": "0.3.0", + "version": "0.3.1", "scripts": { "build": "build-storybook -o ./dist -c ./storybook/.storybook", "start": "start-storybook -p 9001 -c ./storybook/.storybook", @@ -12,10 +12,10 @@ "@storybook/react": "^3.3.6", "react": "^16.2.0", "react-dom": "^16.2.0", - "react-native-web": "^0.3.0" + "react-native-web": "^0.3.1" }, "devDependencies": { - "babel-plugin-react-native-web": "^0.3.0", + "babel-plugin-react-native-web": "^0.3.1", "url-loader": "^0.6.2", "webpack": "^3.10.0" } From 6e6fd4b5d033901330d37b6f38ebf452a9e07bfe Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Tue, 16 Jan 2018 17:14:17 -0800 Subject: [PATCH 079/153] Add note about Object.assign polyfill to docs --- website/guides/getting-started.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/website/guides/getting-started.md b/website/guides/getting-started.md index 36d165633..dfbc16c59 100644 --- a/website/guides/getting-started.md +++ b/website/guides/getting-started.md @@ -2,21 +2,23 @@ This guide will help you to use and test React Native for Web once it has been installed. -It is recommended that your application provide a `Promise` and `Array.from` -polyfill. +Your application may need to polyfill `Promise`, `Object.assign`, and +`Array.from` as necessary for your desired browser support. ## Adding to a new web app -It's recommended to rely on Facebook's official React web starter kit – -[create-react-app](https://github.com/facebookincubator/create-react-app) – -which has built-in React Native for Web support (once you install -`react-native-web`). +The easiest way to create a new web app with React Native for Web is to rely on +Facebook's React web starter kit – +[create-react-app](https://github.com/facebookincubator/create-react-app). All +that is needed after initializing a web app with CRA is to install +`react-native-web`. ## Adding to an existing web app -Add [`babel-plugin-react-native-web`](https://www.npmjs.com/package/babel-plugin-react-native-web) -to your Babel configuration. This will alias `react-native` to -`react-native-web` and exclude any modules not required by the app. +Existing web apps need to alias `react-native` to `react-native-web` and +exclude any modules not required by the app. You can do this by adding +[`babel-plugin-react-native-web`](https://www.npmjs.com/package/babel-plugin-react-native-web) +to the plugins in your Babel configuration. ## Client-side rendering From ed0cafac7caf553eaaa3d373024442b1509f4b50 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Wed, 17 Jan 2018 16:57:16 -0800 Subject: [PATCH 080/153] Rewrite benchmarks app Reorganizes and rewrites the benchmarks. Each implementation is now self-contained and the benchmarks can be run using a GUI. The benchmarks themselves have been changed so that individual tests render over a shorter time frame and more samples are taken. --- packages/benchmarks/README.md | 45 +-- packages/benchmarks/index.html | 5 + packages/benchmarks/package.json | 29 +- packages/benchmarks/src/app/App.js | 293 ++++++++++++++++++ .../benchmarks/src/app/Benchmark/index.js | 221 +++++++++++++ packages/benchmarks/src/app/Benchmark/math.js | 27 ++ .../benchmarks/src/app/Benchmark/timing.js | 18 ++ .../benchmarks/src/app/Benchmark/types.js | 28 ++ packages/benchmarks/src/app/Button.js | 70 +++++ packages/benchmarks/src/app/Icons.js | 55 ++++ packages/benchmarks/src/app/Layout.js | 63 ++++ packages/benchmarks/src/app/ReportCard.js | 71 +++++ packages/benchmarks/src/app/Text.js | 34 ++ packages/benchmarks/src/app/theme.js | 101 ++++++ packages/benchmarks/src/benchmark.js | 98 ------ packages/benchmarks/src/cases/NestedTree.js | 58 ---- .../src/cases/SierpinskiTriangle.js | 127 ++++---- packages/benchmarks/src/cases/Tree.js | 45 +++ .../benchmarks/src/cases/renderDeepTree.js | 14 - .../src/cases/renderSierpinskiTriangle.js | 112 ------- packages/benchmarks/src/cases/renderTweet.js | 112 ------- .../benchmarks/src/cases/renderWideTree.js | 14 - .../benchmarks/src/createRenderBenchmark.js | 24 -- packages/benchmarks/src/impl.js | 38 +++ .../src/implementations/aphrodite/Box.js | 17 +- .../src/implementations/aphrodite/Provider.js | 2 + .../src/implementations/aphrodite/index.js | 2 + .../implementations/css-modules/Provider.js | 2 + .../css-modules/box-styles.css | 17 +- .../src/implementations/css-modules/index.js | 2 + .../src/implementations/emotion/Box.js | 17 +- .../src/implementations/emotion/Dot.js | 7 +- .../src/implementations/emotion/Provider.js | 2 + .../src/implementations/emotion/index.js | 2 + .../src/implementations/glamor/Box.js | 17 +- .../src/implementations/glamor/Dot.js | 7 +- .../src/implementations/glamor/Provider.js | 2 + .../src/implementations/glamor/index.js | 2 + .../src/implementations/inline-styles/Box.js | 17 +- .../src/implementations/inline-styles/Dot.js | 7 +- .../implementations/inline-styles/Provider.js | 2 + .../implementations/inline-styles/index.js | 2 + .../src/implementations/radium/Box.js | 17 +- .../src/implementations/radium/Dot.js | 7 +- .../src/implementations/radium/Provider.js | 2 + .../src/implementations/radium/index.js | 2 + .../implementations/{jss => react-jss}/Box.js | 17 +- .../src/implementations/react-jss/Provider.js | 2 + .../{jss => react-jss}/View.js | 0 .../{jss => react-jss}/index.js | 2 + .../implementations/react-native-web/Box.js | 17 +- .../implementations/react-native-web/Dot.js | 7 +- .../react-native-web/Provider.js | 2 + .../implementations/react-native-web/index.js | 2 + .../src/implementations/reactxp/Box.js | 17 +- .../src/implementations/reactxp/Dot.js | 7 +- .../src/implementations/reactxp/Provider.js | 31 ++ .../src/implementations/reactxp/index.js | 2 + .../implementations/styled-components/Box.js | 18 +- .../implementations/styled-components/Dot.js | 5 +- .../styled-components/Provider.js | 2 + .../styled-components/index.js | 2 + .../implementations/styletron-react/Box.js | 47 +++ .../implementations/styletron-react/Dot.js | 25 ++ .../styletron-react/Provider.js | 19 ++ .../implementations/styletron-react/View.js | 26 ++ .../{styletron => styletron-react}/index.js | 2 + .../src/implementations/styletron/Box.js | 49 --- .../src/implementations/styletron/Dot.js | 37 --- .../src/implementations/styletron/View.js | 33 -- packages/benchmarks/src/index.js | 147 ++++----- packages/benchmarks/webpack.config.js | 10 +- .../src/exports/KeyboardAvoidingView/index.js | 2 +- yarn.lock | 146 +++++---- 74 files changed, 1630 insertions(+), 902 deletions(-) create mode 100644 packages/benchmarks/src/app/App.js create mode 100644 packages/benchmarks/src/app/Benchmark/index.js create mode 100644 packages/benchmarks/src/app/Benchmark/math.js create mode 100644 packages/benchmarks/src/app/Benchmark/timing.js create mode 100644 packages/benchmarks/src/app/Benchmark/types.js create mode 100644 packages/benchmarks/src/app/Button.js create mode 100644 packages/benchmarks/src/app/Icons.js create mode 100644 packages/benchmarks/src/app/Layout.js create mode 100644 packages/benchmarks/src/app/ReportCard.js create mode 100644 packages/benchmarks/src/app/Text.js create mode 100644 packages/benchmarks/src/app/theme.js delete mode 100644 packages/benchmarks/src/benchmark.js delete mode 100644 packages/benchmarks/src/cases/NestedTree.js create mode 100644 packages/benchmarks/src/cases/Tree.js delete mode 100644 packages/benchmarks/src/cases/renderDeepTree.js delete mode 100644 packages/benchmarks/src/cases/renderSierpinskiTriangle.js delete mode 100644 packages/benchmarks/src/cases/renderTweet.js delete mode 100644 packages/benchmarks/src/cases/renderWideTree.js delete mode 100644 packages/benchmarks/src/createRenderBenchmark.js create mode 100644 packages/benchmarks/src/impl.js create mode 100644 packages/benchmarks/src/implementations/aphrodite/Provider.js create mode 100644 packages/benchmarks/src/implementations/css-modules/Provider.js create mode 100644 packages/benchmarks/src/implementations/emotion/Provider.js create mode 100644 packages/benchmarks/src/implementations/glamor/Provider.js create mode 100644 packages/benchmarks/src/implementations/inline-styles/Provider.js create mode 100644 packages/benchmarks/src/implementations/radium/Provider.js rename packages/benchmarks/src/implementations/{jss => react-jss}/Box.js (74%) create mode 100644 packages/benchmarks/src/implementations/react-jss/Provider.js rename packages/benchmarks/src/implementations/{jss => react-jss}/View.js (100%) rename packages/benchmarks/src/implementations/{jss => react-jss}/index.js (64%) create mode 100644 packages/benchmarks/src/implementations/react-native-web/Provider.js create mode 100644 packages/benchmarks/src/implementations/reactxp/Provider.js create mode 100644 packages/benchmarks/src/implementations/styled-components/Provider.js create mode 100644 packages/benchmarks/src/implementations/styletron-react/Box.js create mode 100644 packages/benchmarks/src/implementations/styletron-react/Dot.js create mode 100644 packages/benchmarks/src/implementations/styletron-react/Provider.js create mode 100644 packages/benchmarks/src/implementations/styletron-react/View.js rename packages/benchmarks/src/implementations/{styletron => styletron-react}/index.js (71%) delete mode 100644 packages/benchmarks/src/implementations/styletron/Box.js delete mode 100644 packages/benchmarks/src/implementations/styletron/Dot.js delete mode 100644 packages/benchmarks/src/implementations/styletron/View.js diff --git a/packages/benchmarks/README.md b/packages/benchmarks/README.md index 9eaa82931..20ac6c9b4 100644 --- a/packages/benchmarks/README.md +++ b/packages/benchmarks/README.md @@ -4,48 +4,55 @@ To run these benchmarks: ``` yarn benchmark +open ./packages/benchmarks/index.html ``` -To run benchmarks for individual implementations append `?,` to the -URL, e.g., `?css-modules,react-native-web`. +Develop against these benchmarks: + +``` +yarn compile --watch +yarn benchmark --watch +``` ## Notes -These benchmarks are crude approximations of extreme cases that libraries may +These benchmarks are approximations of extreme cases that libraries may encounter. The deep and wide tree cases look at the performance of mounting and -rendering large trees of styled elements. The Triangle case looks at the +rendering large trees of styled elements. The dynamic case looks at the performance of repeated style updates to a large mounted tree. Some libraries must inject new styles for each "dynamic style", whereas others may not. Libraries without support for dynamic styles (i.e., they rely on user-authored -inline styles) do not include the `SierpinskiTriangle` benchmark. +inline styles) do not include a corresponding benchmark. The components used in the render benchmarks are simple enough to be implemented by multiple UI or style libraries. The benchmark implementations and the features of the style libraries are _only approximately equivalent in functionality_. +No benchmark will run for more than 20 seconds. + ## Results Typical render timings*: mean ± two standard deviations. -| Implementation | Deep tree (ms) | Wide tree (ms) | Triangle (ms) | +| Implementation | Mount deep tree (ms) | Mount wide tree (ms) | Update tree (ms) | | :--- | ---: | ---: | ---: | -| `react-native-web@0.2.2` | `89.67` `±28.51` | `167.46` `±27.03` | `65.40` `±19.50` | -| `css-modules` | `77.42` `±45.50` | `141.44` `±33.96` | - | -| `inline-styles` | `236.25` `±95.57` | `477.01` `±88.30` | `40.95` `±23.53` | +| `css-modules` | `15.23` `±04.31` | `21.27` `±07.03` | - | +| `react-native-web@0.3.1` | `17.52` `±04.44` | `24.14` `±04.39` | `15.03` `±02.22` | +| `inline-styles` | `50.06` `±06.70` | `76.38` `±09.58` | `06.43` `±02.02` | Other libraries -| Implementation | Deep tree (ms) | Wide tree (ms) | Triangle (ms) | +| Implementation | Mount deep tree (ms) | Mount wide tree (ms) | Update tree (ms) | | :--- | ---: | ---: | ---: | -| `styletron@3.0.0-rc.5` | `83.53` `±33.55` | `153.12` `±39.13` | `56.47` `±24.22` | -| `aphrodite@1.2.5` | `88.23` `±31.22` | `164.03` `±34.70` | - | -| `glamor@2.20.40` | `110.09` `±34.20` | `182.06` `±50.39` | ‡ | -| `emotion@8.0.12` | `103.44` `±32.12` | `204.45` `±41.00` | `110.28` `±26.94` | -| `react-jss@8.2.0` | `136.17` `±59.23` | `270.51` `±69.20` | - | -| `styled-components@2.3.2` | `217.57` `±51.90` | `437.57` `±65.74` | `76.99` `±41.79` | -| `reactxp@0.46.6` | `240.88` `±79.82` | `467.32` `±74.42` | `70.95` `±32.90`| -| `radium@0.19.6` | `400.19` `±94.58` | `816.59` `±91.10` | `71.13` `±27.22` | +| `aphrodite@1.2.5` | `17.27` `±05.96` | `24.89` `±08.36` | - | +| `glamor@2.20.40` | `21.59` `±05.38` | `27.93` `±07.56` | ‡ | +| `emotion@8.0.12` | `21.07` `±04.16` | `31.40` `±09.40` | ‡ `19.80` `±13.56` | +| `styletron-react@3.0.3` | `23.55` `±05.14` | `34.26` `±07.58` | `10.39` `±02.94` | +| `react-jss@8.2.1` | `27.31` `±07.87` | `40.74` `±10.67` | - | +| `styled-components@2.4.0` | `43.89` `±06.99` | `63.26` `±09.02` | `16.17` `±03.71` | +| `reactxp@0.51.0-alpha.9` | `51.86` `±07.21` | `78.80` `±11.85` | `15.04` `±03.92` | +| `radium@0.21.0` | `101.06` `±13.00` | `144.46` `±16.94` | `17.44` `±03.59` | These results indicate that render times when using `react-native-web`, `css-modules`, `aphrodite`, and `styletron` are roughly equivalent and @@ -53,4 +60,4 @@ significantly faster than alternatives. *MacBook Pro (13-inch, Early 2011); 2.3 GHz Intel Core i5; 8 GB 1333 MHz DDR3. Google Chrome 62. -‡Glamor essentially crashes the browser tab. +‡Glamor essentially crashes the browser tab. Emotion gets slower every iteration. diff --git a/packages/benchmarks/index.html b/packages/benchmarks/index.html index 74abe613b..0c0059ca6 100644 --- a/packages/benchmarks/index.html +++ b/packages/benchmarks/index.html @@ -3,6 +3,11 @@ Performance tests + +
diff --git a/packages/benchmarks/package.json b/packages/benchmarks/package.json index a77ae85a1..cdd196a3f 100644 --- a/packages/benchmarks/package.json +++ b/packages/benchmarks/package.json @@ -3,31 +3,30 @@ "name": "benchmarks", "version": "0.3.1", "scripts": { - "benchmark": "webpack --config ./webpack.config.js && open index.html" + "benchmark": "webpack --config ./webpack.config.js" }, "dependencies": { - "aphrodite": "^1.2.5", - "babel-polyfill": "^6.26.0", + "aphrodite": "1.2.5", "classnames": "^2.2.5", "d3-scale-chromatic": "^1.1.1", - "emotion": "^8.0.12", - "glamor": "^2.20.40", - "marky": "^1.2.0", - "radium": "^0.19.6", + "emotion": "8.0.12", + "glamor": "2.20.40", + "radium": "0.21.0", "react": "^16.2.0", + "react-component-benchmark": "^0.0.4", "react-dom": "^16.2.0", - "react-jss": "^8.2.0", - "react-native-web": "^0.3.1", - "reactxp": "^0.46.6", - "styled-components": "^2.3.2", - "styletron-client": "^3.0.0-rc.5", - "styletron-utils": "^3.0.0-rc.3" + "react-jss": "8.2.1", + "react-native-web": "0.3.1", + "reactxp": "0.51.0-alpha.9", + "styled-components": "2.4.0", + "styletron-client": "3.0.2", + "styletron-react": "3.0.3" }, "devDependencies": { "babel-plugin-react-native-web": "^0.3.1", - "css-loader": "^0.28.7", + "css-loader": "^0.28.9", "style-loader": "^0.19.1", "webpack": "^3.10.0", - "webpack-bundle-analyzer": "^2.9.1" + "webpack-bundle-analyzer": "^2.9.2" } } diff --git a/packages/benchmarks/src/app/App.js b/packages/benchmarks/src/app/App.js new file mode 100644 index 000000000..8a95af78b --- /dev/null +++ b/packages/benchmarks/src/app/App.js @@ -0,0 +1,293 @@ +/* eslint-disable react/prop-types */ + +import Benchmark from './Benchmark'; +import { Picker, StyleSheet, ScrollView, TouchableOpacity, View } from 'react-native'; +import React, { Component } from 'react'; +import Button from './Button'; +import { IconClear, IconEye } from './Icons'; +import ReportCard from './ReportCard'; +import Text from './Text'; +import Layout from './Layout'; +import { colors } from './theme'; + +const Overlay = () => ; + +export default class App extends Component { + static displayName = '@app/App'; + + constructor(props, context) { + super(props, context); + const currentBenchmarkName = Object.keys(props.tests)[0]; + this.state = { + currentBenchmarkName, + currentLibraryName: 'react-native-web', + status: 'idle', + results: [] + }; + } + + render() { + const { tests } = this.props; + const { currentBenchmarkName, status, currentLibraryName, results } = this.state; + const currentImplementation = tests[currentBenchmarkName][currentLibraryName]; + const { Component, Provider, getComponentProps, sampleCount } = currentImplementation; + + return ( + + + + Library + {currentLibraryName} + + + {Object.keys(tests[currentBenchmarkName]).map(libraryName => ( + + ))} + + + + + Benchmark + {currentBenchmarkName} + + {Object.keys(tests).map(test => ( + + ))} + + + + + + +